From 98d8b3f188cbb4a4510cf437b4f5d2fecd56f5f9 Mon Sep 17 00:00:00 2001 From: Steve Harris Date: Wed, 18 Apr 2012 15:18:16 -0500 Subject: [PATCH] 12.4.1-4 baseline Former-commit-id: 4767b0e069a5a904b607500dba6863e6f422cab7 [formerly 750b7543ddbd6bba1a911f5a3829070a99452876] [formerly 67a5a683005609d662eee95e81c49a95c0204d4e] [formerly 2a216f333c7cd73576c42e6afb06c12216c15bfe [formerly 67a5a683005609d662eee95e81c49a95c0204d4e [formerly ad648deaf4d3edaabdda15184289b3a927308bd7]]] Former-commit-id: 2a216f333c7cd73576c42e6afb06c12216c15bfe Former-commit-id: e8514db31c64b82122112f0e87cbbf3cda2d8c2b [formerly a4e519f3cdde6deaf474a61e02a3a04e762c6450] Former-commit-id: a2a6a18fae53a138540c03b54de1e648ded7881d --- MHSEmulator/MHSEmulator.ecl | 0 RadarServer/build.rcm/build.rcm.ecl | 0 .../com.raytheon.rcm.feature.ecl | 0 .../com.raytheon.rcm.lib.ecl | 0 .../com.raytheon.rcm.product.ecl | 0 .../com.raytheon.rcm.server.mq.ecl | 0 .../src/com/raytheon/rcm/mqsrvr/MsgServ.java | 494 +- .../com.raytheon.rcm.server.ecl | 0 .../com.raytheon.rcm.tools.ecl | 0 cave/build/alertviz/customTargets.xml | 506 +- cave/build/build.ecl | 0 cave/build/cave/customTargets.xml | 952 +- .../aviation/config/gui/ClimateTimeouts.xml | 6 +- .../gfe/userPython/procedures/CheckTTdWind.py | 3 +- .../etc/gfe/userPython/smartTools/Adjust.py | 6 +- .../textUtilities/regular/DiscretePhrases.py | 1 + .../static/win32.x86/alertviz/alertviz.bat | 138 +- cave/build/static/win32.x86/cave/cave.bat | 144 +- .../com.raytheon.uf.viz.acarssounding.ecl | 0 ...n.uf.viz.alertviz.localization.feature.ecl | 0 ....raytheon.uf.viz.alertviz.localization.ecl | 0 .../com.raytheon.uf.viz.alertviz.ui.ecl | 0 .../com.raytheon.uf.viz.alertviz.ecl | 0 .../com.raytheon.uf.viz.app.launcher.ecl | 0 .../com.raytheon.uf.viz.application.ecl | 0 .../com.raytheon.uf.viz.aviation.advisory.ecl | 0 .../com.raytheon.uf.viz.bufrsigwx.ecl | 0 .../com.raytheon.uf.viz.bufrua.ecl | 0 .../com.raytheon.uf.viz.ccfp.ecl | 0 .../com.raytheon.uf.viz.climo.ecl | 0 .../com.raytheon.uf.viz.cloudheight.ecl | 0 ...om.raytheon.uf.viz.common.core.feature.ecl | 0 .../com.raytheon.uf.viz.coopprecip.ecl | 0 .../coopprecip/CoopPrecipDataCubeAdapter.java | 6 + .../com.raytheon.uf.viz.core.feature.ecl | 0 .../com.raytheon.uf.viz.core.maps.feature.ecl | 0 .../com.raytheon.uf.viz.core.maps.ecl | 0 .../core/maps/rsc/AbstractDbMapResource.java | 1 - .../uf/viz/core/maps/rsc/DbMapResource.java | 2 +- .../com.raytheon.uf.viz.core.rsc.ecl | 0 .../com.raytheon.uf.viz.core.ecl | 0 .../core/AbstractGraphicsFactoryAdapter.java | 7 + .../raytheon/uf/viz/core/DrawableImage.java | 7 +- .../raytheon/uf/viz/core/IGraphicsTarget.java | 41 +- .../src/com/raytheon/uf/viz/core/IMesh.java | 39 +- .../uf/viz/core/alerts/AlertMessage.java | 18 +- .../uf/viz/core/data/prep/Colormapper.java | 2 + .../core/datastructure/DataCubeContainer.java | 156 +- .../datastructure/DefaultDataCubeAdapter.java | 239 - .../core/datastructure/IDataCubeAdapter.java | 10 + .../core/drawables/AbstractDescriptor.java | 181 +- .../uf/viz/core/drawables/ColorMapLoader.java | 2 +- .../core/drawables/ColorMapParameters.java | 20 +- .../uf/viz/core/drawables/IImage.java | 14 - .../uf/viz/core/drawables/ImagingSupport.java | 143 - .../viz/core/drawables/SingleColorImage.java | 66 + .../core/drawables/ext/GraphicsExtension.java | 32 +- .../ext/GraphicsExtensionManager.java | 18 +- .../ext/IOffscreenRenderingExtension.java | 4 +- .../viz/core/drawables/ext/TextureLoader.java | 129 - .../ext/colormap/ColormappedImage.java | 240 - .../ColormappedRenderedImageCallback.java | 81 + .../GeneralColormappedImageExtension.java | 38 +- .../IColormapShadedShapeExtension.java | 4 +- .../colormap/IColormappedImageExtension.java | 7 +- .../uf/viz/core/level/LevelMapping.java | 16 +- .../uf/viz/core/map/IMapMeshExtension.java | 31 +- .../uf/viz/core/map/MapDescriptor.java | 163 +- .../uf/viz/core/map}/WorldWrapChecker.java | 40 +- .../uf/viz/core/map}/WorldWrapCorrector.java | 10 +- .../viz/core/preferences/JMSPreferences.java | 148 + .../rsc/AbstractPluginDataObjectResource.java | 340 - .../rsc/AbstractRequestableResourceData.java | 23 +- .../uf/viz/core/rsc/AbstractVizResource.java | 14 +- .../rsc/capabilities/ColorMapCapability.java | 5 +- .../uf/viz/core/rsc/hdf5/ImageTile.java | 106 +- .../viz/core/rsc/hdf5/MeshCalculatorJob.java | 163 + .../viz/core/rsc/updater/DataUpdateTree.java | 18 +- .../uf/viz/core/status/MessageSender.java | 4 +- .../com.raytheon.uf.viz.cots.feature.ecl | 0 .../com.raytheon.uf.viz.cwa.ecl | 0 .../com.raytheon.uf.viz.cwat.ecl | 0 .../com.raytheon.uf.viz.d2d.core.feature.ecl | 0 .../com.raytheon.uf.viz.d2d.core.ecl | 0 .../com.raytheon.uf.viz.d2d.gfe.feature.ecl | 0 .../com.raytheon.uf.viz.d2d.gfe.ecl | 0 ...com.raytheon.uf.viz.d2d.nsharp.feature.ecl | 0 .../com.raytheon.uf.viz.d2d.nsharp.ecl | 0 .../com.raytheon.uf.viz.d2d.skewt.feature.ecl | 0 .../com.raytheon.uf.viz.d2d.ui.ecl | 0 .../styleRules/d2dContourStyleRules.xml | 26 +- .../com.raytheon.uf.viz.d2d.xy.adapters.ecl | 0 .../com.raytheon.uf.viz.d2d.xy.feature.ecl | 0 .../com.raytheon.uf.viz.dat.feature.ecl | 0 ...raytheon.uf.viz.dataplugin.obs.feature.ecl | 0 ...om.raytheon.uf.viz.dataplugins.feature.ecl | 0 ...com.raytheon.uf.viz.datastorage.remote.ecl | 0 .../com.raytheon.uf.viz.derivparam.python.ecl | 0 .../com.raytheon.uf.viz.derivparam.ui.ecl | 0 .../META-INF/MANIFEST.MF | 15 +- .../com.raytheon.uf.viz.derivparam.ecl | 0 .../data/AbstractDataCubeAdapter.java | 394 - .../viz/derivparam/inv/AbstractInventory.java | 2 +- .../tree/AbstractAliasLevelNode.java | 7 +- .../tree/AbstractCubeLevelNode.java | 8 +- .../tree/AbstractDerivedLevelNode.java | 3 +- .../tree/AbstractRequestableLevelNode.java | 22 +- .../tree/CompositeAverageLevelNode.java | 8 +- .../viz/derivparam/tree/DerivedLevelNode.java | 10 +- .../derivparam/tree/ModelRunLevelNode.java | 4 +- .../uf/viz/derivparam/tree/OrLevelNode.java | 10 +- .../derivparam/tree/StaticDataLevelNode.java | 6 +- .../derivparam/tree/TimeRangeLevelNode.java | 10 +- .../viz/derivparam/tree/UnionLevelNode.java | 8 +- .../com.raytheon.uf.viz.displays.feature.ecl | 0 .../com.raytheon.uf.viz.eclipse.feature.ecl | 0 .../com.raytheon.uf.viz.feature.alertviz.ecl | 0 .../com.raytheon.uf.viz.ffg.ecl | 0 ...f.viz.localization.perspective.feature.ecl | 0 ...ytheon.uf.viz.localization.perspective.ecl | 0 .../com.raytheon.uf.viz.monitor.ffmp.ecl | 0 .../monitor/ffmp/ui/dialogs/FFMPTable.java | 65 +- .../ffmp/ui/dialogs/FfmpTableConfigData.java | 6 +- .../viz/monitor/ffmp/ui/rsc/FFMPResource.java | 68 +- .../com.raytheon.uf.viz.monitor.fog.ecl | 0 .../com.raytheon.uf.viz.monitor.safeseas.ecl | 0 .../com.raytheon.uf.viz.monitor.scan.ecl | 0 .../com.raytheon.uf.viz.monitor.snow.ecl | 0 .../com.raytheon.uf.viz.monitor.ecl | 0 ...ytheon.uf.viz.ncep.dataplugins.feature.ecl | 0 ....raytheon.uf.viz.ncep.displays.feature.ecl | 0 .../com.raytheon.uf.viz.ncwf.ecl | 0 .../com.raytheon.uf.viz.npp.feature.ecl | 0 .../com.raytheon.uf.viz.npp.viirs.ecl | 0 .../uf/viz/npp/viirs/rsc/VIIRSResource.java | 38 +- .../com.raytheon.uf.viz.nwsauth.feature.ecl | 0 .../com.raytheon.uf.viz.objectiveanalysis.ecl | 0 .../com.raytheon.uf.viz.plugin.nwsauth.ecl | 0 .../com.raytheon.uf.viz.preciprate.ecl | 0 .../com.raytheon.uf.viz.product.alertviz.ecl | 0 .../com.raytheon.uf.viz.productbrowser.ecl | 0 .../com.raytheon.uf.viz.profiler.ecl | 0 .../com.raytheon.uf.viz.pypies.ecl | 0 .../com.raytheon.uf.viz.python.swt.ecl | 0 .../com.raytheon.uf.viz.qpf.ecl | 0 .../com.raytheon.uf.viz.radar.gl.ecl | 0 .../localization/glsl/mosaicMinDist.glsl | 16 + .../localization/glsl/mostRecentVal.glsl | 10 + cave/com.raytheon.uf.viz.radar.gl/plugin.xml | 13 +- .../viz/radar/gl/GLRadialMeshExtension.java | 4 +- .../uf/viz/radar/gl/MosaicGLTarget.java | 559 + .../uf/viz/radar/gl/RadarRadialMesh.java | 201 +- .../uf/viz/radar/gl/RadarRadialMeshCache.java | 252 + .../gl/mosaic/CompReflShaderLoader.java} | 36 +- .../uf/viz/radar/gl/mosaic/GLMosaicImage.java | 107 - .../mosaic/GLRadarMosaicImageExtension.java | 164 - .../mosaic/GLRadarMosaicRendererFactory.java} | 44 +- .../radar/gl/mosaic/MosaicShaderLoader.java} | 63 +- .../radar/gl}/mosaic/RadarMosaicRenderer.java | 115 +- .../com.raytheon.uf.viz.radarapps.config.ecl | 0 .../com.raytheon.uf.viz.radarapps.core.ecl | 0 .../uf/viz/radarapps/client/RcmClient.java | 4 +- .../com.raytheon.uf.viz.radarapps.fsi.ecl | 0 ...com.raytheon.uf.viz.radarapps.requests.ecl | 0 .../com.raytheon.uf.viz.radarapps.rps.ecl | 0 .../com.raytheon.uf.viz.sounding.feature.ecl | 0 .../com.raytheon.uf.viz.sounding.ecl | 0 .../com.raytheon.uf.viz.spellchecker.ecl | 0 .../com.raytheon.uf.viz.spring.dm.ecl | 0 .../com.raytheon.uf.viz.tcs.ecl | 0 ...om.raytheon.uf.viz.thinclient.alertviz.ecl | 0 .../com.raytheon.uf.viz.thinclient.cave.ecl | 0 .../ThinClientCachePreferences.java | 264 +- .../ThinClientConnectionPreferences.java | 296 +- .../ThinClientServerPreferences.java | 410 +- ...com.raytheon.uf.viz.thinclient.feature.ecl | 0 .../com.raytheon.uf.viz.thinclient.ecl | 0 .../com.raytheon.uf.viz.ui.menus.ecl | 0 .../uf/viz/ui/menus/xml/IncludeMenuItem.java | 2 +- .../com.raytheon.uf.viz.vaa.ecl | 0 .../com.raytheon.uf.viz.vil.ecl | 0 .../com.raytheon.uf.viz.xy.crosssection.ecl | 0 .../com.raytheon.uf.viz.xy.timeheight.ecl | 0 .../com.raytheon.uf.viz.xy.timeseries.ecl | 0 .../com.raytheon.uf.viz.xy.varheight.ecl | 0 .../xy/varheight/rsc/VarHeightResource.java | 4 +- .../com.raytheon.uf.viz.xy.ecl | 0 .../uf/viz/xy/graph/XyGraphDescriptor.java | 58 +- .../xy/hodo/HodographBackgroundResource.java | 12 +- .../uf/viz/xy/hodo/HodographDescriptor.java | 45 +- .../com.raytheon.viz.alerts.ecl | 0 .../com.raytheon.viz.aviation.ecl | 0 .../climatology/WindRoseCanvasComp.java | 196 +- .../aviation/climatology/WindRoseDataMgr.java | 32 +- .../com.raytheon.viz.avnconfig.ecl | 0 .../com.raytheon.viz.avnfps.feature.ecl | 0 .../com.raytheon.viz.awipstools.ecl | 0 .../com.raytheon.viz.bcd.ecl | 0 .../com.raytheon.viz.core.contours.ecl | 0 .../viz/core/contours/ContourSupport.java | 5 +- .../META-INF/MANIFEST.MF | 1 - .../com.raytheon.viz.core.gl.ecl | 0 .../localization/glsl/colormap.glsl | 43 +- .../localization/glsl/colormapRaster.glsl | 56 - .../localization/glsl/include/colorUtil.glsl | 34 - .../localization/glsl/include/indexing.glsl | 104 - .../localization/glsl/raster.glsl | 169 +- .../localization/glsl/singleColor.glsl | 13 - .../localization/glsl_old/clouds.glsl | 59 + .../localization/glsl_old/drawRaster.glsl | 37 + .../localization/glsl_old/drawRaster3D.glsl | 98 + .../localization/glsl_old/heatIndex.glsl | 56 + .../localization/glsl_old/icing.glsl | 125 + .../localization/glsl_old/main.glsl | 157 + .../localization/glsl_old/terrain.glsl | 19 + cave/com.raytheon.viz.core.gl/plugin.xml | 13 +- .../schema/shader.exsd | 85 + .../raytheon/viz/core/gl/AbstractGLMesh.java | 238 +- .../com/raytheon/viz/core/gl/Activator.java | 15 +- .../viz/core/gl/GLFactoryAdapter.java | 13 + .../viz/core/gl/GLGeometryPainter.java | 2 + .../com/raytheon/viz/core/gl/IGLTarget.java | 86 +- .../raytheon/viz/core/gl/SharedCoordMap.java | 7 +- .../viz/core/gl/TextureLoaderJob.java | 210 + .../core/gl/dataformat/GLShortDataFormat.java | 2 +- .../dataformat/GLUnsignedShortDataFormat.java | 4 +- .../gl/ext/AbstractGLImagingExtension.java | 373 - .../core/gl/glsl/AbstractShaderLoader.java | 32 +- .../viz/core/gl/glsl/GLSLFactory.java | 106 +- .../core/gl/glsl/GLSLRasterProgramLoader.java | 133 + .../viz/core/gl/glsl/GLShaderProgram.java | 177 +- .../viz/core/gl/glsl/IShaderLoader.java} | 51 +- .../gl/glsl/internal/GLProgramManager.java | 223 +- .../viz/core/gl/images/AbstractGLImage.java | 73 +- .../viz/core/gl/images/GLCMTextureData.java | 5 +- .../core/gl/images/GLColormappedImage.java | 47 +- .../viz/core/gl/images/GLDelegateImage.java | 176 - .../raytheon/viz/core/gl/images/GLImage.java | 63 +- .../core/gl/images/GLSingleColorImage.java | 70 - .../viz/core/gl/internal/GLMesh2DStrips.java | 121 +- .../viz/core/gl/internal/GLTarget.java | 723 +- .../core/gl/internal/GLWireframeShape.java | 3 +- .../core/gl/internal/GLWireframeShape2D.java | 50 +- .../ext/GLColormapShadedShapeExtension.java | 2 +- .../ext/GLColormappedImageExtension.java | 189 +- .../gl/internal/ext/GLMapMeshExtension.java | 31 +- .../ext/GLOffscreenRenderingExtension.java | 25 +- .../ext/GLSingleColorImageExtension.java | 114 - .../core/gl/objects/GLVertexBufferObject.java | 2 +- .../com.raytheon.viz.core.graphing.ecl | 0 .../viz/core/graphing/GraphDescriptor.java | 50 +- .../com.raytheon.viz.core.ecl | 0 .../rsc/displays/GriddedImageDisplay2.java | 3 +- .../viz/core/rsc/hdf5/AbstractTileSet.java | 88 +- .../viz/core/rsc/hdf5/FileBasedTileSet.java | 4 +- .../viz/core/rsc/hdf5/MemoryBasedTileSet.java | 4 +- .../viz/core/rsc/jts/JTSCompiler.java | 5 +- .../raytheon/viz/core/topo/TopoTileSet.java | 3 +- .../com.raytheon.viz.drawing.ecl | 0 ...m.raytheon.viz.feature.awips.developer.ecl | 0 .../com.raytheon.viz.feature.awips.ecl | 0 .../com.raytheon.viz.geotiff.ecl | 0 .../com.raytheon.viz.gfe.feature.ecl | 0 .../com.raytheon.viz.gfe.ecl | 0 .../viz/gfe/core/parm/ParmListeners.java | 9 +- .../com.raytheon.viz.ghg.ecl | 0 .../com.raytheon.viz.grib.feature.ecl | 0 .../com.raytheon.viz.grid.ecl | 0 .../styleRules/gridImageryStyleRules.xml | 46 +- .../grid/inv/GribRequestableLevelNode.java | 6 +- .../viz/grid/inv/ImportLevelNode.java | 7 +- .../grid/inv/RadarRequestableLevelNode.java | 6 +- .../raytheon/viz/grid/rsc/GridResource.java | 5 +- .../viz/grid/util/GribDataCubeAdapter.java | 390 +- .../com.raytheon.viz.hydro.feature.ecl | 0 .../com.raytheon.viz.hydro.ecl | 0 .../timeseries/TimeSeriesDisplayCanvas.java | 6 +- .../com.raytheon.viz.hydrobase.ecl | 0 .../viz/hydrobase/dialogs/RiverGageDlg.java | 32 +- .../com.raytheon.viz.hydrocommon.ecl | 0 .../cresthistory/CrestHistoryDlg.java | 35 +- .../hydrocommon/data/RPFFcstPointData.java | 3 +- .../viz/hydrocommon/util/MPEColors.java | 15 +- .../com.raytheon.viz.lightning.ecl | 0 .../com.raytheon.viz.localization.ecl | 0 .../com.raytheon.viz.lpi.ecl | 0 .../com.raytheon.viz.mpe.ui.ecl | 0 cave/com.raytheon.viz.mpe.ui/plugin.xml | 18 +- .../com.raytheon.viz.mpe.ecl | 0 .../viz/mpe/util/EstMissingStations.java | 4 +- .../viz/mpe/util/MeanMonthlyPrecip.java | 17 +- .../com.raytheon.viz.pointdata.ecl | 0 cave/com.raytheon.viz.pointdata/plugin.xml | 18 +- .../viz/pointdata/PlotAlertParser.java | 18 +- .../viz/pointdata/PlotModelGeneratorJob.java | 8 +- .../drawables/GeneralPointImageExtension.java | 2 +- .../drawables/IPointImageExtension.java | 3 +- .../viz/pointdata/rsc/PlotResource2.java | 6 +- .../viz/pointdata/util/HeightOfLevelNode.java | 4 +- .../pointdata/util/PointAccumLevelNode.java | 4 +- .../pointdata/util/PointDataCubeAdapter.java | 13 + .../pointdata/util/PointDataLevelNode.java | 6 +- .../com.raytheon.viz.product.awips.ecl | 0 .../com.raytheon.viz.radar.feature.ecl | 0 .../com.raytheon.viz.radar.ecl | 0 .../viz/radar/rsc/AbstractRadarResource.java | 46 +- .../viz/radar/rsc/RadarImageResource.java | 143 +- .../rsc/graphic/RadarGraphicFunctions.java | 3 +- .../radar/rsc/image/IRadialMeshExtension.java | 3 +- .../radar/rsc/image/RadarRadialResource.java | 9 +- .../radar/rsc/image/RadarRasterResource.java | 43 +- .../MergeRasterRadarMosaicRenderer.java | 2 +- .../radar/rsc/mosaic/RadarMosaicResource.java | 25 +- .../rsc/mosaic/RadarMosaicResourceData.java | 2 +- .../ext/IRadarMosaicImageExtension.java | 56 - ...IRadarMosaicRendererFactoryExtension.java} | 40 +- .../viz/radar/ui/xy/RadarXYResource.java | 3 +- .../viz/radar/ui/xy/RadarXsectXYResource.java | 3 +- .../radar/util/RadarPlotInfoRetriever.java | 18 +- .../com.raytheon.viz.redbook.ecl | 0 .../com.raytheon.viz.satellite.feature.ecl | 0 .../com.raytheon.viz.satellite.ecl | 0 .../viz/satellite/rsc/SatBlendedResource.java | 8 +- .../satellite/rsc/SatFileBasedTileSet.java | 15 +- .../com.raytheon.viz.shapefile.ecl | 0 .../com.raytheon.viz.skewT.ecl | 0 .../com.raytheon.viz.spi.ecl | 0 .../com.raytheon.viz.text.feature.ecl | 0 .../com.raytheon.viz.texteditor.ecl | 0 .../alarmalert/dialogs/CurrentAlarmQueue.java | 52 +- .../texteditor/dialogs/TextEditorDialog.java | 9 +- .../com.raytheon.viz.textworkstation.ecl | 0 ...om.raytheon.viz.ui.personalities.awips.ecl | 0 .../com.raytheon.viz.ui.tools.looping.ecl | 0 .../com.raytheon.viz.ui.tools.map.ecl | 0 .../com.raytheon.viz.ui.tools.nav.ecl | 0 .../com.raytheon.viz.ui.ecl | 0 .../raytheon/viz/ui/VizWorkbenchManager.java | 16 - .../raytheon/viz/ui/panes/VizDisplayPane.java | 47 +- .../AbstractVizPerspectiveManager.java | 5 + ...com.raytheon.viz.volumebrowser.feature.ecl | 0 .../com.raytheon.viz.volumebrowser.ecl | 0 .../catalog/GridDataCatalog.java | 18 +- .../volumebrowser/vbui/ProductTableComp.java | 6 +- .../com.raytheon.viz.warngen.feature.ecl | 0 .../com.raytheon.viz.warngen.ecl | 0 .../com/raytheon/viz/warngen/gis/Area.java | 70 +- .../viz/warngen/gui/WarngenLayer.java | 47 +- .../viz/warngen/gui/WarngenUIState.java | 15 +- .../com.raytheon.viz.warnings.ecl | 0 .../com.raytheon.viz.xdat.ecl | 0 cave/ohd.hseb.common/ohd.hseb.common.ecl | 0 .../ohd.hseb.fcstservice.ecl | 0 cave/ohd.hseb.ihfsdb/ohd.hseb.ihfsdb.ecl | 0 cave/ohd.hseb.monitor/ohd.hseb.monitor.ecl | 0 cave/ohd.hseb.sshp/ohd.hseb.sshp.ecl | 0 .../com.facebook.thrift.ecl | 0 cots/com.mchange/com.mchange.ecl | 0 .../com.opensymphony.ognl.ecl | 0 cots/com.sun.jna/com.sun.jna.ecl | 0 cots/com.sun.jndi.nis/com.sun.jndi.nis.ecl | 0 cots/edu.oswego/edu.oswego.ecl | 0 cots/javax.activation/javax.activation.ecl | 0 cots/javax.jms/javax.jms.ecl | 0 cots/javax.mail/javax.mail.ecl | 0 cots/javax.measure/javax.measure.ecl | 0 .../javax.media.opengl.linux32.ecl | 0 .../javax.media.opengl.linux64.ecl | 0 .../javax.media.opengl.win32.ecl | 0 .../javax.media.opengl/javax.media.opengl.ecl | 0 cots/javax.persistence/javax.persistence.ecl | 0 cots/javax.vecmath/javax.vecmath.ecl | 0 cots/ncsa.hdf5.linux32/ncsa.hdf5.linux32.ecl | 0 cots/ncsa.hdf5.win32/ncsa.hdf5.win32.ecl | 0 cots/ncsa.hdf5/ncsa.hdf5.ecl | 0 cots/net.sf.cglib/net.sf.cglib.ecl | 0 cots/net.sf.ehcache/net.sf.ehcache.ecl | 0 cots/net.sf.swtaddons/net.sf.swtaddons.ecl | 0 .../org.apache.activemq.ecl | 0 cots/org.apache.batik/org.apache.batik.ecl | 0 cots/org.apache.camel/org.apache.camel.ecl | 0 .../org.apache.commons.beanutils.ecl | 0 .../org.apache.commons.cli.ecl | 0 .../org.apache.commons.codec.ecl | 0 .../org.apache.commons.collections.ecl | 0 .../org.apache.commons.configuration.ecl | 0 .../org.apache.commons.digester.ecl | 0 .../org.apache.commons.lang.ecl | 0 .../org.apache.commons.logging.ecl | 0 .../org.apache.commons.management.ecl | 0 .../org.apache.commons.pool.ecl | 0 .../org.apache.commons.validator.ecl | 0 cots/org.apache.http/org.apache.http.ecl | 0 cots/org.apache.log4j/org.apache.log4j.ecl | 0 cots/org.apache.mina/org.apache.mina.ecl | 0 cots/org.apache.qpid/org.apache.qpid.ecl | 0 .../org.apache.tomcat.nativ.ecl | 0 .../org.apache.tools.bzip2.ecl | 0 .../org.apache.velocity.ecl | 0 cots/org.dom4j/org.dom4j.ecl | 0 cots/org.eclipse.jetty/org.eclipse.jetty.ecl | 0 cots/org.geotools/org.geotools.ecl | 0 cots/org.hibernate/org.hibernate.ecl | 0 cots/org.jboss.cache/org.jboss.cache.ecl | 0 cots/org.jep.linux32/org.jep.linux32.ecl | 0 cots/org.jep.linux64/org.jep.linux64.ecl | 0 cots/org.jep.win32/org.jep.win32.ecl | 0 cots/org.jep/org.jep.ecl | 0 .../org.jivesoftware.smack.ecl | 0 cots/org.junit/org.junit.ecl | 0 cots/org.objectweb/org.objectweb.ecl | 0 cots/org.postgres/org.postgres.ecl | 0 cots/org.slf4j/org.slf4j.ecl | 0 .../org.springframework.dm.ecl | 0 .../org.springframework.ecl | 0 cots/ucar.nc2/ucar.nc2.ecl | 0 cots/uk.ltd.getahead/uk.ltd.getahead.ecl | 0 deltaScripts/deltaScripts.ecl | 0 edexOsgi/build.edex/build.edex.ecl | 0 .../base/warngen/VM_global_library.vm | 46 + .../base/warngen/arealFloodAdvisory.xml | 3 + .../warngen/arealFloodAdvisoryFollowup.xml | 2 + .../arealFloodAdvisoryFollowup_Zones.xml | 5 +- .../base/warngen/arealFloodAdvisory_Zones.xml | 5 +- .../base/warngen/arealFloodWarning.xml | 4 +- .../warngen/arealFloodWarningFollowup.xml | 2 + .../arealFloodWarningFollowup_Zones.xml | 5 +- .../base/warngen/arealFloodWarning_Zones.xml | 5 +- .../base/warngen/customTemplate.xml | 4 + .../base/warngen/extremeWindWarning.xml | 2 + .../warngen/extremeWindWarningFollowup.xml | 2 + .../common_static/base/warngen/ffwfaw.xml | 2 + .../base/warngen/flashFloodWarning.xml | 2 + .../warngen/flashFloodWarningFollowup.xml | 2 + .../flashFloodWarningFollowup_Zones.xml | 5 +- .../base/warngen/flashFloodWarning_Zones.xml | 5 +- .../nonConvectiveFlashFloodWarning.xml | 5 +- ...nonConvectiveFlashFloodWarningFollowup.xml | 5 +- ...vectiveFlashFloodWarningFollowup_Zones.xml | 2 + .../nonConvectiveFlashFloodWarning_Zones.xml | 5 +- .../warngen/severeThunderstormWarning.xml | 2 + .../base/warngen/severeWeatherStatement.xml | 2 + .../base/warngen/shortTermForecast.xml | 5 +- .../warngen/significantWeatherAdvisory.xml | 2 + .../base/warngen/specialWeatherStatement.xml | 2 + .../common_static/base/warngen/sws_county.xml | 3 + .../base/warngen/tornadoWarning.xml | 4 +- edexOsgi/build.edex/esb/etc/ingestDat.sh | 2 +- .../build.edex/opt/db/ddl/ncep/loadState.sql | 116 +- .../opt/db/ddl/setup/postgresql.conf | 942 +- .../com.raytheon.edex.adaptersrv.ecl | 0 .../com.raytheon.edex.autobldsrv.ecl | 0 .../com.raytheon.edex.collaboration.ecl | 0 .../com.raytheon.edex.common.ecl | 0 .../com.raytheon.edex.feature.uframe.ecl | 0 .../com.raytheon.edex.ingestsrv.ecl | 0 .../com.raytheon.edex.kml.ecl | 0 .../com.raytheon.edex.meteolib.ecl | 0 .../com.raytheon.edex.monitorsrv.ecl | 0 .../com.raytheon.edex.msgutility.ecl | 0 .../com.raytheon.edex.notifysrv.ecl | 0 .../com.raytheon.edex.plugin.airep.ecl | 0 .../com.raytheon.edex.plugin.binlightning.ecl | 0 .../com.raytheon.edex.plugin.bufrmos.ecl | 0 .../com.raytheon.edex.plugin.bufrua.ecl | 0 .../com.raytheon.edex.plugin.ccfp.ecl | 0 .../com.raytheon.edex.plugin.gfe.ecl | 0 .../edex/plugin/gfe/db/dao/GFEDao.java | 2 +- .../edex_static/base/gfe/isc/ifpnetCDF.py | 14 +- .../edex_static/base/gfe/isc/iscMosaic.py | 6 +- .../com.raytheon.edex.plugin.goessounding.ecl | 0 .../com.raytheon.edex.plugin.grib.ecl | 0 .../com.raytheon.edex.plugin.ldad.ecl | 0 .../com.raytheon.edex.plugin.ldadhydro.ecl | 0 .../com.raytheon.edex.plugin.ldadmanual.ecl | 0 .../com.raytheon.edex.plugin.ldadprofiler.ecl | 0 ...com.raytheon.edex.plugin.modelsounding.ecl | 0 .../com.raytheon.edex.plugin.obs.ecl | 0 .../com.raytheon.edex.plugin.pirep.ecl | 0 .../com.raytheon.edex.plugin.poessounding.ecl | 0 .../com.raytheon.edex.plugin.profiler.ecl | 0 .../com.raytheon.edex.plugin.radar.ecl | 0 .../com.raytheon.edex.plugin.recco.ecl | 0 .../com.raytheon.edex.plugin.redbook.ecl | 0 .../com.raytheon.edex.plugin.satellite.ecl | 0 .../com.raytheon.edex.plugin.sfcobs.ecl | 0 .../com.raytheon.edex.plugin.shef.ecl | 0 .../com.raytheon.edex.plugin.taf.ecl | 0 .../com.raytheon.edex.plugin.text.ecl | 0 ...com.raytheon.edex.plugin.textlightning.ecl | 0 .../com.raytheon.edex.plugin.warning.ecl | 0 .../warning/gis/GeospatialDataGenerator.java | 4 +- .../com.raytheon.edex.product.uframe.ecl | 0 .../com.raytheon.edex.productsrv.ecl | 0 .../com.raytheon.edex.rpgenvdata.ecl | 0 .../com.raytheon.edex.textdb.ecl | 0 .../com.raytheon.edex.uengine.ecl | 0 .../com.raytheon.edex.utilitysrv.ecl | 0 .../com.raytheon.messaging.mhs.ecl | 0 .../com.raytheon.uf.common.activetable.ecl | 0 .../com.raytheon.uf.common.alertmonitor.ecl | 0 .../com.raytheon.uf.common.alertviz.ecl | 0 .../com.raytheon.uf.common.auth.ecl | 0 .../com.raytheon.uf.common.awipstools.ecl | 0 .../com.raytheon.uf.common.cache.ecl | 0 .../com.raytheon.uf.common.climo.ecl | 0 .../com.raytheon.uf.common.colormap.ecl | 0 .../com.raytheon.uf.common.comm.ecl | 0 ...om.raytheon.uf.common.dataplugin.acars.ecl | 0 ...eon.uf.common.dataplugin.acarssounding.ecl | 0 ...om.raytheon.uf.common.dataplugin.airep.ecl | 0 ...heon.uf.common.dataplugin.binlightning.ecl | 0 ...aytheon.uf.common.dataplugin.bufrascat.ecl | 0 ....raytheon.uf.common.dataplugin.bufrhdw.ecl | 0 ...aytheon.uf.common.dataplugin.bufrmthdw.ecl | 0 ...raytheon.uf.common.dataplugin.bufrncwf.ecl | 0 ...heon.uf.common.dataplugin.bufrquikscat.ecl | 0 ...aytheon.uf.common.dataplugin.bufrsigwx.ecl | 0 ...raytheon.uf.common.dataplugin.bufrssmi.ecl | 0 ...m.raytheon.uf.common.dataplugin.bufrua.ecl | 0 .../com.raytheon.uf.common.dataplugin.cwa.ecl | 0 ...com.raytheon.uf.common.dataplugin.cwat.ecl | 0 ...com.raytheon.uf.common.dataplugin.ffmp.ecl | 0 .../com.raytheon.uf.common.dataplugin.fog.ecl | 0 ...m.raytheon.uf.common.dataplugin.fssobs.ecl | 0 .../com.raytheon.uf.common.dataplugin.gfe.ecl | 0 ...heon.uf.common.dataplugin.goessounding.ecl | 0 ...com.raytheon.uf.common.dataplugin.grib.ecl | 0 ...aytheon.uf.common.dataplugin.ldadhydro.ecl | 0 ...theon.uf.common.dataplugin.ldadmesonet.ecl | 0 ...om.raytheon.uf.common.dataplugin.level.ecl | 0 .../com.raytheon.uf.common.dataplugin.lsr.ecl | 0 ...aytheon.uf.common.dataplugin.npp.viirs.ecl | 0 .../com.raytheon.uf.common.dataplugin.obs.ecl | 0 ...om.raytheon.uf.common.dataplugin.pirep.ecl | 0 ...heon.uf.common.dataplugin.poessounding.ecl | 0 ...ytheon.uf.common.dataplugin.preciprate.ecl | 0 ...raytheon.uf.common.dataplugin.profiler.ecl | 0 .../com.raytheon.uf.common.dataplugin.qc.ecl | 0 .../com.raytheon.uf.common.dataplugin.qpf.ecl | 0 ...om.raytheon.uf.common.dataplugin.radar.ecl | 0 ...aytheon.uf.common.dataplugin.satellite.ecl | 0 ...com.raytheon.uf.common.dataplugin.scan.ecl | 0 ...m.raytheon.uf.common.dataplugin.sfcobs.ecl | 0 ...com.raytheon.uf.common.dataplugin.shef.ecl | 0 ...om.raytheon.uf.common.dataplugin.svrwx.ecl | 0 .../com.raytheon.uf.common.dataplugin.tcg.ecl | 0 .../com.raytheon.uf.common.dataplugin.tcs.ecl | 0 ...com.raytheon.uf.common.dataplugin.text.ecl | 0 .../com.raytheon.uf.common.dataplugin.vaa.ecl | 0 .../com.raytheon.uf.common.dataplugin.vil.ecl | 0 ....raytheon.uf.common.dataplugin.warning.ecl | 0 .../warning/config/AreaConfiguration.java | 19 + .../config/AreaSourceConfiguration.java | 30 + .../warning/gis/GeospatialFactory.java | 20 +- .../com.raytheon.uf.common.dataplugin.ecl | 0 .../persist/DefaultPathProvider.java | 32 +- .../com.raytheon.uf.common.dataquery.ecl | 0 ...om.raytheon.uf.common.datastorage.hdf5.ecl | 0 ....raytheon.uf.common.datastorage.remote.ecl | 0 .../com.raytheon.uf.common.datastorage.ecl | 0 .../com.raytheon.uf.common.derivparam.ecl | 0 .../com.raytheon.uf.common.dissemination.ecl | 0 .../com.raytheon.uf.common.geospatial.ecl | 0 .../com.raytheon.uf.common.hlstopo.ecl | 0 .../com.raytheon.uf.common.hydro.ecl | 0 .../com.raytheon.uf.common.jms.ecl | 0 .../uf/common/jms/JmsPooledConnection.java | 27 +- .../uf/common/jms/JmsPooledConsumer.java | 4 +- .../uf/common/jms/JmsPooledProducer.java | 2 + .../uf/common/jms/JmsPooledSession.java | 3 +- .../com.raytheon.uf.common.localization.ecl | 0 .../com.raytheon.uf.common.management.ecl | 0 .../com.raytheon.uf.common.menus.ecl | 0 .../com.raytheon.uf.common.message.ecl | 0 .../com.raytheon.uf.common.monitor.cpg.ecl | 0 .../com.raytheon.uf.common.monitor.ecl | 0 .../com.raytheon.uf.common.mpe.ecl | 0 .../com.raytheon.uf.common.ohd.ecl | 0 .../com.raytheon.uf.common.plugin.nwsauth.ecl | 0 .../com.raytheon.uf.common.pointdata.ecl | 0 .../com.raytheon.uf.common.pypies.ecl | 0 .../com.raytheon.uf.common.python.ecl | 0 .../com.raytheon.uf.common.qpf.ecl | 0 ....raytheon.uf.common.serialization.comm.ecl | 0 .../com.raytheon.uf.common.serialization.ecl | 0 .../com.raytheon.uf.common.site.ecl | 0 .../com.raytheon.uf.common.sounding.ecl | 0 .../com.raytheon.uf.common.status.ecl | 0 .../com.raytheon.uf.common.time.ecl | 0 .../com.raytheon.uf.common.topo.ecl | 0 .../com.raytheon.uf.common.util.ecl | 0 .../com.raytheon.uf.edex.activetable.ecl | 0 .../com.raytheon.uf.edex.alertviz.ecl | 0 .../com.raytheon.uf.edex.auth.ecl | 0 .../com.raytheon.uf.edex.awipstools.ecl | 0 .../com.raytheon.uf.edex.bufrtools.ecl | 0 .../com.raytheon.uf.edex.core.ecl | 0 .../com.raytheon.uf.edex.cpgsrv.ecl | 0 .../com.raytheon.uf.edex.dat.utils.ecl | 0 .../com.raytheon.uf.edex.database.ecl | 0 .../com.raytheon.uf.edex.decodertools.ecl | 0 .../com.raytheon.uf.edex.dissemination.ecl | 0 .../com.raytheon.uf.edex.distribution.ecl | 0 ...om.raytheon.uf.edex.esb.camel.launcher.ecl | 0 .../com.raytheon.uf.edex.esb.camel.ecl | 0 .../com.raytheon.uf.edex.log.ecl | 0 .../com.raytheon.uf.edex.maintenance.ecl | 0 .../com.raytheon.uf.edex.management.ecl | 0 .../com.raytheon.uf.edex.metartohmdbsrv.ecl | 0 .../com.raytheon.uf.edex.ohd.ecl | 0 .../res/spring/hpeDHRDecoder-spring.xml | 34 +- .../uf/edex/ohd/pproc/HPEDhrMessage.java | 102 + .../raytheon/uf/edex/ohd/pproc/HPEDhrSrv.java | 403 +- .../com.raytheon.uf.edex.plugin.acars.ecl | 0 ....raytheon.uf.edex.plugin.acarssounding.ecl | 0 .../com.raytheon.uf.edex.plugin.bufrascat.ecl | 0 .../com.raytheon.uf.edex.plugin.bufrhdw.ecl | 0 .../com.raytheon.uf.edex.plugin.bufrmthdw.ecl | 0 .../com.raytheon.uf.edex.plugin.bufrncwf.ecl | 0 ...m.raytheon.uf.edex.plugin.bufrquikscat.ecl | 0 .../com.raytheon.uf.edex.plugin.bufrsigwx.ecl | 0 .../com.raytheon.uf.edex.plugin.bufrssmi.ecl | 0 .../com.raytheon.uf.edex.plugin.cwa.ecl | 0 .../com.raytheon.uf.edex.plugin.cwat.ecl | 0 .../com.raytheon.uf.edex.plugin.ffmp.ecl | 0 .../com.raytheon.uf.edex.plugin.fog.ecl | 0 .../com.raytheon.uf.edex.plugin.fssobs.ecl | 0 ...om.raytheon.uf.edex.plugin.ldadmesonet.ecl | 0 ....raytheon.uf.edex.plugin.level.handler.ecl | 0 .../com.raytheon.uf.edex.plugin.level.ecl | 0 .../com.raytheon.uf.edex.plugin.loctables.ecl | 0 .../com.raytheon.uf.edex.plugin.lsr.ecl | 0 ...m.raytheon.uf.edex.plugin.manualIngest.ecl | 0 .../com.raytheon.uf.edex.plugin.mesowest.ecl | 0 .../com.raytheon.uf.edex.plugin.npp.viirs.ecl | 0 .../com.raytheon.uf.edex.plugin.nwsauth.ecl | 0 ...com.raytheon.uf.edex.plugin.preciprate.ecl | 0 .../com.raytheon.uf.edex.plugin.qc.ecl | 0 .../com.raytheon.uf.edex.plugin.qpf.ecl | 0 ...ytheon.uf.edex.plugin.satellite.mcidas.ecl | 0 ...om.raytheon.uf.edex.plugin.scan.common.ecl | 0 .../com.raytheon.uf.edex.plugin.scan.ecl | 0 .../com.raytheon.uf.edex.plugin.svrwx.ecl | 0 .../com.raytheon.uf.edex.plugin.tcg.ecl | 0 .../com.raytheon.uf.edex.plugin.tcs.ecl | 0 .../com.raytheon.uf.edex.plugin.vaa.ecl | 0 .../com.raytheon.uf.edex.plugin.vil.ecl | 0 .../com.raytheon.uf.edex.pointdata.ecl | 0 .../com.raytheon.uf.edex.purgesrv.ecl | 0 .../com.raytheon.uf.edex.python.decoder.ecl | 0 .../com.raytheon.uf.edex.site.ecl | 0 .../com.raytheon.uf.edex.textdbsrv.ecl | 0 .../com.raytheon.uf.edex.topo.ecl | 0 .../com.raytheon.uf.tools.cli.ecl | 0 ...ytheon.uf.tools.gfesuite.servicebackup.ecl | 0 .../scripts/export_configuration | 18 +- .../ServiceBackup/scripts/proc_receive_config | 11 +- .../com.raytheon.uf.tools.gfesuite.ecl | 0 .../meteolib.jni.linux32.ecl | 0 edexOsgi/meteolib.jni.linux64/libmeteoLib.so | Bin 402558 -> 1462465 bytes .../meteolib.jni.linux64.ecl | 0 .../meteolib.jni.win32/meteolib.jni.win32.ecl | 0 edexOsgi/meteolib.jni/meteolib.jni.ecl | 0 ldm/ldm.ecl | 0 localApps/localApps.ecl | 0 .../localization.OAX/localization.OAX.ecl | 0 .../localization.TBW/localization.TBW.ecl | 0 .../Microsoft.Deployment.Compression.Cab.xml | 930 +- .../Microsoft.Deployment.Compression.Zip.xml | 1028 +- .../sdk/Microsoft.Deployment.Compression.xml | 3872 +- .../sdk/Microsoft.Deployment.Resources.xml | 886 +- ...osoft.Deployment.WindowsInstaller.Linq.xml | 868 +- ...ft.Deployment.WindowsInstaller.Package.xml | 1358 +- .../Microsoft.Deployment.WindowsInstaller.xml | 14668 +-- .../wix35-binaries/sdk/inc/aclutil.h | 288 +- .../wix35-binaries/sdk/inc/apuputil.h | 194 +- .../wix35-binaries/sdk/inc/atomutil.h | 326 +- .../wix35-binaries/sdk/inc/buffutil.h | 172 +- .../wix35-binaries/sdk/inc/cabcutil.h | 136 +- .../wix35-binaries/sdk/inc/cabutil.h | 142 +- .../wix35-binaries/sdk/inc/certutil.h | 142 +- .../wix35-binaries/sdk/inc/conutil.h | 230 +- .../wix35-binaries/sdk/inc/cryputil.h | 98 +- .../wix35-binaries/sdk/inc/dictutil.h | 94 +- .../wix35-binaries/sdk/inc/dirutil.h | 116 +- .../A2Staging/wix35-binaries/sdk/inc/dutil.h | 424 +- .../wix35-binaries/sdk/inc/eseutil.h | 424 +- .../wix35-binaries/sdk/inc/fileutil.h | 352 +- .../wix35-binaries/sdk/inc/gdiputil.h | 92 +- .../wix35-binaries/sdk/inc/inetutil.h | 108 +- .../wix35-binaries/sdk/inc/jsonutil.h | 188 +- .../wix35-binaries/sdk/inc/locutil.h | 106 +- .../wix35-binaries/sdk/inc/logutil.h | 364 +- .../wix35-binaries/sdk/inc/memutil.h | 130 +- .../wix35-binaries/sdk/inc/metautil.h | 134 +- .../A2Staging/wix35-binaries/sdk/inc/osutil.h | 96 +- .../wix35-binaries/sdk/inc/pathutil.h | 180 +- .../wix35-binaries/sdk/inc/perfutil.h | 78 +- .../wix35-binaries/sdk/inc/procutil.h | 108 +- .../wix35-binaries/sdk/inc/regutil.h | 64 +- .../wix35-binaries/sdk/inc/resrutil.h | 120 +- .../wix35-binaries/sdk/inc/reswutil.h | 96 +- .../wix35-binaries/sdk/inc/rexutil.h | 138 +- .../wix35-binaries/sdk/inc/rssutil.h | 212 +- .../wix35-binaries/sdk/inc/shelutil.h | 116 +- .../wix35-binaries/sdk/inc/sqlutil.h | 302 +- .../wix35-binaries/sdk/inc/strutil.h | 512 +- .../wix35-binaries/sdk/inc/thmutil.h | 382 +- .../wix35-binaries/sdk/inc/timeutil.h | 66 +- .../wix35-binaries/sdk/inc/uriutil.h | 186 +- .../wix35-binaries/sdk/inc/userutil.h | 94 +- .../wix35-binaries/sdk/inc/wcautil.h | 758 +- .../wix35-binaries/sdk/inc/wcawow64.h | 70 +- .../wix35-binaries/sdk/inc/wcawrapquery.h | 292 +- .../A2Staging/wix35-binaries/sdk/inc/wiutil.h | 100 +- .../wix35-binaries/sdk/inc/xmlutil.h | 366 +- nativeLib/build.native/build.native.ecl | 0 nativeLib/build.ohd/build.ohd.ecl | 0 .../com.raytheon.uf.nativelib.cimport.ecl | 0 .../com.raytheon.uf.nativelib.feature.ecl | 0 nativeLib/dist.native/dist.native.ecl | 0 .../i386-pc-linux-gnu.tar.REMOVED.git-id | 2 +- nativeLib/docs.native/docs.native.ecl | 0 nativeLib/docs.ohd/docs.ohd.ecl | 0 nativeLib/edexBridge/edexBridge.ecl | 0 nativeLib/edex_com/edex_com.ecl | 0 .../edex_com/src/PointDataServerRequest.cpp | 10 +- .../edex_com/src/PointDataServerRequest.h | 3 +- nativeLib/edex_notify/edex_notify.ecl | 0 nativeLib/edex_pdc/edex_pdc.ecl | 0 nativeLib/gridslice/gridslice.ecl | 0 nativeLib/gridslice/src/gridslice.c | 730 +- .../src/windows/project/gridslice.bat | 178 +- .../ncep_grib2module/ncep_grib2module.ecl | 0 nativeLib/ohd.bias_trans/ohd.bias_trans.ecl | 0 nativeLib/ohd.common/ohd.common.ecl | 0 nativeLib/ohd.damcrest/ohd.damcrest.ecl | 0 nativeLib/ohd.damcrestdb/ohd.damcrestdb.ecl | 0 nativeLib/ohd.db/ohd.db.ecl | 0 .../ohd.dimensions_file_uploader.ecl | 0 nativeLib/ohd.fcstservice/ohd.fcstservice.ecl | 0 nativeLib/ohd.ihfsdb/ohd.ihfsdb.ecl | 0 nativeLib/ohd.lib/ohd.lib.ecl | 0 nativeLib/ohd.map/ohd.map.ecl | 0 .../ohd.misc_dialogs/ohd.misc_dialogs.ecl | 0 nativeLib/ohd.mpe/ohd.mpe.ecl | 0 nativeLib/ohd.pdc_pp/ohd.pdc_pp.ecl | 0 nativeLib/ohd.prism/ohd.prism.ecl | 0 nativeLib/ohd.rax_apps/ohd.rax_apps.ecl | 0 nativeLib/ohd.raxdb/ohd.raxdb.ecl | 0 .../ohd.rivermonitor/ohd.rivermonitor.ecl | 0 nativeLib/ohd.sshp/ohd.sshp.ecl | 0 nativeLib/ohd.swttable/ohd.swttable.ecl | 0 nativeLib/ohd.sys_monitor/ohd.sys_monitor.ecl | 0 nativeLib/ohd.tsl/ohd.tsl.ecl | 0 nativeLib/ohd.var/ohd.var.ecl | 0 nativeLib/org.apache.qpid/org.apache.qpid.ecl | 0 .../org.apache.thrift/org.apache.thrift.ecl | 0 .../rary.cots.ant-contrib.ecl | 0 .../rary.cots.gfortran/rary.cots.gfortran.ecl | 0 .../rary.cots.jasper/rary.cots.jasper.ecl | 0 nativeLib/rary.cots.java/rary.cots.java.ecl | 0 .../jepp-2.3/src/jep/pyjobject.c | 1938 +- .../jepp-2.3/windows/py27-java16/BuildLog.htm | Bin 10522 -> 10368 bytes nativeLib/rary.cots.jepp/rary.cots.jepp.ecl | 0 nativeLib/rary.cots.jna/rary.cots.jna.ecl | 0 .../rary.cots.postgresql.ecl | 0 .../rary.empty.motif/rary.empty.motif.ecl | 0 nativeLib/rary.empty/rary.empty.ecl | 0 nativeLib/rary.meteorological/.cproject | 997 +- .../.settings/org.eclipse.cdt.core.prefs | 12 +- .../rary.meteorological.ecl | 0 .../windows/project/Debug/BuildLog.htm | Bin 43688 -> 43442 bytes .../windows/project/meteolib.bat | 92 +- nativeLib/rary.ohd.calb/rary.ohd.calb.ecl | 0 nativeLib/rary.ohd.ffg/rary.ohd.ffg.ecl | 0 .../hydroapps/precip_proc/bin/launch_hpe | 2 +- .../rary.ohd.filesystem.ecl | 0 nativeLib/rary.ohd.ifp/rary.ohd.ifp.ecl | 0 nativeLib/rary.ohd.ofs.db/rary.ohd.ofs.db.ecl | 0 .../rary.ohd.ofs.shared.ecl | 0 .../rary.ohd.ofs.shefpars.driv.ecl | 0 nativeLib/rary.ohd.ofs/rary.ohd.ofs.ecl | 0 .../rary.ohd.pproc.gribit.ecl | 0 .../rary.ohd.pproc.util.ecl | 0 nativeLib/rary.ohd.pproc/rary.ohd.pproc.ecl | 0 nativeLib/rary.ohd.util/rary.ohd.util.ecl | 0 nativeLib/rary.ohd.whfs/rary.ohd.whfs.ecl | 0 .../rary.wfoapi.MonitorTestMode.ecl | 0 .../rary.wfoapi.common/rary.wfoapi.common.ecl | 0 .../rary.wfoapi.consoleUser.ecl | 0 .../rary.wfoapi.getTestMode.ecl | 0 .../rary.wfoapi.showBanner.ecl | 0 .../rary.wfoapi.temp/rary.wfoapi.temp.ecl | 0 .../rary.wfoapi.test_WorkstationTestMode.ecl | 0 nativeLib/rary.wfoapi.tmb/rary.wfoapi.tmb.ecl | 0 .../rary.wfoapi.tmbRemoteCheck.ecl | 0 .../rary.wfoapi.tmb_exit.ecl | 0 .../rary.wfoapi.tmcp/rary.wfoapi.tmcp.ecl | 0 nativeLib/runy.cots.flex/runy.cots.flex.ecl | 0 nativeLib/runy.runso/runy.runso.ecl | 0 nativeLib/tool.cdbgen/tool.cdbgen.ecl | 0 nativeLib/tool.gluegen/tool.gluegen.ecl | 0 .../com.raytheon.uf.viz.ncep.core.feature.ecl | 0 ...om.raytheon.uf.viz.ncep.nsharp.feature.ecl | 0 ...ytheon.uf.viz.ncep.perspective.feature.ecl | 0 .../edu.wisc.ssec.mcidas.ecl | 0 ...noaa.nws.ncep.common.dataplugin.airmet.ecl | 0 .../dataplugin/airmet/AirmetLocation.java | 384 +- .../dataplugin/airmet/AirmetRecord.java | 644 +- .../dataplugin/airmet/AirmetReport.java | 656 +- .../dataplugin/airmet/dao/package-info.java | 8 +- .../dataplugin/airmet/package-info.java | 8 +- ...v.noaa.nws.ncep.common.dataplugin.atcf.ecl | 0 .../common/dataplugin/atcf/dao/AtcfDao.java | 116 +- ...ov.noaa.nws.ncep.common.dataplugin.aww.ecl | 0 ....nws.ncep.common.dataplugin.convsigmet.ecl | 0 .../convsigmet/ConvSigmetLocation.java | 356 +- .../convsigmet/ConvSigmetRecord.java | 574 +- .../convsigmet/ConvSigmetSection.java | 686 +- .../dataplugin/convsigmet/package-info.java | 8 +- ...ov.noaa.nws.ncep.common.dataplugin.ffg.ecl | 0 .../common/dataplugin/ffg/package-info.java | 8 +- ...v.noaa.nws.ncep.common.dataplugin.idft.ecl | 0 .../common/dataplugin/idft/dao/IdftDao.java | 116 +- ....nws.ncep.common.dataplugin.intlsigmet.ecl | 0 .../intlsigmet/IntlSigmetLocation.java | 358 +- .../intlsigmet/IntlSigmetRecord.java | 1116 +- .../dataplugin/intlsigmet/package-info.java | 8 +- ...noaa.nws.ncep.common.dataplugin.mcidas.ecl | 0 .../dataplugin/mcidas/McidasRecord.java | 294 +- ...oaa.nws.ncep.common.dataplugin.ncairep.ecl | 0 ...noaa.nws.ncep.common.dataplugin.ncccfp.ecl | 0 .../dataplugin/ncccfp/dao/NcccfpDao.java | 116 +- ...noaa.nws.ncep.common.dataplugin.ncgrib.ecl | 0 .../dataplugin/ncgrib/NcGenProcess.java | 18 +- .../ncgrib/request/GetNcCoverageRequest.java | 18 +- .../dataplugin/ncgrib/util/NcgridModel.java | 18 +- ...noaa.nws.ncep.common.dataplugin.ncpafm.ecl | 0 .../dataplugin/ncpafm/dao/NcPafmDao.java | 114 +- ...oaa.nws.ncep.common.dataplugin.ncpirep.ecl | 0 ...noaa.nws.ncep.common.dataplugin.ncscat.ecl | 0 .../dataplugin/ncscat/dao/package-info.java | 8 +- ....noaa.nws.ncep.common.dataplugin.ncscd.ecl | 0 ....noaa.nws.ncep.common.dataplugin.nctaf.ecl | 0 .../dataplugin/nctaf/NcTafSkyCover.java | 8 +- .../nctaf/NcTafWeatherCondition.java | 10 +- .../common/dataplugin/nctaf/dao/NcTafDao.java | 130 +- .../component-deploy.xml | 20 +- ...noaa.nws.ncep.common.dataplugin.ncuair.ecl | 0 .../dataplugin/ncuair/NcUairLiftedIndex.java | 268 +- .../dataplugin/ncuair/NcUairMaxWind.java | 350 +- .../dataplugin/ncuair/NcUairObsLevels.java | 422 +- .../dataplugin/ncuair/NcUairRecord.java | 1140 +- .../dataplugin/ncuair/NcUairTropopause.java | 372 +- .../dataplugin/ncuair/package-info.java | 8 +- ...s.ncep.common.dataplugin.nonconvsigmet.ecl | 0 .../nonconvsigmet/NonConvSigmetLocation.java | 320 +- .../nonconvsigmet/NonConvSigmetRecord.java | 1090 +- .../nonconvsigmet/package-info.java | 8 +- ...v.noaa.nws.ncep.common.dataplugin.sgwh.ecl | 0 ....noaa.nws.ncep.common.dataplugin.sgwhv.ecl | 0 .../common/dataplugin/sgwhv/dao/SgwhvDao.java | 114 +- ...v.noaa.nws.ncep.common.dataplugin.ssha.ecl | 0 .../common/dataplugin/ssha/dao/SshaDao.java | 114 +- .../component-deploy.xml | 20 +- ....nws.ncep.common.dataplugin.stormtrack.ecl | 0 .../stormtrack/dao/StormTrackDao.java | 114 +- ...ov.noaa.nws.ncep.common.dataplugin.tcm.ecl | 0 ...ov.noaa.nws.ncep.common.dataplugin.wcp.ecl | 0 .../common/dataplugin/wcp/dao/WcpDao.java | 116 +- .../gov.noaa.nws.ncep.common.log.ecl | 0 .../gov.noaa.nws.ncep.common.log4j.config.ecl | 0 .../component-deploy.xml | 20 +- .../gov.noaa.nws.ncep.common.ecl | 0 .../gov.noaa.nws.ncep.edex.common.ecl | 0 .../common/stationTables/IStationField.java | 38 +- .../common/stationTables/ObjectFactory.java | 336 +- .../edex/common/stationTables/Station.java | 678 +- .../stationTables/StationComparator.java | 120 +- .../common/stationTables/StationList.java | 152 +- .../common/stationTables/StationTable.java | 410 +- .../nws/ncep/edex/locations/IdftLocs.java | 156 +- .../edex/locations/IdftLocsTableReader.java | 140 +- .../nws/ncep/edex/locations/IdftPoint.java | 406 +- .../ncep/edex/locations/ObjectFactory.java | 256 +- .../nws/ncep/edex/locations/package-info.java | 8 +- .../locations/test_IdftLocsTableReader.java | 102 +- .../ncep/edex/tools/decoder/LatLonLocTbl.java | 364 +- .../nws/ncep/edex/tools/decoder/MndTime.java | 1198 +- .../noaa/nws/ncep/edex/tools/decoder/VOR.java | 1064 +- .../ncep/edex/tools/decoder/package-info.java | 8 +- .../gov/noaa/nws/ncep/edex/util/UtilN.java | 244 +- .../noaa/nws/ncep/edex/util/package-info.java | 8 +- .../edex_static/base/ncep/stns/idftLoc.xml | 3736 +- .../edex_static/base/ncep/stns/stns.xsd | 324 +- .../edex_static/base/ncep/stns/vors.xml | 14098 +-- .../edex_static/base/ncep/stns/zones.xml | 94378 ++++++++-------- .../gov.noaa.nws.ncep.edex.gempak.jna.ecl | 0 ...ov.noaa.nws.ncep.edex.ingest.grib.util.ecl | 0 .../gov.noaa.nws.ncep.edex.ingest.util.ecl | 0 .../gov.noaa.nws.ncep.edex.plugin.airmet.ecl | 0 .../res/spring/airmet-common.xml | 50 +- .../res/spring/airmet-ingest.xml | 142 +- .../plugin/airmet/decoder/AirmetDecoder.java | 634 +- .../airmet/decoder/AirmetSeparator.java | 276 +- .../plugin/airmet/decoder/package-info.java | 8 +- .../edex/plugin/airmet/util/AirmetParser.java | 1364 +- .../edex/plugin/airmet/util/package-info.java | 8 +- .../gov.noaa.nws.ncep.edex.plugin.atcf.ecl | 0 .../plugin/atcf/decoder/package-info.java | 12 +- .../gov.noaa.nws.ncep.edex.plugin.aww.ecl | 0 .../edex/plugin/aww/decoder/package-info.java | 12 +- ...v.noaa.nws.ncep.edex.plugin.convsigmet.ecl | 0 .../component-deploy.xml | 12 +- .../res/spring/convsigmet-common.xml | 50 +- .../res/spring/convsigmet-ingest.xml | 144 +- .../convsigmet/decoder/ConvSigmetDecoder.java | 512 +- .../decoder/ConvSigmetSeparator.java | 290 +- .../convsigmet/decoder/package-info.java | 8 +- .../convsigmet/util/ConvSigmetParser.java | 1310 +- .../plugin/convsigmet/util/package-info.java | 8 +- .../res/spring/convsigmet-common.xml | 50 +- .../res/spring/convsigmet-ingest.xml | 144 +- .../convsigmet/decoder/ConvSigmetDecoder.java | 448 +- .../decoder/ConvSigmetSeparator.java | 290 +- .../convsigmet/decoder/package-info.java | 8 +- .../convsigmet/util/ConvSigmetParser.java | 1288 +- .../plugin/convsigmet/util/package-info.java | 8 +- .../gov.noaa.nws.ncep.edex.plugin.ffg.ecl | 0 .../gov.noaa.nws.ncep.edex.plugin.idft.ecl | 0 .../plugin/idft/decoder/package-info.java | 12 +- ...v.noaa.nws.ncep.edex.plugin.intlsigmet.ecl | 0 .../res/spring/intlsigmet-common.xml | 50 +- .../res/spring/intlsigmet-ingest.xml | 142 +- .../intlsigmet/decoder/IntlSigmetDecoder.java | 394 +- .../decoder/IntlSigmetSeparator.java | 294 +- .../intlsigmet/decoder/package-info.java | 8 +- .../intlsigmet/util/IntlSigmetParser.java | 3376 +- .../plugin/intlsigmet/util/package-info.java | 8 +- .../gov.noaa.nws.ncep.edex.plugin.mcidas.ecl | 0 .../gov.noaa.nws.ncep.edex.plugin.mosaic.ecl | 0 .../res/endpoints/mosaic-ingest.xml | 96 +- .../plugin/mosaic/common/MosaicRecord.java | 1140 +- .../plugin/mosaic/common/package-info.java | 6 +- .../plugin/mosaic/decoder/package-info.java | 6 +- .../plugin/mosaic/uengine/package-info.java | 8 +- .../mosaic/util/level3/Level3Parser.java | 1070 +- .../mosaic/util/level3/SymbologyBlock.java | 312 +- .../mosaic/util/level3/SymbologyPacket.java | 92 +- .../edex/plugin/mosaic/util/package-info.java | 8 +- .../gov.noaa.nws.ncep.edex.plugin.ncairep.ecl | 0 .../edex/plugin/ncairep/NcAirepDecoder.java | 316 +- .../edex/plugin/ncairep/NcAirepSeparator.java | 344 +- .../ncairep/decoder/NcAIREPObsType.java | 126 +- .../ncairep/decoder/NcAIREPWeather.java | 258 +- .../plugin/ncairep/decoder/NcAirepParser.java | 1242 +- .../gov.noaa.nws.ncep.edex.plugin.ncccfp.ecl | 0 .../gov.noaa.nws.ncep.edex.plugin.ncgrib.ecl | 0 .../edex/plugin/ncgrib/dao/NcMercatorDao.java | 18 +- .../plugin/ncgrib/dao/NcPolarStereoDao.java | 18 +- .../edex/plugin/ncgrib/dao/NcgribDao.java | 18 +- .../ncgrib/handler/GetNcCoverageHandler.java | 18 +- .../ncgrib/notify/NcgribNotifyTransform.java | 18 +- .../ncgrib/spatial/NcgribSpatialCache.java | 18 +- .../plugin/ncgrib/util/NcgribModelCache.java | 18 +- .../plugin/ncgrib/util/TableTimeStamp.java | 332 +- .../uengine/tasks/ncgrib/package-info.java | 6 +- .../util/grib2vars/Grib2VarsComparator.java | 110 +- .../edex/util/grib2vars/Grib2VarsTable.java | 368 +- .../util/grib2vars/Grib2VarsTableLookup.java | 564 +- .../edex/util/grib2vars/IGrib2VarsField.java | 36 +- .../util/grib2vcrd/Grib2VcrdComparator.java | 98 +- .../edex/util/grib2vcrd/Grib2VcrdTable.java | 376 +- .../util/grib2vcrd/Grib2VcrdTableLookup.java | 520 +- .../edex/util/grib2vcrd/IGrib2VcrdField.java | 30 +- .../base/ncgrib/ncgrids/Aviation-Grid1.xml | 18 +- .../base/ncgrib/ncgrids/Aviation-Grid2.xml | 18 +- .../base/ncgrib/ncgrids/Aviation-Grid3.xml | 18 +- .../base/ncgrib/ncgrids/ECMWF-Grid1.xml | 18 +- .../base/ncgrib/ncgrids/ECMWF-Grid10.xml | 18 +- .../base/ncgrib/ncgrids/ECMWF-Grid11.xml | 18 +- .../base/ncgrib/ncgrids/ECMWF-Grid12.xml | 18 +- .../base/ncgrib/ncgrids/ECMWF-Grid2.xml | 18 +- .../base/ncgrib/ncgrids/ECMWF-Grid3.xml | 18 +- .../base/ncgrib/ncgrids/ECMWF-Grid4.xml | 18 +- .../base/ncgrib/ncgrids/ECMWF-Grid5.xml | 18 +- .../base/ncgrib/ncgrids/ECMWF-Grid6.xml | 18 +- .../base/ncgrib/ncgrids/ECMWF-Grid7.xml | 18 +- .../base/ncgrib/ncgrids/ECMWF-Grid8.xml | 18 +- .../base/ncgrib/ncgrids/ECMWF-Grid9.xml | 18 +- .../base/ncgrib/ncgrids/HiResAK.xml | 18 +- .../base/ncgrib/ncgrids/HiResHI.xml | 18 +- .../base/ncgrib/ncgrids/HiResPR.xml | 18 +- .../base/ncgrib/ncgrids/HiResWest.xml | 18 +- .../base/ncgrib/ncgrids/HiresEast.xml | 18 +- .../base/ncgrib/ncgrids/RTMA-Grid197.xml | 18 +- .../edex_static/base/ncgrib/ncgrids/grid1.xml | 18 +- .../base/ncgrib/ncgrids/grid10.xml | 18 +- .../base/ncgrib/ncgrids/grid101.xml | 18 +- .../base/ncgrib/ncgrids/grid104.xml | 18 +- .../base/ncgrib/ncgrids/grid10c.xml | 18 +- .../base/ncgrib/ncgrids/grid11.xml | 18 +- .../base/ncgrib/ncgrids/grid110.xml | 18 +- .../base/ncgrib/ncgrids/grid11c.xml | 18 +- .../base/ncgrib/ncgrids/grid12.xml | 18 +- .../base/ncgrib/ncgrids/grid126.xml | 18 +- .../base/ncgrib/ncgrids/grid126c.xml | 18 +- .../base/ncgrib/ncgrids/grid127.xml | 18 +- .../base/ncgrib/ncgrids/grid127c.xml | 18 +- .../base/ncgrib/ncgrids/grid128.xml | 18 +- .../base/ncgrib/ncgrids/grid128c.xml | 18 +- .../base/ncgrib/ncgrids/grid129.xml | 18 +- .../base/ncgrib/ncgrids/grid129c.xml | 18 +- .../base/ncgrib/ncgrids/grid13.xml | 18 +- .../base/ncgrib/ncgrids/grid130.xml | 18 +- .../base/ncgrib/ncgrids/grid138.xml | 18 +- .../base/ncgrib/ncgrids/grid14.xml | 18 +- .../base/ncgrib/ncgrids/grid145.xml | 18 +- .../base/ncgrib/ncgrids/grid146.xml | 18 +- .../base/ncgrib/ncgrids/grid147.xml | 18 +- .../base/ncgrib/ncgrids/grid148.xml | 18 +- .../base/ncgrib/ncgrids/grid15.xml | 18 +- .../base/ncgrib/ncgrids/grid150.xml | 18 +- .../base/ncgrib/ncgrids/grid151.xml | 18 +- .../base/ncgrib/ncgrids/grid16.xml | 18 +- .../base/ncgrib/ncgrids/grid160.xml | 18 +- .../base/ncgrib/ncgrids/grid161.xml | 18 +- .../base/ncgrib/ncgrids/grid163.xml | 18 +- .../base/ncgrib/ncgrids/grid17.xml | 18 +- .../base/ncgrib/ncgrids/grid170.xml | 18 +- .../base/ncgrib/ncgrids/grid170c.xml | 18 +- .../base/ncgrib/ncgrids/grid171.xml | 18 +- .../base/ncgrib/ncgrids/grid172.xml | 18 +- .../base/ncgrib/ncgrids/grid173.xml | 18 +- .../base/ncgrib/ncgrids/grid173c.xml | 18 +- .../base/ncgrib/ncgrids/grid174.xml | 18 +- .../base/ncgrib/ncgrids/grid174c.xml | 18 +- .../base/ncgrib/ncgrids/grid175.xml | 18 +- .../base/ncgrib/ncgrids/grid176.xml | 18 +- .../base/ncgrib/ncgrids/grid18.xml | 18 +- .../base/ncgrib/ncgrids/grid180.xml | 18 +- .../base/ncgrib/ncgrids/grid181.xml | 18 +- .../base/ncgrib/ncgrids/grid182.xml | 18 +- .../base/ncgrib/ncgrids/grid183.xml | 18 +- .../base/ncgrib/ncgrids/grid185.xml | 18 +- .../base/ncgrib/ncgrids/grid186.xml | 18 +- .../base/ncgrib/ncgrids/grid195.xml | 18 +- .../base/ncgrib/ncgrids/grid196.xml | 18 +- .../base/ncgrib/ncgrids/grid197.xml | 18 +- .../base/ncgrib/ncgrids/grid198.xml | 18 +- .../base/ncgrib/ncgrids/grid199.xml | 18 +- .../edex_static/base/ncgrib/ncgrids/grid2.xml | 18 +- .../base/ncgrib/ncgrids/grid201.xml | 18 +- .../base/ncgrib/ncgrids/grid202.xml | 18 +- .../base/ncgrib/ncgrids/grid203.xml | 18 +- .../base/ncgrib/ncgrids/grid204.xml | 18 +- .../base/ncgrib/ncgrids/grid205.xml | 18 +- .../base/ncgrib/ncgrids/grid206.xml | 18 +- .../base/ncgrib/ncgrids/grid207.xml | 18 +- .../base/ncgrib/ncgrids/grid208.xml | 18 +- .../base/ncgrib/ncgrids/grid209.xml | 18 +- .../base/ncgrib/ncgrids/grid210.xml | 18 +- .../base/ncgrib/ncgrids/grid211.xml | 18 +- .../base/ncgrib/ncgrids/grid212.xml | 18 +- .../base/ncgrib/ncgrids/grid213.xml | 18 +- .../base/ncgrib/ncgrids/grid214.xml | 18 +- .../base/ncgrib/ncgrids/grid215.xml | 18 +- .../base/ncgrib/ncgrids/grid216.xml | 18 +- .../base/ncgrib/ncgrids/grid217.xml | 18 +- .../base/ncgrib/ncgrids/grid218.xml | 18 +- .../base/ncgrib/ncgrids/grid219.xml | 18 +- .../base/ncgrib/ncgrids/grid220.xml | 18 +- .../base/ncgrib/ncgrids/grid221.xml | 18 +- .../base/ncgrib/ncgrids/grid222.xml | 18 +- .../base/ncgrib/ncgrids/grid223.xml | 18 +- .../base/ncgrib/ncgrids/grid224.xml | 18 +- .../base/ncgrib/ncgrids/grid225.xml | 18 +- .../base/ncgrib/ncgrids/grid226.xml | 18 +- .../base/ncgrib/ncgrids/grid227.xml | 18 +- .../base/ncgrib/ncgrids/grid228.xml | 18 +- .../base/ncgrib/ncgrids/grid228c.xml | 18 +- .../base/ncgrib/ncgrids/grid229.xml | 18 +- .../base/ncgrib/ncgrids/grid229c.xml | 18 +- .../base/ncgrib/ncgrids/grid230.xml | 18 +- .../base/ncgrib/ncgrids/grid230c.xml | 18 +- .../base/ncgrib/ncgrids/grid231.xml | 18 +- .../base/ncgrib/ncgrids/grid231c.xml | 18 +- .../base/ncgrib/ncgrids/grid232.xml | 18 +- .../base/ncgrib/ncgrids/grid232c.xml | 18 +- .../base/ncgrib/ncgrids/grid233.xml | 18 +- .../base/ncgrib/ncgrids/grid233c.xml | 18 +- .../base/ncgrib/ncgrids/grid234.xml | 18 +- .../base/ncgrib/ncgrids/grid235.xml | 18 +- .../base/ncgrib/ncgrids/grid235c.xml | 18 +- .../base/ncgrib/ncgrids/grid236.xml | 18 +- .../base/ncgrib/ncgrids/grid237.xml | 18 +- .../base/ncgrib/ncgrids/grid238.xml | 18 +- .../base/ncgrib/ncgrids/grid239.xml | 18 +- .../base/ncgrib/ncgrids/grid240.xml | 18 +- .../base/ncgrib/ncgrids/grid240ALR.xml | 18 +- .../base/ncgrib/ncgrids/grid240FWR.xml | 18 +- .../base/ncgrib/ncgrids/grid240KRF.xml | 18 +- .../base/ncgrib/ncgrids/grid240MSR.xml | 18 +- .../base/ncgrib/ncgrids/grid240ORN.xml | 18 +- .../base/ncgrib/ncgrids/grid240PTR.xml | 18 +- .../base/ncgrib/ncgrids/grid240RHA.xml | 18 +- .../base/ncgrib/ncgrids/grid240RSA.xml | 18 +- .../base/ncgrib/ncgrids/grid240STR.xml | 18 +- .../base/ncgrib/ncgrids/grid240TAR.xml | 18 +- .../base/ncgrib/ncgrids/grid240TIR.xml | 18 +- .../base/ncgrib/ncgrids/grid240TUA.xml | 18 +- .../base/ncgrib/ncgrids/grid241.xml | 18 +- .../base/ncgrib/ncgrids/grid242.xml | 18 +- .../base/ncgrib/ncgrids/grid243.xml | 18 +- .../base/ncgrib/ncgrids/grid244.xml | 18 +- .../base/ncgrib/ncgrids/grid245.xml | 18 +- .../base/ncgrib/ncgrids/grid246.xml | 18 +- .../base/ncgrib/ncgrids/grid247.xml | 18 +- .../base/ncgrib/ncgrids/grid248.xml | 18 +- .../base/ncgrib/ncgrids/grid249.xml | 18 +- .../base/ncgrib/ncgrids/grid250.xml | 18 +- .../base/ncgrib/ncgrids/grid251.xml | 18 +- .../base/ncgrib/ncgrids/grid252.xml | 18 +- .../base/ncgrib/ncgrids/grid253.xml | 18 +- .../base/ncgrib/ncgrids/grid254.xml | 18 +- .../base/ncgrib/ncgrids/grid29.xml | 18 +- .../edex_static/base/ncgrib/ncgrids/grid3.xml | 18 +- .../base/ncgrib/ncgrids/grid30.xml | 18 +- .../base/ncgrib/ncgrids/grid33.xml | 18 +- .../base/ncgrib/ncgrids/grid34.xml | 18 +- .../base/ncgrib/ncgrids/grid37.xml | 18 +- .../base/ncgrib/ncgrids/grid38.xml | 18 +- .../base/ncgrib/ncgrids/grid39.xml | 18 +- .../base/ncgrib/ncgrids/grid3c.xml | 18 +- .../edex_static/base/ncgrib/ncgrids/grid4.xml | 18 +- .../base/ncgrib/ncgrids/grid40.xml | 18 +- .../base/ncgrib/ncgrids/grid41.xml | 18 +- .../base/ncgrib/ncgrids/grid42.xml | 18 +- .../base/ncgrib/ncgrids/grid43.xml | 18 +- .../base/ncgrib/ncgrids/grid44.xml | 18 +- .../base/ncgrib/ncgrids/grid45.xml | 18 +- .../base/ncgrib/ncgrids/grid45c.xml | 18 +- .../edex_static/base/ncgrib/ncgrids/grid5.xml | 18 +- .../edex_static/base/ncgrib/ncgrids/grid6.xml | 18 +- .../base/ncgrib/ncgrids/grid85.xml | 18 +- .../base/ncgrib/ncgrids/grid86.xml | 18 +- .../base/ncgrib/ncgrids/grid87.xml | 18 +- .../base/ncgrib/ncgrids/grid88.xml | 18 +- .../base/ncgrib/ncgrids/grid98.xml | 18 +- .../base/ncgrib/ncgrids/grid98c.xml | 18 +- .../base/ncgrib/ncgrids/grid99.xml | 18 +- .../edex_static/base/ncgrib/ncgrids/ncwf.xml | 18 +- .../edex_static/base/ncgrib/ncgrids/rcm.xml | 18 +- .../gov.noaa.nws.ncep.edex.plugin.ncpafm.ecl | 0 .../plugin/ncpafm/decoder/package-info.java | 12 +- .../gov.noaa.nws.ncep.edex.plugin.ncpirep.ecl | 0 .../edex/plugin/ncpirep/NcPirepDecoder.java | 448 +- .../edex/plugin/ncpirep/NcPirepSeparator.java | 286 +- .../plugin/ncpirep/decoder/NcPirepParser.java | 2992 +- .../edex_static/base/distribution/ncpirep.xml | 18 +- .../gov.noaa.nws.ncep.edex.plugin.ncscat.ecl | 0 .../edex/plugin/ncscat/util/package-info.java | 8 +- .../gov.noaa.nws.ncep.edex.plugin.ncscd.ecl | 0 .../gov.noaa.nws.ncep.edex.plugin.nctaf.ecl | 0 .../res/conf/attributes.xml | 34 +- .../res/endpoints/nctaf-ingest.xml | 96 +- .../res/scripts/tafIndices.sql | 18 +- .../plugin/nctaf/decoder/NcTafDecoder.java | 90 +- .../gov.noaa.nws.ncep.edex.plugin.nctext.ecl | 0 .../gov.noaa.nws.ncep.edex.plugin.ncuair.ecl | 0 ...oaa.nws.ncep.edex.plugin.nonconvsigmet.ecl | 0 .../component-deploy.xml | 12 +- .../res/spring/nonconvsigmet-common.xml | 50 +- .../res/spring/nonconvsigmet-ingest.xml | 144 +- .../decoder/NonConvSigmetDecoder.java | 214 +- .../decoder/NonConvSigmetSeparator.java | 292 +- .../nonconvsigmet/decoder/package-info.java | 8 +- .../util/NonConvSigmetParser.java | 816 +- .../nonconvsigmet/util/package-info.java | 8 +- .../res/spring/nonconvsigmet-common.xml | 50 +- .../res/spring/nonconvsigmet-ingest.xml | 144 +- .../decoder/NonConvSigmetDecoder.java | 220 +- .../decoder/NonConvSigmetSeparator.java | 272 +- .../nonconvsigmet/decoder/package-info.java | 8 +- .../util/NonConvSigmetParser.java | 792 +- .../nonconvsigmet/util/package-info.java | 8 +- .../gov.noaa.nws.ncep.edex.plugin.sgwh.ecl | 0 .../gov.noaa.nws.ncep.edex.plugin.sgwhv.ecl | 0 .../plugin/sgwhv/decoder/SgwhvDecoder.java | 200 +- .../plugin/sgwhv/decoder/SgwhvSeparator.java | 328 +- .../sgwhv/util/SgwhvDescriptorDelegate.java | 84 +- .../gov.noaa.nws.ncep.edex.plugin.ssha.ecl | 0 .../edex/plugin/ssha/decoder/SshaDecoder.java | 198 +- .../plugin/ssha/decoder/SshaSeparator.java | 306 +- .../plugin/ssha/decoder/package-info.java | 12 +- .../ssha/util/SshaDescriptorDelegate.java | 174 +- ...v.noaa.nws.ncep.edex.plugin.stormtrack.ecl | 0 .../stormtrack/decoder/package-info.java | 12 +- .../gov.noaa.nws.ncep.edex.plugin.tcm.ecl | 0 .../gov.noaa.nws.ncep.edex.plugin.wcp.ecl | 0 .../edex/plugin/wcp/decoder/package-info.java | 12 +- .../gov.noaa.nws.ncep.edex.purgeutil.ecl | 0 .../gov.noaa.nws.ncep.edex.uengine.ecl | 0 ...ncep.gempak.parameterConversionLibrary.ecl | 0 .../gov.noaa.nws.ncep.gempak.parameters.ecl | 0 .../gov.noaa.nws.ncep.metParameters.ecl | 0 .../gov.noaa.nws.ncep.ui.nctextui.ecl | 0 .../gov.noaa.nws.ncep.ui.nsharp.linux32.ecl | 0 .../gov.noaa.nws.ncep.ui.nsharp.linux64.ecl | 0 .../gov.noaa.nws.ncep.ui.nsharp.win32.ecl | 0 .../BigNsharp/backup_nlist.txt | 1876 +- .../BigNsharp/nlist_backup.txt | 2298 +- .../BigNsharp/siglist.txt | 1282 +- .../gov.noaa.nws.ncep.ui.nsharp.ecl | 0 .../localization/ncep/nsharp/nlist.txt | 2298 +- .../localization/ncep/nsharp/sup.txt | 1878 +- .../gov.noaa.nws.ncep.ui.pgen.ecl | 0 .../gov.noaa.nws.ncep.viz.cloudHeight.ecl | 0 .../binding/binding.xml | 12 +- .../gov.noaa.nws.ncep.viz.common.ecl | 0 .../gov.noaa.nws.ncep.viz.gempak.ecl | 0 .../gov.noaa.nws.ncep.viz.localization.ecl | 0 .../gov.noaa.nws.ncep.viz.overlays.ecl | 0 .../resources/OverlayResourceGroup.java | 362 +- .../gov.noaa.nws.ncep.viz.resourceManager.ecl | 0 .../gov.noaa.nws.ncep.viz.resources.ecl | 0 .../gov.noaa.nws.ncep.viz.rsc.airmet.ecl | 0 .../gov.noaa.nws.ncep.viz.rsc.atcf.ecl | 0 .../gov.noaa.nws.ncep.viz.rsc.convsigmet.ecl | 0 .../gov.noaa.nws.ncep.viz.rsc.ffa.ecl | 0 .../gov.noaa.nws.ncep.viz.rsc.ffg.ecl | 0 .../gov.noaa.nws.ncep.viz.rsc.hrcn.ecl | 0 .../gov.noaa.nws.ncep.viz.rsc.idft.ecl | 0 .../gov.noaa.nws.ncep.viz.rsc.intlsig.ecl | 0 .../gov.noaa.nws.ncep.viz.rsc.lightning.ecl | 0 .../gov.noaa.nws.ncep.viz.rsc.mosaic.ecl | 0 .../rsc/mosaic/rsc/RadarImageResource.java | 75 +- .../rsc/mosaic/rsc/RadarRadialResource.java | 14 +- .../gov.noaa.nws.ncep.viz.rsc.ncgrid.ecl | 0 .../config.xml | 18 +- .../gov.noaa.nws.ncep.viz.rsc.ncradar.ecl | 0 .../rsc/ncradar/rsc/RadarImageResource.java | 65 +- .../rsc/image/RadarRasterResource.java | 25 +- .../gov.noaa.nws.ncep.viz.rsc.ncscat.ecl | 0 ...ov.noaa.nws.ncep.viz.rsc.nonconvsigmet.ecl | 0 .../gov.noaa.nws.ncep.viz.rsc.pgen.ecl | 0 .../gov.noaa.nws.ncep.viz.rsc.plotdata.ecl | 0 .../gov.noaa.nws.ncep.viz.rsc.satellite.ecl | 0 .../satellite/rsc/McidasFileBasedTileSet.java | 84 +- .../gov.noaa.nws.ncep.viz.rsc.stormtrack.ecl | 0 .../gov.noaa.nws.ncep.viz.rsc.svrl.ecl | 0 .../gov.noaa.nws.ncep.viz.rsc.warn.ecl | 0 .../gov.noaa.nws.ncep.viz.rsc.wavesat.ecl | 0 .../gov.noaa.nws.ncep.viz.rsc.wcn.ecl | 0 .../gov.noaa.nws.ncep.viz.rsc.wcp.ecl | 0 .../gov.noaa.nws.ncep.viz.rsc.wou.ecl | 0 .../gov.noaa.nws.ncep.viz.rsc.wstm.ecl | 0 .../gov.noaa.nws.ncep.viz.rsc.wtch.ecl | 0 .../gov.noaa.nws.ncep.viz.tools.ecl | 0 .../gov.noaa.nws.ncep.viz.ui.display.ecl | 0 .../gov.noaa.nws.ncep.viz.ui.locator.ecl | 0 .../gov.noaa.nws.ncep.viz.ui.perspectives.ecl | 0 .../gov.noaa.nws.ncep.viz.ui.seek.ecl | 0 pythonPackages/pythonPackages.ecl | 0 .../tar.baseline/javadoc/conf/overview.html | 4 +- .../configuration/postgresql.conf | 942 +- .../configuration/postgresql.conf | 942 +- rpms/awips2.edex/awips2.edex.ecl | 0 .../FOSS_licenses/CherryPy/CheryPyLICENSE.txt | 50 +- rpms/legal/FOSS_licenses/apache/Apache1.1.txt | 56 +- .../FOSS_licenses/apache/LICENSE-2.0.txt | 402 +- .../jai_image_io/LICENSE-jai_imageio.txt | 270 +- rpms/legal/FOSS_licenses/java/COPYRIGHT.txt | 162 +- rpms/legal/FOSS_licenses/java/LICENSE.txt | 684 +- rpms/legal/FOSS_licenses/java/README.html | 1438 +- .../java/THIRDPARTYLICENSEREADME.txt | 4578 +- .../jepp/zlib-libpng License.txt | 54 +- rpms/legal/FOSS_licenses/jogl/bsd_license.txt | 30 +- rpms/legal/FOSS_licenses/jscience/license.txt | 50 +- .../FOSS_licenses/jts_topology_suit/lgpl.txt | 1008 +- .../FOSS_licenses/postgresql/bsd_license.txt | 30 +- .../Mozilla Public License version 1_0.txt | 554 +- rpms/legal/license.txt | 34 +- rpms/rpms.ecl | 0 1286 files changed, 117107 insertions(+), 116024 deletions(-) create mode 100644 MHSEmulator/MHSEmulator.ecl create mode 100644 RadarServer/build.rcm/build.rcm.ecl create mode 100644 RadarServer/com.raytheon.rcm.feature/com.raytheon.rcm.feature.ecl create mode 100644 RadarServer/com.raytheon.rcm.lib/com.raytheon.rcm.lib.ecl create mode 100644 RadarServer/com.raytheon.rcm.product/com.raytheon.rcm.product.ecl create mode 100644 RadarServer/com.raytheon.rcm.server.mq/com.raytheon.rcm.server.mq.ecl create mode 100644 RadarServer/com.raytheon.rcm.server/com.raytheon.rcm.server.ecl create mode 100644 RadarServer/com.raytheon.rcm.tools/com.raytheon.rcm.tools.ecl create mode 100644 cave/build/build.ecl create mode 100644 cave/com.raytheon.uf.viz.acarssounding/com.raytheon.uf.viz.acarssounding.ecl create mode 100644 cave/com.raytheon.uf.viz.alertviz.localization.feature/com.raytheon.uf.viz.alertviz.localization.feature.ecl create mode 100644 cave/com.raytheon.uf.viz.alertviz.localization/com.raytheon.uf.viz.alertviz.localization.ecl create mode 100644 cave/com.raytheon.uf.viz.alertviz.ui/com.raytheon.uf.viz.alertviz.ui.ecl create mode 100644 cave/com.raytheon.uf.viz.alertviz/com.raytheon.uf.viz.alertviz.ecl create mode 100644 cave/com.raytheon.uf.viz.app.launcher/com.raytheon.uf.viz.app.launcher.ecl create mode 100644 cave/com.raytheon.uf.viz.application/com.raytheon.uf.viz.application.ecl create mode 100644 cave/com.raytheon.uf.viz.aviation.advisory/com.raytheon.uf.viz.aviation.advisory.ecl create mode 100644 cave/com.raytheon.uf.viz.bufrsigwx/com.raytheon.uf.viz.bufrsigwx.ecl create mode 100644 cave/com.raytheon.uf.viz.bufrua/com.raytheon.uf.viz.bufrua.ecl create mode 100644 cave/com.raytheon.uf.viz.ccfp/com.raytheon.uf.viz.ccfp.ecl create mode 100644 cave/com.raytheon.uf.viz.climo/com.raytheon.uf.viz.climo.ecl create mode 100644 cave/com.raytheon.uf.viz.cloudheight/com.raytheon.uf.viz.cloudheight.ecl create mode 100644 cave/com.raytheon.uf.viz.common.core.feature/com.raytheon.uf.viz.common.core.feature.ecl create mode 100644 cave/com.raytheon.uf.viz.coopprecip/com.raytheon.uf.viz.coopprecip.ecl create mode 100644 cave/com.raytheon.uf.viz.core.feature/com.raytheon.uf.viz.core.feature.ecl create mode 100644 cave/com.raytheon.uf.viz.core.maps.feature/com.raytheon.uf.viz.core.maps.feature.ecl create mode 100644 cave/com.raytheon.uf.viz.core.maps/com.raytheon.uf.viz.core.maps.ecl create mode 100644 cave/com.raytheon.uf.viz.core.rsc/com.raytheon.uf.viz.core.rsc.ecl create mode 100644 cave/com.raytheon.uf.viz.core/com.raytheon.uf.viz.core.ecl delete mode 100644 cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/datastructure/DefaultDataCubeAdapter.java delete mode 100644 cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/drawables/ImagingSupport.java create mode 100644 cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/drawables/SingleColorImage.java delete mode 100644 cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/drawables/ext/TextureLoader.java delete mode 100644 cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/drawables/ext/colormap/ColormappedImage.java create mode 100644 cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/drawables/ext/colormap/ColormappedRenderedImageCallback.java rename {edexOsgi/com.raytheon.uf.common.geospatial/src/com/raytheon/uf/common/geospatial/util => cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/map}/WorldWrapChecker.java (68%) rename {edexOsgi/com.raytheon.uf.common.geospatial/src/com/raytheon/uf/common/geospatial/util => cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/map}/WorldWrapCorrector.java (96%) create mode 100644 cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/preferences/JMSPreferences.java delete mode 100644 cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/rsc/AbstractPluginDataObjectResource.java create mode 100644 cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/rsc/hdf5/MeshCalculatorJob.java create mode 100644 cave/com.raytheon.uf.viz.cots.feature/com.raytheon.uf.viz.cots.feature.ecl create mode 100644 cave/com.raytheon.uf.viz.cwa/com.raytheon.uf.viz.cwa.ecl create mode 100644 cave/com.raytheon.uf.viz.cwat/com.raytheon.uf.viz.cwat.ecl create mode 100644 cave/com.raytheon.uf.viz.d2d.core.feature/com.raytheon.uf.viz.d2d.core.feature.ecl create mode 100644 cave/com.raytheon.uf.viz.d2d.core/com.raytheon.uf.viz.d2d.core.ecl create mode 100644 cave/com.raytheon.uf.viz.d2d.gfe.feature/com.raytheon.uf.viz.d2d.gfe.feature.ecl create mode 100644 cave/com.raytheon.uf.viz.d2d.gfe/com.raytheon.uf.viz.d2d.gfe.ecl create mode 100644 cave/com.raytheon.uf.viz.d2d.nsharp.feature/com.raytheon.uf.viz.d2d.nsharp.feature.ecl create mode 100644 cave/com.raytheon.uf.viz.d2d.nsharp/com.raytheon.uf.viz.d2d.nsharp.ecl create mode 100644 cave/com.raytheon.uf.viz.d2d.skewt.feature/com.raytheon.uf.viz.d2d.skewt.feature.ecl create mode 100644 cave/com.raytheon.uf.viz.d2d.ui/com.raytheon.uf.viz.d2d.ui.ecl create mode 100644 cave/com.raytheon.uf.viz.d2d.xy.adapters/com.raytheon.uf.viz.d2d.xy.adapters.ecl create mode 100644 cave/com.raytheon.uf.viz.d2d.xy.feature/com.raytheon.uf.viz.d2d.xy.feature.ecl create mode 100644 cave/com.raytheon.uf.viz.dat.feature/com.raytheon.uf.viz.dat.feature.ecl create mode 100644 cave/com.raytheon.uf.viz.dataplugin.obs.feature/com.raytheon.uf.viz.dataplugin.obs.feature.ecl create mode 100644 cave/com.raytheon.uf.viz.dataplugins.feature/com.raytheon.uf.viz.dataplugins.feature.ecl create mode 100644 cave/com.raytheon.uf.viz.datastorage.remote/com.raytheon.uf.viz.datastorage.remote.ecl create mode 100644 cave/com.raytheon.uf.viz.derivparam.python/com.raytheon.uf.viz.derivparam.python.ecl create mode 100644 cave/com.raytheon.uf.viz.derivparam.ui/com.raytheon.uf.viz.derivparam.ui.ecl create mode 100644 cave/com.raytheon.uf.viz.derivparam/com.raytheon.uf.viz.derivparam.ecl delete mode 100644 cave/com.raytheon.uf.viz.derivparam/src/com/raytheon/uf/viz/derivparam/data/AbstractDataCubeAdapter.java create mode 100644 cave/com.raytheon.uf.viz.displays.feature/com.raytheon.uf.viz.displays.feature.ecl create mode 100644 cave/com.raytheon.uf.viz.eclipse.feature/com.raytheon.uf.viz.eclipse.feature.ecl create mode 100644 cave/com.raytheon.uf.viz.feature.alertviz/com.raytheon.uf.viz.feature.alertviz.ecl create mode 100644 cave/com.raytheon.uf.viz.ffg/com.raytheon.uf.viz.ffg.ecl create mode 100644 cave/com.raytheon.uf.viz.localization.perspective.feature/com.raytheon.uf.viz.localization.perspective.feature.ecl create mode 100644 cave/com.raytheon.uf.viz.localization.perspective/com.raytheon.uf.viz.localization.perspective.ecl create mode 100644 cave/com.raytheon.uf.viz.monitor.ffmp/com.raytheon.uf.viz.monitor.ffmp.ecl create mode 100644 cave/com.raytheon.uf.viz.monitor.fog/com.raytheon.uf.viz.monitor.fog.ecl create mode 100644 cave/com.raytheon.uf.viz.monitor.safeseas/com.raytheon.uf.viz.monitor.safeseas.ecl create mode 100644 cave/com.raytheon.uf.viz.monitor.scan/com.raytheon.uf.viz.monitor.scan.ecl create mode 100644 cave/com.raytheon.uf.viz.monitor.snow/com.raytheon.uf.viz.monitor.snow.ecl create mode 100644 cave/com.raytheon.uf.viz.monitor/com.raytheon.uf.viz.monitor.ecl create mode 100644 cave/com.raytheon.uf.viz.ncep.dataplugins.feature/com.raytheon.uf.viz.ncep.dataplugins.feature.ecl create mode 100644 cave/com.raytheon.uf.viz.ncep.displays.feature/com.raytheon.uf.viz.ncep.displays.feature.ecl create mode 100644 cave/com.raytheon.uf.viz.ncwf/com.raytheon.uf.viz.ncwf.ecl create mode 100644 cave/com.raytheon.uf.viz.npp.feature/com.raytheon.uf.viz.npp.feature.ecl create mode 100644 cave/com.raytheon.uf.viz.npp.viirs/com.raytheon.uf.viz.npp.viirs.ecl create mode 100644 cave/com.raytheon.uf.viz.nwsauth.feature/com.raytheon.uf.viz.nwsauth.feature.ecl create mode 100644 cave/com.raytheon.uf.viz.objectiveanalysis/com.raytheon.uf.viz.objectiveanalysis.ecl create mode 100644 cave/com.raytheon.uf.viz.plugin.nwsauth/com.raytheon.uf.viz.plugin.nwsauth.ecl create mode 100644 cave/com.raytheon.uf.viz.preciprate/com.raytheon.uf.viz.preciprate.ecl create mode 100644 cave/com.raytheon.uf.viz.product.alertviz/com.raytheon.uf.viz.product.alertviz.ecl create mode 100644 cave/com.raytheon.uf.viz.productbrowser/com.raytheon.uf.viz.productbrowser.ecl create mode 100644 cave/com.raytheon.uf.viz.profiler/com.raytheon.uf.viz.profiler.ecl create mode 100644 cave/com.raytheon.uf.viz.pypies/com.raytheon.uf.viz.pypies.ecl create mode 100644 cave/com.raytheon.uf.viz.python.swt/com.raytheon.uf.viz.python.swt.ecl create mode 100644 cave/com.raytheon.uf.viz.qpf/com.raytheon.uf.viz.qpf.ecl create mode 100644 cave/com.raytheon.uf.viz.radar.gl/com.raytheon.uf.viz.radar.gl.ecl create mode 100644 cave/com.raytheon.uf.viz.radar.gl/localization/glsl/mosaicMinDist.glsl create mode 100644 cave/com.raytheon.uf.viz.radar.gl/localization/glsl/mostRecentVal.glsl create mode 100644 cave/com.raytheon.uf.viz.radar.gl/src/com/raytheon/uf/viz/radar/gl/MosaicGLTarget.java create mode 100644 cave/com.raytheon.uf.viz.radar.gl/src/com/raytheon/uf/viz/radar/gl/RadarRadialMeshCache.java rename cave/{com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/drawables/ext/IImagingExtension.java => com.raytheon.uf.viz.radar.gl/src/com/raytheon/uf/viz/radar/gl/mosaic/CompReflShaderLoader.java} (53%) delete mode 100644 cave/com.raytheon.uf.viz.radar.gl/src/com/raytheon/uf/viz/radar/gl/mosaic/GLMosaicImage.java delete mode 100644 cave/com.raytheon.uf.viz.radar.gl/src/com/raytheon/uf/viz/radar/gl/mosaic/GLRadarMosaicImageExtension.java rename cave/{com.raytheon.viz.core.gl/src/com/raytheon/viz/core/gl/glsl/AbstractGLSLImagingExtension.java => com.raytheon.uf.viz.radar.gl/src/com/raytheon/uf/viz/radar/gl/mosaic/GLRadarMosaicRendererFactory.java} (52%) rename cave/{com.raytheon.viz.core.gl/src/com/raytheon/viz/core/gl/internal/ext/GLDefaultImagingExtension.java => com.raytheon.uf.viz.radar.gl/src/com/raytheon/uf/viz/radar/gl/mosaic/MosaicShaderLoader.java} (51%) rename cave/{com.raytheon.viz.radar/src/com/raytheon/viz/radar/rsc => com.raytheon.uf.viz.radar.gl/src/com/raytheon/uf/viz/radar/gl}/mosaic/RadarMosaicRenderer.java (63%) create mode 100644 cave/com.raytheon.uf.viz.radarapps.config/com.raytheon.uf.viz.radarapps.config.ecl create mode 100644 cave/com.raytheon.uf.viz.radarapps.core/com.raytheon.uf.viz.radarapps.core.ecl create mode 100644 cave/com.raytheon.uf.viz.radarapps.fsi/com.raytheon.uf.viz.radarapps.fsi.ecl create mode 100644 cave/com.raytheon.uf.viz.radarapps.requests/com.raytheon.uf.viz.radarapps.requests.ecl create mode 100644 cave/com.raytheon.uf.viz.radarapps.rps/com.raytheon.uf.viz.radarapps.rps.ecl create mode 100644 cave/com.raytheon.uf.viz.sounding.feature/com.raytheon.uf.viz.sounding.feature.ecl create mode 100644 cave/com.raytheon.uf.viz.sounding/com.raytheon.uf.viz.sounding.ecl create mode 100644 cave/com.raytheon.uf.viz.spellchecker/com.raytheon.uf.viz.spellchecker.ecl create mode 100644 cave/com.raytheon.uf.viz.spring.dm/com.raytheon.uf.viz.spring.dm.ecl create mode 100644 cave/com.raytheon.uf.viz.tcs/com.raytheon.uf.viz.tcs.ecl create mode 100644 cave/com.raytheon.uf.viz.thinclient.alertviz/com.raytheon.uf.viz.thinclient.alertviz.ecl create mode 100644 cave/com.raytheon.uf.viz.thinclient.cave/com.raytheon.uf.viz.thinclient.cave.ecl create mode 100644 cave/com.raytheon.uf.viz.thinclient.feature/com.raytheon.uf.viz.thinclient.feature.ecl create mode 100644 cave/com.raytheon.uf.viz.thinclient/com.raytheon.uf.viz.thinclient.ecl create mode 100644 cave/com.raytheon.uf.viz.ui.menus/com.raytheon.uf.viz.ui.menus.ecl create mode 100644 cave/com.raytheon.uf.viz.vaa/com.raytheon.uf.viz.vaa.ecl create mode 100644 cave/com.raytheon.uf.viz.vil/com.raytheon.uf.viz.vil.ecl create mode 100644 cave/com.raytheon.uf.viz.xy.crosssection/com.raytheon.uf.viz.xy.crosssection.ecl create mode 100644 cave/com.raytheon.uf.viz.xy.timeheight/com.raytheon.uf.viz.xy.timeheight.ecl create mode 100644 cave/com.raytheon.uf.viz.xy.timeseries/com.raytheon.uf.viz.xy.timeseries.ecl create mode 100644 cave/com.raytheon.uf.viz.xy.varheight/com.raytheon.uf.viz.xy.varheight.ecl create mode 100644 cave/com.raytheon.uf.viz.xy/com.raytheon.uf.viz.xy.ecl create mode 100644 cave/com.raytheon.viz.alerts/com.raytheon.viz.alerts.ecl create mode 100644 cave/com.raytheon.viz.aviation/com.raytheon.viz.aviation.ecl create mode 100644 cave/com.raytheon.viz.avnconfig/com.raytheon.viz.avnconfig.ecl create mode 100644 cave/com.raytheon.viz.avnfps.feature/com.raytheon.viz.avnfps.feature.ecl create mode 100644 cave/com.raytheon.viz.awipstools/com.raytheon.viz.awipstools.ecl create mode 100644 cave/com.raytheon.viz.bcd/com.raytheon.viz.bcd.ecl create mode 100644 cave/com.raytheon.viz.core.contours/com.raytheon.viz.core.contours.ecl create mode 100644 cave/com.raytheon.viz.core.gl/com.raytheon.viz.core.gl.ecl delete mode 100644 cave/com.raytheon.viz.core.gl/localization/glsl/colormapRaster.glsl delete mode 100644 cave/com.raytheon.viz.core.gl/localization/glsl/include/colorUtil.glsl delete mode 100644 cave/com.raytheon.viz.core.gl/localization/glsl/include/indexing.glsl delete mode 100644 cave/com.raytheon.viz.core.gl/localization/glsl/singleColor.glsl create mode 100644 cave/com.raytheon.viz.core.gl/localization/glsl_old/clouds.glsl create mode 100644 cave/com.raytheon.viz.core.gl/localization/glsl_old/drawRaster.glsl create mode 100644 cave/com.raytheon.viz.core.gl/localization/glsl_old/drawRaster3D.glsl create mode 100644 cave/com.raytheon.viz.core.gl/localization/glsl_old/heatIndex.glsl create mode 100644 cave/com.raytheon.viz.core.gl/localization/glsl_old/icing.glsl create mode 100644 cave/com.raytheon.viz.core.gl/localization/glsl_old/main.glsl create mode 100644 cave/com.raytheon.viz.core.gl/localization/glsl_old/terrain.glsl create mode 100644 cave/com.raytheon.viz.core.gl/schema/shader.exsd create mode 100644 cave/com.raytheon.viz.core.gl/src/com/raytheon/viz/core/gl/TextureLoaderJob.java delete mode 100644 cave/com.raytheon.viz.core.gl/src/com/raytheon/viz/core/gl/ext/AbstractGLImagingExtension.java rename edexOsgi/com.raytheon.uf.common.dataplugin.grib/src/com/raytheon/uf/common/dataplugin/grib/request/GetCoveragesRequest.java~HEAD => cave/com.raytheon.viz.core.gl/src/com/raytheon/viz/core/gl/glsl/AbstractShaderLoader.java (59%) create mode 100644 cave/com.raytheon.viz.core.gl/src/com/raytheon/viz/core/gl/glsl/GLSLRasterProgramLoader.java rename cave/{com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/drawables/ext/ISingleColorImageExtension.java => com.raytheon.viz.core.gl/src/com/raytheon/viz/core/gl/glsl/IShaderLoader.java} (62%) delete mode 100644 cave/com.raytheon.viz.core.gl/src/com/raytheon/viz/core/gl/images/GLDelegateImage.java delete mode 100644 cave/com.raytheon.viz.core.gl/src/com/raytheon/viz/core/gl/images/GLSingleColorImage.java rename cave/com.raytheon.viz.core.gl/src/com/raytheon/viz/core/gl/{ => internal}/ext/GLOffscreenRenderingExtension.java (91%) delete mode 100644 cave/com.raytheon.viz.core.gl/src/com/raytheon/viz/core/gl/internal/ext/GLSingleColorImageExtension.java create mode 100644 cave/com.raytheon.viz.core.graphing/com.raytheon.viz.core.graphing.ecl create mode 100644 cave/com.raytheon.viz.core/com.raytheon.viz.core.ecl create mode 100644 cave/com.raytheon.viz.drawing/com.raytheon.viz.drawing.ecl create mode 100644 cave/com.raytheon.viz.feature.awips.developer/com.raytheon.viz.feature.awips.developer.ecl create mode 100644 cave/com.raytheon.viz.feature.awips/com.raytheon.viz.feature.awips.ecl create mode 100644 cave/com.raytheon.viz.geotiff/com.raytheon.viz.geotiff.ecl create mode 100644 cave/com.raytheon.viz.gfe.feature/com.raytheon.viz.gfe.feature.ecl create mode 100644 cave/com.raytheon.viz.gfe/com.raytheon.viz.gfe.ecl create mode 100644 cave/com.raytheon.viz.ghg/com.raytheon.viz.ghg.ecl create mode 100644 cave/com.raytheon.viz.grib.feature/com.raytheon.viz.grib.feature.ecl create mode 100644 cave/com.raytheon.viz.grid/com.raytheon.viz.grid.ecl create mode 100644 cave/com.raytheon.viz.hydro.feature/com.raytheon.viz.hydro.feature.ecl create mode 100644 cave/com.raytheon.viz.hydro/com.raytheon.viz.hydro.ecl create mode 100644 cave/com.raytheon.viz.hydrobase/com.raytheon.viz.hydrobase.ecl create mode 100644 cave/com.raytheon.viz.hydrocommon/com.raytheon.viz.hydrocommon.ecl create mode 100644 cave/com.raytheon.viz.lightning/com.raytheon.viz.lightning.ecl create mode 100644 cave/com.raytheon.viz.localization/com.raytheon.viz.localization.ecl create mode 100644 cave/com.raytheon.viz.lpi/com.raytheon.viz.lpi.ecl create mode 100644 cave/com.raytheon.viz.mpe.ui/com.raytheon.viz.mpe.ui.ecl create mode 100644 cave/com.raytheon.viz.mpe/com.raytheon.viz.mpe.ecl create mode 100644 cave/com.raytheon.viz.pointdata/com.raytheon.viz.pointdata.ecl create mode 100644 cave/com.raytheon.viz.product.awips/com.raytheon.viz.product.awips.ecl create mode 100644 cave/com.raytheon.viz.radar.feature/com.raytheon.viz.radar.feature.ecl create mode 100644 cave/com.raytheon.viz.radar/com.raytheon.viz.radar.ecl delete mode 100644 cave/com.raytheon.viz.radar/src/com/raytheon/viz/radar/rsc/mosaic/ext/IRadarMosaicImageExtension.java rename cave/com.raytheon.viz.radar/src/com/raytheon/viz/radar/rsc/mosaic/{RadarMosaicRendererFactory.java => ext/IRadarMosaicRendererFactoryExtension.java} (63%) create mode 100644 cave/com.raytheon.viz.redbook/com.raytheon.viz.redbook.ecl create mode 100644 cave/com.raytheon.viz.satellite.feature/com.raytheon.viz.satellite.feature.ecl create mode 100644 cave/com.raytheon.viz.satellite/com.raytheon.viz.satellite.ecl create mode 100644 cave/com.raytheon.viz.shapefile/com.raytheon.viz.shapefile.ecl create mode 100644 cave/com.raytheon.viz.skewT/com.raytheon.viz.skewT.ecl create mode 100644 cave/com.raytheon.viz.spi/com.raytheon.viz.spi.ecl create mode 100644 cave/com.raytheon.viz.text.feature/com.raytheon.viz.text.feature.ecl create mode 100644 cave/com.raytheon.viz.texteditor/com.raytheon.viz.texteditor.ecl create mode 100644 cave/com.raytheon.viz.textworkstation/com.raytheon.viz.textworkstation.ecl create mode 100644 cave/com.raytheon.viz.ui.personalities.awips/com.raytheon.viz.ui.personalities.awips.ecl create mode 100644 cave/com.raytheon.viz.ui.tools.looping/com.raytheon.viz.ui.tools.looping.ecl create mode 100644 cave/com.raytheon.viz.ui.tools.map/com.raytheon.viz.ui.tools.map.ecl create mode 100644 cave/com.raytheon.viz.ui.tools.nav/com.raytheon.viz.ui.tools.nav.ecl create mode 100644 cave/com.raytheon.viz.ui/com.raytheon.viz.ui.ecl create mode 100644 cave/com.raytheon.viz.volumebrowser.feature/com.raytheon.viz.volumebrowser.feature.ecl create mode 100644 cave/com.raytheon.viz.volumebrowser/com.raytheon.viz.volumebrowser.ecl create mode 100644 cave/com.raytheon.viz.warngen.feature/com.raytheon.viz.warngen.feature.ecl create mode 100644 cave/com.raytheon.viz.warngen/com.raytheon.viz.warngen.ecl create mode 100644 cave/com.raytheon.viz.warnings/com.raytheon.viz.warnings.ecl create mode 100644 cave/com.raytheon.viz.xdat/com.raytheon.viz.xdat.ecl create mode 100644 cave/ohd.hseb.common/ohd.hseb.common.ecl create mode 100644 cave/ohd.hseb.fcstservice/ohd.hseb.fcstservice.ecl create mode 100644 cave/ohd.hseb.ihfsdb/ohd.hseb.ihfsdb.ecl create mode 100644 cave/ohd.hseb.monitor/ohd.hseb.monitor.ecl create mode 100644 cave/ohd.hseb.sshp/ohd.hseb.sshp.ecl create mode 100644 cots/com.facebook.thrift/com.facebook.thrift.ecl create mode 100644 cots/com.mchange/com.mchange.ecl create mode 100644 cots/com.opensymphony.ognl/com.opensymphony.ognl.ecl create mode 100644 cots/com.sun.jna/com.sun.jna.ecl create mode 100644 cots/com.sun.jndi.nis/com.sun.jndi.nis.ecl create mode 100644 cots/edu.oswego/edu.oswego.ecl create mode 100644 cots/javax.activation/javax.activation.ecl create mode 100644 cots/javax.jms/javax.jms.ecl create mode 100644 cots/javax.mail/javax.mail.ecl create mode 100644 cots/javax.measure/javax.measure.ecl create mode 100644 cots/javax.media.opengl.linux32/javax.media.opengl.linux32.ecl create mode 100644 cots/javax.media.opengl.linux64/javax.media.opengl.linux64.ecl create mode 100644 cots/javax.media.opengl.win32/javax.media.opengl.win32.ecl create mode 100644 cots/javax.media.opengl/javax.media.opengl.ecl create mode 100644 cots/javax.persistence/javax.persistence.ecl create mode 100644 cots/javax.vecmath/javax.vecmath.ecl create mode 100644 cots/ncsa.hdf5.linux32/ncsa.hdf5.linux32.ecl create mode 100644 cots/ncsa.hdf5.win32/ncsa.hdf5.win32.ecl create mode 100644 cots/ncsa.hdf5/ncsa.hdf5.ecl create mode 100644 cots/net.sf.cglib/net.sf.cglib.ecl create mode 100644 cots/net.sf.ehcache/net.sf.ehcache.ecl create mode 100644 cots/net.sf.swtaddons/net.sf.swtaddons.ecl create mode 100644 cots/org.apache.activemq/org.apache.activemq.ecl create mode 100644 cots/org.apache.batik/org.apache.batik.ecl create mode 100644 cots/org.apache.camel/org.apache.camel.ecl create mode 100644 cots/org.apache.commons.beanutils/org.apache.commons.beanutils.ecl create mode 100644 cots/org.apache.commons.cli/org.apache.commons.cli.ecl create mode 100644 cots/org.apache.commons.codec/org.apache.commons.codec.ecl create mode 100644 cots/org.apache.commons.collections/org.apache.commons.collections.ecl create mode 100644 cots/org.apache.commons.configuration/org.apache.commons.configuration.ecl create mode 100644 cots/org.apache.commons.digester/org.apache.commons.digester.ecl create mode 100644 cots/org.apache.commons.lang/org.apache.commons.lang.ecl create mode 100644 cots/org.apache.commons.logging/org.apache.commons.logging.ecl create mode 100644 cots/org.apache.commons.management/org.apache.commons.management.ecl create mode 100644 cots/org.apache.commons.pool/org.apache.commons.pool.ecl create mode 100644 cots/org.apache.commons.validator/org.apache.commons.validator.ecl create mode 100644 cots/org.apache.http/org.apache.http.ecl create mode 100644 cots/org.apache.log4j/org.apache.log4j.ecl create mode 100644 cots/org.apache.mina/org.apache.mina.ecl create mode 100644 cots/org.apache.qpid/org.apache.qpid.ecl create mode 100644 cots/org.apache.tomcat.nativ/org.apache.tomcat.nativ.ecl create mode 100644 cots/org.apache.tools.bzip2/org.apache.tools.bzip2.ecl create mode 100644 cots/org.apache.velocity/org.apache.velocity.ecl create mode 100644 cots/org.dom4j/org.dom4j.ecl create mode 100644 cots/org.eclipse.jetty/org.eclipse.jetty.ecl create mode 100644 cots/org.geotools/org.geotools.ecl create mode 100644 cots/org.hibernate/org.hibernate.ecl create mode 100644 cots/org.jboss.cache/org.jboss.cache.ecl create mode 100644 cots/org.jep.linux32/org.jep.linux32.ecl create mode 100644 cots/org.jep.linux64/org.jep.linux64.ecl create mode 100644 cots/org.jep.win32/org.jep.win32.ecl create mode 100644 cots/org.jep/org.jep.ecl create mode 100644 cots/org.jivesoftware.smack/org.jivesoftware.smack.ecl create mode 100644 cots/org.junit/org.junit.ecl create mode 100644 cots/org.objectweb/org.objectweb.ecl create mode 100644 cots/org.postgres/org.postgres.ecl create mode 100644 cots/org.slf4j/org.slf4j.ecl create mode 100644 cots/org.springframework.dm/org.springframework.dm.ecl create mode 100644 cots/org.springframework/org.springframework.ecl create mode 100644 cots/ucar.nc2/ucar.nc2.ecl create mode 100644 cots/uk.ltd.getahead/uk.ltd.getahead.ecl create mode 100644 deltaScripts/deltaScripts.ecl create mode 100644 edexOsgi/build.edex/build.edex.ecl create mode 100644 edexOsgi/com.raytheon.edex.adaptersrv/com.raytheon.edex.adaptersrv.ecl create mode 100644 edexOsgi/com.raytheon.edex.autobldsrv/com.raytheon.edex.autobldsrv.ecl create mode 100644 edexOsgi/com.raytheon.edex.collaboration/com.raytheon.edex.collaboration.ecl create mode 100644 edexOsgi/com.raytheon.edex.common/com.raytheon.edex.common.ecl create mode 100644 edexOsgi/com.raytheon.edex.feature.uframe/com.raytheon.edex.feature.uframe.ecl create mode 100644 edexOsgi/com.raytheon.edex.ingestsrv/com.raytheon.edex.ingestsrv.ecl create mode 100644 edexOsgi/com.raytheon.edex.kml/com.raytheon.edex.kml.ecl create mode 100644 edexOsgi/com.raytheon.edex.meteolib/com.raytheon.edex.meteolib.ecl create mode 100644 edexOsgi/com.raytheon.edex.monitorsrv/com.raytheon.edex.monitorsrv.ecl create mode 100644 edexOsgi/com.raytheon.edex.msgutility/com.raytheon.edex.msgutility.ecl create mode 100644 edexOsgi/com.raytheon.edex.notifysrv/com.raytheon.edex.notifysrv.ecl create mode 100644 edexOsgi/com.raytheon.edex.plugin.airep/com.raytheon.edex.plugin.airep.ecl create mode 100644 edexOsgi/com.raytheon.edex.plugin.binlightning/com.raytheon.edex.plugin.binlightning.ecl create mode 100644 edexOsgi/com.raytheon.edex.plugin.bufrmos/com.raytheon.edex.plugin.bufrmos.ecl create mode 100644 edexOsgi/com.raytheon.edex.plugin.bufrua/com.raytheon.edex.plugin.bufrua.ecl create mode 100644 edexOsgi/com.raytheon.edex.plugin.ccfp/com.raytheon.edex.plugin.ccfp.ecl create mode 100644 edexOsgi/com.raytheon.edex.plugin.gfe/com.raytheon.edex.plugin.gfe.ecl create mode 100644 edexOsgi/com.raytheon.edex.plugin.goessounding/com.raytheon.edex.plugin.goessounding.ecl create mode 100644 edexOsgi/com.raytheon.edex.plugin.grib/com.raytheon.edex.plugin.grib.ecl create mode 100644 edexOsgi/com.raytheon.edex.plugin.ldad/com.raytheon.edex.plugin.ldad.ecl create mode 100644 edexOsgi/com.raytheon.edex.plugin.ldadhydro/com.raytheon.edex.plugin.ldadhydro.ecl create mode 100644 edexOsgi/com.raytheon.edex.plugin.ldadmanual/com.raytheon.edex.plugin.ldadmanual.ecl create mode 100644 edexOsgi/com.raytheon.edex.plugin.ldadprofiler/com.raytheon.edex.plugin.ldadprofiler.ecl create mode 100644 edexOsgi/com.raytheon.edex.plugin.modelsounding/com.raytheon.edex.plugin.modelsounding.ecl create mode 100644 edexOsgi/com.raytheon.edex.plugin.obs/com.raytheon.edex.plugin.obs.ecl create mode 100644 edexOsgi/com.raytheon.edex.plugin.pirep/com.raytheon.edex.plugin.pirep.ecl create mode 100644 edexOsgi/com.raytheon.edex.plugin.poessounding/com.raytheon.edex.plugin.poessounding.ecl create mode 100644 edexOsgi/com.raytheon.edex.plugin.profiler/com.raytheon.edex.plugin.profiler.ecl create mode 100644 edexOsgi/com.raytheon.edex.plugin.radar/com.raytheon.edex.plugin.radar.ecl create mode 100644 edexOsgi/com.raytheon.edex.plugin.recco/com.raytheon.edex.plugin.recco.ecl create mode 100644 edexOsgi/com.raytheon.edex.plugin.redbook/com.raytheon.edex.plugin.redbook.ecl create mode 100644 edexOsgi/com.raytheon.edex.plugin.satellite/com.raytheon.edex.plugin.satellite.ecl create mode 100644 edexOsgi/com.raytheon.edex.plugin.sfcobs/com.raytheon.edex.plugin.sfcobs.ecl create mode 100644 edexOsgi/com.raytheon.edex.plugin.shef/com.raytheon.edex.plugin.shef.ecl create mode 100644 edexOsgi/com.raytheon.edex.plugin.taf/com.raytheon.edex.plugin.taf.ecl create mode 100644 edexOsgi/com.raytheon.edex.plugin.text/com.raytheon.edex.plugin.text.ecl create mode 100644 edexOsgi/com.raytheon.edex.plugin.textlightning/com.raytheon.edex.plugin.textlightning.ecl create mode 100644 edexOsgi/com.raytheon.edex.plugin.warning/com.raytheon.edex.plugin.warning.ecl create mode 100644 edexOsgi/com.raytheon.edex.product.uframe/com.raytheon.edex.product.uframe.ecl create mode 100644 edexOsgi/com.raytheon.edex.productsrv/com.raytheon.edex.productsrv.ecl create mode 100644 edexOsgi/com.raytheon.edex.rpgenvdata/com.raytheon.edex.rpgenvdata.ecl create mode 100644 edexOsgi/com.raytheon.edex.textdb/com.raytheon.edex.textdb.ecl create mode 100644 edexOsgi/com.raytheon.edex.uengine/com.raytheon.edex.uengine.ecl create mode 100644 edexOsgi/com.raytheon.edex.utilitysrv/com.raytheon.edex.utilitysrv.ecl create mode 100644 edexOsgi/com.raytheon.messaging.mhs/com.raytheon.messaging.mhs.ecl create mode 100644 edexOsgi/com.raytheon.uf.common.activetable/com.raytheon.uf.common.activetable.ecl create mode 100644 edexOsgi/com.raytheon.uf.common.alertmonitor/com.raytheon.uf.common.alertmonitor.ecl create mode 100644 edexOsgi/com.raytheon.uf.common.alertviz/com.raytheon.uf.common.alertviz.ecl create mode 100644 edexOsgi/com.raytheon.uf.common.auth/com.raytheon.uf.common.auth.ecl create mode 100644 edexOsgi/com.raytheon.uf.common.awipstools/com.raytheon.uf.common.awipstools.ecl create mode 100644 edexOsgi/com.raytheon.uf.common.cache/com.raytheon.uf.common.cache.ecl create mode 100644 edexOsgi/com.raytheon.uf.common.climo/com.raytheon.uf.common.climo.ecl create mode 100644 edexOsgi/com.raytheon.uf.common.colormap/com.raytheon.uf.common.colormap.ecl create mode 100644 edexOsgi/com.raytheon.uf.common.comm/com.raytheon.uf.common.comm.ecl create mode 100644 edexOsgi/com.raytheon.uf.common.dataplugin.acars/com.raytheon.uf.common.dataplugin.acars.ecl create mode 100644 edexOsgi/com.raytheon.uf.common.dataplugin.acarssounding/com.raytheon.uf.common.dataplugin.acarssounding.ecl create mode 100644 edexOsgi/com.raytheon.uf.common.dataplugin.airep/com.raytheon.uf.common.dataplugin.airep.ecl create mode 100644 edexOsgi/com.raytheon.uf.common.dataplugin.binlightning/com.raytheon.uf.common.dataplugin.binlightning.ecl create mode 100644 edexOsgi/com.raytheon.uf.common.dataplugin.bufrascat/com.raytheon.uf.common.dataplugin.bufrascat.ecl create mode 100644 edexOsgi/com.raytheon.uf.common.dataplugin.bufrhdw/com.raytheon.uf.common.dataplugin.bufrhdw.ecl create mode 100644 edexOsgi/com.raytheon.uf.common.dataplugin.bufrmthdw/com.raytheon.uf.common.dataplugin.bufrmthdw.ecl create mode 100644 edexOsgi/com.raytheon.uf.common.dataplugin.bufrncwf/com.raytheon.uf.common.dataplugin.bufrncwf.ecl create mode 100644 edexOsgi/com.raytheon.uf.common.dataplugin.bufrquikscat/com.raytheon.uf.common.dataplugin.bufrquikscat.ecl create mode 100644 edexOsgi/com.raytheon.uf.common.dataplugin.bufrsigwx/com.raytheon.uf.common.dataplugin.bufrsigwx.ecl create mode 100644 edexOsgi/com.raytheon.uf.common.dataplugin.bufrssmi/com.raytheon.uf.common.dataplugin.bufrssmi.ecl create mode 100644 edexOsgi/com.raytheon.uf.common.dataplugin.bufrua/com.raytheon.uf.common.dataplugin.bufrua.ecl create mode 100644 edexOsgi/com.raytheon.uf.common.dataplugin.cwa/com.raytheon.uf.common.dataplugin.cwa.ecl create mode 100644 edexOsgi/com.raytheon.uf.common.dataplugin.cwat/com.raytheon.uf.common.dataplugin.cwat.ecl create mode 100644 edexOsgi/com.raytheon.uf.common.dataplugin.ffmp/com.raytheon.uf.common.dataplugin.ffmp.ecl create mode 100644 edexOsgi/com.raytheon.uf.common.dataplugin.fog/com.raytheon.uf.common.dataplugin.fog.ecl create mode 100644 edexOsgi/com.raytheon.uf.common.dataplugin.fssobs/com.raytheon.uf.common.dataplugin.fssobs.ecl create mode 100644 edexOsgi/com.raytheon.uf.common.dataplugin.gfe/com.raytheon.uf.common.dataplugin.gfe.ecl create mode 100644 edexOsgi/com.raytheon.uf.common.dataplugin.goessounding/com.raytheon.uf.common.dataplugin.goessounding.ecl create mode 100644 edexOsgi/com.raytheon.uf.common.dataplugin.grib/com.raytheon.uf.common.dataplugin.grib.ecl create mode 100644 edexOsgi/com.raytheon.uf.common.dataplugin.ldadhydro/com.raytheon.uf.common.dataplugin.ldadhydro.ecl create mode 100644 edexOsgi/com.raytheon.uf.common.dataplugin.ldadmesonet/com.raytheon.uf.common.dataplugin.ldadmesonet.ecl create mode 100644 edexOsgi/com.raytheon.uf.common.dataplugin.level/com.raytheon.uf.common.dataplugin.level.ecl create mode 100644 edexOsgi/com.raytheon.uf.common.dataplugin.lsr/com.raytheon.uf.common.dataplugin.lsr.ecl create mode 100644 edexOsgi/com.raytheon.uf.common.dataplugin.npp.viirs/com.raytheon.uf.common.dataplugin.npp.viirs.ecl create mode 100644 edexOsgi/com.raytheon.uf.common.dataplugin.obs/com.raytheon.uf.common.dataplugin.obs.ecl create mode 100644 edexOsgi/com.raytheon.uf.common.dataplugin.pirep/com.raytheon.uf.common.dataplugin.pirep.ecl create mode 100644 edexOsgi/com.raytheon.uf.common.dataplugin.poessounding/com.raytheon.uf.common.dataplugin.poessounding.ecl create mode 100644 edexOsgi/com.raytheon.uf.common.dataplugin.preciprate/com.raytheon.uf.common.dataplugin.preciprate.ecl create mode 100644 edexOsgi/com.raytheon.uf.common.dataplugin.profiler/com.raytheon.uf.common.dataplugin.profiler.ecl create mode 100644 edexOsgi/com.raytheon.uf.common.dataplugin.qc/com.raytheon.uf.common.dataplugin.qc.ecl create mode 100644 edexOsgi/com.raytheon.uf.common.dataplugin.qpf/com.raytheon.uf.common.dataplugin.qpf.ecl create mode 100644 edexOsgi/com.raytheon.uf.common.dataplugin.radar/com.raytheon.uf.common.dataplugin.radar.ecl create mode 100644 edexOsgi/com.raytheon.uf.common.dataplugin.satellite/com.raytheon.uf.common.dataplugin.satellite.ecl create mode 100644 edexOsgi/com.raytheon.uf.common.dataplugin.scan/com.raytheon.uf.common.dataplugin.scan.ecl create mode 100644 edexOsgi/com.raytheon.uf.common.dataplugin.sfcobs/com.raytheon.uf.common.dataplugin.sfcobs.ecl create mode 100644 edexOsgi/com.raytheon.uf.common.dataplugin.shef/com.raytheon.uf.common.dataplugin.shef.ecl create mode 100644 edexOsgi/com.raytheon.uf.common.dataplugin.svrwx/com.raytheon.uf.common.dataplugin.svrwx.ecl create mode 100644 edexOsgi/com.raytheon.uf.common.dataplugin.tcg/com.raytheon.uf.common.dataplugin.tcg.ecl create mode 100644 edexOsgi/com.raytheon.uf.common.dataplugin.tcs/com.raytheon.uf.common.dataplugin.tcs.ecl create mode 100644 edexOsgi/com.raytheon.uf.common.dataplugin.text/com.raytheon.uf.common.dataplugin.text.ecl create mode 100644 edexOsgi/com.raytheon.uf.common.dataplugin.vaa/com.raytheon.uf.common.dataplugin.vaa.ecl create mode 100644 edexOsgi/com.raytheon.uf.common.dataplugin.vil/com.raytheon.uf.common.dataplugin.vil.ecl create mode 100644 edexOsgi/com.raytheon.uf.common.dataplugin.warning/com.raytheon.uf.common.dataplugin.warning.ecl create mode 100644 edexOsgi/com.raytheon.uf.common.dataplugin/com.raytheon.uf.common.dataplugin.ecl create mode 100644 edexOsgi/com.raytheon.uf.common.dataquery/com.raytheon.uf.common.dataquery.ecl create mode 100644 edexOsgi/com.raytheon.uf.common.datastorage.hdf5/com.raytheon.uf.common.datastorage.hdf5.ecl create mode 100644 edexOsgi/com.raytheon.uf.common.datastorage.remote/com.raytheon.uf.common.datastorage.remote.ecl create mode 100644 edexOsgi/com.raytheon.uf.common.datastorage/com.raytheon.uf.common.datastorage.ecl create mode 100644 edexOsgi/com.raytheon.uf.common.derivparam/com.raytheon.uf.common.derivparam.ecl create mode 100644 edexOsgi/com.raytheon.uf.common.dissemination/com.raytheon.uf.common.dissemination.ecl create mode 100644 edexOsgi/com.raytheon.uf.common.geospatial/com.raytheon.uf.common.geospatial.ecl create mode 100644 edexOsgi/com.raytheon.uf.common.hlstopo/com.raytheon.uf.common.hlstopo.ecl create mode 100644 edexOsgi/com.raytheon.uf.common.hydro/com.raytheon.uf.common.hydro.ecl create mode 100644 edexOsgi/com.raytheon.uf.common.jms/com.raytheon.uf.common.jms.ecl create mode 100644 edexOsgi/com.raytheon.uf.common.localization/com.raytheon.uf.common.localization.ecl create mode 100644 edexOsgi/com.raytheon.uf.common.management/com.raytheon.uf.common.management.ecl create mode 100644 edexOsgi/com.raytheon.uf.common.menus/com.raytheon.uf.common.menus.ecl create mode 100644 edexOsgi/com.raytheon.uf.common.message/com.raytheon.uf.common.message.ecl create mode 100644 edexOsgi/com.raytheon.uf.common.monitor.cpg/com.raytheon.uf.common.monitor.cpg.ecl create mode 100644 edexOsgi/com.raytheon.uf.common.monitor/com.raytheon.uf.common.monitor.ecl create mode 100644 edexOsgi/com.raytheon.uf.common.mpe/com.raytheon.uf.common.mpe.ecl create mode 100644 edexOsgi/com.raytheon.uf.common.ohd/com.raytheon.uf.common.ohd.ecl create mode 100644 edexOsgi/com.raytheon.uf.common.plugin.nwsauth/com.raytheon.uf.common.plugin.nwsauth.ecl create mode 100644 edexOsgi/com.raytheon.uf.common.pointdata/com.raytheon.uf.common.pointdata.ecl create mode 100644 edexOsgi/com.raytheon.uf.common.pypies/com.raytheon.uf.common.pypies.ecl create mode 100644 edexOsgi/com.raytheon.uf.common.python/com.raytheon.uf.common.python.ecl create mode 100644 edexOsgi/com.raytheon.uf.common.qpf/com.raytheon.uf.common.qpf.ecl create mode 100644 edexOsgi/com.raytheon.uf.common.serialization.comm/com.raytheon.uf.common.serialization.comm.ecl create mode 100644 edexOsgi/com.raytheon.uf.common.serialization/com.raytheon.uf.common.serialization.ecl create mode 100644 edexOsgi/com.raytheon.uf.common.site/com.raytheon.uf.common.site.ecl create mode 100644 edexOsgi/com.raytheon.uf.common.sounding/com.raytheon.uf.common.sounding.ecl create mode 100644 edexOsgi/com.raytheon.uf.common.status/com.raytheon.uf.common.status.ecl create mode 100644 edexOsgi/com.raytheon.uf.common.time/com.raytheon.uf.common.time.ecl create mode 100644 edexOsgi/com.raytheon.uf.common.topo/com.raytheon.uf.common.topo.ecl create mode 100644 edexOsgi/com.raytheon.uf.common.util/com.raytheon.uf.common.util.ecl create mode 100644 edexOsgi/com.raytheon.uf.edex.activetable/com.raytheon.uf.edex.activetable.ecl create mode 100644 edexOsgi/com.raytheon.uf.edex.alertviz/com.raytheon.uf.edex.alertviz.ecl create mode 100644 edexOsgi/com.raytheon.uf.edex.auth/com.raytheon.uf.edex.auth.ecl create mode 100644 edexOsgi/com.raytheon.uf.edex.awipstools/com.raytheon.uf.edex.awipstools.ecl create mode 100644 edexOsgi/com.raytheon.uf.edex.bufrtools/com.raytheon.uf.edex.bufrtools.ecl create mode 100644 edexOsgi/com.raytheon.uf.edex.core/com.raytheon.uf.edex.core.ecl create mode 100644 edexOsgi/com.raytheon.uf.edex.cpgsrv/com.raytheon.uf.edex.cpgsrv.ecl create mode 100644 edexOsgi/com.raytheon.uf.edex.dat.utils/com.raytheon.uf.edex.dat.utils.ecl create mode 100644 edexOsgi/com.raytheon.uf.edex.database/com.raytheon.uf.edex.database.ecl create mode 100644 edexOsgi/com.raytheon.uf.edex.decodertools/com.raytheon.uf.edex.decodertools.ecl create mode 100644 edexOsgi/com.raytheon.uf.edex.dissemination/com.raytheon.uf.edex.dissemination.ecl create mode 100644 edexOsgi/com.raytheon.uf.edex.distribution/com.raytheon.uf.edex.distribution.ecl create mode 100644 edexOsgi/com.raytheon.uf.edex.esb.camel.launcher/com.raytheon.uf.edex.esb.camel.launcher.ecl create mode 100644 edexOsgi/com.raytheon.uf.edex.esb.camel/com.raytheon.uf.edex.esb.camel.ecl create mode 100644 edexOsgi/com.raytheon.uf.edex.log/com.raytheon.uf.edex.log.ecl create mode 100644 edexOsgi/com.raytheon.uf.edex.maintenance/com.raytheon.uf.edex.maintenance.ecl create mode 100644 edexOsgi/com.raytheon.uf.edex.management/com.raytheon.uf.edex.management.ecl create mode 100644 edexOsgi/com.raytheon.uf.edex.metartohmdbsrv/com.raytheon.uf.edex.metartohmdbsrv.ecl create mode 100644 edexOsgi/com.raytheon.uf.edex.ohd/com.raytheon.uf.edex.ohd.ecl create mode 100644 edexOsgi/com.raytheon.uf.edex.ohd/src/com/raytheon/uf/edex/ohd/pproc/HPEDhrMessage.java create mode 100644 edexOsgi/com.raytheon.uf.edex.plugin.acars/com.raytheon.uf.edex.plugin.acars.ecl create mode 100644 edexOsgi/com.raytheon.uf.edex.plugin.acarssounding/com.raytheon.uf.edex.plugin.acarssounding.ecl create mode 100644 edexOsgi/com.raytheon.uf.edex.plugin.bufrascat/com.raytheon.uf.edex.plugin.bufrascat.ecl create mode 100644 edexOsgi/com.raytheon.uf.edex.plugin.bufrhdw/com.raytheon.uf.edex.plugin.bufrhdw.ecl create mode 100644 edexOsgi/com.raytheon.uf.edex.plugin.bufrmthdw/com.raytheon.uf.edex.plugin.bufrmthdw.ecl create mode 100644 edexOsgi/com.raytheon.uf.edex.plugin.bufrncwf/com.raytheon.uf.edex.plugin.bufrncwf.ecl create mode 100644 edexOsgi/com.raytheon.uf.edex.plugin.bufrquikscat/com.raytheon.uf.edex.plugin.bufrquikscat.ecl create mode 100644 edexOsgi/com.raytheon.uf.edex.plugin.bufrsigwx/com.raytheon.uf.edex.plugin.bufrsigwx.ecl create mode 100644 edexOsgi/com.raytheon.uf.edex.plugin.bufrssmi/com.raytheon.uf.edex.plugin.bufrssmi.ecl create mode 100644 edexOsgi/com.raytheon.uf.edex.plugin.cwa/com.raytheon.uf.edex.plugin.cwa.ecl create mode 100644 edexOsgi/com.raytheon.uf.edex.plugin.cwat/com.raytheon.uf.edex.plugin.cwat.ecl create mode 100644 edexOsgi/com.raytheon.uf.edex.plugin.ffmp/com.raytheon.uf.edex.plugin.ffmp.ecl create mode 100644 edexOsgi/com.raytheon.uf.edex.plugin.fog/com.raytheon.uf.edex.plugin.fog.ecl create mode 100644 edexOsgi/com.raytheon.uf.edex.plugin.fssobs/com.raytheon.uf.edex.plugin.fssobs.ecl create mode 100644 edexOsgi/com.raytheon.uf.edex.plugin.ldadmesonet/com.raytheon.uf.edex.plugin.ldadmesonet.ecl create mode 100644 edexOsgi/com.raytheon.uf.edex.plugin.level.handler/com.raytheon.uf.edex.plugin.level.handler.ecl create mode 100644 edexOsgi/com.raytheon.uf.edex.plugin.level/com.raytheon.uf.edex.plugin.level.ecl create mode 100644 edexOsgi/com.raytheon.uf.edex.plugin.loctables/com.raytheon.uf.edex.plugin.loctables.ecl create mode 100644 edexOsgi/com.raytheon.uf.edex.plugin.lsr/com.raytheon.uf.edex.plugin.lsr.ecl create mode 100644 edexOsgi/com.raytheon.uf.edex.plugin.manualIngest/com.raytheon.uf.edex.plugin.manualIngest.ecl create mode 100644 edexOsgi/com.raytheon.uf.edex.plugin.mesowest/com.raytheon.uf.edex.plugin.mesowest.ecl create mode 100644 edexOsgi/com.raytheon.uf.edex.plugin.npp.viirs/com.raytheon.uf.edex.plugin.npp.viirs.ecl create mode 100644 edexOsgi/com.raytheon.uf.edex.plugin.nwsauth/com.raytheon.uf.edex.plugin.nwsauth.ecl create mode 100644 edexOsgi/com.raytheon.uf.edex.plugin.preciprate/com.raytheon.uf.edex.plugin.preciprate.ecl create mode 100644 edexOsgi/com.raytheon.uf.edex.plugin.qc/com.raytheon.uf.edex.plugin.qc.ecl create mode 100644 edexOsgi/com.raytheon.uf.edex.plugin.qpf/com.raytheon.uf.edex.plugin.qpf.ecl create mode 100644 edexOsgi/com.raytheon.uf.edex.plugin.satellite.mcidas/com.raytheon.uf.edex.plugin.satellite.mcidas.ecl create mode 100644 edexOsgi/com.raytheon.uf.edex.plugin.scan.common/com.raytheon.uf.edex.plugin.scan.common.ecl create mode 100644 edexOsgi/com.raytheon.uf.edex.plugin.scan/com.raytheon.uf.edex.plugin.scan.ecl create mode 100644 edexOsgi/com.raytheon.uf.edex.plugin.svrwx/com.raytheon.uf.edex.plugin.svrwx.ecl create mode 100644 edexOsgi/com.raytheon.uf.edex.plugin.tcg/com.raytheon.uf.edex.plugin.tcg.ecl create mode 100644 edexOsgi/com.raytheon.uf.edex.plugin.tcs/com.raytheon.uf.edex.plugin.tcs.ecl create mode 100644 edexOsgi/com.raytheon.uf.edex.plugin.vaa/com.raytheon.uf.edex.plugin.vaa.ecl create mode 100644 edexOsgi/com.raytheon.uf.edex.plugin.vil/com.raytheon.uf.edex.plugin.vil.ecl create mode 100644 edexOsgi/com.raytheon.uf.edex.pointdata/com.raytheon.uf.edex.pointdata.ecl create mode 100644 edexOsgi/com.raytheon.uf.edex.purgesrv/com.raytheon.uf.edex.purgesrv.ecl create mode 100644 edexOsgi/com.raytheon.uf.edex.python.decoder/com.raytheon.uf.edex.python.decoder.ecl create mode 100644 edexOsgi/com.raytheon.uf.edex.site/com.raytheon.uf.edex.site.ecl create mode 100644 edexOsgi/com.raytheon.uf.edex.textdbsrv/com.raytheon.uf.edex.textdbsrv.ecl create mode 100644 edexOsgi/com.raytheon.uf.edex.topo/com.raytheon.uf.edex.topo.ecl create mode 100644 edexOsgi/com.raytheon.uf.tools.cli/com.raytheon.uf.tools.cli.ecl create mode 100644 edexOsgi/com.raytheon.uf.tools.gfesuite.servicebackup/com.raytheon.uf.tools.gfesuite.servicebackup.ecl create mode 100644 edexOsgi/com.raytheon.uf.tools.gfesuite/com.raytheon.uf.tools.gfesuite.ecl create mode 100644 edexOsgi/meteolib.jni.linux32/meteolib.jni.linux32.ecl create mode 100644 edexOsgi/meteolib.jni.linux64/meteolib.jni.linux64.ecl create mode 100644 edexOsgi/meteolib.jni.win32/meteolib.jni.win32.ecl create mode 100644 edexOsgi/meteolib.jni/meteolib.jni.ecl create mode 100644 ldm/ldm.ecl create mode 100644 localApps/localApps.ecl create mode 100644 localization/localization.OAX/localization.OAX.ecl create mode 100644 localization/localization.TBW/localization.TBW.ecl create mode 100644 nativeLib/build.native/build.native.ecl create mode 100644 nativeLib/build.ohd/build.ohd.ecl create mode 100644 nativeLib/com.raytheon.uf.nativelib.cimport/com.raytheon.uf.nativelib.cimport.ecl create mode 100644 nativeLib/com.raytheon.uf.nativelib.feature/com.raytheon.uf.nativelib.feature.ecl create mode 100644 nativeLib/dist.native/dist.native.ecl create mode 100644 nativeLib/docs.native/docs.native.ecl create mode 100644 nativeLib/docs.ohd/docs.ohd.ecl create mode 100644 nativeLib/edexBridge/edexBridge.ecl create mode 100644 nativeLib/edex_com/edex_com.ecl create mode 100644 nativeLib/edex_notify/edex_notify.ecl create mode 100644 nativeLib/edex_pdc/edex_pdc.ecl create mode 100644 nativeLib/gridslice/gridslice.ecl create mode 100644 nativeLib/ncep_grib2module/ncep_grib2module.ecl create mode 100644 nativeLib/ohd.bias_trans/ohd.bias_trans.ecl create mode 100644 nativeLib/ohd.common/ohd.common.ecl create mode 100644 nativeLib/ohd.damcrest/ohd.damcrest.ecl create mode 100644 nativeLib/ohd.damcrestdb/ohd.damcrestdb.ecl create mode 100644 nativeLib/ohd.db/ohd.db.ecl create mode 100644 nativeLib/ohd.dimensions_file_uploader/ohd.dimensions_file_uploader.ecl create mode 100644 nativeLib/ohd.fcstservice/ohd.fcstservice.ecl create mode 100644 nativeLib/ohd.ihfsdb/ohd.ihfsdb.ecl create mode 100644 nativeLib/ohd.lib/ohd.lib.ecl create mode 100644 nativeLib/ohd.map/ohd.map.ecl create mode 100644 nativeLib/ohd.misc_dialogs/ohd.misc_dialogs.ecl create mode 100644 nativeLib/ohd.mpe/ohd.mpe.ecl create mode 100644 nativeLib/ohd.pdc_pp/ohd.pdc_pp.ecl create mode 100644 nativeLib/ohd.prism/ohd.prism.ecl create mode 100644 nativeLib/ohd.rax_apps/ohd.rax_apps.ecl create mode 100644 nativeLib/ohd.raxdb/ohd.raxdb.ecl create mode 100644 nativeLib/ohd.rivermonitor/ohd.rivermonitor.ecl create mode 100644 nativeLib/ohd.sshp/ohd.sshp.ecl create mode 100644 nativeLib/ohd.swttable/ohd.swttable.ecl create mode 100644 nativeLib/ohd.sys_monitor/ohd.sys_monitor.ecl create mode 100644 nativeLib/ohd.tsl/ohd.tsl.ecl create mode 100644 nativeLib/ohd.var/ohd.var.ecl create mode 100644 nativeLib/org.apache.qpid/org.apache.qpid.ecl create mode 100644 nativeLib/org.apache.thrift/org.apache.thrift.ecl create mode 100644 nativeLib/rary.cots.ant-contrib/rary.cots.ant-contrib.ecl create mode 100644 nativeLib/rary.cots.gfortran/rary.cots.gfortran.ecl create mode 100644 nativeLib/rary.cots.jasper/rary.cots.jasper.ecl create mode 100644 nativeLib/rary.cots.java/rary.cots.java.ecl create mode 100644 nativeLib/rary.cots.jepp/rary.cots.jepp.ecl create mode 100644 nativeLib/rary.cots.jna/rary.cots.jna.ecl create mode 100644 nativeLib/rary.cots.postgresql/rary.cots.postgresql.ecl create mode 100644 nativeLib/rary.empty.motif/rary.empty.motif.ecl create mode 100644 nativeLib/rary.empty/rary.empty.ecl create mode 100644 nativeLib/rary.meteorological/rary.meteorological.ecl create mode 100644 nativeLib/rary.ohd.calb/rary.ohd.calb.ecl create mode 100644 nativeLib/rary.ohd.ffg/rary.ohd.ffg.ecl create mode 100644 nativeLib/rary.ohd.filesystem/rary.ohd.filesystem.ecl create mode 100644 nativeLib/rary.ohd.ifp/rary.ohd.ifp.ecl create mode 100644 nativeLib/rary.ohd.ofs.db/rary.ohd.ofs.db.ecl create mode 100644 nativeLib/rary.ohd.ofs.shared/rary.ohd.ofs.shared.ecl create mode 100644 nativeLib/rary.ohd.ofs.shefpars.driv/rary.ohd.ofs.shefpars.driv.ecl create mode 100644 nativeLib/rary.ohd.ofs/rary.ohd.ofs.ecl create mode 100644 nativeLib/rary.ohd.pproc.gribit/rary.ohd.pproc.gribit.ecl create mode 100644 nativeLib/rary.ohd.pproc.util/rary.ohd.pproc.util.ecl create mode 100644 nativeLib/rary.ohd.pproc/rary.ohd.pproc.ecl create mode 100644 nativeLib/rary.ohd.util/rary.ohd.util.ecl create mode 100644 nativeLib/rary.ohd.whfs/rary.ohd.whfs.ecl create mode 100644 nativeLib/rary.wfoapi.MonitorTestMode/rary.wfoapi.MonitorTestMode.ecl create mode 100644 nativeLib/rary.wfoapi.common/rary.wfoapi.common.ecl create mode 100644 nativeLib/rary.wfoapi.consoleUser/rary.wfoapi.consoleUser.ecl create mode 100644 nativeLib/rary.wfoapi.getTestMode/rary.wfoapi.getTestMode.ecl create mode 100644 nativeLib/rary.wfoapi.showBanner/rary.wfoapi.showBanner.ecl create mode 100644 nativeLib/rary.wfoapi.temp/rary.wfoapi.temp.ecl create mode 100644 nativeLib/rary.wfoapi.test_WorkstationTestMode/rary.wfoapi.test_WorkstationTestMode.ecl create mode 100644 nativeLib/rary.wfoapi.tmb/rary.wfoapi.tmb.ecl create mode 100644 nativeLib/rary.wfoapi.tmbRemoteCheck/rary.wfoapi.tmbRemoteCheck.ecl create mode 100644 nativeLib/rary.wfoapi.tmb_exit/rary.wfoapi.tmb_exit.ecl create mode 100644 nativeLib/rary.wfoapi.tmcp/rary.wfoapi.tmcp.ecl create mode 100644 nativeLib/runy.cots.flex/runy.cots.flex.ecl create mode 100644 nativeLib/runy.runso/runy.runso.ecl create mode 100644 nativeLib/tool.cdbgen/tool.cdbgen.ecl create mode 100644 nativeLib/tool.gluegen/tool.gluegen.ecl create mode 100644 ncep/com.raytheon.uf.viz.ncep.core.feature/com.raytheon.uf.viz.ncep.core.feature.ecl create mode 100644 ncep/com.raytheon.uf.viz.ncep.nsharp.feature/com.raytheon.uf.viz.ncep.nsharp.feature.ecl create mode 100644 ncep/com.raytheon.uf.viz.ncep.perspective.feature/com.raytheon.uf.viz.ncep.perspective.feature.ecl create mode 100644 ncep/edu.wisc.ssec.mcidas/edu.wisc.ssec.mcidas.ecl create mode 100644 ncep/gov.noaa.nws.ncep.common.dataplugin.airmet/gov.noaa.nws.ncep.common.dataplugin.airmet.ecl create mode 100644 ncep/gov.noaa.nws.ncep.common.dataplugin.atcf/gov.noaa.nws.ncep.common.dataplugin.atcf.ecl create mode 100644 ncep/gov.noaa.nws.ncep.common.dataplugin.aww/gov.noaa.nws.ncep.common.dataplugin.aww.ecl create mode 100644 ncep/gov.noaa.nws.ncep.common.dataplugin.convsigmet/gov.noaa.nws.ncep.common.dataplugin.convsigmet.ecl create mode 100644 ncep/gov.noaa.nws.ncep.common.dataplugin.ffg/gov.noaa.nws.ncep.common.dataplugin.ffg.ecl create mode 100644 ncep/gov.noaa.nws.ncep.common.dataplugin.idft/gov.noaa.nws.ncep.common.dataplugin.idft.ecl create mode 100644 ncep/gov.noaa.nws.ncep.common.dataplugin.intlsigmet/gov.noaa.nws.ncep.common.dataplugin.intlsigmet.ecl create mode 100644 ncep/gov.noaa.nws.ncep.common.dataplugin.mcidas/gov.noaa.nws.ncep.common.dataplugin.mcidas.ecl create mode 100644 ncep/gov.noaa.nws.ncep.common.dataplugin.ncairep/gov.noaa.nws.ncep.common.dataplugin.ncairep.ecl create mode 100644 ncep/gov.noaa.nws.ncep.common.dataplugin.ncccfp/gov.noaa.nws.ncep.common.dataplugin.ncccfp.ecl create mode 100644 ncep/gov.noaa.nws.ncep.common.dataplugin.ncgrib/gov.noaa.nws.ncep.common.dataplugin.ncgrib.ecl create mode 100644 ncep/gov.noaa.nws.ncep.common.dataplugin.ncpafm/gov.noaa.nws.ncep.common.dataplugin.ncpafm.ecl create mode 100644 ncep/gov.noaa.nws.ncep.common.dataplugin.ncpirep/gov.noaa.nws.ncep.common.dataplugin.ncpirep.ecl create mode 100644 ncep/gov.noaa.nws.ncep.common.dataplugin.ncscat/gov.noaa.nws.ncep.common.dataplugin.ncscat.ecl create mode 100644 ncep/gov.noaa.nws.ncep.common.dataplugin.ncscd/gov.noaa.nws.ncep.common.dataplugin.ncscd.ecl create mode 100644 ncep/gov.noaa.nws.ncep.common.dataplugin.nctaf/gov.noaa.nws.ncep.common.dataplugin.nctaf.ecl create mode 100644 ncep/gov.noaa.nws.ncep.common.dataplugin.ncuair/gov.noaa.nws.ncep.common.dataplugin.ncuair.ecl create mode 100644 ncep/gov.noaa.nws.ncep.common.dataplugin.nonconvsigmet/gov.noaa.nws.ncep.common.dataplugin.nonconvsigmet.ecl create mode 100644 ncep/gov.noaa.nws.ncep.common.dataplugin.sgwh/gov.noaa.nws.ncep.common.dataplugin.sgwh.ecl create mode 100644 ncep/gov.noaa.nws.ncep.common.dataplugin.sgwhv/gov.noaa.nws.ncep.common.dataplugin.sgwhv.ecl create mode 100644 ncep/gov.noaa.nws.ncep.common.dataplugin.ssha/gov.noaa.nws.ncep.common.dataplugin.ssha.ecl create mode 100644 ncep/gov.noaa.nws.ncep.common.dataplugin.stormtrack/gov.noaa.nws.ncep.common.dataplugin.stormtrack.ecl create mode 100644 ncep/gov.noaa.nws.ncep.common.dataplugin.tcm/gov.noaa.nws.ncep.common.dataplugin.tcm.ecl create mode 100644 ncep/gov.noaa.nws.ncep.common.dataplugin.wcp/gov.noaa.nws.ncep.common.dataplugin.wcp.ecl create mode 100644 ncep/gov.noaa.nws.ncep.common.log/gov.noaa.nws.ncep.common.log.ecl create mode 100644 ncep/gov.noaa.nws.ncep.common.log4j.config/gov.noaa.nws.ncep.common.log4j.config.ecl create mode 100644 ncep/gov.noaa.nws.ncep.common/gov.noaa.nws.ncep.common.ecl create mode 100644 ncep/gov.noaa.nws.ncep.edex.common/gov.noaa.nws.ncep.edex.common.ecl create mode 100644 ncep/gov.noaa.nws.ncep.edex.gempak.jna/gov.noaa.nws.ncep.edex.gempak.jna.ecl create mode 100644 ncep/gov.noaa.nws.ncep.edex.ingest.grib.util/gov.noaa.nws.ncep.edex.ingest.grib.util.ecl create mode 100644 ncep/gov.noaa.nws.ncep.edex.ingest.util/gov.noaa.nws.ncep.edex.ingest.util.ecl create mode 100644 ncep/gov.noaa.nws.ncep.edex.plugin.airmet/gov.noaa.nws.ncep.edex.plugin.airmet.ecl create mode 100644 ncep/gov.noaa.nws.ncep.edex.plugin.atcf/gov.noaa.nws.ncep.edex.plugin.atcf.ecl create mode 100644 ncep/gov.noaa.nws.ncep.edex.plugin.aww/gov.noaa.nws.ncep.edex.plugin.aww.ecl create mode 100644 ncep/gov.noaa.nws.ncep.edex.plugin.convsigmet/gov.noaa.nws.ncep.edex.plugin.convsigmet.ecl create mode 100644 ncep/gov.noaa.nws.ncep.edex.plugin.ffg/gov.noaa.nws.ncep.edex.plugin.ffg.ecl create mode 100644 ncep/gov.noaa.nws.ncep.edex.plugin.idft/gov.noaa.nws.ncep.edex.plugin.idft.ecl create mode 100644 ncep/gov.noaa.nws.ncep.edex.plugin.intlsigmet/gov.noaa.nws.ncep.edex.plugin.intlsigmet.ecl create mode 100644 ncep/gov.noaa.nws.ncep.edex.plugin.mcidas/gov.noaa.nws.ncep.edex.plugin.mcidas.ecl create mode 100644 ncep/gov.noaa.nws.ncep.edex.plugin.mosaic/gov.noaa.nws.ncep.edex.plugin.mosaic.ecl create mode 100644 ncep/gov.noaa.nws.ncep.edex.plugin.ncairep/gov.noaa.nws.ncep.edex.plugin.ncairep.ecl create mode 100644 ncep/gov.noaa.nws.ncep.edex.plugin.ncccfp/gov.noaa.nws.ncep.edex.plugin.ncccfp.ecl create mode 100644 ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/gov.noaa.nws.ncep.edex.plugin.ncgrib.ecl create mode 100644 ncep/gov.noaa.nws.ncep.edex.plugin.ncpafm/gov.noaa.nws.ncep.edex.plugin.ncpafm.ecl create mode 100644 ncep/gov.noaa.nws.ncep.edex.plugin.ncpirep/gov.noaa.nws.ncep.edex.plugin.ncpirep.ecl create mode 100644 ncep/gov.noaa.nws.ncep.edex.plugin.ncscat/gov.noaa.nws.ncep.edex.plugin.ncscat.ecl create mode 100644 ncep/gov.noaa.nws.ncep.edex.plugin.ncscd/gov.noaa.nws.ncep.edex.plugin.ncscd.ecl create mode 100644 ncep/gov.noaa.nws.ncep.edex.plugin.nctaf/gov.noaa.nws.ncep.edex.plugin.nctaf.ecl create mode 100644 ncep/gov.noaa.nws.ncep.edex.plugin.nctext/gov.noaa.nws.ncep.edex.plugin.nctext.ecl create mode 100644 ncep/gov.noaa.nws.ncep.edex.plugin.ncuair/gov.noaa.nws.ncep.edex.plugin.ncuair.ecl create mode 100644 ncep/gov.noaa.nws.ncep.edex.plugin.nonconvsigmet/gov.noaa.nws.ncep.edex.plugin.nonconvsigmet.ecl create mode 100644 ncep/gov.noaa.nws.ncep.edex.plugin.sgwh/gov.noaa.nws.ncep.edex.plugin.sgwh.ecl create mode 100644 ncep/gov.noaa.nws.ncep.edex.plugin.sgwhv/gov.noaa.nws.ncep.edex.plugin.sgwhv.ecl create mode 100644 ncep/gov.noaa.nws.ncep.edex.plugin.ssha/gov.noaa.nws.ncep.edex.plugin.ssha.ecl create mode 100644 ncep/gov.noaa.nws.ncep.edex.plugin.stormtrack/gov.noaa.nws.ncep.edex.plugin.stormtrack.ecl create mode 100644 ncep/gov.noaa.nws.ncep.edex.plugin.tcm/gov.noaa.nws.ncep.edex.plugin.tcm.ecl create mode 100644 ncep/gov.noaa.nws.ncep.edex.plugin.wcp/gov.noaa.nws.ncep.edex.plugin.wcp.ecl create mode 100644 ncep/gov.noaa.nws.ncep.edex.purgeutil/gov.noaa.nws.ncep.edex.purgeutil.ecl create mode 100644 ncep/gov.noaa.nws.ncep.edex.uengine/gov.noaa.nws.ncep.edex.uengine.ecl create mode 100644 ncep/gov.noaa.nws.ncep.gempak.parameterConversionLibrary/gov.noaa.nws.ncep.gempak.parameterConversionLibrary.ecl create mode 100644 ncep/gov.noaa.nws.ncep.gempak.parameters/gov.noaa.nws.ncep.gempak.parameters.ecl create mode 100644 ncep/gov.noaa.nws.ncep.metParameters/gov.noaa.nws.ncep.metParameters.ecl create mode 100644 ncep/gov.noaa.nws.ncep.ui.nctextui/gov.noaa.nws.ncep.ui.nctextui.ecl create mode 100644 ncep/gov.noaa.nws.ncep.ui.nsharp.linux32/gov.noaa.nws.ncep.ui.nsharp.linux32.ecl create mode 100644 ncep/gov.noaa.nws.ncep.ui.nsharp.linux64/gov.noaa.nws.ncep.ui.nsharp.linux64.ecl create mode 100644 ncep/gov.noaa.nws.ncep.ui.nsharp.win32/gov.noaa.nws.ncep.ui.nsharp.win32.ecl create mode 100644 ncep/gov.noaa.nws.ncep.ui.nsharp/gov.noaa.nws.ncep.ui.nsharp.ecl create mode 100644 ncep/gov.noaa.nws.ncep.ui.pgen/gov.noaa.nws.ncep.ui.pgen.ecl create mode 100644 ncep/gov.noaa.nws.ncep.viz.cloudHeight/gov.noaa.nws.ncep.viz.cloudHeight.ecl create mode 100644 ncep/gov.noaa.nws.ncep.viz.common/gov.noaa.nws.ncep.viz.common.ecl create mode 100644 ncep/gov.noaa.nws.ncep.viz.gempak/gov.noaa.nws.ncep.viz.gempak.ecl create mode 100644 ncep/gov.noaa.nws.ncep.viz.localization/gov.noaa.nws.ncep.viz.localization.ecl create mode 100644 ncep/gov.noaa.nws.ncep.viz.overlays/gov.noaa.nws.ncep.viz.overlays.ecl create mode 100644 ncep/gov.noaa.nws.ncep.viz.resourceManager/gov.noaa.nws.ncep.viz.resourceManager.ecl create mode 100644 ncep/gov.noaa.nws.ncep.viz.resources/gov.noaa.nws.ncep.viz.resources.ecl create mode 100644 ncep/gov.noaa.nws.ncep.viz.rsc.airmet/gov.noaa.nws.ncep.viz.rsc.airmet.ecl create mode 100644 ncep/gov.noaa.nws.ncep.viz.rsc.atcf/gov.noaa.nws.ncep.viz.rsc.atcf.ecl create mode 100644 ncep/gov.noaa.nws.ncep.viz.rsc.convsigmet/gov.noaa.nws.ncep.viz.rsc.convsigmet.ecl create mode 100644 ncep/gov.noaa.nws.ncep.viz.rsc.ffa/gov.noaa.nws.ncep.viz.rsc.ffa.ecl create mode 100644 ncep/gov.noaa.nws.ncep.viz.rsc.ffg/gov.noaa.nws.ncep.viz.rsc.ffg.ecl create mode 100644 ncep/gov.noaa.nws.ncep.viz.rsc.hrcn/gov.noaa.nws.ncep.viz.rsc.hrcn.ecl create mode 100644 ncep/gov.noaa.nws.ncep.viz.rsc.idft/gov.noaa.nws.ncep.viz.rsc.idft.ecl create mode 100644 ncep/gov.noaa.nws.ncep.viz.rsc.intlsig/gov.noaa.nws.ncep.viz.rsc.intlsig.ecl create mode 100644 ncep/gov.noaa.nws.ncep.viz.rsc.lightning/gov.noaa.nws.ncep.viz.rsc.lightning.ecl create mode 100644 ncep/gov.noaa.nws.ncep.viz.rsc.mosaic/gov.noaa.nws.ncep.viz.rsc.mosaic.ecl create mode 100644 ncep/gov.noaa.nws.ncep.viz.rsc.ncgrid/gov.noaa.nws.ncep.viz.rsc.ncgrid.ecl create mode 100644 ncep/gov.noaa.nws.ncep.viz.rsc.ncradar/gov.noaa.nws.ncep.viz.rsc.ncradar.ecl create mode 100644 ncep/gov.noaa.nws.ncep.viz.rsc.ncscat/gov.noaa.nws.ncep.viz.rsc.ncscat.ecl create mode 100644 ncep/gov.noaa.nws.ncep.viz.rsc.nonconvsigmet/gov.noaa.nws.ncep.viz.rsc.nonconvsigmet.ecl create mode 100644 ncep/gov.noaa.nws.ncep.viz.rsc.pgen/gov.noaa.nws.ncep.viz.rsc.pgen.ecl create mode 100644 ncep/gov.noaa.nws.ncep.viz.rsc.plotdata/gov.noaa.nws.ncep.viz.rsc.plotdata.ecl create mode 100644 ncep/gov.noaa.nws.ncep.viz.rsc.satellite/gov.noaa.nws.ncep.viz.rsc.satellite.ecl create mode 100644 ncep/gov.noaa.nws.ncep.viz.rsc.stormtrack/gov.noaa.nws.ncep.viz.rsc.stormtrack.ecl create mode 100644 ncep/gov.noaa.nws.ncep.viz.rsc.svrl/gov.noaa.nws.ncep.viz.rsc.svrl.ecl create mode 100644 ncep/gov.noaa.nws.ncep.viz.rsc.warn/gov.noaa.nws.ncep.viz.rsc.warn.ecl create mode 100644 ncep/gov.noaa.nws.ncep.viz.rsc.wavesat/gov.noaa.nws.ncep.viz.rsc.wavesat.ecl create mode 100644 ncep/gov.noaa.nws.ncep.viz.rsc.wcn/gov.noaa.nws.ncep.viz.rsc.wcn.ecl create mode 100644 ncep/gov.noaa.nws.ncep.viz.rsc.wcp/gov.noaa.nws.ncep.viz.rsc.wcp.ecl create mode 100644 ncep/gov.noaa.nws.ncep.viz.rsc.wou/gov.noaa.nws.ncep.viz.rsc.wou.ecl create mode 100644 ncep/gov.noaa.nws.ncep.viz.rsc.wstm/gov.noaa.nws.ncep.viz.rsc.wstm.ecl create mode 100644 ncep/gov.noaa.nws.ncep.viz.rsc.wtch/gov.noaa.nws.ncep.viz.rsc.wtch.ecl create mode 100644 ncep/gov.noaa.nws.ncep.viz.tools/gov.noaa.nws.ncep.viz.tools.ecl create mode 100644 ncep/gov.noaa.nws.ncep.viz.ui.display/gov.noaa.nws.ncep.viz.ui.display.ecl create mode 100644 ncep/gov.noaa.nws.ncep.viz.ui.locator/gov.noaa.nws.ncep.viz.ui.locator.ecl create mode 100644 ncep/gov.noaa.nws.ncep.viz.ui.perspectives/gov.noaa.nws.ncep.viz.ui.perspectives.ecl create mode 100644 ncep/gov.noaa.nws.ncep.viz.ui.seek/gov.noaa.nws.ncep.viz.ui.seek.ecl create mode 100644 pythonPackages/pythonPackages.ecl create mode 100644 rpms/awips2.edex/awips2.edex.ecl create mode 100644 rpms/rpms.ecl diff --git a/MHSEmulator/MHSEmulator.ecl b/MHSEmulator/MHSEmulator.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/RadarServer/build.rcm/build.rcm.ecl b/RadarServer/build.rcm/build.rcm.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/RadarServer/com.raytheon.rcm.feature/com.raytheon.rcm.feature.ecl b/RadarServer/com.raytheon.rcm.feature/com.raytheon.rcm.feature.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/RadarServer/com.raytheon.rcm.lib/com.raytheon.rcm.lib.ecl b/RadarServer/com.raytheon.rcm.lib/com.raytheon.rcm.lib.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/RadarServer/com.raytheon.rcm.product/com.raytheon.rcm.product.ecl b/RadarServer/com.raytheon.rcm.product/com.raytheon.rcm.product.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/RadarServer/com.raytheon.rcm.server.mq/com.raytheon.rcm.server.mq.ecl b/RadarServer/com.raytheon.rcm.server.mq/com.raytheon.rcm.server.mq.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/RadarServer/com.raytheon.rcm.server.mq/src/com/raytheon/rcm/mqsrvr/MsgServ.java b/RadarServer/com.raytheon.rcm.server.mq/src/com/raytheon/rcm/mqsrvr/MsgServ.java index d055cc115d..1b7d20481d 100755 --- a/RadarServer/com.raytheon.rcm.server.mq/src/com/raytheon/rcm/mqsrvr/MsgServ.java +++ b/RadarServer/com.raytheon.rcm.server.mq/src/com/raytheon/rcm/mqsrvr/MsgServ.java @@ -79,146 +79,155 @@ import com.raytheon.rcm.server.Log; import com.raytheon.rcm.server.RadarServer; import com.raytheon.rcm.server.StatusManager.RadarStatus; - public class MsgServ implements RadarEventListener, MessageListener { - - QueueConnection queueConn; - QueueSession queueSession; - QueueSender queueSender; - TopicConnection topicConn; - TopicSession topicSession; - TopicPublisher topicPublisher; - JAXBContext jaxbCtx; - Marshaller m; - Unmarshaller u; - - Serv serv; - - public MsgServ(RadarServer server) { - serv = new Serv(server); - try { - jaxbCtx = JAXBContext.newInstance(ReqObj.class, ReplyObj.class, - EventObj.class, RmrEvent.class); - m = jaxbCtx.createMarshaller(); - u = jaxbCtx.createUnmarshaller(); - } catch (JAXBException e) { - Log.errorf("MsgServ could not create JAXBContext: %s", e); - } - } - - public void start(QueueConnectionFactory qConnFac, - TopicConnectionFactory tConnFac) { - try { - queueConn = qConnFac.createQueueConnection(); - queueSession = queueConn.createQueueSession(false, Session.AUTO_ACKNOWLEDGE); - Queue queue = queueSession.createQueue("RadarServer"); - queueSender = queueSession.createSender(null); - QueueReceiver qr = queueSession.createReceiver(queue); - qr.setMessageListener(this); - - topicConn = tConnFac.createTopicConnection(); - topicSession = topicConn.createTopicSession(false, Session.AUTO_ACKNOWLEDGE); - Topic topic = topicSession.createTopic("RadarEvents"); - topicPublisher = topicSession.createPublisher(topic); - - queueConn.start(); - } catch (JMSException e) { - Log.errorf("MsgServ could not start connections: %s", e); - } - } - @Override - public void handleRadarEvent(RadarEvent event) { - RadarEvent eventToSend = EventObj.filterRadarEvent(event); - if (eventToSend != null) - publishEvent(eventToSend); - } + QueueConnection queueConn; - @Override - public void onMessage(Message msg) { - try { - ReplyObj po = null; - String error = null; - Exception exc = null; - - Destination replyToDestination = msg.getJMSReplyTo(); - - if (msg instanceof TextMessage) { - TextMessage tms = (TextMessage) msg; - StringReader sr = new StringReader(tms.getText()); - Object o = null; - try { - o = u.unmarshal(sr); - } catch (JAXBException e) { - exc = e; - } - - if (o instanceof ReqObj) { - ReqObj ro = (ReqObj) o; - try { - po = handleRequest(replyToDestination, ro); - } catch (RuntimeException e) { - error = "Unexpected error while processing request: " + e.toString(); - exc = e; - } - } else if (o != null) - error = String.format("Invalid request class '%s'", o.getClass()); - } else - error = "Invalid JMS message type"; + QueueSession queueSession; - if (error == null && exc != null) - error = exc.toString(); - if (po == null) - po = ReplyObj.error(error != null ? error : "Unknown error"); - - if (exc != null) - Log.errorf("Error processing remote request: %s", exc); - else if (error != null) - Log.errorf("Error processing remote request: %s", error); - - if (po != null) { - StringWriter sw = new StringWriter(); - try { - synchronized (m) { - m.marshal(po, sw); - } - } catch (JAXBException e) { - Log.errorf("Error processing remote request: %s", e); - return; - } - TextMessage rtm = queueSession.createTextMessage( - sw.toString()); - - String id = msg.getJMSCorrelationID(); - if (id == null) - id = msg.getJMSMessageID(); - if (id != null) - rtm.setJMSCorrelationID(id); - if (replyToDestination != null) - queueSender.send(replyToDestination, rtm); - else - Log.errorf("Client did not specify reply-to destination"); - } - - } catch (JMSException e) { - Log.errorf("Error while processing JMS message: %s", e); - } - } - - private ReplyObj handleRequest(Destination replyToDestination, ReqObj ro) { - ReplyObj po = null; + QueueSender queueSender; + + TopicConnection topicConn; + + TopicSession topicSession; + + TopicPublisher topicPublisher; + + JAXBContext jaxbCtx; + + Marshaller m; + + Unmarshaller u; + + Serv serv; + + public MsgServ(RadarServer server) { + serv = new Serv(server); + try { + jaxbCtx = JAXBContext.newInstance(ReqObj.class, ReplyObj.class, + EventObj.class, RmrEvent.class); + m = jaxbCtx.createMarshaller(); + u = jaxbCtx.createUnmarshaller(); + } catch (JAXBException e) { + Log.errorf("MsgServ could not create JAXBContext: %s", e); + } + } + + public void start(QueueConnectionFactory qConnFac, + TopicConnectionFactory tConnFac) { + try { + queueConn = qConnFac.createQueueConnection(); + queueSession = queueConn.createQueueSession(false, + Session.AUTO_ACKNOWLEDGE); + Queue queue = queueSession.createQueue("RadarServer"); + queueSender = queueSession.createSender(null); + QueueReceiver qr = queueSession.createReceiver(queue); + qr.setMessageListener(this); + + topicConn = tConnFac.createTopicConnection(); + topicSession = topicConn.createTopicSession(false, + Session.AUTO_ACKNOWLEDGE); + Topic topic = topicSession.createTopic("RadarEvents"); + topicPublisher = topicSession.createPublisher(topic); + + queueConn.start(); + } catch (JMSException e) { + Log.errorf("MsgServ could not start connections: %s", e); + } + } + + @Override + public void handleRadarEvent(RadarEvent event) { + RadarEvent eventToSend = EventObj.filterRadarEvent(event); + if (eventToSend != null) + publishEvent(eventToSend); + } + + @Override + public void onMessage(Message msg) { + try { + ReplyObj po = null; + String error = null; + Exception exc = null; + + Destination replyToDestination = msg.getJMSReplyTo(); + + if (msg instanceof TextMessage) { + TextMessage tms = (TextMessage) msg; + StringReader sr = new StringReader(tms.getText()); + Object o = null; + try { + o = u.unmarshal(sr); + } catch (JAXBException e) { + exc = e; + } + + if (o instanceof ReqObj) { + ReqObj ro = (ReqObj) o; + try { + po = handleRequest(replyToDestination, ro); + } catch (RuntimeException e) { + error = "Unexpected error while processing request: " + + e.toString(); + exc = e; + } + } else if (o != null) + error = String.format("Invalid request class '%s'", + o.getClass()); + } else + error = "Invalid JMS message type"; + + if (error == null && exc != null) + error = exc.toString(); + if (po == null) + po = ReplyObj.error(error != null ? error : "Unknown error"); + + if (exc != null) + Log.errorf("Error processing remote request: %s", exc); + else if (error != null) + Log.errorf("Error processing remote request: %s", error); + + if (po != null) { + StringWriter sw = new StringWriter(); + try { + synchronized (m) { + m.marshal(po, sw); + } + } catch (JAXBException e) { + Log.errorf("Error processing remote request: %s", e); + return; + } + TextMessage rtm = queueSession.createTextMessage(sw.toString()); + + String id = msg.getJMSCorrelationID(); + if (id == null) + id = msg.getJMSMessageID(); + if (id != null) + rtm.setJMSCorrelationID(id); + if (replyToDestination != null) + queueSender.send(replyToDestination, rtm); + else + Log.errorf("Client did not specify reply-to destination"); + } + + } catch (JMSException e) { + Log.errorf("Error while processing JMS message: %s", e); + } + } + + private ReplyObj handleRequest(Destination replyToDestination, ReqObj ro) { + ReplyObj po = null; String error = null; - + Log.eventf("Got remote request %s", ro); - + if (ro instanceof GetRadarList) - po = ReplyObj.toGetRadarList( - serv.getRadarList()); + po = ReplyObj.toGetRadarList(serv.getRadarList()); else if (ro instanceof GetRadarConfig) { GetRadarConfig grc = (GetRadarConfig) ro; if (grc.radarID != null) - po = ReplyObj.toGetRadarConfig( - serv.getRadarConfig(grc.radarID)); + po = ReplyObj + .toGetRadarConfig(serv.getRadarConfig(grc.radarID)); else po = ReplyObj.toGetRadarConfig(serv.getAllRadarConfigs()); } else if (ro instanceof SetRadarConfig) { @@ -227,33 +236,31 @@ public class MsgServ implements RadarEventListener, MessageListener { } else if (ro instanceof GetRadarStatusMessages) { GetRadarStatusMessages grs = (GetRadarStatusMessages) ro; if (grs.radarID != null) - po = ReplyObj.toGetRadarStatusMessages( - createROStatus(grs.radarID, - serv.getRadarStatus(grs.radarID))); + po = ReplyObj.toGetRadarStatusMessages(createROStatus( + grs.radarID, serv.getRadarStatus(grs.radarID))); else { ArrayList status = new ArrayList(); - for (Map.Entry e : - serv.getAllRadarStatus().entrySet()) { - status.add(createROStatus(e.getKey(), - e.getValue())); + for (Map.Entry e : serv + .getAllRadarStatus().entrySet()) { + status.add(createROStatus(e.getKey(), e.getValue())); } po = ReplyObj.toGetRadarStatusMessages(status); } } else if (ro instanceof SendOneTimeRequests) { MsgServOtrHandler handler = null; - - /* Correlation ID should be null so as to not intefere - * with the handler list on the client side. + + /* + * Correlation ID should be null so as to not intefere with the + * handler list on the client side. */ /* - String id = msg.getJMSCorrelationID(); - if (id == null) - id = msg.getJMSMessageID(); - */ - String id = null; + * String id = msg.getJMSCorrelationID(); if (id == null) id = + * msg.getJMSMessageID(); + */ + String id = null; if (replyToDestination != null) - handler = new MsgServOtrHandler(replyToDestination, id); - + handler = new MsgServOtrHandler(replyToDestination, id); + SendOneTimeRequests r = (SendOneTimeRequests) ro; serv.sendOTRs(r.radarIDs, r.requests, handler); } else if (ro instanceof SendRpsList) { @@ -267,17 +274,17 @@ public class MsgServ implements RadarEventListener, MessageListener { } else if (ro instanceof GetRpsList) { GetRpsList r = (GetRpsList) ro; if (r.radarID != null) { - int vcp = r.vcp != null ? r.vcp : -1; - int opMode = r.opMode != null ? r.opMode : GSM.OP_MODE_MAINTENANCE; + int vcp = r.vcp != null ? r.vcp : -1; + int opMode = r.opMode != null ? r.opMode + : GSM.OP_MODE_MAINTENANCE; RpsList rpsList = serv.getRpsList(r.radarID, opMode, vcp); po = new ReplyObj.RpsListReply(rpsList); /* - if (rpsList != null) - po = ReplyObj.toGetRpsList(rpsList); - else - error = String.format("Could not retrieve RPS list for radar %s%s", - r.radarID, vcp != -1 ? ", VCP " + vcp : ""); - */ + * if (rpsList != null) po = ReplyObj.toGetRpsList(rpsList); + * else error = + * String.format("Could not retrieve RPS list for radar %s%s", + * r.radarID, vcp != -1 ? ", VCP " + vcp : ""); + */ } else error = "Must specify a radar name"; } else if (ro instanceof GetGlobalConfig) { @@ -301,7 +308,8 @@ public class MsgServ implements RadarEventListener, MessageListener { po = r; } else if (ro instanceof SendAlertRequest) { SendAlertRequest ro2 = (SendAlertRequest) ro; - error = serv.sendAlertRequest(ro2.radarID, ro2.areaIndex, ro2.alertRequest); + error = serv.sendAlertRequest(ro2.radarID, ro2.areaIndex, + ro2.alertRequest); } else if (ro instanceof SendMessageToRPG) { SendMessageToRPG ro2 = (SendMessageToRPG) ro; error = serv.sendMessageToRPG(ro2.radarID, ro2.message); @@ -316,7 +324,7 @@ public class MsgServ implements RadarEventListener, MessageListener { error = serv.debugHandleMessage(r.radarID, r.message); } else error = String.format("Unsupported request '%s'", ro.toString()); - + if (po == null) { if (error == null) po = new ReplyObj(); @@ -324,97 +332,97 @@ public class MsgServ implements RadarEventListener, MessageListener { po = ReplyObj.error(error); } - return po; - } - - private ROStatus createROStatus(String radarID, RadarStatus rs) { - ROStatus ros = new ROStatus(); - ros.radarID = radarID; - ros.currentAAP = rs.getCurrentAAP(); - ros.currentGSM = rs.getCurrentGSM(); - ros.currentPTL = rs.getCurrentPTL(); - ros.lastAAP = rs.getLastAAP(); - ros.lastGSM = rs.getLastGSM(); - ros.lastPTL = rs.getLastPTL(); - return ros; - } + return po; + } - @Override - public void handleConfigEvent(ConfigEvent event) { - publishEvent(event); - } - - private void publishEvent(Object obj) { - // Can get events before mq is set up. - if (topicPublisher == null) - return; - - StringWriter sw = new StringWriter(); - try { - synchronized (m) { - m.marshal(obj, sw); - } - } catch (JAXBException e) { - Log.errorf("Error serializing event: %s", e); - return; - } - try { - TextMessage tm = topicSession.createTextMessage( - sw.toString()); - topicPublisher.publish(tm); - } catch (JMSException e) { - Log.errorf("Error sending message: %s", e); - } - } + private ROStatus createROStatus(String radarID, RadarStatus rs) { + ROStatus ros = new ROStatus(); + ros.radarID = radarID; + ros.currentAAP = rs.getCurrentAAP(); + ros.currentGSM = rs.getCurrentGSM(); + ros.currentPTL = rs.getCurrentPTL(); + ros.lastAAP = rs.getLastAAP(); + ros.lastGSM = rs.getLastGSM(); + ros.lastPTL = rs.getLastPTL(); + return ros; + } - @Override - public void handleNotificationEvent(NotificationEvent event) { - publishEvent(event); - } - - class MsgServOtrHandler implements OTRHandler { - Destination destination; - String correlationID; - - public MsgServOtrHandler(Destination destination, String correlationID) { - this.destination = destination; - this.correlationID = correlationID; - } - - @Override - public void handleOtrEvent(OtrEvent event) { - OtrEvent eventToSend = event.clone(); - /* This OTR notification capability is currently only used to - * display alerts in CAVE. Thus, there is no need to send the - * actual product data. Given that some products can be larger - * than one megabyte and the notification is in XML format, - * this is a useful optimization. - */ - if (event.product != null + @Override + public void handleConfigEvent(ConfigEvent event) { + publishEvent(event); + } + + private void publishEvent(Object obj) { + // Can get events before mq is set up. + if (topicPublisher == null) + return; + + StringWriter sw = new StringWriter(); + try { + synchronized (m) { + m.marshal(obj, sw); + } + } catch (JAXBException e) { + Log.errorf("Error serializing event: %s", e); + return; + } + try { + TextMessage tm = topicSession.createTextMessage(sw.toString()); + topicPublisher.publish(tm); + } catch (JMSException e) { + Log.errorf("Error sending message: %s", e); + } + } + + @Override + public void handleNotificationEvent(NotificationEvent event) { + publishEvent(event); + } + + class MsgServOtrHandler implements OTRHandler { + Destination destination; + + String correlationID; + + public MsgServOtrHandler(Destination destination, String correlationID) { + this.destination = destination; + this.correlationID = correlationID; + } + + @Override + public void handleOtrEvent(OtrEvent event) { + OtrEvent eventToSend = event.clone(); + /* + * This OTR notification capability is currently only used to + * display alerts in CAVE. Thus, there is no need to send the actual + * product data. Given that some products can be larger than one + * megabyte and the notification is in XML format, this is a useful + * optimization. + */ + if (event.product != null && com.raytheon.rcm.message.Message .messageCodeOf(event.product) > 16) eventToSend.product = GraphicProduct .extractHeaderAndPDB(event.product); - StringWriter sw = new StringWriter(); - try { - synchronized (m) { - m.marshal(eventToSend, sw); - } - } catch (JAXBException e) { - Log.errorf("Error processing remote request: %s", e); - return; - } - try { - TextMessage rtm = queueSession.createTextMessage( - sw.toString()); - if (correlationID != null) - rtm.setJMSCorrelationID(correlationID); - queueSender.send(destination, rtm); - } catch (JMSException e) { - Log.errorf("Error sending message: %s", e); - } - } - - } + StringWriter sw = new StringWriter(); + try { + synchronized (m) { + m.marshal(eventToSend, sw); + } + } catch (JAXBException e) { + Log.errorf("Error processing remote request: %s", e); + return; + } + try { + TextMessage rtm = queueSession.createTextMessage(sw.toString()); + if (correlationID != null) + rtm.setJMSCorrelationID(correlationID); + queueSender.send(destination, rtm); + } catch (JMSException e) { + Log.errorf("Error sending message: %s", e); + } + } + + } } diff --git a/RadarServer/com.raytheon.rcm.server/com.raytheon.rcm.server.ecl b/RadarServer/com.raytheon.rcm.server/com.raytheon.rcm.server.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/RadarServer/com.raytheon.rcm.tools/com.raytheon.rcm.tools.ecl b/RadarServer/com.raytheon.rcm.tools/com.raytheon.rcm.tools.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/cave/build/alertviz/customTargets.xml b/cave/build/alertviz/customTargets.xml index e7684ae41f..a1095fffad 100644 --- a/cave/build/alertviz/customTargets.xml +++ b/cave/build/alertviz/customTargets.xml @@ -1,262 +1,262 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/cave/build/build.ecl b/cave/build/build.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/cave/build/cave/customTargets.xml b/cave/build/cave/customTargets.xml index d39d899136..612a856854 100644 --- a/cave/build/cave/customTargets.xml +++ b/cave/build/cave/customTargets.xml @@ -1,485 +1,485 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/cave/build/static/common/cave/etc/aviation/config/gui/ClimateTimeouts.xml b/cave/build/static/common/cave/etc/aviation/config/gui/ClimateTimeouts.xml index df7ea87911..0796d4eaa0 100644 --- a/cave/build/static/common/cave/etc/aviation/config/gui/ClimateTimeouts.xml +++ b/cave/build/static/common/cave/etc/aviation/config/gui/ClimateTimeouts.xml @@ -18,9 +18,13 @@ See_the_AWIPS_II_Master_Rights_File_("Master_Rights_File.pdf")_for further_licensing_information. --> + 20 20 90 - 300 + 1800 diff --git a/cave/build/static/common/cave/etc/gfe/userPython/procedures/CheckTTdWind.py b/cave/build/static/common/cave/etc/gfe/userPython/procedures/CheckTTdWind.py index f945ee793c..e270635023 100644 --- a/cave/build/static/common/cave/etc/gfe/userPython/procedures/CheckTTdWind.py +++ b/cave/build/static/common/cave/etc/gfe/userPython/procedures/CheckTTdWind.py @@ -452,7 +452,8 @@ class Procedure (SmartScript.SmartScript): " locked by another user." self.statusBarMsg(msg, "S") continue - gustGrid[windTooHigh] = windGrid + + gustGrid = where(windTooHigh, windGrid, gustGrid) self.createGrid(MODEL, "WindGust", "SCALAR", gustGrid, tr) gustDict[tr] = gustGrid # update the gustDict diff --git a/cave/build/static/common/cave/etc/gfe/userPython/smartTools/Adjust.py b/cave/build/static/common/cave/etc/gfe/userPython/smartTools/Adjust.py index 9291227174..a8f10952fe 100644 --- a/cave/build/static/common/cave/etc/gfe/userPython/smartTools/Adjust.py +++ b/cave/build/static/common/cave/etc/gfe/userPython/smartTools/Adjust.py @@ -66,7 +66,7 @@ VariableList=[] VariableList.append(("Value:",1,"numeric")) VariableList.append(("Action:","Add","radio",["Add","Subtract","Multiply","Divide"])) VariableList.append(("Elevation:","None","radio",["None","Mountain","Valley","Specific"])) -VariableList.append(("Vectors:","Magnitude","radio",["Both","Magnitude","Direction"])) +VariableList.append(("Vectors:","Magnitude","radio",["Magnitude","Direction"])) VariableList.append(("Edge:","Flat","radio",["Flat","Edge","Taper"])) VariableList.append(("Edge Width:",5,"scale",[1,30],1)) VariableList.append(("Specific Elevation:",5000,"numeric")) @@ -76,7 +76,7 @@ class Tool (SmartScript.SmartScript): SmartScript.SmartScript.__init__(self, dbss) def preProcessTool(self): self.savemode=self.getVectorEditMode() - self.setVectorEditMode("Both") + self.setVectorEditMode("Magnitude") def postProcessTool(self): self.setVectorEditMode(self.savemode) def preProcessGrid(self,Topo,editArea,varDict): @@ -167,7 +167,7 @@ class Tool (SmartScript.SmartScript): else: mag=variableElement[0] dir=variableElement[1] - if ((vect=="Magnitude")or(vect=="Both")): + if (vect=="Magnitude"): if (action=="Add"): newmag=mag+(self.deltagrid*deltavalue) elif (action=="Subtract"): diff --git a/cave/build/static/common/cave/etc/gfe/userPython/textUtilities/regular/DiscretePhrases.py b/cave/build/static/common/cave/etc/gfe/userPython/textUtilities/regular/DiscretePhrases.py index e4a7f94e5c..284e9b8ae0 100644 --- a/cave/build/static/common/cave/etc/gfe/userPython/textUtilities/regular/DiscretePhrases.py +++ b/cave/build/static/common/cave/etc/gfe/userPython/textUtilities/regular/DiscretePhrases.py @@ -162,6 +162,7 @@ class DiscretePhrases(PhraseBuilder.PhraseBuilder): timeDescriptor = self.headlinesTimeRange_descriptor( tree, node, key, tr, areaLabel, issuanceTime) + from com.raytheon.uf.common.dataplugin.gfe.discrete import DiscreteKey headlineWords = DiscreteKey.discreteDefinition(siteId).keyDesc( "Hazards" + "_SFC", key) if headlineWords == "": # Don't process the "" key diff --git a/cave/build/static/win32.x86/alertviz/alertviz.bat b/cave/build/static/win32.x86/alertviz/alertviz.bat index 79c486d804..5e4b50ee83 100644 --- a/cave/build/static/win32.x86/alertviz/alertviz.bat +++ b/cave/build/static/win32.x86/alertviz/alertviz.bat @@ -1,69 +1,69 @@ -@echo OFF - -REM Determine if we are running on a 32-bit or 64-bit OS. -IF NOT EXIST C:\Windows\SysWOW64\reg.exe ( - SET REG_EXE=C:\Windows\System32\reg.exe -) ELSE ( - SET REG_EXE=C:\Windows\SysWOW64\reg.exe -) - -REM Determine where we are located. -SET CONTAINING_DIRECTORY=%~dp0 - -REM Prepare the environment. - -REM Registry Query Variables. -SET A2_JAVA_REG="HKLM\Software\Raytheon\Runtime Environment\AWIPS II Java" -SET A2_PYTHON_REG="HKLM\Software\Raytheon\Runtime Environment\AWIPS II Python" -REM Determine where AWIPS II Java (the jre) is located. -%REG_EXE% QUERY %A2_JAVA_REG% /v JavaJreDirectory > NUL 2>&1 -IF ERRORLEVEL 1 (echo ENVIRONMENT ERROR - Unable to find AWIPS II Java. && PAUSE && EXIT) -FOR /F "tokens=2* delims= " %%A IN ( -'%REG_EXE% QUERY %A2_JAVA_REG% /v JavaJreDirectory') DO ( -SET JavaJreDirectory=%%B) -REM Determine where AWIPS II Python is located. -%REG_EXE% QUERY %A2_PYTHON_REG% /v PythonInstallDirectory > NUL 2>&1 -IF ERRORLEVEL 1 (echo ENVIRONMENT ERROR - Unable to find AWIPS II Python. && PAUSE && EXIT) -FOR /F "tokens=2* delims= " %%A IN ( -'%REG_EXE% QUERY %A2_PYTHON_REG% /v PythonInstallDirectory') DO ( -SET PythonInstallDirectory=%%B) - -REM Add Java and Python to the path. -SET Path=%PythonInstallDirectory%;%PythonInstallDirectory%\DLLs;%Path% -SET Path=%JavaJreDirectory%\bin;%Path% -REM Define 'PythonPath'. -SET PythonPath=%PythonInstallDirectory%\Lib\lib-tk;%PythonPath% -SET PythonPath=%PythonInstallDirectory%\DLLs;%PythonPath% -SET PythonPath=%PythonInstallDirectory%\Lib;%PythonPath% -SET PythonPath=%PythonInstallDirectory%;%PythonPath% - -REM Eliminate variables that will no longer be used. -SET PythonInstallDirectory= -SET JavaJreDirectory= -SET REG_EXE= -SET A2_JAVA_REG= -SET A2_PYTHON_REG= - -REM Determine where we will be logging to. -SET HOME_DIRECTORY=%HOMEDRIVE%%HOMEPATH% -SET CAVEDATA_LOG_DIRECTORY=%HOMEDRIVE%%HOMEPATH%\caveData\logs -SET CONSOLE_LOG_DIRECTORY=%CAVEDATA_LOG_DIRECTORY%\consoleLogs\%COMPUTERNAME% -IF NOT EXIST "%CONSOLE_LOG_DIRECTORY%" (MKDIR "%CONSOLE_LOG_DIRECTORY%") - -echo Starting ALERTVIZ; leave this CMD window open to enable AlertViz 'restart'. -REM Start AlertViz (and implement the alertviz restart capability). -:AlertVizLoopStart -SET RND=%random% -SET RND_DATETIME_FILE=%TMP%\awips2dt_%RND%.tmp -REM Python is used to retrieve the current date and time because the order -REM of the Windows date/time fields is not necessarily guaranteed and the -REM Windows date/time fields can only be extracted using substring operations -REM instead of -formatter- strings like Linux allows. -python -c "from datetime import datetime; print datetime.now().strftime('%%Y%%m%%d_%%H%%M%%S');" > %RND_DATETIME_FILE% -SET /p LOG_DATETIME= < %RND_DATETIME_FILE% -DEL %RND_DATETIME_FILE% -"%CONTAINING_DIRECTORY%alertviz.exe" %* > "%CONSOLE_LOG_DIRECTORY%\alertviz_%LOG_DATETIME%.log" 2>&1 -IF %ERRORLEVEL% == 0 (EXIT) -echo Restarting AlertViz. -GOTO AlertVizLoopStart - +@echo OFF + +REM Determine if we are running on a 32-bit or 64-bit OS. +IF NOT EXIST C:\Windows\SysWOW64\reg.exe ( + SET REG_EXE=C:\Windows\System32\reg.exe +) ELSE ( + SET REG_EXE=C:\Windows\SysWOW64\reg.exe +) + +REM Determine where we are located. +SET CONTAINING_DIRECTORY=%~dp0 + +REM Prepare the environment. + +REM Registry Query Variables. +SET A2_JAVA_REG="HKLM\Software\Raytheon\Runtime Environment\AWIPS II Java" +SET A2_PYTHON_REG="HKLM\Software\Raytheon\Runtime Environment\AWIPS II Python" +REM Determine where AWIPS II Java (the jre) is located. +%REG_EXE% QUERY %A2_JAVA_REG% /v JavaJreDirectory > NUL 2>&1 +IF ERRORLEVEL 1 (echo ENVIRONMENT ERROR - Unable to find AWIPS II Java. && PAUSE && EXIT) +FOR /F "tokens=2* delims= " %%A IN ( +'%REG_EXE% QUERY %A2_JAVA_REG% /v JavaJreDirectory') DO ( +SET JavaJreDirectory=%%B) +REM Determine where AWIPS II Python is located. +%REG_EXE% QUERY %A2_PYTHON_REG% /v PythonInstallDirectory > NUL 2>&1 +IF ERRORLEVEL 1 (echo ENVIRONMENT ERROR - Unable to find AWIPS II Python. && PAUSE && EXIT) +FOR /F "tokens=2* delims= " %%A IN ( +'%REG_EXE% QUERY %A2_PYTHON_REG% /v PythonInstallDirectory') DO ( +SET PythonInstallDirectory=%%B) + +REM Add Java and Python to the path. +SET Path=%PythonInstallDirectory%;%PythonInstallDirectory%\DLLs;%Path% +SET Path=%JavaJreDirectory%\bin;%Path% +REM Define 'PythonPath'. +SET PythonPath=%PythonInstallDirectory%\Lib\lib-tk;%PythonPath% +SET PythonPath=%PythonInstallDirectory%\DLLs;%PythonPath% +SET PythonPath=%PythonInstallDirectory%\Lib;%PythonPath% +SET PythonPath=%PythonInstallDirectory%;%PythonPath% + +REM Eliminate variables that will no longer be used. +SET PythonInstallDirectory= +SET JavaJreDirectory= +SET REG_EXE= +SET A2_JAVA_REG= +SET A2_PYTHON_REG= + +REM Determine where we will be logging to. +SET HOME_DIRECTORY=%HOMEDRIVE%%HOMEPATH% +SET CAVEDATA_LOG_DIRECTORY=%HOMEDRIVE%%HOMEPATH%\caveData\logs +SET CONSOLE_LOG_DIRECTORY=%CAVEDATA_LOG_DIRECTORY%\consoleLogs\%COMPUTERNAME% +IF NOT EXIST "%CONSOLE_LOG_DIRECTORY%" (MKDIR "%CONSOLE_LOG_DIRECTORY%") + +echo Starting ALERTVIZ; leave this CMD window open to enable AlertViz 'restart'. +REM Start AlertViz (and implement the alertviz restart capability). +:AlertVizLoopStart +SET RND=%random% +SET RND_DATETIME_FILE=%TMP%\awips2dt_%RND%.tmp +REM Python is used to retrieve the current date and time because the order +REM of the Windows date/time fields is not necessarily guaranteed and the +REM Windows date/time fields can only be extracted using substring operations +REM instead of -formatter- strings like Linux allows. +python -c "from datetime import datetime; print datetime.now().strftime('%%Y%%m%%d_%%H%%M%%S');" > %RND_DATETIME_FILE% +SET /p LOG_DATETIME= < %RND_DATETIME_FILE% +DEL %RND_DATETIME_FILE% +"%CONTAINING_DIRECTORY%alertviz.exe" %* > "%CONSOLE_LOG_DIRECTORY%\alertviz_%LOG_DATETIME%.log" 2>&1 +IF %ERRORLEVEL% == 0 (EXIT) +echo Restarting AlertViz. +GOTO AlertVizLoopStart + diff --git a/cave/build/static/win32.x86/cave/cave.bat b/cave/build/static/win32.x86/cave/cave.bat index 54992a2550..0b347287dd 100644 --- a/cave/build/static/win32.x86/cave/cave.bat +++ b/cave/build/static/win32.x86/cave/cave.bat @@ -1,72 +1,72 @@ -@echo OFF - -REM Determine if we are running on a 32-bit or 64-bit OS. -IF NOT EXIST C:\Windows\SysWOW64\reg.exe ( - SET REG_EXE=C:\Windows\System32\reg.exe -) ELSE ( - SET REG_EXE=C:\Windows\SysWOW64\reg.exe -) - -REM Determine where we are located. -SET CONTAINING_DIRECTORY=%~dp0 - -REM Prepare the environment. - -REM Registry Query Variables. -SET A2_JAVA_REG="HKLM\Software\Raytheon\Runtime Environment\AWIPS II Java" -SET A2_PYTHON_REG="HKLM\Software\Raytheon\Runtime Environment\AWIPS II Python" -REM Determine where AWIPS II Java (the jre) is located. -%REG_EXE% QUERY %A2_JAVA_REG% /v JavaJreDirectory > NUL 2>&1 -IF ERRORLEVEL 1 (echo ENVIRONMENT ERROR - Unable to find AWIPS II Java. && PAUSE && EXIT) -FOR /F "tokens=2* delims= " %%A IN ( -'%REG_EXE% QUERY %A2_JAVA_REG% /v JavaJreDirectory') DO ( -SET JavaJreDirectory=%%B) -REM Determine where AWIPS II Python is located. -%REG_EXE% QUERY %A2_PYTHON_REG% /v PythonInstallDirectory > NUL 2>&1 -IF ERRORLEVEL 1 (echo ENVIRONMENT ERROR - Unable to find AWIPS II Python. && PAUSE && EXIT) -FOR /F "tokens=2* delims= " %%A IN ( -'%REG_EXE% QUERY %A2_PYTHON_REG% /v PythonInstallDirectory') DO ( -SET PythonInstallDirectory=%%B) - -REM Add Java and Python to the path. -SET Path=%PythonInstallDirectory%;%PythonInstallDirectory%\DLLs;%Path% -SET Path=%JavaJreDirectory%\bin;%Path% -REM Add the CAVE lib directory to the path. -SET Path=%CONTAINING_DIRECTORY%lib;%Path% -REM Define 'PythonPath'. -SET PythonPath=%CONTAINING_DIRECTORY%lib;%PythonPath% -SET PythonPath=%PythonInstallDirectory%\Lib\lib-tk;%PythonPath% -SET PythonPath=%PythonInstallDirectory%\DLLs;%PythonPath% -SET PythonPath=%PythonInstallDirectory%\Lib;%PythonPath% -SET PythonPath=%PythonInstallDirectory%;%PythonPath% - -REM Eliminate variables that will no longer be used. -SET PythonInstallDirectory= -SET JavaJreDirectory= -SET REG_EXE= -SET A2_JAVA_REG= -SET A2_PYTHON_REG= - -REM Determine where we will be logging to. -SET HOME_DIRECTORY=%HOMEDRIVE%%HOMEPATH% -SET CAVEDATA_LOG_DIRECTORY=%HOMEDRIVE%%HOMEPATH%\caveData\logs -SET CONSOLE_LOG_DIRECTORY=%CAVEDATA_LOG_DIRECTORY%\consoleLogs\%COMPUTERNAME% -IF NOT EXIST "%CONSOLE_LOG_DIRECTORY%" (MKDIR "%CONSOLE_LOG_DIRECTORY%") - -SET RND=%random% -SET RND_DATETIME_FILE=%TMP%\awips2dt_%RND%.tmp -REM Python is used to retrieve the current date and time because the order -REM of the Windows date/time fields is not necessarily guaranteed and the -REM Windows date/time fields can only be extracted using substring operations -REM instead of -formatter- strings like Linux allows. -python -c "from datetime import datetime; print datetime.now().strftime('%%Y%%m%%d_%%H%%M%%S');" > %RND_DATETIME_FILE% -SET /p LOG_DATETIME= < %RND_DATETIME_FILE% -DEL %RND_DATETIME_FILE% - -echo THIS CMD WINDOW CAN BE CLOSED AT ANY TIME! -cd %HOMEPATH% -REM Start CAVE. -"%CONTAINING_DIRECTORY%cave.exe" %* > "%CONSOLE_LOG_DIRECTORY%\cave_%LOG_DATETIME%.log" 2>&1 -IF ERRORLEVEL 1 (echo CAVE ERROR - check the logs for additional information. && PAUSE) - -EXIT +@echo OFF + +REM Determine if we are running on a 32-bit or 64-bit OS. +IF NOT EXIST C:\Windows\SysWOW64\reg.exe ( + SET REG_EXE=C:\Windows\System32\reg.exe +) ELSE ( + SET REG_EXE=C:\Windows\SysWOW64\reg.exe +) + +REM Determine where we are located. +SET CONTAINING_DIRECTORY=%~dp0 + +REM Prepare the environment. + +REM Registry Query Variables. +SET A2_JAVA_REG="HKLM\Software\Raytheon\Runtime Environment\AWIPS II Java" +SET A2_PYTHON_REG="HKLM\Software\Raytheon\Runtime Environment\AWIPS II Python" +REM Determine where AWIPS II Java (the jre) is located. +%REG_EXE% QUERY %A2_JAVA_REG% /v JavaJreDirectory > NUL 2>&1 +IF ERRORLEVEL 1 (echo ENVIRONMENT ERROR - Unable to find AWIPS II Java. && PAUSE && EXIT) +FOR /F "tokens=2* delims= " %%A IN ( +'%REG_EXE% QUERY %A2_JAVA_REG% /v JavaJreDirectory') DO ( +SET JavaJreDirectory=%%B) +REM Determine where AWIPS II Python is located. +%REG_EXE% QUERY %A2_PYTHON_REG% /v PythonInstallDirectory > NUL 2>&1 +IF ERRORLEVEL 1 (echo ENVIRONMENT ERROR - Unable to find AWIPS II Python. && PAUSE && EXIT) +FOR /F "tokens=2* delims= " %%A IN ( +'%REG_EXE% QUERY %A2_PYTHON_REG% /v PythonInstallDirectory') DO ( +SET PythonInstallDirectory=%%B) + +REM Add Java and Python to the path. +SET Path=%PythonInstallDirectory%;%PythonInstallDirectory%\DLLs;%Path% +SET Path=%JavaJreDirectory%\bin;%Path% +REM Add the CAVE lib directory to the path. +SET Path=%CONTAINING_DIRECTORY%lib;%Path% +REM Define 'PythonPath'. +SET PythonPath=%CONTAINING_DIRECTORY%lib;%PythonPath% +SET PythonPath=%PythonInstallDirectory%\Lib\lib-tk;%PythonPath% +SET PythonPath=%PythonInstallDirectory%\DLLs;%PythonPath% +SET PythonPath=%PythonInstallDirectory%\Lib;%PythonPath% +SET PythonPath=%PythonInstallDirectory%;%PythonPath% + +REM Eliminate variables that will no longer be used. +SET PythonInstallDirectory= +SET JavaJreDirectory= +SET REG_EXE= +SET A2_JAVA_REG= +SET A2_PYTHON_REG= + +REM Determine where we will be logging to. +SET HOME_DIRECTORY=%HOMEDRIVE%%HOMEPATH% +SET CAVEDATA_LOG_DIRECTORY=%HOMEDRIVE%%HOMEPATH%\caveData\logs +SET CONSOLE_LOG_DIRECTORY=%CAVEDATA_LOG_DIRECTORY%\consoleLogs\%COMPUTERNAME% +IF NOT EXIST "%CONSOLE_LOG_DIRECTORY%" (MKDIR "%CONSOLE_LOG_DIRECTORY%") + +SET RND=%random% +SET RND_DATETIME_FILE=%TMP%\awips2dt_%RND%.tmp +REM Python is used to retrieve the current date and time because the order +REM of the Windows date/time fields is not necessarily guaranteed and the +REM Windows date/time fields can only be extracted using substring operations +REM instead of -formatter- strings like Linux allows. +python -c "from datetime import datetime; print datetime.now().strftime('%%Y%%m%%d_%%H%%M%%S');" > %RND_DATETIME_FILE% +SET /p LOG_DATETIME= < %RND_DATETIME_FILE% +DEL %RND_DATETIME_FILE% + +echo THIS CMD WINDOW CAN BE CLOSED AT ANY TIME! +cd %HOMEPATH% +REM Start CAVE. +"%CONTAINING_DIRECTORY%cave.exe" %* > "%CONSOLE_LOG_DIRECTORY%\cave_%LOG_DATETIME%.log" 2>&1 +IF ERRORLEVEL 1 (echo CAVE ERROR - check the logs for additional information. && PAUSE) + +EXIT diff --git a/cave/com.raytheon.uf.viz.acarssounding/com.raytheon.uf.viz.acarssounding.ecl b/cave/com.raytheon.uf.viz.acarssounding/com.raytheon.uf.viz.acarssounding.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/cave/com.raytheon.uf.viz.alertviz.localization.feature/com.raytheon.uf.viz.alertviz.localization.feature.ecl b/cave/com.raytheon.uf.viz.alertviz.localization.feature/com.raytheon.uf.viz.alertviz.localization.feature.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/cave/com.raytheon.uf.viz.alertviz.localization/com.raytheon.uf.viz.alertviz.localization.ecl b/cave/com.raytheon.uf.viz.alertviz.localization/com.raytheon.uf.viz.alertviz.localization.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/cave/com.raytheon.uf.viz.alertviz.ui/com.raytheon.uf.viz.alertviz.ui.ecl b/cave/com.raytheon.uf.viz.alertviz.ui/com.raytheon.uf.viz.alertviz.ui.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/cave/com.raytheon.uf.viz.alertviz/com.raytheon.uf.viz.alertviz.ecl b/cave/com.raytheon.uf.viz.alertviz/com.raytheon.uf.viz.alertviz.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/cave/com.raytheon.uf.viz.app.launcher/com.raytheon.uf.viz.app.launcher.ecl b/cave/com.raytheon.uf.viz.app.launcher/com.raytheon.uf.viz.app.launcher.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/cave/com.raytheon.uf.viz.application/com.raytheon.uf.viz.application.ecl b/cave/com.raytheon.uf.viz.application/com.raytheon.uf.viz.application.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/cave/com.raytheon.uf.viz.aviation.advisory/com.raytheon.uf.viz.aviation.advisory.ecl b/cave/com.raytheon.uf.viz.aviation.advisory/com.raytheon.uf.viz.aviation.advisory.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/cave/com.raytheon.uf.viz.bufrsigwx/com.raytheon.uf.viz.bufrsigwx.ecl b/cave/com.raytheon.uf.viz.bufrsigwx/com.raytheon.uf.viz.bufrsigwx.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/cave/com.raytheon.uf.viz.bufrua/com.raytheon.uf.viz.bufrua.ecl b/cave/com.raytheon.uf.viz.bufrua/com.raytheon.uf.viz.bufrua.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/cave/com.raytheon.uf.viz.ccfp/com.raytheon.uf.viz.ccfp.ecl b/cave/com.raytheon.uf.viz.ccfp/com.raytheon.uf.viz.ccfp.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/cave/com.raytheon.uf.viz.climo/com.raytheon.uf.viz.climo.ecl b/cave/com.raytheon.uf.viz.climo/com.raytheon.uf.viz.climo.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/cave/com.raytheon.uf.viz.cloudheight/com.raytheon.uf.viz.cloudheight.ecl b/cave/com.raytheon.uf.viz.cloudheight/com.raytheon.uf.viz.cloudheight.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/cave/com.raytheon.uf.viz.common.core.feature/com.raytheon.uf.viz.common.core.feature.ecl b/cave/com.raytheon.uf.viz.common.core.feature/com.raytheon.uf.viz.common.core.feature.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/cave/com.raytheon.uf.viz.coopprecip/com.raytheon.uf.viz.coopprecip.ecl b/cave/com.raytheon.uf.viz.coopprecip/com.raytheon.uf.viz.coopprecip.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/cave/com.raytheon.uf.viz.coopprecip/src/com/raytheon/uf/viz/coopprecip/CoopPrecipDataCubeAdapter.java b/cave/com.raytheon.uf.viz.coopprecip/src/com/raytheon/uf/viz/coopprecip/CoopPrecipDataCubeAdapter.java index 06e022dc1c..88823e4813 100644 --- a/cave/com.raytheon.uf.viz.coopprecip/src/com/raytheon/uf/viz/coopprecip/CoopPrecipDataCubeAdapter.java +++ b/cave/com.raytheon.uf.viz.coopprecip/src/com/raytheon/uf/viz/coopprecip/CoopPrecipDataCubeAdapter.java @@ -407,6 +407,12 @@ public class CoopPrecipDataCubeAdapter implements IDataCubeAdapter { return null; } + @Override + public String recordKeyGenerator(PluginDataObject pdo) { + // TODO Auto-generated method stub + return null; + } + @Override public void initInventory() { // TODO Auto-generated method stub diff --git a/cave/com.raytheon.uf.viz.core.feature/com.raytheon.uf.viz.core.feature.ecl b/cave/com.raytheon.uf.viz.core.feature/com.raytheon.uf.viz.core.feature.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/cave/com.raytheon.uf.viz.core.maps.feature/com.raytheon.uf.viz.core.maps.feature.ecl b/cave/com.raytheon.uf.viz.core.maps.feature/com.raytheon.uf.viz.core.maps.feature.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/cave/com.raytheon.uf.viz.core.maps/com.raytheon.uf.viz.core.maps.ecl b/cave/com.raytheon.uf.viz.core.maps/com.raytheon.uf.viz.core.maps.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/cave/com.raytheon.uf.viz.core.maps/src/com/raytheon/uf/viz/core/maps/rsc/AbstractDbMapResource.java b/cave/com.raytheon.uf.viz.core.maps/src/com/raytheon/uf/viz/core/maps/rsc/AbstractDbMapResource.java index 1439070318..4e05d37877 100644 --- a/cave/com.raytheon.uf.viz.core.maps/src/com/raytheon/uf/viz/core/maps/rsc/AbstractDbMapResource.java +++ b/cave/com.raytheon.uf.viz.core.maps/src/com/raytheon/uf/viz/core/maps/rsc/AbstractDbMapResource.java @@ -87,7 +87,6 @@ public abstract class AbstractDbMapResource T getExtension( - Class extensionClass) throws VizException; - + public abstract T getExtension(Class extensionClass) + throws VizException; } diff --git a/cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/IMesh.java b/cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/IMesh.java index 76bc8d189b..7cc84e6d46 100644 --- a/cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/IMesh.java +++ b/cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/IMesh.java @@ -19,13 +19,14 @@ **/ package com.raytheon.uf.viz.core; -import org.geotools.coverage.grid.GeneralGridGeometry; +import org.geotools.coverage.grid.GridGeometry2D; +import org.opengis.referencing.operation.MathTransform; -import com.raytheon.uf.viz.core.exception.VizException; +import com.raytheon.uf.viz.core.drawables.IRenderable; +import com.raytheon.uf.viz.core.rsc.hdf5.ImageTile; /** - * Base for any mesh 2D/3D, Quad/Triangle -- etc. See {@link PixelCoverage} / - * {@link DrawableImage} + * Base for any mesh 2D/3D, Quad/Triangle -- etc * *
  * SOFTWARE HISTORY
@@ -39,7 +40,27 @@ import com.raytheon.uf.viz.core.exception.VizException;
  * @version 1.0
  */
 
-public interface IMesh {
+public interface IMesh extends IRenderable {
+
+    /**
+     * Calculate all the mesh vertices and texture coordinates
+     * 
+     * @param pc
+     * @param tile
+     * @param toLatLon
+     *            translate the tile coordinates to lat/lon coords if the tile
+     *            envelope is not already
+     */
+    public abstract void calculateMesh(PixelCoverage pc, ImageTile tile,
+            MathTransform toLatLon);
+
+    /**
+     * Calculate all the mesh vertices and texture coordinates
+     * 
+     * @param pc
+     * @param gg
+     */
+    public void calculateMesh(PixelCoverage pc, GridGeometry2D gg);
 
     /**
      * Dispose of the mesh data
@@ -52,12 +73,4 @@ public interface IMesh {
      * @param extent
      */
     public boolean intersects(IExtent extent);
-
-    /**
-     * Reprojects the mesh into the new target geometry
-     * 
-     * @param targetGeometry
-     */
-    public void reproject(GeneralGridGeometry targetGeometry)
-            throws VizException;
 }
diff --git a/cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/alerts/AlertMessage.java b/cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/alerts/AlertMessage.java
index 2828694d7c..8bb925b571 100644
--- a/cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/alerts/AlertMessage.java
+++ b/cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/alerts/AlertMessage.java
@@ -1,19 +1,19 @@
 /**
  * This software was developed and / or modified by Raytheon Company,
- * pursuant to Contract DG133W-05-CQ-1067 with the US Government.
- * 
- * U.S. EXPORT CONTROLLED TECHNICAL DATA
+ * pursuant to Contract DG133W-05-CQ-1067 with the US Government.
+ * 
+ * U.S. EXPORT CONTROLLED TECHNICAL DATA
  * This software product contains export-restricted data whose
  * export/transfer/disclosure is restricted by U.S. law. Dissemination
  * to non-U.S. persons whether in the United States or abroad requires
  * an export license or other authorization.
  * 
- * Contractor Name:        Raytheon Company
- * Contractor Address:     6825 Pine Street, Suite 340
- *                         Mail Stop B8
- *                         Omaha, NE 68106
- *                         402.291.0100
- * 
+ * Contractor Name:        Raytheon Company
+ * Contractor Address:     6825 Pine Street, Suite 340
+ *                         Mail Stop B8
+ *                         Omaha, NE 68106
+ *                         402.291.0100
+ * 
  * See the AWIPS II Master Rights File ("Master Rights File.pdf") for
  * further licensing information.
  **/
diff --git a/cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/data/prep/Colormapper.java b/cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/data/prep/Colormapper.java
index dcd3e9c86d..4ad86cc5ba 100644
--- a/cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/data/prep/Colormapper.java
+++ b/cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/data/prep/Colormapper.java
@@ -77,6 +77,8 @@ public class Colormapper {
         boolean log = parameters.isLogarithmic();
         double logFactor = parameters.getLogFactor();
         boolean mirror = parameters.isMirror();
+        double naturalMin = parameters.getDataMin();
+        double naturalMax = parameters.getDataMax();
         double cmapMin = parameters.getColorMapMin();
         double cmapMax = parameters.getColorMapMax();
         int colorMapSz = parameters.getColorMap().getSize();
diff --git a/cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/datastructure/DataCubeContainer.java b/cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/datastructure/DataCubeContainer.java
index 80ed0d1195..ab9d43aef9 100644
--- a/cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/datastructure/DataCubeContainer.java
+++ b/cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/datastructure/DataCubeContainer.java
@@ -34,6 +34,7 @@ import com.raytheon.uf.common.dataplugin.PluginDataObject;
 import com.raytheon.uf.common.dataquery.requests.RequestConstraint;
 import com.raytheon.uf.common.dataquery.requests.RequestConstraint.ConstraintType;
 import com.raytheon.uf.common.dataquery.requests.TimeQueryRequest;
+import com.raytheon.uf.common.dataquery.requests.TimeQueryRequestSet;
 import com.raytheon.uf.common.datastorage.Request;
 import com.raytheon.uf.common.datastorage.StorageException;
 import com.raytheon.uf.common.datastorage.records.IDataRecord;
@@ -41,7 +42,10 @@ import com.raytheon.uf.common.pointdata.PointDataContainer;
 import com.raytheon.uf.common.time.BinOffset;
 import com.raytheon.uf.common.time.DataTime;
 import com.raytheon.uf.viz.core.catalog.LayerProperty;
+import com.raytheon.uf.viz.core.catalog.ScriptCreator;
+import com.raytheon.uf.viz.core.comm.Loader;
 import com.raytheon.uf.viz.core.exception.VizException;
+import com.raytheon.uf.viz.core.requests.ThriftClient;
 
 /**
  * The DataCubeContainer is responsible for handling requests for data times,
@@ -97,7 +101,7 @@ public class DataCubeContainer {
         if (container.adapter != null) {
             synchronized (container.adapter) {
                 Boolean initialized = initializedMap.get(container.adapter);
-                if (initialized == null || !initialized) {
+                if (!initialized) {
                     container.adapter.initInventory();
                     initializedMap.put(container.adapter, true);
                 }
@@ -117,9 +121,21 @@ public class DataCubeContainer {
                 }
             }
         }
-        if (adapter == null) {
-            // Construct default adapter for plugin if none found
-            adapter = new DefaultDataCubeAdapter(plugin);
+    }
+
+    private IDataRecord[] getDataRecordInternal(PluginDataObject obj)
+            throws VizDataCubeException {
+        if (adapter != null) {
+            return adapter.getRecord(obj);
+        } else {
+            IDataRecord record = null;
+            try {
+                record = CubeUtil.retrieveData(obj, pluginName);
+            } catch (VizException e) {
+                throw new VizDataCubeException(
+                        "Error retrieving 2D grid record.", e);
+            }
+            return new IDataRecord[] { record };
         }
     }
 
@@ -137,7 +153,23 @@ public class DataCubeContainer {
      */
     public static IDataRecord[] getDataRecord(PluginDataObject obj)
             throws VizDataCubeException {
-        return getInstance(obj.getPluginName()).adapter.getRecord(obj);
+        return getInstance(obj.getPluginName()).getDataRecordInternal(obj);
+    }
+
+    private IDataRecord[] getDataRecordInternal(PluginDataObject obj,
+            Request req, String dataset) throws VizDataCubeException {
+        if (adapter != null) {
+            return adapter.getRecord(obj, req, dataset);
+        } else {
+            IDataRecord record = null;
+            try {
+                record = CubeUtil.retrieveData(obj, pluginName, req, dataset);
+            } catch (VizException e) {
+                throw new VizDataCubeException(
+                        "Error retrieving 2D grid record.", e);
+            }
+            return new IDataRecord[] { record };
+        }
     }
 
     /**
@@ -156,10 +188,29 @@ public class DataCubeContainer {
      */
     public static IDataRecord[] getDataRecord(PluginDataObject obj,
             Request req, String dataset) throws VizDataCubeException {
-        return getInstance(obj.getPluginName()).adapter.getRecord(obj, req,
+        return getInstance(obj.getPluginName()).getDataRecordInternal(obj, req,
                 dataset);
     }
 
+    private void getDataRecordsInternal(List objs,
+            Request req, String dataset) throws VizDataCubeException {
+        if (adapter != null) {
+            adapter.getRecords(objs, req, dataset);
+        } else {
+            for (PluginDataObject obj : objs) {
+                IDataRecord record = null;
+                try {
+                    record = CubeUtil.retrieveData(obj, pluginName, req,
+                            dataset);
+                } catch (VizException e) {
+                    throw new VizDataCubeException(
+                            "Error retrieving 2D grid record.", e);
+                }
+                obj.setMessageData(record);
+            }
+        }
+    }
+
     /**
      * For each PluginDataObject requests the DataRecords specified by Request
      * and dataSet and stores those DataRecords in the PluginDataObject message
@@ -187,25 +238,41 @@ public class DataCubeContainer {
                         "All PluginDataObjects must be for the same plugin");
             }
         }
-        getInstance(pluginName).adapter.getRecords(objs, req, dataset);
+        getInstance(pluginName).getDataRecordsInternal(objs, req, dataset);
+    }
+
+    private PointDataContainer getPointDataInternal(String[] params,
+            Map map) throws VizException {
+        if (adapter != null) {
+            return adapter.getPoints(pluginName, params, map);
+        } else {
+            return null;
+        }
     }
 
     public static PointDataContainer getPointData(String plugin,
             String[] params, Map map)
             throws VizException {
-        DataCubeContainer container = getInstance(plugin);
-        return container.adapter.getPoints(container.pluginName, params, map);
+        return getInstance(plugin).getPointDataInternal(params, map);
+    }
+
+    private PointDataContainer getPointDataInternal(String[] params,
+            String levelKey, Map map)
+            throws VizException {
+        if (levelKey == null) {
+            return getPointData(pluginName, params, map);
+        }
+        if (adapter != null) {
+            return adapter.getPoints(pluginName, params, levelKey, map);
+        } else {
+            return null;
+        }
     }
 
     public static PointDataContainer getPointData(String plugin,
             String[] params, String levelKey, Map map)
             throws VizException {
-        DataCubeContainer container = getInstance(plugin);
-        if (levelKey == null) {
-            return getPointData(container.pluginName, params, map);
-        }
-        return container.adapter.getPoints(container.pluginName, params,
-                levelKey, map);
+        return getInstance(plugin).getPointDataInternal(params, levelKey, map);
     }
 
     public static DataTime[] performTimeQuery(
@@ -241,6 +308,20 @@ public class DataCubeContainer {
                 new DataTime[0]);
     }
 
+    public List> performTimeQueriesInternal(
+            List requests) throws VizException {
+        if (adapter == null) {
+            TimeQueryRequestSet set = new TimeQueryRequestSet();
+            set.setRequests(requests.toArray(new TimeQueryRequest[0]));
+            @SuppressWarnings("unchecked")
+            List> result = (List>) ThriftClient
+                    .sendRequest(set);
+            return result;
+        } else {
+            return adapter.timeQuery(requests);
+        }
+    }
+
     /**
      * Perform a bulk time query request when all requests have the same plugin
      * type.
@@ -253,7 +334,7 @@ public class DataCubeContainer {
         if (requests.isEmpty()) {
             return Collections.emptyList();
         }
-        return getInstance(pluginName).adapter.timeQuery(requests);
+        return getInstance(pluginName).performTimeQueriesInternal(requests);
     }
 
     /**
@@ -265,8 +346,8 @@ public class DataCubeContainer {
      */
     public static List> performTimeQueries(String pluginName,
             TimeQueryRequest... requests) throws VizException {
-        return getInstance(pluginName).adapter.timeQuery(Arrays
-                .asList(requests));
+        return getInstance(pluginName).performTimeQueriesInternal(
+                Arrays.asList(requests));
     }
 
     /**
@@ -322,6 +403,17 @@ public class DataCubeContainer {
         return result;
     }
 
+    private synchronized List getDataInternal(LayerProperty property,
+            int timeOut) throws VizException {
+        if (adapter == null) {
+            String scriptToExecute = ScriptCreator.createScript(property);
+            return Loader
+                    .loadScripts(new String[] { scriptToExecute }, timeOut);
+        } else {
+            return adapter.getData(property, timeOut);
+        }
+    }
+
     /**
      * Returns a list of responses for the requested layer property. If a
      * derived parameter, this will piece together the base parameteters.
@@ -340,11 +432,31 @@ public class DataCubeContainer {
                 .getEntryQueryParameters(false);
         String pluginName = originalQuery.get("pluginName")
                 .getConstraintValue();
-        return getInstance(pluginName).adapter.getData(property, timeOut);
+        return getInstance(pluginName).getDataInternal(property, timeOut);
+    }
+
+    private Object getInventoryInternal() {
+        if (adapter != null) {
+            return adapter.getInventory();
+        } else {
+            return null;
+        }
     }
 
     public static Object getInventory(String plugin) {
-        return getInstance(plugin).adapter.getInventory();
+        return getInstance(plugin).getInventoryInternal();
+    }
+
+    private List> getBaseUpdateConstraintsInternal(
+            Map constraints) {
+        if (adapter != null) {
+            return adapter.getBaseUpdateConstraints(constraints);
+        } else {
+            List> result = new ArrayList>(
+                    1);
+            result.add(constraints);
+            return result;
+        }
     }
 
     public static List> getBaseUpdateConstraints(
@@ -355,8 +467,8 @@ public class DataCubeContainer {
                 && pluginRC.getConstraintType() == ConstraintType.EQUALS) {
             plugin = pluginRC.getConstraintValue();
         }
-        return getInstance(plugin).adapter
-                .getBaseUpdateConstraints(constraints);
+        return getInstance(plugin)
+                .getBaseUpdateConstraintsInternal(constraints);
     }
 
 }
diff --git a/cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/datastructure/DefaultDataCubeAdapter.java b/cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/datastructure/DefaultDataCubeAdapter.java
deleted file mode 100644
index c76bd0db1b..0000000000
--- a/cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/datastructure/DefaultDataCubeAdapter.java
+++ /dev/null
@@ -1,239 +0,0 @@
-/**
- * This software was developed and / or modified by Raytheon Company,
- * pursuant to Contract DG133W-05-CQ-1067 with the US Government.
- * 
- * U.S. EXPORT CONTROLLED TECHNICAL DATA
- * This software product contains export-restricted data whose
- * export/transfer/disclosure is restricted by U.S. law. Dissemination
- * to non-U.S. persons whether in the United States or abroad requires
- * an export license or other authorization.
- * 
- * Contractor Name:        Raytheon Company
- * Contractor Address:     6825 Pine Street, Suite 340
- *                         Mail Stop B8
- *                         Omaha, NE 68106
- *                         402.291.0100
- * 
- * See the AWIPS II Master Rights File ("Master Rights File.pdf") for
- * further licensing information.
- **/
-package com.raytheon.uf.viz.core.datastructure;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-
-import com.raytheon.uf.common.dataplugin.PluginDataObject;
-import com.raytheon.uf.common.dataquery.requests.RequestConstraint;
-import com.raytheon.uf.common.dataquery.requests.TimeQueryRequest;
-import com.raytheon.uf.common.dataquery.requests.TimeQueryRequestSet;
-import com.raytheon.uf.common.datastorage.Request;
-import com.raytheon.uf.common.datastorage.records.IDataRecord;
-import com.raytheon.uf.common.pointdata.PointDataContainer;
-import com.raytheon.uf.common.time.DataTime;
-import com.raytheon.uf.viz.core.catalog.LayerProperty;
-import com.raytheon.uf.viz.core.catalog.ScriptCreator;
-import com.raytheon.uf.viz.core.comm.Loader;
-import com.raytheon.uf.viz.core.exception.VizException;
-import com.raytheon.uf.viz.core.requests.ThriftClient;
-
-/**
- * Default implementation of IDataCubeAdapter, function implementations were
- * moved from DataCubeContainer into here
- * 
- * 
- * 
- * SOFTWARE HISTORY
- * 
- * Date         Ticket#    Engineer    Description
- * ------------ ---------- ----------- --------------------------
- * Dec 7, 2011            mschenke     Initial creation
- * 
- * 
- * - * @author mschenke - * @version 1.0 - */ - -public class DefaultDataCubeAdapter implements IDataCubeAdapter { - - private String pluginName; - - public DefaultDataCubeAdapter(String pluginName) { - this.pluginName = pluginName; - } - - /* - * (non-Javadoc) - * - * @see - * com.raytheon.uf.viz.core.datastructure.IDataCubeAdapter#getSupportedPlugins - * () - */ - @Override - public String[] getSupportedPlugins() { - return new String[] { pluginName }; - } - - /* - * (non-Javadoc) - * - * @see - * com.raytheon.uf.viz.core.datastructure.IDataCubeAdapter#timeQuery(java - * .util.List) - */ - @Override - public List> timeQuery(List requests) - throws VizException { - TimeQueryRequestSet set = new TimeQueryRequestSet(); - set.setRequests(requests.toArray(new TimeQueryRequest[0])); - @SuppressWarnings("unchecked") - List> result = (List>) ThriftClient - .sendRequest(set); - return result; - } - - /* - * (non-Javadoc) - * - * @see - * com.raytheon.uf.viz.core.datastructure.IDataCubeAdapter#getPoints(java - * .lang.String, java.lang.String[], java.util.Map) - */ - @Override - public PointDataContainer getPoints(String plugin, String[] parameters, - Map queryParams) throws VizException { - return null; - } - - /* - * (non-Javadoc) - * - * @see - * com.raytheon.uf.viz.core.datastructure.IDataCubeAdapter#getPoints(java - * .lang.String, java.lang.String[], java.lang.String, java.util.Map) - */ - @Override - public PointDataContainer getPoints(String plugin, String[] parameters, - String levelKey, Map queryParams) - throws VizException { - return null; - } - - /* - * (non-Javadoc) - * - * @see - * com.raytheon.uf.viz.core.datastructure.IDataCubeAdapter#getRecord(com - * .raytheon.uf.common.dataplugin.PluginDataObject) - */ - @Override - public IDataRecord[] getRecord(PluginDataObject obj) - throws VizDataCubeException { - IDataRecord record = null; - try { - record = CubeUtil.retrieveData(obj, pluginName); - } catch (VizException e) { - throw new VizDataCubeException("Error retrieving 2D data record.", - e); - } - return new IDataRecord[] { record }; - } - - /* - * (non-Javadoc) - * - * @see - * com.raytheon.uf.viz.core.datastructure.IDataCubeAdapter#getRecord(com - * .raytheon.uf.common.dataplugin.PluginDataObject, - * com.raytheon.uf.common.datastorage.Request, java.lang.String) - */ - @Override - public IDataRecord[] getRecord(PluginDataObject obj, Request req, - String dataset) throws VizDataCubeException { - IDataRecord record = null; - try { - record = CubeUtil.retrieveData(obj, pluginName, req, dataset); - } catch (VizException e) { - throw new VizDataCubeException("Error retrieving 2D data record.", - e); - } - return new IDataRecord[] { record }; - } - - /* - * (non-Javadoc) - * - * @see - * com.raytheon.uf.viz.core.datastructure.IDataCubeAdapter#getRecords(java - * .util.List, com.raytheon.uf.common.datastorage.Request, java.lang.String) - */ - @Override - public void getRecords(List objs, Request req, - String dataset) throws VizDataCubeException { - for (PluginDataObject obj : objs) { - IDataRecord record = null; - try { - record = CubeUtil.retrieveData(obj, pluginName, req, dataset); - } catch (VizException e) { - throw new VizDataCubeException( - "Error retrieving 2D grid record.", e); - } - obj.setMessageData(record); - } - } - - /* - * (non-Javadoc) - * - * @see - * com.raytheon.uf.viz.core.datastructure.IDataCubeAdapter#getData(com.raytheon - * .uf.viz.core.catalog.LayerProperty, int) - */ - @Override - public List getData(LayerProperty property, int timeOut) - throws VizException { - String scriptToExecute = ScriptCreator.createScript(property); - return Loader.loadScripts(new String[] { scriptToExecute }, timeOut); - } - - /* - * (non-Javadoc) - * - * @see - * com.raytheon.uf.viz.core.datastructure.IDataCubeAdapter#initInventory() - */ - @Override - public void initInventory() { - // TODO Auto-generated method stub - - } - - /* - * (non-Javadoc) - * - * @see - * com.raytheon.uf.viz.core.datastructure.IDataCubeAdapter#getInventory() - */ - @Override - public Object getInventory() { - // TODO Auto-generated method stub - return null; - } - - /* - * (non-Javadoc) - * - * @see com.raytheon.uf.viz.core.datastructure.IDataCubeAdapter# - * getBaseUpdateConstraints(java.util.Map) - */ - @Override - public List> getBaseUpdateConstraints( - Map constraints) { - List> result = new ArrayList>( - 1); - result.add(constraints); - return result; - } - -} diff --git a/cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/datastructure/IDataCubeAdapter.java b/cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/datastructure/IDataCubeAdapter.java index bfe563f73a..9a46c46216 100644 --- a/cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/datastructure/IDataCubeAdapter.java +++ b/cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/datastructure/IDataCubeAdapter.java @@ -145,6 +145,16 @@ public interface IDataCubeAdapter { public List getData(LayerProperty property, int timeOut) throws VizException; + /** + * A simple method that will create a unique string based on the information + * in the PluginDataObject passed in. + * + * @param pdo + * The PDO to generate a unique name from + * @return A string unique to that PDO + */ + public String recordKeyGenerator(PluginDataObject pdo); + /** * If the inventory for a particular data type is large (for example, Grib), * a call to this method should get a copy of that data type's inventory diff --git a/cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/drawables/AbstractDescriptor.java b/cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/drawables/AbstractDescriptor.java index 3e73a920a4..9e3c1374cf 100644 --- a/cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/drawables/AbstractDescriptor.java +++ b/cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/drawables/AbstractDescriptor.java @@ -31,22 +31,7 @@ import java.util.concurrent.ConcurrentHashMap; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; -import org.geotools.coverage.grid.GeneralGridEnvelope; -import org.geotools.coverage.grid.GeneralGridGeometry; -import org.geotools.coverage.grid.GridGeometry2D; -import org.geotools.geometry.GeneralEnvelope; -import org.geotools.referencing.CRS; -import org.geotools.referencing.operation.DefaultMathTransformFactory; -import org.opengis.referencing.FactoryException; -import org.opengis.referencing.crs.CoordinateReferenceSystem; -import org.opengis.referencing.crs.GeneralDerivedCRS; -import org.opengis.referencing.datum.PixelInCell; -import org.opengis.referencing.operation.MathTransform; -import org.opengis.referencing.operation.TransformException; - -import com.raytheon.uf.common.serialization.adapters.GridGeometryAdapter; import com.raytheon.uf.common.status.IUFStatusHandler; import com.raytheon.uf.common.status.UFStatus; import com.raytheon.uf.common.status.UFStatus.Priority; @@ -54,7 +39,6 @@ import com.raytheon.uf.common.time.DataTime; import com.raytheon.uf.viz.core.AbstractTimeMatcher; import com.raytheon.uf.viz.core.IDisplayPane; import com.raytheon.uf.viz.core.IDisplayPaneContainer; -import com.raytheon.uf.viz.core.IExtent; import com.raytheon.uf.viz.core.VizConstants; import com.raytheon.uf.viz.core.datastructure.LoopProperties; import com.raytheon.uf.viz.core.exception.VizException; @@ -127,19 +111,6 @@ public abstract class AbstractDescriptor extends ResourceGroup implements /** The frame coordination object */ protected IFrameCoordinator frameCoordinator; - private MathTransform worldToPixel; - - private MathTransform pixelToWorld; - - /** The spatial grid for the descriptor */ - private GeneralGridGeometry gridGeometry; - - public AbstractDescriptor(GeneralGridGeometry gridGeometry) { - this(); - this.gridGeometry = gridGeometry; - init(); - } - /** * Constructor */ @@ -225,8 +196,7 @@ public abstract class AbstractDescriptor extends ResourceGroup implements protected void preAddListener(ResourcePair rp) throws WrongProjectionException { - AbstractVizResource resource = (AbstractVizResource) rp - .getResource(); + AbstractVizResource resource = rp.getResource(); resource.setDescriptor(this); @@ -684,119 +654,6 @@ public abstract class AbstractDescriptor extends ResourceGroup implements return frameCoordinator; } - private void init() { - GeneralGridGeometry gridGeometry = getGridGeometry(); - MathTransform worldToCRS = getWorldToCRSTransform(gridGeometry); - if (worldToCRS != null) { - try { - MathTransform crsToPixel = gridGeometry.getGridToCRS( - PixelInCell.CELL_CENTER).inverse(); - worldToPixel = new DefaultMathTransformFactory() - .createConcatenatedTransform(worldToCRS, crsToPixel); - pixelToWorld = worldToPixel.inverse(); - } catch (Exception e) { - statusHandler.handle(Priority.PROBLEM, - "Error setting up Math Transforms," - + " this descriptor may not work properly", e); - } - } - } - - /* - * (non-Javadoc) - * - * @see com.raytheon.uf.viz.core.drawables.IDescriptor#getCRS() - */ - @Override - public final CoordinateReferenceSystem getCRS() { - if (gridGeometry != null && gridGeometry.getEnvelope() != null) { - return gridGeometry.getEnvelope().getCoordinateReferenceSystem(); - } else { - return null; - } - } - - /* - * (non-Javadoc) - * - * @see com.raytheon.uf.viz.core.drawables.IDescriptor#getGridGeometry() - */ - @Override - @XmlElement - @XmlJavaTypeAdapter(value = GridGeometryAdapter.class) - public final GeneralGridGeometry getGridGeometry() { - return gridGeometry; - } - - /** - * Set the grid geometry - * - * @param gridGeometry - * the gridGeometry to set - * @throws VizException - */ - public void setGridGeometry(GeneralGridGeometry gridGeometry) - throws VizException { - this.gridGeometry = gridGeometry; - init(); - } - - /* - * (non-Javadoc) - * - * @see - * com.raytheon.uf.viz.core.drawables.IDescriptor#pixelToWorld(double[]) - */ - @Override - public final double[] pixelToWorld(double[] pixel) { - double[] output = new double[3]; - double[] wpixel = pixel; - - if (pixel.length == 2) { - wpixel = new double[] { pixel[0], pixel[1], 0 }; - } - - if (pixelToWorld != null) { - try { - pixelToWorld.transform(wpixel, 0, output, 0, 1); - } catch (TransformException e) { - e.printStackTrace(); - return null; - } - } else { - System.arraycopy(wpixel, 0, output, 0, wpixel.length); - } - - return output; - } - - /* - * (non-Javadoc) - * - * @see - * com.raytheon.uf.viz.core.drawables.IDescriptor#worldToPixel(double[]) - */ - @Override - public final double[] worldToPixel(double[] world) { - double[] output = new double[3]; - double[] input = world; - if (world.length == 2) { - input = new double[] { world[0], world[1], 0 }; - } - - if (worldToPixel != null) { - try { - worldToPixel.transform(input, 0, output, 0, 1); - } catch (TransformException e) { - return null; - } - } else { - System.arraycopy(input, 0, output, 0, input.length); - } - - return output; - } - /* * (non-Javadoc) * @@ -826,40 +683,4 @@ public abstract class AbstractDescriptor extends ResourceGroup implements getFrameCoordinator().changeFrame(loopProperties); } - protected static GeneralGridGeometry createGridGeometry(IExtent extent, - CoordinateReferenceSystem crs) { - GeneralEnvelope envelope = new GeneralEnvelope(2); - envelope.setRange(0, extent.getMinX(), extent.getMaxX()); - envelope.setRange(1, extent.getMinY(), extent.getMaxY()); - envelope.setCoordinateReferenceSystem(crs); - return new GridGeometry2D( - new GeneralGridEnvelope(new int[] { 0, 0 }, new int[] { - (int) extent.getWidth(), (int) extent.getHeight() }, - false), envelope); - } - - /** - * Get the world to CRS transform used for {@link #worldToPixel(double[])} - * and {@link #pixelToWorld(double[])} - * - * @param gridGeometry - * @return The world to gridGeometry CRS transform or null if there is none - */ - public static MathTransform getWorldToCRSTransform( - GeneralGridGeometry gridGeometry) { - CoordinateReferenceSystem crs = gridGeometry.getEnvelope() - .getCoordinateReferenceSystem(); - if (crs instanceof GeneralDerivedCRS) { - GeneralDerivedCRS projCRS = (GeneralDerivedCRS) crs; - CoordinateReferenceSystem worldCRS = projCRS.getBaseCRS(); - try { - return CRS.findMathTransform(worldCRS, crs); - } catch (FactoryException e) { - statusHandler.handle(Priority.PROBLEM, - "Error setting up Math Transforms," - + " this descriptor may not work properly", e); - } - } - return null; - } } diff --git a/cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/drawables/ColorMapLoader.java b/cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/drawables/ColorMapLoader.java index 2de903912e..51c67cf27a 100644 --- a/cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/drawables/ColorMapLoader.java +++ b/cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/drawables/ColorMapLoader.java @@ -206,8 +206,8 @@ public class ColorMapLoader { ColorMap cm = (ColorMap) SerializationUtil .jaxbUnmarshalFromXmlFile(colorMapFile.getFile() .getAbsolutePath()); + cm.setName(name); - cm.setChanged(false); return cm; } else { return null; diff --git a/cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/drawables/ColorMapParameters.java b/cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/drawables/ColorMapParameters.java index c3cd3ee7bc..e3ea7f9db0 100644 --- a/cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/drawables/ColorMapParameters.java +++ b/cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/drawables/ColorMapParameters.java @@ -22,8 +22,6 @@ package com.raytheon.uf.viz.core.drawables; import java.text.DecimalFormat; import java.util.ArrayList; import java.util.Arrays; -import java.util.HashSet; -import java.util.Set; import javax.measure.converter.UnitConverter; import javax.measure.unit.Unit; @@ -118,7 +116,7 @@ public class ColorMapParameters implements Cloneable, ISerializableObject { } - protected Set listeners = new HashSet(); + protected IColorMapParametersListener listener; /** Units of the colormap parameters (min/max) */ protected Unit displayUnit; @@ -716,19 +714,13 @@ public class ColorMapParameters implements Cloneable, ISerializableObject { } private void notifyListener() { - for (IColorMapParametersListener listener : listeners) { + if (listener != null) { listener.colorMapChanged(); } } - public void addListener(IColorMapParametersListener listener) { - if (listener != null) { - listeners.add(listener); - } - } - - public void removeListener(IColorMapParametersListener listener) { - listeners.remove(listener); + public void setListener(IColorMapParametersListener listener) { + this.listener = listener; } public void setAlphaMask(byte[] alphaMask) { @@ -749,8 +741,8 @@ public class ColorMapParameters implements Cloneable, ISerializableObject { @Override public int hashCode() { - if (listeners.size() > 0) { - return listeners.hashCode(); + if (listener != null) { + return listener.hashCode(); } else if (colorMap != null) { return colorMap.hashCode(); } else { diff --git a/cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/drawables/IImage.java b/cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/drawables/IImage.java index b6ce410f25..4169563fcf 100644 --- a/cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/drawables/IImage.java +++ b/cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/drawables/IImage.java @@ -20,9 +20,6 @@ package com.raytheon.uf.viz.core.drawables; -import com.raytheon.uf.viz.core.drawables.ext.IImagingExtension; -import com.raytheon.uf.viz.core.exception.VizException; - /** * Describes a generic Image resource. The IImage resource is an interface * handle to an image. The image resource manages the lifecycle of the @@ -66,11 +63,6 @@ public interface IImage { UNLOADED, STAGED, LOADED, LOADING, FAILED, INVALID }; - /** - * Stages any data required for the image to load/draw - */ - public abstract void stage() throws VizException; - /** * @return the status */ @@ -114,10 +106,4 @@ public interface IImage { */ public abstract void setContrast(float contrast); - /** - * Gets the extension class for this image - * - * @return - */ - public abstract Class getExtensionClass(); } \ No newline at end of file diff --git a/cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/drawables/ImagingSupport.java b/cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/drawables/ImagingSupport.java deleted file mode 100644 index 764209e217..0000000000 --- a/cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/drawables/ImagingSupport.java +++ /dev/null @@ -1,143 +0,0 @@ -/** - * This software was developed and / or modified by Raytheon Company, - * pursuant to Contract DG133W-05-CQ-1067 with the US Government. - * - * U.S. EXPORT CONTROLLED TECHNICAL DATA - * This software product contains export-restricted data whose - * export/transfer/disclosure is restricted by U.S. law. Dissemination - * to non-U.S. persons whether in the United States or abroad requires - * an export license or other authorization. - * - * Contractor Name: Raytheon Company - * Contractor Address: 6825 Pine Street, Suite 340 - * Mail Stop B8 - * Omaha, NE 68106 - * 402.291.0100 - * - * See the AWIPS II Master Rights File ("Master Rights File.pdf") for - * further licensing information. - **/ -package com.raytheon.uf.viz.core.drawables; - -import java.util.ArrayList; -import java.util.List; - -import com.raytheon.uf.viz.core.DrawableImage; -import com.raytheon.uf.viz.core.IGraphicsTarget; -import com.raytheon.uf.viz.core.IGraphicsTarget.RasterMode; -import com.raytheon.uf.viz.core.drawables.IImage.Status; -import com.raytheon.uf.viz.core.drawables.ext.IImagingExtension; -import com.raytheon.uf.viz.core.drawables.ext.TextureLoader; -import com.raytheon.uf.viz.core.exception.VizException; - -/** - * Support class for rendering images to a target - * - *
- * 
- * SOFTWARE HISTORY
- * 
- * Date         Ticket#    Engineer    Description
- * ------------ ---------- ----------- --------------------------
- * Mar 13, 2012            mschenke     Initial creation
- * 
- * 
- * - * @author mschenke - * @version 1.0 - */ - -public class ImagingSupport { - - protected static final TextureLoader textureLoader = TextureLoader - .getInstance(); - - /** - * Prepares images for painting by staging and/or targeting the image - * - * @param target - * @param images - * @throws VizException - */ - public static void prepareImages(IGraphicsTarget target, - DrawableImage... images) throws VizException { - for (DrawableImage di : images) { - IImage image = di.getImage(); - RasterMode mode = di.getMode(); - - if (image.getStatus() != Status.LOADED - && image.getStatus() != Status.STAGED) { - if (mode == RasterMode.ASYNCHRONOUS) { - textureLoader.requestLoad(image); - target.setNeedsRefresh(true); - } else if (mode == RasterMode.SYNCHRONOUS) { - image.stage(); - } - } - } - } - - /** - * Routes the images to be rendered by their proper extensions, expects - * images have already been "prepared" (Status=STAGED) - * - * @param target - * @param paintProps - * @param images - * @return - * @throws VizException - */ - public static boolean routeImages(IGraphicsTarget target, - PaintProperties paintProps, DrawableImage[] images) - throws VizException { - boolean rval = true; - boolean skipped = false; - List bulk = new ArrayList(); - Class lastExt = null; - for (DrawableImage di : images) { - IImage image = di.getImage(); - IImage.Status imageSts = image.getStatus(); - if (imageSts == IImage.Status.LOADED - || imageSts == IImage.Status.STAGED) { - Class imageExt = image - .getExtensionClass(); - if (imageExt.equals(lastExt) == false && bulk.size() > 0) { - DrawableImage[] extImages = bulk - .toArray(new DrawableImage[bulk.size()]); - // Render what we have - IImagingExtension impl = target.getExtension(lastExt); - rval &= impl.drawRasters(paintProps, extImages); - bulk.clear(); - } - - bulk.add(di); - lastExt = imageExt; - } else { - skipped = true; - } - } - - if (bulk.size() > 0) { - // Render what is left - IImagingExtension impl = target.getExtension(lastExt); - rval &= impl.drawRasters(paintProps, - bulk.toArray(new DrawableImage[bulk.size()])); - } - - return rval & skipped; - } - - /** - * Prepares the images, then routes them for rendering - * - * @param paintProps - * @param images - * @return - */ - public static boolean drawRasters(IGraphicsTarget target, - PaintProperties paintProps, DrawableImage[] images) - throws VizException { - prepareImages(target, images); - return routeImages(target, paintProps, images); - } -} diff --git a/cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/drawables/SingleColorImage.java b/cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/drawables/SingleColorImage.java new file mode 100644 index 0000000000..44ed0d2e9b --- /dev/null +++ b/cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/drawables/SingleColorImage.java @@ -0,0 +1,66 @@ +package com.raytheon.uf.viz.core.drawables; + +import org.eclipse.swt.graphics.RGB; + +public class SingleColorImage implements IImage { + + private IImage image = null; + + private RGB color = null; + + public IImage getWrappedImage() { + return image; + } + + public void setWrappedImage(IImage image) { + this.image = image; + } + + public void setColor(RGB color) { + this.color = color; + } + + public RGB getColor() { + return color; + } + + public SingleColorImage(IImage image) { + this.image = image; + } + + @Override + public Status getStatus() { + return image.getStatus(); + } + + @Override + public void setInterpolated(boolean isInterpolated) { + image.setInterpolated(isInterpolated); + } + + @Override + public void dispose() { + image.dispose(); + } + + @Override + public int getWidth() { + return image.getWidth(); + } + + @Override + public int getHeight() { + return image.getHeight(); + } + + @Override + public void setBrightness(float brightness) { + image.setBrightness(brightness); + } + + @Override + public void setContrast(float contrast) { + image.setContrast(contrast); + } + +} diff --git a/cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/drawables/ext/GraphicsExtension.java b/cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/drawables/ext/GraphicsExtension.java index adf101661a..9e0a79bdd7 100644 --- a/cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/drawables/ext/GraphicsExtension.java +++ b/cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/drawables/ext/GraphicsExtension.java @@ -40,22 +40,15 @@ import com.raytheon.uf.viz.core.IGraphicsTarget; */ public abstract class GraphicsExtension { - /** - * Interface that other interfaces should extend if they want to be used as - * a graphics extension - */ - public static interface IGraphicsExtensionInterface { + public static enum Compatibilty { + INCOMPATIBLE(-1), GENERIC(0), TARGET_COMPATIBLE(1000), ENHANCED_TARGET_COMPATIBLE( + 2000); - } + public int value; - public static class Compatibilty { - public static final int INCOMPATIBLE = -1; - - public static final int GENERIC = 0; - - public static final int TARGET_COMPATIBLE = 1000; - - public static final int ENHANCED_TARGET_COMPATIBLE = 2000; + private Compatibilty(int value) { + this.value = value; + } } protected T target; @@ -76,19 +69,12 @@ public abstract class GraphicsExtension { public final int setTarget(IGraphicsTarget target) { try { this.target = (T) target; - return getCompatibilityValue(this.target); } catch (ClassCastException e) { - this.target = null; - return Compatibilty.INCOMPATIBLE; + return Compatibilty.INCOMPATIBLE.value; } + return getCompatibilityValue(this.target); } - /** - * Get the target compability value. - * - * @param target - * @return - */ public abstract int getCompatibilityValue(T target); /** diff --git a/cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/drawables/ext/GraphicsExtensionManager.java b/cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/drawables/ext/GraphicsExtensionManager.java index a94086ac81..a33b5b85b4 100644 --- a/cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/drawables/ext/GraphicsExtensionManager.java +++ b/cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/drawables/ext/GraphicsExtensionManager.java @@ -15,7 +15,6 @@ import com.raytheon.uf.common.status.IUFStatusHandler; import com.raytheon.uf.common.status.UFStatus; import com.raytheon.uf.common.status.UFStatus.Priority; import com.raytheon.uf.viz.core.IGraphicsTarget; -import com.raytheon.uf.viz.core.drawables.ext.GraphicsExtension.IGraphicsExtensionInterface; import com.raytheon.uf.viz.core.exception.VizException; public class GraphicsExtensionManager { @@ -68,8 +67,8 @@ public class GraphicsExtensionManager { * @return * @throws VizException */ - public synchronized T getExtension( - Class extensionClass) throws VizException { + public synchronized T getExtension(Class extensionClass) + throws VizException { if (cached.containsKey(extensionClass)) { return extensionClass.cast(cached.get(extensionClass)); } @@ -77,14 +76,10 @@ public class GraphicsExtensionManager { int bestVal = -1; for (Class eClass : extensions) { if (extensionClass.isAssignableFrom(eClass)) { + GraphicsExtension graphicsExt; try { - GraphicsExtension graphicsExt = GraphicsExtension.class.cast(eClass + graphicsExt = GraphicsExtension.class.cast(eClass .newInstance()); - int val = graphicsExt.setTarget(target); - if (val > bestVal) { - bestVal = val; - bestExt = extensionClass.cast(graphicsExt); - } } catch (InstantiationException e) { statusHandler.handle(Priority.PROBLEM, e.getLocalizedMessage(), e); @@ -94,6 +89,11 @@ public class GraphicsExtensionManager { e.getLocalizedMessage(), e); continue; } + int val = graphicsExt.setTarget(target); + if (val > bestVal) { + bestVal = val; + bestExt = extensionClass.cast(graphicsExt); + } } } if (bestExt != null) { diff --git a/cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/drawables/ext/IOffscreenRenderingExtension.java b/cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/drawables/ext/IOffscreenRenderingExtension.java index 778028c21f..3afc85fd54 100644 --- a/cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/drawables/ext/IOffscreenRenderingExtension.java +++ b/cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/drawables/ext/IOffscreenRenderingExtension.java @@ -4,11 +4,9 @@ import java.nio.Buffer; import com.raytheon.uf.viz.core.drawables.ColorMapParameters; import com.raytheon.uf.viz.core.drawables.IImage; -import com.raytheon.uf.viz.core.drawables.ext.GraphicsExtension.IGraphicsExtensionInterface; import com.raytheon.uf.viz.core.exception.VizException; -public interface IOffscreenRenderingExtension extends - IGraphicsExtensionInterface { +public interface IOffscreenRenderingExtension { /** * All drawing between a call to renderOffscreen and the next call to * renderOnscreen will be drawn to offscreenImage rather than to the screen. diff --git a/cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/drawables/ext/TextureLoader.java b/cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/drawables/ext/TextureLoader.java deleted file mode 100644 index 44a7a6814f..0000000000 --- a/cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/drawables/ext/TextureLoader.java +++ /dev/null @@ -1,129 +0,0 @@ -/** - * This software was developed and / or modified by Raytheon Company, - * pursuant to Contract DG133W-05-CQ-1067 with the US Government. - * - * U.S. EXPORT CONTROLLED TECHNICAL DATA - * This software product contains export-restricted data whose - * export/transfer/disclosure is restricted by U.S. law. Dissemination - * to non-U.S. persons whether in the United States or abroad requires - * an export license or other authorization. - * - * Contractor Name: Raytheon Company - * Contractor Address: 6825 Pine Street, Suite 340 - * Mail Stop B8 - * Omaha, NE 68106 - * 402.291.0100 - * - * See the AWIPS II Master Rights File ("Master Rights File.pdf") for - * further licensing information. - **/ - -package com.raytheon.uf.viz.core.drawables.ext; - -import java.util.ArrayList; -import java.util.List; - -import org.eclipse.ui.services.IDisposable; - -import com.raytheon.uf.common.status.IUFStatusHandler; -import com.raytheon.uf.common.status.UFStatus; -import com.raytheon.uf.common.status.UFStatus.Priority; -import com.raytheon.uf.viz.core.Activator; -import com.raytheon.uf.viz.core.drawables.IImage; -import com.raytheon.uf.viz.core.jobs.JobPool; - -/** - * Class that loads data for AbstractGLImages asynchronously - * - *
- * 
- *    SOFTWARE HISTORY
- *   
- *    Date          Ticket#     Engineer    Description
- *    ------------	----------	-----------	--------------------------
- *    7/1/06                    chammack    Initial Creation.
- * 
- * 
- * - * @author chammack - * - */ -public class TextureLoader { - - private static final IUFStatusHandler statusHandler = UFStatus - .getHandler(TextureLoader.class); - - /** The instance */ - private static TextureLoader instance; - - private JobPool loaderPool; - - private List texturesToLoad; - - /** - * Get the currently running instance of the texture loader - * - * @return - */ - public static synchronized TextureLoader getInstance() { - if (instance == null) { - instance = new TextureLoader(); - } - return instance; - } - - /** - * Use getInstance() instead of constructor - * - */ - private TextureLoader() { - this.texturesToLoad = new ArrayList(); - this.loaderPool = new JobPool("Texture Loader", Runtime.getRuntime() - .availableProcessors(), true); - // Make sure we get shutdown properly - Activator.getDefault().registerDisposable(new IDisposable() { - @Override - public void dispose() { - shutdown(); - } - }); - } - - /** - * Request an image to be loaded - * - * @param img - * the image - */ - public void requestLoad(final IImage img) { - if (!texturesToLoad.contains(img)) { - texturesToLoad.add(img); - loaderPool.schedule(new Runnable() { - @Override - public void run() { - try { - try { - img.stage(); - } catch (Throwable t) { - statusHandler.handle( - Priority.PROBLEM, - "Error staging texture: " - + t.getLocalizedMessage(), t); - } - } finally { - texturesToLoad.remove(img); - } - } - }); - } - } - - /** - * Request the job to be shut down - * - */ - public void shutdown() { - loaderPool.cancel(); - } - -} diff --git a/cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/drawables/ext/colormap/ColormappedImage.java b/cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/drawables/ext/colormap/ColormappedImage.java deleted file mode 100644 index 465f2c3ecd..0000000000 --- a/cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/drawables/ext/colormap/ColormappedImage.java +++ /dev/null @@ -1,240 +0,0 @@ -/** - * This software was developed and / or modified by Raytheon Company, - * pursuant to Contract DG133W-05-CQ-1067 with the US Government. - * - * U.S. EXPORT CONTROLLED TECHNICAL DATA - * This software product contains export-restricted data whose - * export/transfer/disclosure is restricted by U.S. law. Dissemination - * to non-U.S. persons whether in the United States or abroad requires - * an export license or other authorization. - * - * Contractor Name: Raytheon Company - * Contractor Address: 6825 Pine Street, Suite 340 - * Mail Stop B8 - * Omaha, NE 68106 - * 402.291.0100 - * - * See the AWIPS II Master Rights File ("Master Rights File.pdf") for - * further licensing information. - **/ -package com.raytheon.uf.viz.core.drawables.ext.colormap; - -import java.awt.image.RenderedImage; - -import com.raytheon.uf.viz.core.IGraphicsTarget; -import com.raytheon.uf.viz.core.data.IColorMapDataRetrievalCallback; -import com.raytheon.uf.viz.core.data.IColorMapDataRetrievalCallback.ColorMapData; -import com.raytheon.uf.viz.core.data.IRenderedImageCallback; -import com.raytheon.uf.viz.core.data.prep.Colormapper; -import com.raytheon.uf.viz.core.drawables.ColorMapParameters; -import com.raytheon.uf.viz.core.drawables.IColorMapParametersListener; -import com.raytheon.uf.viz.core.drawables.IColormappedImage; -import com.raytheon.uf.viz.core.drawables.IImage; -import com.raytheon.uf.viz.core.drawables.ext.IImagingExtension; -import com.raytheon.uf.viz.core.exception.VizException; - -/** - * General colormapped image, regenerates image if parameters change - * - *
- * 
- * SOFTWARE HISTORY
- * 
- * Date         Ticket#    Engineer    Description
- * ------------ ---------- ----------- --------------------------
- * Dec 16, 2011            mschenke     Initial creation
- * 
- * 
- * - * @author mschenke - * @version 1.0 - */ - -public class ColormappedImage implements IColormappedImage, - IRenderedImageCallback, IColorMapParametersListener { - - private IImage image; - - private IColorMapDataRetrievalCallback callback; - - private ColorMapParameters parameters; - - public ColormappedImage(IGraphicsTarget target, - IColorMapDataRetrievalCallback callback, - ColorMapParameters parameters) { - this.callback = callback; - setColorMapParameters(parameters); - image = target.initializeRaster(this); - } - - /** - * Get the wrapped image for the colormapped image - * - * @return - */ - public IImage getWrappedImage() { - return image; - } - - /* - * (non-Javadoc) - * - * @see com.raytheon.uf.viz.core.drawables.IImage#getStatus() - */ - @Override - public Status getStatus() { - return image.getStatus(); - } - - /* - * (non-Javadoc) - * - * @see com.raytheon.uf.viz.core.drawables.IImage#setInterpolated(boolean) - */ - @Override - public void setInterpolated(boolean isInterpolated) { - image.setInterpolated(isInterpolated); - } - - /* - * (non-Javadoc) - * - * @see com.raytheon.uf.viz.core.drawables.IImage#dispose() - */ - @Override - public void dispose() { - if (image != null) { - image.dispose(); - } - } - - /* - * (non-Javadoc) - * - * @see com.raytheon.uf.viz.core.drawables.IImage#getWidth() - */ - @Override - public int getWidth() { - return image.getWidth(); - } - - /* - * (non-Javadoc) - * - * @see com.raytheon.uf.viz.core.drawables.IImage#getHeight() - */ - @Override - public int getHeight() { - return image.getHeight(); - } - - /* - * (non-Javadoc) - * - * @see com.raytheon.uf.viz.core.drawables.IImage#setBrightness(float) - */ - @Override - public void setBrightness(float brightness) { - image.setBrightness(brightness); - } - - /* - * (non-Javadoc) - * - * @see com.raytheon.uf.viz.core.drawables.IImage#setContrast(float) - */ - @Override - public void setContrast(float contrast) { - image.setContrast(contrast); - } - - /* - * (non-Javadoc) - * - * @see com.raytheon.uf.viz.core.drawables.IImage#getExtensionClass() - */ - @Override - public Class getExtensionClass() { - return GeneralColormappedImageExtension.class; - } - - /* - * (non-Javadoc) - * - * @see - * com.raytheon.uf.viz.core.drawables.IColormappedImage#getColorMapParameters - * () - */ - @Override - public ColorMapParameters getColorMapParameters() { - return parameters; - } - - /* - * (non-Javadoc) - * - * @see - * com.raytheon.uf.viz.core.drawables.IColormappedImage#setColorMapParameters - * (com.raytheon.uf.viz.core.drawables.ColorMapParameters) - */ - @Override - public void setColorMapParameters(ColorMapParameters params) { - if (params != this.parameters) { - if (this.parameters != null) { - this.parameters.removeListener(this); - } - this.parameters = params; - if (this.parameters != null) { - this.parameters.addListener(this); - } - dispose(); - } - } - - /* - * (non-Javadoc) - * - * @see com.raytheon.uf.viz.core.drawables.IColormappedImage#getValue(int, - * int) - */ - @Override - public double getValue(int x, int y) { - return Double.NaN; - } - - /* - * (non-Javadoc) - * - * @see com.raytheon.uf.viz.core.data.IRenderedImageCallback#getImage() - */ - @Override - public RenderedImage getImage() throws VizException { - if (parameters == null || parameters.getColorMap() == null) { - return null; - } - ColorMapData colorMapData = callback.getColorMapData(); - return Colormapper.colorMap(colorMapData, parameters); - } - - /* - * (non-Javadoc) - * - * @see com.raytheon.uf.viz.core.drawables.IColorMapParametersListener# - * colorMapChanged() - */ - @Override - public void colorMapChanged() { - dispose(); - } - - /* - * (non-Javadoc) - * - * @see com.raytheon.uf.viz.core.drawables.IImage#stage() - */ - @Override - public void stage() throws VizException { - image.stage(); - } - -} diff --git a/cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/drawables/ext/colormap/ColormappedRenderedImageCallback.java b/cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/drawables/ext/colormap/ColormappedRenderedImageCallback.java new file mode 100644 index 0000000000..69f039b12d --- /dev/null +++ b/cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/drawables/ext/colormap/ColormappedRenderedImageCallback.java @@ -0,0 +1,81 @@ +/** + * This software was developed and / or modified by Raytheon Company, + * pursuant to Contract DG133W-05-CQ-1067 with the US Government. + * + * U.S. EXPORT CONTROLLED TECHNICAL DATA + * This software product contains export-restricted data whose + * export/transfer/disclosure is restricted by U.S. law. Dissemination + * to non-U.S. persons whether in the United States or abroad requires + * an export license or other authorization. + * + * Contractor Name: Raytheon Company + * Contractor Address: 6825 Pine Street, Suite 340 + * Mail Stop B8 + * Omaha, NE 68106 + * 402.291.0100 + * + * See the AWIPS II Master Rights File ("Master Rights File.pdf") for + * further licensing information. + **/ +package com.raytheon.uf.viz.core.drawables.ext.colormap; + +import java.awt.image.RenderedImage; + +import com.raytheon.uf.viz.core.data.IColorMapDataRetrievalCallback; +import com.raytheon.uf.viz.core.data.IColorMapDataRetrievalCallback.ColorMapData; +import com.raytheon.uf.viz.core.data.IRenderedImageCallback; +import com.raytheon.uf.viz.core.data.prep.Colormapper; +import com.raytheon.uf.viz.core.drawables.ColorMapParameters; +import com.raytheon.uf.viz.core.exception.VizException; + +/** + * General {@link IRenderedImageCallback} that takes a + * {@link IColorMapDataRetrievalCallback} and {@link ColorMapParameters} and + * will colormap the data returned from the callback into a + * {@link RenderedImage} + * + *
+ * 
+ * SOFTWARE HISTORY
+ * 
+ * Date         Ticket#    Engineer    Description
+ * ------------ ---------- ----------- --------------------------
+ * Nov 22, 2011            mschenke     Initial creation
+ * 
+ * 
+ * + * @author mschenke + * @version 1.0 + */ + +public class ColormappedRenderedImageCallback implements IRenderedImageCallback { + + private IColorMapDataRetrievalCallback callback; + + private ColorMapParameters parameters; + + /** + * Construct a ColormappedRenderedImageCallback for the colormap data + * callback and parameters + * + * @param dataCallback + * @param parameters + */ + public ColormappedRenderedImageCallback( + IColorMapDataRetrievalCallback dataCallback, + ColorMapParameters parameters) { + this.callback = dataCallback; + this.parameters = parameters; + } + + /* + * (non-Javadoc) + * + * @see com.raytheon.uf.viz.core.data.IRenderedImageCallback#getImage() + */ + @Override + public RenderedImage getImage() throws VizException { + ColorMapData colorMapData = callback.getColorMapData(); + return Colormapper.colorMap(colorMapData, parameters); + } +} diff --git a/cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/drawables/ext/colormap/GeneralColormappedImageExtension.java b/cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/drawables/ext/colormap/GeneralColormappedImageExtension.java index ed10191d42..c2d8f4d59a 100644 --- a/cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/drawables/ext/colormap/GeneralColormappedImageExtension.java +++ b/cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/drawables/ext/colormap/GeneralColormappedImageExtension.java @@ -19,17 +19,11 @@ **/ package com.raytheon.uf.viz.core.drawables.ext.colormap; -import java.util.ArrayList; -import java.util.List; - -import com.raytheon.uf.viz.core.DrawableImage; import com.raytheon.uf.viz.core.IGraphicsTarget; import com.raytheon.uf.viz.core.data.IColorMapDataRetrievalCallback; import com.raytheon.uf.viz.core.drawables.ColorMapParameters; -import com.raytheon.uf.viz.core.drawables.IColormappedImage; -import com.raytheon.uf.viz.core.drawables.PaintProperties; +import com.raytheon.uf.viz.core.drawables.IImage; import com.raytheon.uf.viz.core.drawables.ext.GraphicsExtension; -import com.raytheon.uf.viz.core.exception.VizException; /** * General colormapped image extension. Uses @@ -62,10 +56,10 @@ public class GeneralColormappedImageExtension extends * com.raytheon.uf.viz.core.drawables.ColorMapParameters) */ @Override - public IColormappedImage initializeRaster( - IColorMapDataRetrievalCallback dataCallback, + public IImage initializeRaster(IColorMapDataRetrievalCallback dataCallback, ColorMapParameters colorMapParameters) { - return new ColormappedImage(target, dataCallback, colorMapParameters); + return target.initializeRaster(new ColormappedRenderedImageCallback( + dataCallback, colorMapParameters)); } /* @@ -76,29 +70,7 @@ public class GeneralColormappedImageExtension extends */ @Override public int getCompatibilityValue(IGraphicsTarget target) { - return Compatibilty.GENERIC; - } - - /* - * (non-Javadoc) - * - * @see - * com.raytheon.uf.viz.core.drawables.ext.IImagingExtension#drawRasters( - * com.raytheon.uf.viz.core.drawables.PaintProperties, - * com.raytheon.uf.viz.core.DrawableImage[]) - */ - @Override - public boolean drawRasters(PaintProperties paintProps, - DrawableImage... images) throws VizException { - List renderables = new ArrayList(); - for (DrawableImage di : images) { - if (di.getImage() instanceof ColormappedImage) { - renderables.add(new DrawableImage(((ColormappedImage) di - .getImage()).getWrappedImage(), di.getCoverage())); - } - } - return target.drawRasters(paintProps, - renderables.toArray(new DrawableImage[renderables.size()])); + return Compatibilty.GENERIC.value; } } diff --git a/cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/drawables/ext/colormap/IColormapShadedShapeExtension.java b/cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/drawables/ext/colormap/IColormapShadedShapeExtension.java index 7ecf788352..0860efeddb 100644 --- a/cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/drawables/ext/colormap/IColormapShadedShapeExtension.java +++ b/cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/drawables/ext/colormap/IColormapShadedShapeExtension.java @@ -26,7 +26,6 @@ import org.eclipse.swt.graphics.RGB; import com.raytheon.uf.viz.core.drawables.IDescriptor; import com.raytheon.uf.viz.core.drawables.IShadedShape; -import com.raytheon.uf.viz.core.drawables.ext.GraphicsExtension.IGraphicsExtensionInterface; import com.raytheon.uf.viz.core.exception.VizException; import com.vividsolutions.jts.geom.Geometry; import com.vividsolutions.jts.geom.LineString; @@ -54,8 +53,7 @@ import com.vividsolutions.jts.geom.LineString; * @author bsteffen * @version 1.0 */ -public interface IColormapShadedShapeExtension extends - IGraphicsExtensionInterface { +public interface IColormapShadedShapeExtension { public interface IColormapShadedShape { diff --git a/cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/drawables/ext/colormap/IColormappedImageExtension.java b/cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/drawables/ext/colormap/IColormappedImageExtension.java index fb63e8ea8e..2270e74972 100644 --- a/cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/drawables/ext/colormap/IColormappedImageExtension.java +++ b/cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/drawables/ext/colormap/IColormappedImageExtension.java @@ -22,7 +22,7 @@ package com.raytheon.uf.viz.core.drawables.ext.colormap; import com.raytheon.uf.viz.core.data.IColorMapDataRetrievalCallback; import com.raytheon.uf.viz.core.drawables.ColorMapParameters; import com.raytheon.uf.viz.core.drawables.IColormappedImage; -import com.raytheon.uf.viz.core.drawables.ext.IImagingExtension; +import com.raytheon.uf.viz.core.drawables.IImage; /** * Extension for creating {@link IColormappedImage} objects @@ -41,7 +41,7 @@ import com.raytheon.uf.viz.core.drawables.ext.IImagingExtension; * @version 1.0 */ -public interface IColormappedImageExtension extends IImagingExtension { +public interface IColormappedImageExtension { /** * Initializes an IColormappedImage given the dataCallback and colormap @@ -51,7 +51,6 @@ public interface IColormappedImageExtension extends IImagingExtension { * @param colorMapParameters * @return */ - public IColormappedImage initializeRaster( - IColorMapDataRetrievalCallback dataCallback, + public IImage initializeRaster(IColorMapDataRetrievalCallback dataCallback, ColorMapParameters colorMapParameters); } diff --git a/cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/level/LevelMapping.java b/cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/level/LevelMapping.java index 9bb7d5c2dc..b600ff6501 100644 --- a/cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/level/LevelMapping.java +++ b/cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/level/LevelMapping.java @@ -39,14 +39,14 @@ import com.raytheon.uf.viz.core.exception.VizCommunicationException; * *
  * 
- * SOFTWARE HISTORY
- * 
- * Date         Ticket#    Engineer    Description
- * ------------ ---------- ----------- --------------------------
- * 11/01/2007    #518      S.Manoj     Initial version
- * 11/16/2009    #3120     rjpeter     Modifed to better integrate with level framework.
- * 11/21/2009    #3576     rjpeter     Added group
- * 
+ * SOFTWARE HISTORY
+ * 
+ * Date         Ticket#    Engineer    Description
+ * ------------ ---------- ----------- --------------------------
+ * 11/01/2007    #518      S.Manoj     Initial version
+ * 11/16/2009    #3120     rjpeter     Modifed to better integrate with level framework.
+ * 11/21/2009    #3576     rjpeter     Added group
+ * 
  * @author smanoj
  * @version 1.0
  */
diff --git a/cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/map/IMapMeshExtension.java b/cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/map/IMapMeshExtension.java
index 4734015c64..431084a4d3 100644
--- a/cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/map/IMapMeshExtension.java
+++ b/cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/map/IMapMeshExtension.java
@@ -19,12 +19,7 @@
  **/
 package com.raytheon.uf.viz.core.map;
 
-import org.geotools.coverage.grid.GeneralGridGeometry;
-import org.geotools.coverage.grid.GridGeometry2D;
-
 import com.raytheon.uf.viz.core.IMesh;
-import com.raytheon.uf.viz.core.drawables.IDescriptor;
-import com.raytheon.uf.viz.core.drawables.ext.GraphicsExtension.IGraphicsExtensionInterface;
 import com.raytheon.uf.viz.core.exception.VizException;
 
 /**
@@ -44,31 +39,17 @@ import com.raytheon.uf.viz.core.exception.VizException;
  * @version 1.0
  */
 
-public interface IMapMeshExtension extends IGraphicsExtensionInterface {
+public interface IMapMeshExtension {
 
     /**
-     * Constructs a mesh for mapping the imageGeometry onto the targetGeometry
+     * Create a mesh
+     * 
+     * @param descriptor
      * 
-     * @param imageGeometry
-     * @param targetGeometry
      * @return
      * @throws VizException
      */
-    public abstract IMesh constructMesh(GridGeometry2D imageGeometry,
-            GeneralGridGeometry targetGeometry) throws VizException;
-
-    /**
-     * Convenient method for constructing a mesh for mapping the imageGeometry
-     * onto the targetDescriptor. Same as calling
-     * {@link #constructMesh(GridGeometry2D, GeneralGridGeometry)} passing in
-     * target.getGridGeometry()
-     * 
-     * @param imageGeometry
-     * @param targetDescriptor
-     * @return
-     * @throws VizException
-     */
-    public abstract IMesh constructMesh(GridGeometry2D imageGeometry,
-            IDescriptor targetDescriptor) throws VizException;
+    public abstract IMesh constructMesh(IMapDescriptor descriptor)
+            throws VizException;
 
 }
diff --git a/cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/map/MapDescriptor.java b/cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/map/MapDescriptor.java
index fffc07272e..c3020ac608 100644
--- a/cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/map/MapDescriptor.java
+++ b/cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/map/MapDescriptor.java
@@ -26,7 +26,9 @@ import java.util.ArrayList;
 
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
 import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
 
 import org.eclipse.swt.graphics.RGB;
 import org.geotools.coverage.grid.GeneralGridEnvelope;
@@ -34,16 +36,23 @@ import org.geotools.coverage.grid.GeneralGridGeometry;
 import org.geotools.coverage.grid.GridGeometry2D;
 import org.geotools.geometry.DirectPosition2D;
 import org.geotools.geometry.GeneralEnvelope;
+import org.geotools.referencing.CRS;
 import org.geotools.referencing.GeodeticCalculator;
+import org.geotools.referencing.crs.DefaultGeocentricCRS;
+import org.geotools.referencing.crs.DefaultGeographicCRS;
+import org.geotools.referencing.operation.DefaultMathTransformFactory;
 import org.opengis.geometry.DirectPosition;
 import org.opengis.referencing.FactoryException;
 import org.opengis.referencing.crs.CoordinateReferenceSystem;
 import org.opengis.referencing.datum.PixelInCell;
 import org.opengis.referencing.operation.MathTransform;
+import org.opengis.referencing.operation.MathTransformFactory;
 import org.opengis.referencing.operation.TransformException;
 
+import com.raytheon.uf.common.geospatial.CRSCache;
 import com.raytheon.uf.common.geospatial.MapUtil;
 import com.raytheon.uf.common.serialization.ISerializableObject;
+import com.raytheon.uf.common.serialization.adapters.GridGeometryAdapter;
 import com.raytheon.uf.common.status.IUFStatusHandler;
 import com.raytheon.uf.common.status.UFStatus;
 import com.raytheon.uf.common.status.UFStatus.Priority;
@@ -187,12 +196,24 @@ public class MapDescriptor extends AbstractDescriptor implements
         return gridGeom;
     }
 
+    /** The transform from lat/lon to the current CRS */
+    protected MathTransform coordinateTransform;
+
+    /** The transform from the current CRS to lat/lon */
+    protected MathTransform inverseCoordinateTransform;
+
     /** The mapping from grid to coordinate */
     protected MathTransform mapToCoordinateTransform;
 
     /** The mapping from coordinate to grid */
     protected MathTransform coordinateToMapTransform;
 
+    /** The mapping from wgs84 to grid */
+    protected MathTransform wgsToGridTransform;
+
+    /** The mapping from grid to wgs84 */
+    protected MathTransform gridToWGSTransform;
+
     /** The time in ms that the last blink state was used */
     protected long timeLastBlink;
 
@@ -208,6 +229,9 @@ public class MapDescriptor extends AbstractDescriptor implements
      */
     protected int mapWidth;
 
+    /** The geospatial descriptor for the grid */
+    protected GeneralGridGeometry gridGeometry;
+
     /** elevation exaggeration */
     protected double elevationExageration = 0;
 
@@ -218,6 +242,8 @@ public class MapDescriptor extends AbstractDescriptor implements
         LAT_LON_FORMATTER.setMaximumFractionDigits(2);
     }
 
+    private String cloudSourceName;
+
     /**
      * Constructor
      * 
@@ -248,26 +274,49 @@ public class MapDescriptor extends AbstractDescriptor implements
      * 
      */
     public MapDescriptor(GeneralGridGeometry gridGeometry) throws VizException {
-        super(gridGeometry);
+        super();
+
+        this.gridGeometry = gridGeometry;
         init();
     }
 
     protected void init() throws VizException {
+        MathTransformFactory mtf = new DefaultMathTransformFactory();
+
         try {
-            GeneralGridGeometry gridGeometry = getGridGeometry();
-            mapToCoordinateTransform = gridGeometry
+
+            mapToCoordinateTransform = this.gridGeometry
                     .getGridToCRS(PixelInCell.CELL_CENTER);
             coordinateToMapTransform = mapToCoordinateTransform.inverse();
+            CoordinateReferenceSystem descriptorCRS = this.gridGeometry
+                    .getCoordinateReferenceSystem();
+            if (descriptorCRS.toWKT().equals(
+                    DefaultGeocentricCRS.CARTESIAN.toWKT())) {
+                inverseCoordinateTransform = CRS.findMathTransform(
+                        descriptorCRS, DefaultGeographicCRS.WGS84_3D);
 
-            CoordinateReferenceSystem crs = gridGeometry
+                coordinateTransform = inverseCoordinateTransform.inverse();
+
+            } else {
+                inverseCoordinateTransform = CRSCache.getInstance()
+                        .getTransformToLatLon(descriptorCRS);
+                coordinateTransform = inverseCoordinateTransform.inverse();
+            }
+
+            wgsToGridTransform = mtf.createConcatenatedTransform(
+                    coordinateTransform, coordinateToMapTransform);
+            gridToWGSTransform = mtf.createConcatenatedTransform(
+                    mapToCoordinateTransform, inverseCoordinateTransform);
+
+            CoordinateReferenceSystem crs = this.gridGeometry
                     .getCoordinateReferenceSystem();
 
             DirectPosition s1, d1, s2, d2;
             if (crs.getCoordinateSystem().getDimension() == 2) {
-                double centerX = (gridGeometry.getGridRange().getLow(0) + gridGeometry
+                double centerX = (this.gridGeometry.getGridRange().getLow(0) + this.gridGeometry
                         .getGridRange().getHigh(0)) / 2;
 
-                double centerY = (gridGeometry.getGridRange().getLow(1) + gridGeometry
+                double centerY = (this.gridGeometry.getGridRange().getLow(1) + this.gridGeometry
                         .getGridRange().getHigh(1)) / 2;
 
                 s1 = new DirectPosition2D(centerX, centerY);
@@ -318,6 +367,43 @@ public class MapDescriptor extends AbstractDescriptor implements
         }
     }
 
+    /*
+     * (non-Javadoc)
+     * 
+     * @see
+     * com.raytheon.uf.viz.core.drawables.IDescriptor#pixelToWorld(double[])
+     */
+    @Override
+    public double[] pixelToWorld(final double[] pixel) {
+        // if (pixel[0] < 1.0)
+        // pixel[0] = 1;
+        //
+        // if (pixel[0] > theWorldWidth - 1.0)
+        // pixel[0] = theWorldWidth - 1.0;
+        //
+        // if (pixel[1] < 1.0)
+        // pixel[1] = 1;
+        //
+        // if (pixel[1] > theWorldHeight - 1.0)
+        // pixel[1] = theWorldHeight;
+
+        double[] output = new double[3];
+        double[] wpixel = pixel;
+
+        if (pixel.length == 2) {
+            wpixel = new double[] { pixel[0], pixel[1], 0 };
+        }
+
+        try {
+            gridToWGSTransform.transform(wpixel, 0, output, 0, 1);
+        } catch (TransformException e) {
+            e.printStackTrace();
+            return null;
+        }
+
+        return output;
+    }
+
     /*
      * (non-Javadoc)
      * 
@@ -331,7 +417,7 @@ public class MapDescriptor extends AbstractDescriptor implements
         if (crs == MapUtil.LATLON_PROJECTION) {
             return pixelToWorld(pixel);
         } else if (!crs.getName().equals(
-                getGridGeometry().getCoordinateReferenceSystem().getName())) {
+                this.gridGeometry.getCoordinateReferenceSystem().getName())) {
             return null;
         }
 
@@ -345,6 +431,33 @@ public class MapDescriptor extends AbstractDescriptor implements
         return output2;
     }
 
+    /*
+     * (non-Javadoc)
+     * 
+     * @see
+     * com.raytheon.uf.viz.core.drawables.IDescriptor#worldToPixel(double[])
+     */
+    @Override
+    public double[] worldToPixel(double[] world) {
+
+        double[] output = new double[3];
+
+        double[] input = null;
+        if (world.length == 2) {
+            input = new double[] { world[0], world[1], 0 };
+        } else {
+            input = world;
+        }
+
+        try {
+            wgsToGridTransform.transform(input, 0, output, 0, 1);
+        } catch (TransformException e) {
+            return null;
+        }
+
+        return output;
+    }
+
     /*
      * (non-Javadoc)
      * 
@@ -353,10 +466,11 @@ public class MapDescriptor extends AbstractDescriptor implements
      */
     @Override
     public double[] worldToPixel(double[] pixel, CoordinateReferenceSystem crs) {
+
         if (crs == MapUtil.LATLON_PROJECTION) {
             return worldToPixel(pixel);
         } else if (!crs.getName().equals(
-                getGridGeometry().getCoordinateReferenceSystem().getName())) {
+                this.gridGeometry.getCoordinateReferenceSystem().getName())) {
             return null;
         }
 
@@ -504,6 +618,18 @@ public class MapDescriptor extends AbstractDescriptor implements
         return pc;
     }
 
+    /*
+     * (non-Javadoc)
+     * 
+     * @see com.raytheon.uf.viz.core.map.IMapDescriptor#getMapData()
+     */
+    @Override
+    @XmlElement
+    @XmlJavaTypeAdapter(value = GridGeometryAdapter.class)
+    public GeneralGridGeometry getGridGeometry() {
+        return this.gridGeometry;
+    }
+
     /*
      * (non-Javadoc)
      * 
@@ -530,10 +656,29 @@ public class MapDescriptor extends AbstractDescriptor implements
     @Override
     public void setGridGeometry(GeneralGridGeometry gridGeometry)
             throws VizException {
-        super.setGridGeometry(gridGeometry);
+        this.gridGeometry = gridGeometry;
+
         init();
     }
 
+    /*
+     * (non-Javadoc)
+     * 
+     * @see com.raytheon.uf.viz.core.map.IMapDescriptor#getCRS()
+     */
+    @Override
+    public CoordinateReferenceSystem getCRS() {
+        if (this.gridGeometry != null) {
+            return this.gridGeometry.getCoordinateReferenceSystem();
+        } else {
+            return null;
+        }
+    }
+
+    public MathTransform getToGridTransform() {
+        return this.wgsToGridTransform;
+    }
+
     /**
      * Get the current display width
      * 
diff --git a/edexOsgi/com.raytheon.uf.common.geospatial/src/com/raytheon/uf/common/geospatial/util/WorldWrapChecker.java b/cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/map/WorldWrapChecker.java
similarity index 68%
rename from edexOsgi/com.raytheon.uf.common.geospatial/src/com/raytheon/uf/common/geospatial/util/WorldWrapChecker.java
rename to cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/map/WorldWrapChecker.java
index 203fe09a48..8a8e4d1858 100644
--- a/edexOsgi/com.raytheon.uf.common.geospatial/src/com/raytheon/uf/common/geospatial/util/WorldWrapChecker.java
+++ b/cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/map/WorldWrapChecker.java
@@ -17,19 +17,12 @@
  * See the AWIPS II Master Rights File ("Master Rights File.pdf") for
  * further licensing information.
  **/
-package com.raytheon.uf.common.geospatial.util;
+package com.raytheon.uf.viz.core.map;
 
-import org.geotools.coverage.grid.GeneralGridGeometry;
 import org.geotools.referencing.CRS;
-import org.geotools.referencing.operation.DefaultMathTransformFactory;
 import org.geotools.referencing.operation.projection.MapProjection;
 import org.geotools.referencing.operation.projection.MapProjection.AbstractProvider;
 import org.opengis.parameter.ParameterValueGroup;
-import org.opengis.referencing.operation.MathTransform;
-
-import com.raytheon.uf.common.geospatial.MapUtil;
-import com.raytheon.uf.common.status.UFStatus;
-import com.raytheon.uf.common.status.UFStatus.Priority;
 
 /**
  * Given a descriptor of a map, this class will check line segments for wrapping
@@ -57,9 +50,9 @@ public class WorldWrapChecker {
 
     private boolean checkForWrapping = false;
 
-    public WorldWrapChecker(GeneralGridGeometry worldGeometry) {
-        MapProjection worldProjection = CRS.getMapProjection(worldGeometry
-                .getCoordinateReferenceSystem());
+    public WorldWrapChecker(IMapDescriptor descriptor) {
+        MapProjection worldProjection = CRS.getMapProjection(descriptor
+                .getCRS());
         double centralMeridian = 0.0;
         if (worldProjection != null) {
             ParameterValueGroup group = worldProjection.getParameterValues();
@@ -78,27 +71,12 @@ public class WorldWrapChecker {
         double r1 = inverseCentralMeridian - 359.9;
         double r2 = inverseCentralMeridian - 359.8;
 
-        try {
-            MathTransform latLonToGrid = new DefaultMathTransformFactory()
-                    .createConcatenatedTransform(MapUtil
-                            .getTransformFromLatLon(worldGeometry
-                                    .getCoordinateReferenceSystem()),
-                            worldGeometry.getGridToCRS().inverse());
+        double xl1 = descriptor.worldToPixel(new double[] { l1, 0.0 })[0];
+        double xl2 = descriptor.worldToPixel(new double[] { l2, 0.0 })[0];
+        double xr1 = descriptor.worldToPixel(new double[] { r1, 0.0 })[0];
+        double xr2 = descriptor.worldToPixel(new double[] { r2, 0.0 })[0];
 
-            double[] in = new double[] { l1, 0.0, l2, 0.0, r1, 0.0, r2, 0.0 };
-            double[] out = new double[in.length];
-            latLonToGrid.transform(in, 0, out, 0, 4);
-
-            double xl1 = out[0];
-            double xl2 = out[2];
-            double xr1 = out[4];
-            double xr2 = out[6];
-
-            checkForWrapping = Math.abs(xl1 - xr1) > Math.abs(xl2 - xr2);
-        } catch (Throwable t) {
-            UFStatus.getHandler().handle(Priority.PROBLEM,
-                    "Error determing world wrap checking", t);
-        }
+        checkForWrapping = Math.abs(xl1 - xr1) > Math.abs(xl2 - xr2);
     }
 
     /**
diff --git a/edexOsgi/com.raytheon.uf.common.geospatial/src/com/raytheon/uf/common/geospatial/util/WorldWrapCorrector.java b/cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/map/WorldWrapCorrector.java
similarity index 96%
rename from edexOsgi/com.raytheon.uf.common.geospatial/src/com/raytheon/uf/common/geospatial/util/WorldWrapCorrector.java
rename to cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/map/WorldWrapCorrector.java
index dcc8f3e2a3..7c65300d75 100644
--- a/edexOsgi/com.raytheon.uf.common.geospatial/src/com/raytheon/uf/common/geospatial/util/WorldWrapCorrector.java
+++ b/cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/map/WorldWrapCorrector.java
@@ -17,14 +17,12 @@
  * See the AWIPS II Master Rights File ("Master Rights File.pdf") for
  * further licensing information.
  **/
-package com.raytheon.uf.common.geospatial.util;
+package com.raytheon.uf.viz.core.map;
 
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
 
-import org.geotools.coverage.grid.GeneralGridGeometry;
-
 import com.vividsolutions.jts.geom.Coordinate;
 import com.vividsolutions.jts.geom.Geometry;
 import com.vividsolutions.jts.geom.GeometryCollection;
@@ -55,12 +53,12 @@ public class WorldWrapCorrector {
     private WorldWrapChecker checker;
 
     /**
-     * Constructs of world wrap corrector for the specified world
+     * Constructs of world wrap corrector for the specified descriptor
      * 
      * @param descriptor
      */
-    public WorldWrapCorrector(GeneralGridGeometry worldGeometry) {
-        checker = new WorldWrapChecker(worldGeometry);
+    public WorldWrapCorrector(IMapDescriptor descriptor) {
+        checker = new WorldWrapChecker(descriptor);
     }
 
     /**
diff --git a/cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/preferences/JMSPreferences.java b/cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/preferences/JMSPreferences.java
new file mode 100644
index 0000000000..595ccad844
--- /dev/null
+++ b/cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/preferences/JMSPreferences.java
@@ -0,0 +1,148 @@
+/**
+ * This software was developed and / or modified by Raytheon Company,
+ * pursuant to Contract DG133W-05-CQ-1067 with the US Government.
+ * 
+ * U.S. EXPORT CONTROLLED TECHNICAL DATA
+ * This software product contains export-restricted data whose
+ * export/transfer/disclosure is restricted by U.S. law. Dissemination
+ * to non-U.S. persons whether in the United States or abroad requires
+ * an export license or other authorization.
+ * 
+ * Contractor Name:        Raytheon Company
+ * Contractor Address:     6825 Pine Street, Suite 340
+ *                         Mail Stop B8
+ *                         Omaha, NE 68106
+ *                         402.291.0100
+ * 
+ * See the AWIPS II Master Rights File ("Master Rights File.pdf") for
+ * further licensing information.
+ **/
+package com.raytheon.uf.viz.core.preferences;
+
+import java.util.UUID;
+
+import org.eclipse.jface.preference.IPreferenceStore;
+
+import com.raytheon.uf.viz.core.Activator;
+
+/**
+ * Serialized class for the JMS policy type
+ * 
+ * 
+ * 
+ * SOFTWARE HISTORY
+ * 
+ * Date         Ticket#    Engineer    Description
+ * ------------ ---------- ----------- --------------------------
+ * Jan 30, 2012            mnash     Initial creation
+ * 
+ * 
+ * + * @author mnash + * @version 1.0 + */ + +public class JMSPreferences { + + // these are the policy types as supported by QPID + // + // reject - reject the message if the topic is full + // + // ring - start overwriting messages in a ring based on sizing. If head + // meets tail, advance head. + // + // flow to disk - flow the messages to disk to preserve memory + // + // ring strict - start overwriting messages in a ring based on sizing. If + // head meets tail, AND the consumer has the tail message acquired it will + // reject + // + public enum PolicyType { + REJECT("reject"), RING("ring"), FLOW_TO_DISK("flow_to_disk"), RING_STRICT( + "ring_strict"); + + private String type; + + /** + * @return the type + */ + public String getType() { + return type; + } + + private PolicyType(String name) { + type = name; + } + + } + + // declare topic as ADDR, not BURL + private static final String addressArgs = "ADDR:'amq.topic'/"; + + private static final String declareArgs = "; { node: { type: 'topic', x-declare: {arguments: {"; + + private static final String linkArgs = "}}}, link: { name: '"; + + private static final String linkDeclareArgs = "', x-declare: {arguments: {"; + + private static final String QPID_MAX_COUNT = "qpid.max_count"; + + private static final String QPID_POLICY_TYPE = "qpid.policy_type"; + + private static String policyType = ""; + + private static int maxVal = 0; + + // putting together the arguments for the qpid queue + public static String getPolicyString(String val) { + // for qpid.policy_type, there is a corresponding constant in + // QpidQueueOptions, but did not want to add a dependency + + return addressArgs + val + declareArgs + "'" + QPID_MAX_COUNT + "':" + + getMaxCount() + ",'" + QPID_POLICY_TYPE + "':" + + getPolicyType() + linkArgs + val + UUID.randomUUID() + + linkDeclareArgs + "'" + QPID_MAX_COUNT + "':" + getMaxCount() + + ",'" + QPID_POLICY_TYPE + "':" + getPolicyType() + "}}}}"; + } + + /** + * @return the policyTypeOption + */ + public static String getPolicyType() { + if (policyType != null && !policyType.isEmpty()) { + return policyType; + } + IPreferenceStore store = Activator.getDefault().getPreferenceStore(); + String value = store.getString(QPID_POLICY_TYPE); + // validation + for (PolicyType type : PolicyType.values()) { + if (!type.getType().equals(value)) { + policyType = value; + } + } + // fail safe for bad configurations + if (policyType == null || policyType.isEmpty()) { + policyType = PolicyType.RING.getType(); + } + return "'" + policyType + "'"; + } + + /** + * Get the max count as given in the config.xml in the preference store + * + * @return + */ + public static int getMaxCount() { + if (maxVal != 0) { + return maxVal; + } + IPreferenceStore store = Activator.getDefault().getPreferenceStore(); + maxVal = store.getInt(QPID_MAX_COUNT); + + // fail safe + if (maxVal == 0) { + maxVal = 1000; + } + return maxVal; + } +} diff --git a/cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/rsc/AbstractPluginDataObjectResource.java b/cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/rsc/AbstractPluginDataObjectResource.java deleted file mode 100644 index 6348c19966..0000000000 --- a/cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/rsc/AbstractPluginDataObjectResource.java +++ /dev/null @@ -1,340 +0,0 @@ -/** - * This software was developed and / or modified by Raytheon Company, - * pursuant to Contract DG133W-05-CQ-1067 with the US Government. - * - * U.S. EXPORT CONTROLLED TECHNICAL DATA - * This software product contains export-restricted data whose - * export/transfer/disclosure is restricted by U.S. law. Dissemination - * to non-U.S. persons whether in the United States or abroad requires - * an export license or other authorization. - * - * Contractor Name: Raytheon Company - * Contractor Address: 6825 Pine Street, Suite 340 - * Mail Stop B8 - * Omaha, NE 68106 - * 402.291.0100 - * - * See the AWIPS II Master Rights File ("Master Rights File.pdf") for - * further licensing information. - **/ -package com.raytheon.uf.viz.core.rsc; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map; - -import org.opengis.referencing.crs.CoordinateReferenceSystem; - -import com.raytheon.uf.common.dataplugin.PluginDataObject; -import com.raytheon.uf.common.time.DataTime; -import com.raytheon.uf.viz.core.IGraphicsTarget; -import com.raytheon.uf.viz.core.VizApp; -import com.raytheon.uf.viz.core.drawables.IDescriptor; -import com.raytheon.uf.viz.core.drawables.IRenderable; -import com.raytheon.uf.viz.core.drawables.PaintProperties; -import com.raytheon.uf.viz.core.exception.VizException; -import com.raytheon.uf.viz.core.rsc.capabilities.AbstractCapability; - -/** - * Abstract resource class that manages frames with renderable objects - * - *
- * 
- * SOFTWARE HISTORY
- * 
- * Date         Ticket#    Engineer    Description
- * ------------ ---------- ----------- --------------------------
- * Dec 21, 2011            mschenke     Initial creation
- * 
- * 
- * - * @author mschenke - * @version 1.0 - */ - -public abstract class AbstractPluginDataObjectResource - extends AbstractVizResource { - - private static class Frame { - List records = new ArrayList(); - - IRenderable renderable; - } - - private Map frames = new HashMap(); - - private Object lock = new Object(); - - /** - * @param resourceData - * @param loadProperties - */ - protected AbstractPluginDataObjectResource(T resourceData, - LoadProperties loadProperties) { - super(resourceData, loadProperties); - dataTimes = new ArrayList(); - resourceData.addChangeListener(new IResourceDataChanged() { - @Override - public void resourceChanged(ChangeType type, Object object) { - if (type == ChangeType.DATA_UPDATE) { - if (object instanceof PluginDataObject) { - addDataObject((PluginDataObject) object); - } else if (object instanceof PluginDataObject[]) { - for (PluginDataObject pdo : (PluginDataObject[]) object) { - addDataObject((PluginDataObject) pdo); - } - } else if (object instanceof Object[]) { - for (Object obj : (Object[]) object) { - if (obj instanceof PluginDataObject) { - addDataObject((PluginDataObject) obj); - } - } - } - } else if (type == ChangeType.CAPABILITY) { - if (object instanceof AbstractCapability) { - AbstractCapability capability = (AbstractCapability) object; - for (Frame frame : frames.values()) { - if (frame.renderable != null) { - capabilityChanged(frame.renderable, capability); - } - } - } - } - } - }); - } - - /** - * Adds the pdo to the appropriate time and removes any renderable or data - * cached for that time. - * - * @param pdo - */ - protected final void addDataObject(PluginDataObject pdo) { - synchronized (lock) { - if (frames == null) { - // Check for null in case we were waiting for lock from - // disposeInternal in which case we shouldn't process add - return; - } - DataTime time = getDataObjectTime(pdo); - Frame frame = frames.get(time); - if (frame == null) { - frame = new Frame(); - frames.put(time, frame); - } - if (frame.records.contains(pdo)) { - frame.records.remove(pdo); - } - frame.records.add(pdo); - if (frame.renderable != null) { - if (updateRenderable(frame.renderable, pdo) == false) { - dispose(frame.renderable); - } - } - if (!dataTimes.contains(dataTimes)) { - dataTimes.add(time); - } - } - } - - /** - * Return the DataTime to be associated with this record. Default returns - * PluginDataObject.getDataTime() - * - * @param pdo - * @return - */ - protected DataTime getDataObjectTime(PluginDataObject pdo) { - return pdo.getDataTime(); - } - - /** - * Get the records for the given time. Empty list will be returned if no - * frame for time - * - * @param time - * @return - */ - protected List getPluginDataObjects(DataTime time) { - Frame frame = frames.get(time); - if (frame != null) { - return frame.records; - } - return new ArrayList(); - } - - /** - * Get the current time for the resource, default calls - * descriptor.getTimeForResoruce(this) - * - * @return the current time - */ - protected DataTime getTimeForResource() { - return descriptor.getTimeForResource(this); - } - - /* - * (non-Javadoc) - * - * @see - * com.raytheon.uf.viz.core.rsc.AbstractVizResource#remove(com.raytheon. - * uf.common.time.DataTime) - */ - @Override - public final void remove(DataTime dataTime) { - synchronized (lock) { - super.remove(dataTime); - Frame frame = frames.remove(dataTime); - if (frame != null && frame.renderable != null) { - IRenderable dispose = frame.renderable; - frame.renderable = null; - dispose(dispose); - } - } - } - - /** - * Dispose of a renderable. - * - * @param renderable - */ - private void dispose(final IRenderable renderable) { - VizApp.runAsync(new Runnable() { - @Override - public void run() { - disposeRenderable(renderable); - } - }); - } - - @Override - public final void project(CoordinateReferenceSystem crs) - throws VizException { - Iterator iter = frames.values().iterator(); - while (iter.hasNext()) { - Frame frame = iter.next(); - IRenderable renderable = frame.renderable; - if (renderable != null) { - if (!projectRenderable(renderable, crs)) { - frame.renderable = null; - dispose(renderable); - } - } - } - } - - /* - * (non-Javadoc) - * - * @see - * com.raytheon.uf.viz.core.rsc.AbstractVizResource#paintInternal(com.raytheon - * .uf.viz.core.IGraphicsTarget, - * com.raytheon.uf.viz.core.drawables.PaintProperties) - */ - @Override - protected final void paintInternal(IGraphicsTarget target, - PaintProperties paintProps) throws VizException { - DataTime time = paintProps.getDataTime(); - if (time == null) { - time = getTimeForResource(); - } - Frame currFrame = frames.get(time); - if (currFrame != null) { - IRenderable renderable = currFrame.renderable; - if (renderable == null) { - currFrame.renderable = renderable = constructRenderable(currFrame.records); - } - - if (renderable != null) { - renderable.paint(target, paintProps); - } - } - } - - /* - * (non-Javadoc) - * - * @see com.raytheon.uf.viz.core.rsc.AbstractVizResource#disposeInternal() - */ - @Override - protected final void disposeInternal() { - synchronized (lock) { - for (Frame frame : frames.values()) { - if (frame.renderable != null) { - disposeRenderable(frame.renderable); - } - } - frames.clear(); - frames = null; - } - disposeResource(); - } - - /** - * Dispose method for the resource to dispose any data not tied to a - * renderable. Called after all renderables have been disposed. Default impl - * does nothing - */ - protected void disposeResource() { - - } - - /** - * Notification that a capability has changed and the renderable should be - * updated - * - * @param renderable - * @param capability - */ - protected abstract void capabilityChanged(IRenderable renderable, - AbstractCapability capability); - - /** - * Dispose the renderable object - * - * @param renderable - */ - protected abstract void disposeRenderable(IRenderable renderable); - - /** - * Attempt to reproject the renderable object into this specified - * projection. If unable to reproject, return false and renderable will be - * recreated next paint - * - * @param renderable - * @param crs - * @return - */ - protected abstract boolean projectRenderable(IRenderable renderable, - CoordinateReferenceSystem crs) throws VizException; - - /** - * Construct a renderable object for the given records. This method is - * called from paintInternal. Null can be returned and this method will be - * called next paintInternal. That can be used if requesting data that is - * required for the renderable asynchronously. - * - * NOTE: The size of the pdo list will only grow so it can be used to - * determine if new data has arrived since last call - * - * @param records - * @return - */ - protected abstract IRenderable constructRenderable( - List records) throws VizException; - - /** - * Update the renderable with the new pdo, if the renderable is updatable, - * return true. If the renderable needs to be recreated from scratch, return - * false - * - * @param renderable - * @param pdo - * @return - */ - protected abstract boolean updateRenderable(IRenderable renderable, - PluginDataObject pdo); -} diff --git a/cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/rsc/AbstractRequestableResourceData.java b/cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/rsc/AbstractRequestableResourceData.java index 84c79a96cd..717e5125fe 100644 --- a/cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/rsc/AbstractRequestableResourceData.java +++ b/cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/rsc/AbstractRequestableResourceData.java @@ -21,7 +21,6 @@ package com.raytheon.uf.viz.core.rsc; import java.util.ArrayList; import java.util.Arrays; -import java.util.Collection; import java.util.Comparator; import java.util.HashMap; import java.util.HashSet; @@ -386,6 +385,11 @@ public abstract class AbstractRequestableResourceData extends Set currentSet = new HashSet(Arrays.asList(current)); + boolean initialLoad = false; + if (currentSet.size() == 0) { + initialLoad = true; + } + Set loadSet = new HashSet(); for (DataTime t : desiredSet) { boolean found = false; @@ -405,21 +409,6 @@ public abstract class AbstractRequestableResourceData extends return new PluginDataObject[0]; } - return requestPluginDataObjects(loadSet); - } - - /** - * Request plugin data objects for the passed in times. This method is - * called from getLatestPluginDataObjects(DataTime[],DataTime[]) after time - * filter from desired and current has been done. The times passed in is a - * collection of new times needed - * - * @param loadSet - * @return - * @throws VizException - */ - protected PluginDataObject[] requestPluginDataObjects( - Collection loadSet) throws VizException { LayerProperty property = new LayerProperty(); // TODO fix? property.setDesiredProduct(ResourceType.PLAN_VIEW); @@ -487,7 +476,7 @@ public abstract class AbstractRequestableResourceData extends /** * Comparator for response array. */ - protected static Comparator layerComparator = new Comparator() { + private static Comparator layerComparator = new Comparator() { @Override public int compare(PluginDataObject arg0, PluginDataObject arg1) { diff --git a/cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/rsc/AbstractVizResource.java b/cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/rsc/AbstractVizResource.java index d4cbca28a6..dfc7ff82e8 100644 --- a/cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/rsc/AbstractVizResource.java +++ b/cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/rsc/AbstractVizResource.java @@ -20,10 +20,10 @@ package com.raytheon.uf.viz.core.rsc; import java.util.Collections; +import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; -import java.util.concurrent.CopyOnWriteArraySet; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; @@ -152,11 +152,11 @@ public abstract class AbstractVizResource(); - initListeners = new CopyOnWriteArraySet(); - paintListeners = new CopyOnWriteArraySet(); - paintStatusListeners = new CopyOnWriteArraySet(); - disposeListeners = new CopyOnWriteArraySet(); + refreshListeners = new HashSet(); + initListeners = new HashSet(); + paintListeners = new HashSet(); + paintStatusListeners = new HashSet(); + disposeListeners = new HashSet(); if (resourceData != null) { resourceData.addChangeListener(new IResourceDataChanged() { @@ -717,7 +717,7 @@ public abstract class AbstractVizResource - * - * SOFTWARE HISTORY - * - * Date Ticket# Engineer Description - * ------------ ---------- ----------- -------------------------- - * Mar 13, 2012 mschenke Initial creation - * - *
- * - * @author mschenke - * @version 1.0 - */ public class ImageTile { - public GridGeometry2D imageGeometry; + public com.vividsolutions.jts.geom.Envelope envelope; + + public double elevation; public PixelCoverage coverage; - /** - * Checks to see if the x/y coordinate is contained by the ImageTile's CRS - * Envelope - * - * @param x - * @param y - * @return - */ - public boolean contains(double x, double y) { - Envelope env = imageGeometry.getEnvelope(); - return env.getMinimum(0) <= x && env.getMaximum(0) >= x - && env.getMinimum(1) <= y && env.getMaximum(1) >= y; - } + public Rectangle rect; - /** - * Checks to see if the Coordinate is contained by the ImageTile's CRS - * Envelope - * - * @param c - * @return - */ - public boolean contains(Coordinate c) { - return contains(c.x, c.y); - } + // TODO clean up occlusionQueries move to GLImage? + public int query = -1; - /** - * Set the grid geometry of the tile given the image rectangle and the - * referenced envelope - * - * @param rect - * @param env - */ - public void setGridGeometry(Rectangle rect, ReferencedEnvelope env) { - GeneralGridEnvelope gge = new GeneralGridEnvelope(rect); - GeneralEnvelope ge = new GeneralEnvelope(env); - imageGeometry = new GridGeometry2D(gge, ge); - } + public boolean occlude = false; - /** - * Set the image geometry - * - * @param imageGeometry - */ - public void setGridGeometry(GridGeometry2D imageGeometry) { - this.imageGeometry = imageGeometry; - } - - /** - * Get the image rectangle. This could be a subsection of a larger image so - * x and y may not be 0,0 - * - * @return - */ - public Rectangle getRectangle() { - GridEnvelope env = imageGeometry.getGridRange(); - return new Rectangle(env.getLow(0), env.getLow(1), env.getSpan(0), - env.getSpan(1)); - } - - /** - * Get the spatially referenced envelope of the image tile - * - * @return - */ - public ReferencedEnvelope getEnvelope() { - return new ReferencedEnvelope(imageGeometry.getEnvelope()); - } - - /** - * Dispose the image tile, disposes of the coverage object associated with - * it - */ public void dispose() { if (coverage != null) { coverage.dispose(); diff --git a/cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/rsc/hdf5/MeshCalculatorJob.java b/cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/rsc/hdf5/MeshCalculatorJob.java new file mode 100644 index 0000000000..d8932a7ca6 --- /dev/null +++ b/cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/rsc/hdf5/MeshCalculatorJob.java @@ -0,0 +1,163 @@ +/** + * This software was developed and / or modified by Raytheon Company, + * pursuant to Contract DG133W-05-CQ-1067 with the US Government. + * + * U.S. EXPORT CONTROLLED TECHNICAL DATA + * This software product contains export-restricted data whose + * export/transfer/disclosure is restricted by U.S. law. Dissemination + * to non-U.S. persons whether in the United States or abroad requires + * an export license or other authorization. + * + * Contractor Name: Raytheon Company + * Contractor Address: 6825 Pine Street, Suite 340 + * Mail Stop B8 + * Omaha, NE 68106 + * 402.291.0100 + * + * See the AWIPS II Master Rights File ("Master Rights File.pdf") for + * further licensing information. + **/ +package com.raytheon.uf.viz.core.rsc.hdf5; + +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ConcurrentLinkedQueue; + +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.core.runtime.IStatus; +import org.eclipse.core.runtime.Status; +import org.eclipse.core.runtime.jobs.Job; +import org.opengis.referencing.operation.MathTransform; + +import com.raytheon.uf.common.status.IUFStatusHandler; +import com.raytheon.uf.common.status.UFStatus; +import com.raytheon.uf.common.status.UFStatus.Priority; +import com.raytheon.uf.viz.core.IMesh; +import com.raytheon.uf.viz.core.IMeshCallback; +import com.raytheon.uf.viz.core.PixelCoverage; +import com.raytheon.uf.viz.core.rsc.RenderingOrderFactory; + +/** + * Persistent job used to calculate mesh tiles outside of the rendering thread + * + *
+ * SOFTWARE HISTORY
+ * Date         Ticket#     Engineer    Description
+ * ------------ ----------  ----------- --------------------------
+ * Mar 1, 2007              chammack    Initial Creation.
+ * 
+ * 
+ * + * @author cnh + * @version 1 + */ +public class MeshCalculatorJob extends Job { + private static final transient IUFStatusHandler statusHandler = UFStatus.getHandler(MeshCalculatorJob.class); + + private static MeshCalculatorJob instance; + + private ConcurrentLinkedQueue requests; + + private ConcurrentHashMap map; + + private MeshCalculatorJob() { + super("Mesh Calculator"); + requests = new ConcurrentLinkedQueue(); + map = new ConcurrentHashMap(); + } + + /** + * Request to have the mesh be calculated in the mesh thread + * + * @param mesh + * @param tile + * @param preTransform + */ + public synchronized void requestLoad(IMesh mesh, ImageTile tile, + MathTransform preTransform) { + if (!requests.contains(tile.coverage)) { + MeshParameters params = new MeshParameters(); + params.tile = tile; + params.mesh = mesh; + params.preTransform = preTransform; + + map.put(tile.coverage, params); + requests.add(tile.coverage); + } + instance.schedule(); + } + + /** + * Request to have the mesh be calculated in the mesh thread, with the + * callback being notified after the mesh has been calculated + * + * @param callback + * @param mesh + * @param tile + * @param preTransform + */ + public synchronized void requestLoad(IMeshCallback callback, IMesh mesh, + ImageTile tile, MathTransform preTransform) { + if (!requests.contains(tile.coverage)) { + MeshParameters params = new MeshParameters(); + params.tile = tile; + params.mesh = mesh; + params.preTransform = preTransform; + params.callback = callback; + + map.put(tile.coverage, params); + requests.add(tile.coverage); + } + instance.schedule(); + } + + public static synchronized MeshCalculatorJob getInstance() { + if (instance == null) { + instance = new MeshCalculatorJob(); + instance.setSystem(true); + } + return instance; + } + + /* + * (non-Javadoc) + * + * @seeorg.eclipse.core.runtime.jobs.Job#run(org.eclipse.core.runtime. + * IProgressMonitor) + */ + @Override + protected IStatus run(IProgressMonitor monitor) { + + while (requests.size() > 0) { + PixelCoverage coverage = requests.peek(); + try { + MeshParameters p = map.get(coverage); + + coverage.setMesh(null); + p.mesh.calculateMesh(coverage, p.tile, p.preTransform); + coverage.setMesh(p.mesh); + + if (p.callback != null) { + p.callback.meshCalculated(p.tile); + } + } catch (Throwable t) { + statusHandler.handle(Priority.PROBLEM, "An error occured during mesh calculations, some images may not be properly reprojected.", t); + } + map.remove(coverage); + requests.remove(); + } + return Status.OK_STATUS; + } + + private class MeshParameters { + // public MapDescriptor mapDescriptor; + + public IMesh mesh; + + public ImageTile tile; + + public MathTransform preTransform; + + public IMeshCallback callback; + } + +} diff --git a/cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/rsc/updater/DataUpdateTree.java b/cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/rsc/updater/DataUpdateTree.java index 080c3fe413..0cbea7e3bd 100644 --- a/cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/rsc/updater/DataUpdateTree.java +++ b/cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/rsc/updater/DataUpdateTree.java @@ -1,19 +1,19 @@ /** * This software was developed and / or modified by Raytheon Company, - * pursuant to Contract DG133W-05-CQ-1067 with the US Government. - * - * U.S. EXPORT CONTROLLED TECHNICAL DATA + * pursuant to Contract DG133W-05-CQ-1067 with the US Government. + * + * U.S. EXPORT CONTROLLED TECHNICAL DATA * This software product contains export-restricted data whose * export/transfer/disclosure is restricted by U.S. law. Dissemination * to non-U.S. persons whether in the United States or abroad requires * an export license or other authorization. * - * Contractor Name: Raytheon Company - * Contractor Address: 6825 Pine Street, Suite 340 - * Mail Stop B8 - * Omaha, NE 68106 - * 402.291.0100 - * + * Contractor Name: Raytheon Company + * Contractor Address: 6825 Pine Street, Suite 340 + * Mail Stop B8 + * Omaha, NE 68106 + * 402.291.0100 + * * See the AWIPS II Master Rights File ("Master Rights File.pdf") for * further licensing information. **/ diff --git a/cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/status/MessageSender.java b/cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/status/MessageSender.java index 3c9fa3652d..46b1b4eb87 100644 --- a/cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/status/MessageSender.java +++ b/cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/status/MessageSender.java @@ -32,6 +32,7 @@ import com.raytheon.uf.common.message.IMessage; import com.raytheon.uf.common.serialization.SerializationException; import com.raytheon.uf.common.serialization.SerializationUtil; import com.raytheon.uf.viz.core.comm.JMSConnection; +import com.raytheon.uf.viz.core.preferences.JMSPreferences; /** * Sends messages to jms endpoints programmatically. @@ -88,7 +89,8 @@ public class MessageSender { dest = session.createQueue(endpoint); } if (DestinationType.TOPIC.equals(type)) { - dest = session.createTopic(endpoint); + dest = session + .createTopic(JMSPreferences.getPolicyString(endpoint)); } return dest; diff --git a/cave/com.raytheon.uf.viz.cots.feature/com.raytheon.uf.viz.cots.feature.ecl b/cave/com.raytheon.uf.viz.cots.feature/com.raytheon.uf.viz.cots.feature.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/cave/com.raytheon.uf.viz.cwa/com.raytheon.uf.viz.cwa.ecl b/cave/com.raytheon.uf.viz.cwa/com.raytheon.uf.viz.cwa.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/cave/com.raytheon.uf.viz.cwat/com.raytheon.uf.viz.cwat.ecl b/cave/com.raytheon.uf.viz.cwat/com.raytheon.uf.viz.cwat.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/cave/com.raytheon.uf.viz.d2d.core.feature/com.raytheon.uf.viz.d2d.core.feature.ecl b/cave/com.raytheon.uf.viz.d2d.core.feature/com.raytheon.uf.viz.d2d.core.feature.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/cave/com.raytheon.uf.viz.d2d.core/com.raytheon.uf.viz.d2d.core.ecl b/cave/com.raytheon.uf.viz.d2d.core/com.raytheon.uf.viz.d2d.core.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/cave/com.raytheon.uf.viz.d2d.gfe.feature/com.raytheon.uf.viz.d2d.gfe.feature.ecl b/cave/com.raytheon.uf.viz.d2d.gfe.feature/com.raytheon.uf.viz.d2d.gfe.feature.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/cave/com.raytheon.uf.viz.d2d.gfe/com.raytheon.uf.viz.d2d.gfe.ecl b/cave/com.raytheon.uf.viz.d2d.gfe/com.raytheon.uf.viz.d2d.gfe.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/cave/com.raytheon.uf.viz.d2d.nsharp.feature/com.raytheon.uf.viz.d2d.nsharp.feature.ecl b/cave/com.raytheon.uf.viz.d2d.nsharp.feature/com.raytheon.uf.viz.d2d.nsharp.feature.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/cave/com.raytheon.uf.viz.d2d.nsharp/com.raytheon.uf.viz.d2d.nsharp.ecl b/cave/com.raytheon.uf.viz.d2d.nsharp/com.raytheon.uf.viz.d2d.nsharp.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/cave/com.raytheon.uf.viz.d2d.skewt.feature/com.raytheon.uf.viz.d2d.skewt.feature.ecl b/cave/com.raytheon.uf.viz.d2d.skewt.feature/com.raytheon.uf.viz.d2d.skewt.feature.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/cave/com.raytheon.uf.viz.d2d.ui/com.raytheon.uf.viz.d2d.ui.ecl b/cave/com.raytheon.uf.viz.d2d.ui/com.raytheon.uf.viz.d2d.ui.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/cave/com.raytheon.uf.viz.d2d.ui/localization/styleRules/d2dContourStyleRules.xml b/cave/com.raytheon.uf.viz.d2d.ui/localization/styleRules/d2dContourStyleRules.xml index 2133cc4a2d..66a272a6c3 100644 --- a/cave/com.raytheon.uf.viz.d2d.ui/localization/styleRules/d2dContourStyleRules.xml +++ b/cave/com.raytheon.uf.viz.d2d.ui/localization/styleRules/d2dContourStyleRules.xml @@ -37,6 +37,28 @@ + + + + + + GH + GHxSM + zAGL + HRRR-East + HRRR-West + + + ft + + 5000 + + + + + + + + + @@ -39,7 +44,7 @@ class="com.raytheon.viz.core.gl.internal.ext.GLColormapShadedShapeExtension"> + class="com.raytheon.viz.core.gl.internal.ext.GLOffscreenRenderingExtension"> @@ -47,11 +52,5 @@ - - - - diff --git a/cave/com.raytheon.viz.core.gl/schema/shader.exsd b/cave/com.raytheon.viz.core.gl/schema/shader.exsd new file mode 100644 index 0000000000..ec795ae0f1 --- /dev/null +++ b/cave/com.raytheon.viz.core.gl/schema/shader.exsd @@ -0,0 +1,85 @@ + + + + + + + + + This extension point is used to identify shader programs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0.1 + + + + + + + + diff --git a/cave/com.raytheon.viz.core.gl/src/com/raytheon/viz/core/gl/AbstractGLMesh.java b/cave/com.raytheon.viz.core.gl/src/com/raytheon/viz/core/gl/AbstractGLMesh.java index f5c950a751..7ef7c820eb 100644 --- a/cave/com.raytheon.viz.core.gl/src/com/raytheon/viz/core/gl/AbstractGLMesh.java +++ b/cave/com.raytheon.viz.core.gl/src/com/raytheon/viz/core/gl/AbstractGLMesh.java @@ -19,31 +19,31 @@ **/ package com.raytheon.viz.core.gl; +import java.awt.Rectangle; import java.util.ArrayList; import java.util.List; import javax.media.opengl.GL; -import org.geotools.coverage.grid.GeneralGridGeometry; import org.geotools.coverage.grid.GridGeometry2D; -import org.geotools.referencing.operation.DefaultMathTransformFactory; -import org.opengis.referencing.datum.PixelInCell; +import org.geotools.referencing.CRS; +import org.geotools.referencing.crs.DefaultGeographicCRS; import org.opengis.referencing.operation.MathTransform; import org.opengis.referencing.operation.TransformException; -import com.raytheon.uf.common.geospatial.MapUtil; -import com.raytheon.uf.common.geospatial.util.WorldWrapChecker; -import com.raytheon.uf.common.status.UFStatus.Priority; import com.raytheon.uf.viz.core.IExtent; import com.raytheon.uf.viz.core.IGraphicsTarget; import com.raytheon.uf.viz.core.IMesh; +import com.raytheon.uf.viz.core.PixelCoverage; import com.raytheon.uf.viz.core.drawables.PaintProperties; -import com.raytheon.uf.viz.core.drawables.PaintStatus; import com.raytheon.uf.viz.core.exception.VizException; -import com.raytheon.uf.viz.core.jobs.JobPool; +import com.raytheon.uf.viz.core.map.IMapDescriptor; +import com.raytheon.uf.viz.core.map.WorldWrapChecker; +import com.raytheon.uf.viz.core.rsc.hdf5.ImageTile; import com.raytheon.viz.core.gl.GLGeometryObject2D.GLGeometryObjectData; import com.raytheon.viz.core.gl.SharedCoordMap.SharedCoordinateKey; import com.raytheon.viz.core.gl.SharedCoordMap.SharedCoordinates; +import com.vividsolutions.jts.geom.Envelope; /** * Abstract GLMesh @@ -63,76 +63,35 @@ import com.raytheon.viz.core.gl.SharedCoordMap.SharedCoordinates; public abstract class AbstractGLMesh implements IMesh { - private static final JobPool calculator = new JobPool("Mesh Calculator", 2, - false); + protected boolean shouldDraw = true; - protected static enum State { - NEW, CALCULATING, CALCULATED, COMPILED, INVALID; - } + private boolean compiled = false; - private State internalState = State.NEW; - - private GLGeometryObject2D vertexCoords; - - private SharedCoordinates sharedTextureCoords; + protected GLGeometryObject2D vertexCoords; protected SharedCoordinateKey key; - private Runnable calculate = new Runnable() { - @Override - public void run() { - synchronized (calculate) { - if (internalState == State.CALCULATING) { - // If we aren't in CALCULATING state, we were disposed while - // waiting to run and shouldn't run now - if (calculateMesh()) { - internalState = State.CALCULATED; - } else { - internalState = State.INVALID; - } - } - } - } - }; + private SharedCoordinates sharedTextureCoords; - private int geometryType; + protected IMapDescriptor descriptor; - private MathTransform imageCRSToLatLon; - - private MathTransform latLonToTargetGrid; - - private GeneralGridGeometry targetGeometry; - - private GridGeometry2D imageGeometry; - - protected AbstractGLMesh(int geometryType) { - this.geometryType = geometryType; + public AbstractGLMesh(int geometryType, IMapDescriptor descriptor) { + vertexCoords = new GLGeometryObject2D(new GLGeometryObjectData( + geometryType, GL.GL_VERTEX_ARRAY)); + this.descriptor = descriptor; } - protected final void initialize(GridGeometry2D imageGeometry, - GeneralGridGeometry targetGeometry) throws VizException { - this.imageGeometry = imageGeometry; - if (imageGeometry != null) { - try { - imageCRSToLatLon = MapUtil.getTransformToLatLon(imageGeometry - .getCoordinateReferenceSystem()); - } catch (Throwable t) { - throw new VizException( - "Error construcing image to lat/lon transform", t); - } - } - reproject(targetGeometry); - } - - public final synchronized PaintStatus paint(IGraphicsTarget target, + /* + * (non-Javadoc) + * + * @see + * com.raytheon.viz.core.IMesh#paint(com.raytheon.viz.core.IGraphicsTarget) + */ + @Override + public synchronized void paint(IGraphicsTarget target, PaintProperties paintProps) throws VizException { - State internalState = this.internalState; - if (internalState == State.NEW) { - throw new VizException( - "Class did not properly call initialize on construction"); - } else if (internalState == State.INVALID) { - // Don't paint if invalid to avoid crashes - return PaintStatus.ERROR; + if (!shouldDraw) { + return; } IGLTarget glTarget; @@ -142,91 +101,65 @@ public abstract class AbstractGLMesh implements IMesh { glTarget = (IGLTarget) target; - try { - if (internalState == State.CALCULATED) { - // We finished calculating the mesh, compile it - sharedTextureCoords = SharedCoordMap.get(key, glTarget); - vertexCoords.compile(glTarget.getGl()); - this.internalState = internalState = State.COMPILED; - } - - if (internalState == State.COMPILED) { - GLGeometryPainter.paintGeometries(glTarget.getGl(), - vertexCoords, sharedTextureCoords.getTextureCoords()); - return PaintStatus.PAINTED; - } else if (internalState == State.CALCULATING) { - target.setNeedsRefresh(true); - return PaintStatus.REPAINT; - } else { - return PaintStatus.ERROR; - } - } catch (VizException e) { - this.internalState = State.INVALID; - throw e; + if (sharedTextureCoords == null) { + sharedTextureCoords = SharedCoordMap.get(key, glTarget); } + + if (!compiled) { + vertexCoords.compile(glTarget.getGl()); + compiled = true; + } + + GLGeometryPainter.paintGeometries(glTarget.getGl(), vertexCoords, + sharedTextureCoords.getTextureCoords()); } @Override public synchronized void dispose() { - // Synchronize on calculate so we don't dispose while running - synchronized (calculate) { - // Cancel calculation job from running - calculator.cancel(calculate); - // dispose and reset vertexCoords - if (vertexCoords != null) { - vertexCoords.dispose(); - vertexCoords = null; - } - if (sharedTextureCoords != null) { - SharedCoordMap.remove(key); - sharedTextureCoords = null; - } - internalState = State.INVALID; + vertexCoords.dispose(); + if (sharedTextureCoords != null) { + SharedCoordMap.remove(key); + sharedTextureCoords = null; } + shouldDraw = false; } /* * (non-Javadoc) * - * @see com.raytheon.uf.viz.core.IMesh#reproject(org.geotools.coverage.grid. - * GeneralGridGeometry) + * @see + * com.raytheon.viz.core.IMesh#calculateMesh(com.raytheon.viz.core.PixelCoverage + * , org.opengis.coverage.grid.GridGeometry) */ - @Override - public final void reproject(GeneralGridGeometry targetGeometry) - throws VizException { - if (targetGeometry.equals(this.targetGeometry) == false) { - dispose(); - this.targetGeometry = targetGeometry; - - // Set up convenience transforms - try { - DefaultMathTransformFactory factory = new DefaultMathTransformFactory(); - latLonToTargetGrid = factory.createConcatenatedTransform( - MapUtil.getTransformFromLatLon(targetGeometry - .getCoordinateReferenceSystem()), - targetGeometry.getGridToCRS(PixelInCell.CELL_CENTER) - .inverse()); - } catch (Throwable t) { - internalState = State.INVALID; - throw new VizException("Error projecting mesh", t); - } - - internalState = State.CALCULATING; - calculator.schedule(calculate); + public void calculateMesh(PixelCoverage pc, GridGeometry2D gg) { + MathTransform toLL = null; + ImageTile tile = null; + try { + toLL = CRS.findMathTransform(gg.getCoordinateReferenceSystem(), + DefaultGeographicCRS.WGS84); + tile = new ImageTile(); + tile.coverage = pc; + tile.rect = new Rectangle(gg.getGridRange().getLow(0), gg + .getGridRange().getLow(1), gg.getGridRange().getHigh(0), gg + .getGridRange().getHigh(1)); + tile.envelope = new Envelope(gg.getEnvelope().getMinimum(0), gg + .getEnvelope().getMaximum(0), gg.getEnvelope() + .getMinimum(1), gg.getEnvelope().getMaximum(1)); + } catch (Exception e) { } + calculateMesh(pc, tile, toLL); } - private boolean calculateMesh() { - key = generateKey(imageGeometry, imageCRSToLatLon); + @Override + public void calculateMesh(PixelCoverage pc, ImageTile tile, MathTransform mt) { + shouldDraw = false; + key = generateKey(tile, mt); try { - double[][][] worldCoordinates = generateWorldCoords(imageGeometry, - imageCRSToLatLon); - vertexCoords = new GLGeometryObject2D(new GLGeometryObjectData( - geometryType, GL.GL_VERTEX_ARRAY)); + double[][][] worldCoordinates = generateWorldCoords(tile, mt); vertexCoords.allocate(worldCoordinates.length * worldCoordinates[0].length); // Check for world wrapping - WorldWrapChecker wwc = new WorldWrapChecker(targetGeometry); + WorldWrapChecker wwc = new WorldWrapChecker(descriptor); for (int i = 0; i < worldCoordinates.length; ++i) { double[][] strip = worldCoordinates[i]; @@ -243,7 +176,7 @@ public abstract class AbstractGLMesh implements IMesh { prev1 = null; prev2 = null; } - vSegment.add(worldToPixel(next)); + vSegment.add(descriptor.worldToPixel(next)); prev2 = prev1; prev1 = next; @@ -252,28 +185,14 @@ public abstract class AbstractGLMesh implements IMesh { vertexCoords.addSegment(vSegment.toArray(new double[vSegment .size()][])); } - return true; - } catch (Exception e) { - Activator.statusHandler.handle(Priority.PROBLEM, - "Error calculating mesh", e); - } - return false; - } - protected final double[] worldToPixel(double[] world) { - double[] in = null; - if (world.length == 2) { - in = new double[] { world[0], world[1], 0.0 }; - } else { - in = world; + shouldDraw = true; + } catch (Exception e) { + e.printStackTrace(); + shouldDraw = false; } - double[] out = new double[in.length]; - try { - latLonToTargetGrid.transform(in, 0, out, 0, 1); - } catch (TransformException e) { - return null; - } - return out; + + pc.setMesh(this); } /* @@ -288,11 +207,10 @@ public abstract class AbstractGLMesh implements IMesh { return false; } - protected abstract SharedCoordinateKey generateKey( - GridGeometry2D imageGeometry, MathTransform mt); + protected abstract SharedCoordinateKey generateKey(ImageTile tile, + MathTransform mt); - protected abstract double[][][] generateWorldCoords( - GridGeometry2D imageGeometry, MathTransform mt) - throws TransformException; + protected abstract double[][][] generateWorldCoords(ImageTile tile, + MathTransform mt) throws TransformException; } diff --git a/cave/com.raytheon.viz.core.gl/src/com/raytheon/viz/core/gl/Activator.java b/cave/com.raytheon.viz.core.gl/src/com/raytheon/viz/core/gl/Activator.java index 42a74c7483..0a21f5e45f 100644 --- a/cave/com.raytheon.viz.core.gl/src/com/raytheon/viz/core/gl/Activator.java +++ b/cave/com.raytheon.viz.core.gl/src/com/raytheon/viz/core/gl/Activator.java @@ -19,6 +19,7 @@ **/ package com.raytheon.viz.core.gl; +import org.eclipse.core.runtime.jobs.Job; import org.eclipse.jface.preference.IPersistentPreferenceStore; import org.eclipse.ui.plugin.AbstractUIPlugin; import org.osgi.framework.BundleContext; @@ -33,8 +34,7 @@ import com.raytheon.uf.viz.core.localization.HierarchicalPreferenceStore; * The activator class controls the plug-in life cycle */ public class Activator extends AbstractUIPlugin { - - public static final transient IUFStatusHandler statusHandler = UFStatus + private static final transient IUFStatusHandler statusHandler = UFStatus .getHandler(Activator.class); // The plug-in ID @@ -62,6 +62,12 @@ public class Activator extends AbstractUIPlugin { */ public void start(BundleContext context) throws Exception { super.start(context); + // Start the texture loader job + TextureLoaderJob textureLoader = TextureLoaderJob.getInstance(); + if (textureLoader.getState() != Job.RUNNING) { + textureLoader.setSystem(true); + textureLoader.schedule(); + } } /* @@ -74,6 +80,11 @@ public class Activator extends AbstractUIPlugin { public void stop(BundleContext context) throws Exception { plugin = null; super.stop(context); + // Start the texture loader job + TextureLoaderJob textureLoader = TextureLoaderJob.getInstance(); + if (textureLoader.getState() == Job.RUNNING) { + textureLoader.shutdown(); + } } /** diff --git a/cave/com.raytheon.viz.core.gl/src/com/raytheon/viz/core/gl/GLFactoryAdapter.java b/cave/com.raytheon.viz.core.gl/src/com/raytheon/viz/core/gl/GLFactoryAdapter.java index 8886c02d86..9efc266f01 100644 --- a/cave/com.raytheon.viz.core.gl/src/com/raytheon/viz/core/gl/GLFactoryAdapter.java +++ b/cave/com.raytheon.viz.core.gl/src/com/raytheon/viz/core/gl/GLFactoryAdapter.java @@ -151,4 +151,17 @@ public class GLFactoryAdapter extends AbstractGraphicsFactoryAdapter { return canvas; } + /* + * (non-Javadoc) + * + * @see + * com.raytheon.uf.viz.core.AbstractGraphicsFactoryAdapter#disposeCanvas + * (org.eclipse.swt.widgets.Canvas) + */ + @Override + public void disposeCanvas(Canvas canvas) { + if (!canvas.isDisposed()) { + canvas.getParent().dispose(); + } + } } diff --git a/cave/com.raytheon.viz.core.gl/src/com/raytheon/viz/core/gl/GLGeometryPainter.java b/cave/com.raytheon.viz.core.gl/src/com/raytheon/viz/core/gl/GLGeometryPainter.java index 8f125409d1..f7753e05a5 100644 --- a/cave/com.raytheon.viz.core.gl/src/com/raytheon/viz/core/gl/GLGeometryPainter.java +++ b/cave/com.raytheon.viz.core.gl/src/com/raytheon/viz/core/gl/GLGeometryPainter.java @@ -48,6 +48,8 @@ import com.raytheon.viz.core.gl.GLGeometryObject2D.State; public class GLGeometryPainter { + private static int maxVertices = -1; + public static void paintGeometries(GL gl, GLGeometryObject2D... geoms) throws VizException { State state = State.INVALID; diff --git a/cave/com.raytheon.viz.core.gl/src/com/raytheon/viz/core/gl/IGLTarget.java b/cave/com.raytheon.viz.core.gl/src/com/raytheon/viz/core/gl/IGLTarget.java index a2d2dea427..ef117db9fa 100644 --- a/cave/com.raytheon.viz.core.gl/src/com/raytheon/viz/core/gl/IGLTarget.java +++ b/cave/com.raytheon.viz.core.gl/src/com/raytheon/viz/core/gl/IGLTarget.java @@ -24,9 +24,14 @@ import javax.media.opengl.glu.GLU; import org.eclipse.swt.graphics.Rectangle; +import com.raytheon.uf.viz.core.DrawableImage; import com.raytheon.uf.viz.core.IGraphicsTarget; -import com.raytheon.uf.viz.core.drawables.ColorMapParameters; -import com.raytheon.viz.core.gl.objects.GLTextureObject; +import com.raytheon.uf.viz.core.PixelCoverage; +import com.raytheon.uf.viz.core.drawables.IImage; +import com.raytheon.uf.viz.core.drawables.IRenderableDisplay; +import com.raytheon.uf.viz.core.drawables.PaintProperties; +import com.raytheon.uf.viz.core.exception.VizException; +import com.raytheon.viz.core.gl.images.GLColormappedImage; public interface IGLTarget extends IGraphicsTarget { @@ -34,9 +39,13 @@ public interface IGLTarget extends IGraphicsTarget { public abstract GLU getGlu(); - public abstract void pushGLState(); - - public abstract void popGLState(); + /** + * Active texture unit and bind a texture + * + * @param textureUnit + * @param GLImage + */ + public abstract void bindTexture(int textureUnit, GLColormappedImage image); /** * @@ -98,13 +107,70 @@ public interface IGLTarget extends IGraphicsTarget { public abstract Rectangle getBounds(); /** - * Get a colormap texture id for the specified parameters + * Dispose a vbo * - * @param cmapParams - * @return + * @param id + * the vbo id */ - public abstract GLTextureObject getColorMapTexture( - ColorMapParameters cmapParams); + public abstract void disposeVBO(int id); + + /** + * Dispose the occlusion query + * + * @param id + */ + public abstract void disposeOcclusionQueries(int[] id); + + /** + * + * @param display + * @throws VizException + */ + public void beginOcclusionTest(IRenderableDisplay display) + throws VizException; + + /** + * End the occlusion test. Commands will update the framebuffer + * + * @throws VizException + */ + public void endOcclusionTest() throws VizException; + + /** + * call drawRaster using a specified shader program + * + * @param image + * @param extent + * @param paintProps + * @param shaderProgram + * @return + * @throws VizException + */ + public abstract boolean drawRaster(IImage image, PixelCoverage extent, + PaintProperties paintProps, String shaderProgram) + throws VizException; + + /** + * call drawRaster with a specified shader program + * + * @param image + * the image reference object to draw + * @param extent + * the extent of the drawable area + * @param paintProps + * the paint properties + * @param mode + * the drawing mode (synchronous, asynchronous) + * @return status whether the raster was able to be drawn + * @throws VizException + */ + public abstract boolean drawRaster(IImage image, PixelCoverage extent, + PaintProperties paintProps, RasterMode mode, String shaderProgram) + throws VizException; + + public abstract boolean drawRasters(String shader, + PaintProperties paintProps, DrawableImage... images) + throws VizException; /** * Checks the glError state and does a UFStatus message diff --git a/cave/com.raytheon.viz.core.gl/src/com/raytheon/viz/core/gl/SharedCoordMap.java b/cave/com.raytheon.viz.core.gl/src/com/raytheon/viz/core/gl/SharedCoordMap.java index 68d79d72f1..9b7d794460 100644 --- a/cave/com.raytheon.viz.core.gl/src/com/raytheon/viz/core/gl/SharedCoordMap.java +++ b/cave/com.raytheon.viz.core.gl/src/com/raytheon/viz/core/gl/SharedCoordMap.java @@ -153,13 +153,14 @@ public class SharedCoordMap { */ private static void populateTextureGeom(SharedCoordinateKey key, GLGeometryObject2D geom) { - int height = 2 * (key.verticalDivisions + 1); + geom.allocate(key.verticalDivisions * key.horizontalDivisions * 2); + + int height = 2 * key.verticalDivisions; int width = key.horizontalDivisions; - geom.allocate(width * height * 2); // get dx and dy for texture points float dX = (1.0f / (key.horizontalDivisions)); - float dY = (1.0f / (key.verticalDivisions)); + float dY = (1.0f / (key.verticalDivisions - 1)); float xLow, xHigh = 0; diff --git a/cave/com.raytheon.viz.core.gl/src/com/raytheon/viz/core/gl/TextureLoaderJob.java b/cave/com.raytheon.viz.core.gl/src/com/raytheon/viz/core/gl/TextureLoaderJob.java new file mode 100644 index 0000000000..8a40d526a4 --- /dev/null +++ b/cave/com.raytheon.viz.core.gl/src/com/raytheon/viz/core/gl/TextureLoaderJob.java @@ -0,0 +1,210 @@ +/** + * This software was developed and / or modified by Raytheon Company, + * pursuant to Contract DG133W-05-CQ-1067 with the US Government. + * + * U.S. EXPORT CONTROLLED TECHNICAL DATA + * This software product contains export-restricted data whose + * export/transfer/disclosure is restricted by U.S. law. Dissemination + * to non-U.S. persons whether in the United States or abroad requires + * an export license or other authorization. + * + * Contractor Name: Raytheon Company + * Contractor Address: 6825 Pine Street, Suite 340 + * Mail Stop B8 + * Omaha, NE 68106 + * 402.291.0100 + * + * See the AWIPS II Master Rights File ("Master Rights File.pdf") for + * further licensing information. + **/ + +package com.raytheon.viz.core.gl; + +import java.util.Queue; +import java.util.concurrent.ConcurrentLinkedQueue; +import java.util.concurrent.LinkedBlockingQueue; + +import javax.media.opengl.GLContext; + +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.core.runtime.IStatus; +import org.eclipse.core.runtime.Status; +import org.eclipse.core.runtime.jobs.Job; + +import com.raytheon.uf.viz.core.exception.VizException; +import com.raytheon.viz.core.gl.images.AbstractGLImage; + +/** + * Job that demand-loads textures into GL. + *

+ * + * If a multiple ImageIO.reads are incurred simultaneously, the performance is + * horrible. By having only one texture load occur at a time in a different + * (non-blocking) thread, with adequate pause between texture loads, this + * problem is alleviated. + * + *

+ * 
+ *    SOFTWARE HISTORY
+ *   
+ *    Date          Ticket#     Engineer    Description
+ *    ------------	----------	-----------	--------------------------
+ *    7/1/06                    chammack    Initial Creation.
+ * 
+ * 
+ * + * @author chammack + * + */ +public class TextureLoaderJob extends Job { + + /** Number of things to keep on the queue before starting to remove some */ + private static final int MAX_QUEUE_SIZE = 256; + + /** The instance */ + private static TextureLoaderJob instance; + + /** Time (in ms) for the texture job to sleep (NEVER SET TO ZERO) */ + private static final int TEXTURE_JOB_SLEEP_TIME = 2; + + /** A flag to indicate whether the job should continue running */ + private boolean isRunning = true; + + /** A queue of images to load */ + private final Queue texturesToLoad; + + /** A thread safe list of images to load */ + private final ConcurrentLinkedQueue texturesToLoadToGPU; + + /** + * Internal datastructure: used to populate the queues + */ + private class Request { + public AbstractGLImage image; + + public GLContext ctx; + } + + /** + * Get the currently running instance of the texture loader + * + * @return + */ + public static TextureLoaderJob getInstance() { + if (instance == null) { + instance = new TextureLoaderJob(); + } + return instance; + } + + /** + * Use getInstance() instead of constructor + * + */ + private TextureLoaderJob() { + super("Texture Loader"); + this.texturesToLoad = new LinkedBlockingQueue(); + this.texturesToLoadToGPU = new ConcurrentLinkedQueue(); + } + + /** + * Request an image to be loaded + * + * @param img + * the image + */ + public void requestLoad(AbstractGLImage img) { + if (!this.texturesToLoad.contains(img)) + this.texturesToLoad.add(img); + } + + public void requestLoadIntoTexture(AbstractGLImage img, GLContext ctx) { + Request req = new Request(); + req.image = img; + req.ctx = ctx; + + this.texturesToLoadToGPU.add(req); + + } + + /* + * (non-Javadoc) + * + * @seeorg.eclipse.core.runtime.jobs.Job#run(org.eclipse.core.runtime. + * IProgressMonitor) + */ + @Override + protected IStatus run(IProgressMonitor monitor) { + + while (this.isRunning) { + while (this.texturesToLoad.size() > MAX_QUEUE_SIZE) { + this.texturesToLoad.poll(); + } + + while (this.texturesToLoad.size() > 0) { + AbstractGLImage image = this.texturesToLoad.remove(); + if (image.getStatus() == com.raytheon.uf.viz.core.drawables.IImage.Status.STAGED + || image.getStatus() == com.raytheon.uf.viz.core.drawables.IImage.Status.LOADED) { + continue; + } + try { + image.stageTexture(); + } catch (VizException e) { + Activator + .getDefault() + .getLog() + .log(new Status(IStatus.ERROR, Activator.PLUGIN_ID, + "Staging texture failed", e)); + } + } + try { + Thread.sleep(TEXTURE_JOB_SLEEP_TIME); + } catch (InterruptedException e) { + } + + // while (this.texturesToLoadToGPU.size() > MAX_QUEUE_SIZE) { + // this.texturesToLoadToGPU.remove(); + // } + // + // while (this.texturesToLoadToGPU.size() > 0) { + // final Request request = this.texturesToLoadToGPU.remove(); + // + // if (request.image.getStatus() == IImage.Status.LOADED + // || request.image.getStatus() == IImage.Status.FAILED) { + // continue; + // } + // VizApp.runSync(new Runnable() { + // + // public void run() { + // try { + // request.image.loadTexture(request.ctx); + // } catch (VizException e) { + // // Set an exception that the drawing subsystem will + // // pick + // // up and log properly/display to user + // request.image.setStatus(IImage.Status.FAILED); + // request.image.setFailedMessage(e); + // } + // } + // + // }); + // + // } + // try { + // Thread.sleep(TEXTURE_JOB_SLEEP_TIME); + // } catch (InterruptedException e) { + // } + + } + return Status.OK_STATUS; + } + + /** + * Request the job to be shut down + * + */ + public void shutdown() { + this.isRunning = false; + } + +} diff --git a/cave/com.raytheon.viz.core.gl/src/com/raytheon/viz/core/gl/dataformat/GLShortDataFormat.java b/cave/com.raytheon.viz.core.gl/src/com/raytheon/viz/core/gl/dataformat/GLShortDataFormat.java index bcbb01caa1..19c692b852 100644 --- a/cave/com.raytheon.viz.core.gl/src/com/raytheon/viz/core/gl/dataformat/GLShortDataFormat.java +++ b/cave/com.raytheon.viz.core.gl/src/com/raytheon/viz/core/gl/dataformat/GLShortDataFormat.java @@ -83,7 +83,7 @@ public class GLShortDataFormat extends AbstractGLColorMapDataFormat { * (int, int, com.raytheon.viz.core.gl.dataprep.GLColorMapData) */ @Override - public Number getValue(int x, int y, GLColorMapData data) { + public Short getValue(int x, int y, GLColorMapData data) { if (!(data.getData() instanceof ShortBuffer)) { throw new IllegalArgumentException( "Expecting data to contain a ShortBuffer but instead it is a " diff --git a/cave/com.raytheon.viz.core.gl/src/com/raytheon/viz/core/gl/dataformat/GLUnsignedShortDataFormat.java b/cave/com.raytheon.viz.core.gl/src/com/raytheon/viz/core/gl/dataformat/GLUnsignedShortDataFormat.java index 8f430b8054..88d6c7b702 100644 --- a/cave/com.raytheon.viz.core.gl/src/com/raytheon/viz/core/gl/dataformat/GLUnsignedShortDataFormat.java +++ b/cave/com.raytheon.viz.core.gl/src/com/raytheon/viz/core/gl/dataformat/GLUnsignedShortDataFormat.java @@ -60,7 +60,7 @@ public class GLUnsignedShortDataFormat extends GLShortDataFormat { * int, com.raytheon.viz.core.gl.dataformat.GLColorMapData) */ @Override - public Number getValue(int x, int y, GLColorMapData data) { + public Short getValue(int x, int y, GLColorMapData data) { if (!(data.getData() instanceof ShortBuffer)) { throw new IllegalArgumentException( "Expecting data to contain a ShortBuffer but instead it is a " @@ -69,7 +69,7 @@ public class GLUnsignedShortDataFormat extends GLShortDataFormat { int width = getAlignedWidth(data.getDimensionSize(0)); int index = y * width + x; ShortBuffer buffer = (ShortBuffer) data.getData(); - return (buffer.get(index) & 0xFFFF); + return buffer.get(index); } } diff --git a/cave/com.raytheon.viz.core.gl/src/com/raytheon/viz/core/gl/ext/AbstractGLImagingExtension.java b/cave/com.raytheon.viz.core.gl/src/com/raytheon/viz/core/gl/ext/AbstractGLImagingExtension.java deleted file mode 100644 index dcbc900633..0000000000 --- a/cave/com.raytheon.viz.core.gl/src/com/raytheon/viz/core/gl/ext/AbstractGLImagingExtension.java +++ /dev/null @@ -1,373 +0,0 @@ -/** - * This software was developed and / or modified by Raytheon Company, - * pursuant to Contract DG133W-05-CQ-1067 with the US Government. - * - * U.S. EXPORT CONTROLLED TECHNICAL DATA - * This software product contains export-restricted data whose - * export/transfer/disclosure is restricted by U.S. law. Dissemination - * to non-U.S. persons whether in the United States or abroad requires - * an export license or other authorization. - * - * Contractor Name: Raytheon Company - * Contractor Address: 6825 Pine Street, Suite 340 - * Mail Stop B8 - * Omaha, NE 68106 - * 402.291.0100 - * - * See the AWIPS II Master Rights File ("Master Rights File.pdf") for - * further licensing information. - **/ -package com.raytheon.viz.core.gl.ext; - -import java.nio.ByteBuffer; -import java.nio.ByteOrder; -import java.nio.FloatBuffer; -import java.util.HashSet; -import java.util.Set; - -import javax.media.opengl.GL; - -import com.raytheon.uf.common.status.IUFStatusHandler; -import com.raytheon.uf.common.status.UFStatus; -import com.raytheon.uf.viz.core.DrawableImage; -import com.raytheon.uf.viz.core.IMesh; -import com.raytheon.uf.viz.core.PixelCoverage; -import com.raytheon.uf.viz.core.drawables.IImage; -import com.raytheon.uf.viz.core.drawables.IImage.Status; -import com.raytheon.uf.viz.core.drawables.PaintProperties; -import com.raytheon.uf.viz.core.drawables.PaintStatus; -import com.raytheon.uf.viz.core.drawables.ext.GraphicsExtension; -import com.raytheon.uf.viz.core.drawables.ext.IImagingExtension; -import com.raytheon.uf.viz.core.exception.VizException; -import com.raytheon.viz.core.gl.AbstractGLMesh; -import com.raytheon.viz.core.gl.GLCapabilities; -import com.raytheon.viz.core.gl.IGLTarget; -import com.raytheon.viz.core.gl.glsl.GLSLFactory; -import com.raytheon.viz.core.gl.glsl.GLShaderProgram; -import com.raytheon.viz.core.gl.images.AbstractGLImage; -import com.sun.opengl.util.texture.TextureCoords; -import com.vividsolutions.jts.geom.Coordinate; - -/** - * Abstract GL Imaging extension class - * - *
- * 
- * SOFTWARE HISTORY
- * 
- * Date         Ticket#    Engineer    Description
- * ------------ ---------- ----------- --------------------------
- * Dec 15, 2011            mschenke     Initial creation
- * 
- * 
- * - * @author mschenke - * @version 1.0 - */ - -public abstract class AbstractGLImagingExtension extends - GraphicsExtension implements IImagingExtension { - - protected static final IUFStatusHandler statusHandler = UFStatus - .getHandler(AbstractGLImagingExtension.class); - - /* - * (non-Javadoc) - * - * @see - * com.raytheon.uf.viz.core.drawables.ext.IImagingExtension#drawRasters( - * com.raytheon.uf.viz.core.drawables.PaintProperties, - * com.raytheon.uf.viz.core.DrawableImage[]) - */ - @Override - public final boolean drawRasters(PaintProperties paintProps, - DrawableImage... images) throws VizException { - GL gl = target.getGl(); - boolean rval = true; - gl.glGetError(); - - target.pushGLState(); - try { - gl.glPolygonMode(GL.GL_FRONT_AND_BACK, GL.GL_FILL); - rval = drawRastersInternal(paintProps, images); - gl.glPolygonMode(GL.GL_BACK, GL.GL_LINE); - gl.glDisable(GL.GL_BLEND); - } finally { - target.popGLState(); - } - - target.handleError(gl.glGetError()); - return rval; - } - - protected boolean drawRastersInternal(PaintProperties paintProps, - DrawableImage... images) throws VizException { - GL gl = target.getGl(); - GLCapabilities capabilities = GLCapabilities.getInstance(gl); - // Get shader program extension uses - String shaderProgram = getShaderProgramName(); - - int repaints = 0; - Set errorMsgs = new HashSet(); - - GLShaderProgram program = null; - boolean attemptedToLoadShader = false; - int lastTextureType = -1; - - for (DrawableImage di : images) { - AbstractGLImage glImage = (AbstractGLImage) di.getImage(); - PixelCoverage extent = di.getCoverage(); - - synchronized (glImage) { - if (glImage.getStatus() == Status.STAGED) { - glImage.target(target); - } - - if (glImage.getStatus() != Status.LOADED) { - ++repaints; - continue; - } - - int textureType = glImage.getTextureStorageType(); - - if (lastTextureType != textureType) { - if (lastTextureType != -1) { - gl.glDisable(lastTextureType); - } - gl.glEnable(textureType); - lastTextureType = textureType; - } - - Object dataObj = null; - - if (glImage.bind(gl)) { - // Notify extension image is about to be rendered - dataObj = preImageRender(paintProps, glImage, extent); - - if (dataObj == null) { - // Skip image if preImageRender returned null - continue; - } - - if (shaderProgram != null - && capabilities.cardSupportsShaders) { - if (program == null && !attemptedToLoadShader) { - attemptedToLoadShader = true; - program = GLSLFactory.getInstance() - .getShaderProgram(target, null, - shaderProgram); - if (program != null) { - program.startShader(); - } - - gl.glTexEnvi(GL.GL_TEXTURE_ENV, - GL.GL_TEXTURE_ENV_MODE, GL.GL_ADD); - gl.glEnable(GL.GL_BLEND); - gl.glTexEnvi(GL.GL_TEXTURE_ENV, - GL.GL_TEXTURE_ENV_MODE, GL.GL_BLEND); - gl.glBlendFunc(GL.GL_SRC_ALPHA, - GL.GL_ONE_MINUS_SRC_ALPHA); - - gl.glColor4f(0.0f, 0.0f, 0.0f, - paintProps.getAlpha()); - } - - if (program != null) { - loadShaderData(program, glImage, paintProps); - } - } else { - gl.glEnable(GL.GL_BLEND); - gl.glBlendFunc(GL.GL_SRC_ALPHA, - GL.GL_ONE_MINUS_SRC_ALPHA); - gl.glColor4f(1.0f, 1.0f, 1.0f, paintProps.getAlpha()); - } - - if (drawCoverage(paintProps, extent, - glImage.getTextureCoords(), 0) == PaintStatus.REPAINT) { - // Coverage not ready, needs repaint - ++repaints; - } - - gl.glActiveTexture(GL.GL_TEXTURE0); - gl.glBindTexture(textureType, 0); - - // Notify extension image has been rendered - postImageRender(paintProps, glImage, dataObj); - - // Enable if you want to see mesh drawn - if (false) { - if (program != null) { - program.endShader(); - } - gl.glDisable(GL.GL_BLEND); - gl.glColor3f(0.0f, 1.0f, 0.0f); - gl.glPolygonMode(GL.GL_FRONT_AND_BACK, GL.GL_LINE); - drawCoverage(paintProps, extent, - glImage.getTextureCoords(), 0); - gl.glPolygonMode(GL.GL_FRONT_AND_BACK, GL.GL_FILL); - gl.glEnable(GL.GL_BLEND); - if (program != null) { - program.startShader(); - } - } - } else { - errorMsgs.add("Texture did not bind"); - continue; - } - } - } - - if (lastTextureType != -1) { - gl.glDisable(lastTextureType); - } - - if (program != null) { - program.endShader(); - } - - if (errorMsgs.size() > 0) { - throw new VizException("Error rendering " + errorMsgs.size() - + " images: " + errorMsgs); - } - - boolean needsRepaint = repaints > 0; - if (needsRepaint) { - target.setNeedsRefresh(true); - } - - return needsRepaint == false; - } - - /** - * Draw an image coverage object - * - * @param paintProps - * @param pc - * @param coords - * @param corrFactor - * @throws VizException - */ - protected PaintStatus drawCoverage(PaintProperties paintProps, - PixelCoverage pc, TextureCoords coords, float corrFactor) - throws VizException { - GL gl = target.getGl(); - if (pc == null) { - return PaintStatus.ERROR; - } - // gl.glPolygonMode(GL.GL_BACK, GL.GL_FILL); - // gl.glColor3d(1.0, 0.0, 0.0); - // } - - // boolean useNormals = false; - IMesh mesh = pc.getMesh(); - - // if mesh exists, use it - if (mesh != null) { - if (mesh instanceof AbstractGLMesh) { - return ((AbstractGLMesh) mesh).paint(target, paintProps); - } - } else if (coords != null) { - FloatBuffer fb = ByteBuffer.allocateDirect(4 * 5 * 4) - .order(ByteOrder.nativeOrder()).asFloatBuffer(); - - Coordinate ul = pc.getUl(); - Coordinate ur = pc.getUr(); - Coordinate lr = pc.getLr(); - Coordinate ll = pc.getLl(); - - fb.put(new float[] { coords.left() + corrFactor, - coords.bottom() + corrFactor }); - fb.put(new float[] { (float) ll.x, (float) ll.y, (float) ll.z }); - - fb.put(new float[] { coords.right() - corrFactor, - coords.bottom() + corrFactor }); - fb.put(new float[] { (float) lr.x, (float) lr.y, (float) lr.z }); - - fb.put(new float[] { coords.left() + corrFactor, - coords.top() - corrFactor }); - fb.put(new float[] { (float) ul.x, (float) ul.y, (float) ul.z }); - - fb.put(new float[] { coords.right() - corrFactor, - coords.top() - corrFactor }); - fb.put(new float[] { (float) ur.x, (float) ur.y, (float) ur.z }); - - // Clear error bit - gl.glGetError(); - - gl.glEnableClientState(GL.GL_VERTEX_ARRAY); - gl.glEnableClientState(GL.GL_TEXTURE_COORD_ARRAY); - - gl.glInterleavedArrays(GL.GL_T2F_V3F, 0, fb.rewind()); - int error = gl.glGetError(); - if (error == GL.GL_NO_ERROR) { - gl.glDrawArrays(GL.GL_TRIANGLE_STRIP, 0, 4); - } else { - target.handleError(error); - } - - gl.glDisableClientState(GL.GL_VERTEX_ARRAY); - gl.glDisableClientState(GL.GL_TEXTURE_COORD_ARRAY); - return PaintStatus.PAINTED; - } - return PaintStatus.ERROR; - } - - /** - * Setup anything that is required pre image rendering. Object returned is a - * state object and will be passed in to postImageRender. If the image - * should not be drawn, return null - * - * @param paintProps - * @param image - * @return - * @throws VizException - */ - public Object preImageRender(PaintProperties paintProps, - AbstractGLImage image, PixelCoverage imageCoverage) - throws VizException { - return this; - } - - /** - * Post image rendering method, can be used to change any state required. - * Return object from preImageRender is passed in as data argument - * - * @param paintProps - * @param image - * @param data - * @throws VizException - */ - public void postImageRender(PaintProperties paintProps, - AbstractGLImage image, Object data) throws VizException { - - } - - /* - * (non-Javadoc) - * - * @see com.raytheon.uf.viz.core.drawables.ext.GraphicsExtension# - * getCompatibilityValue(com.raytheon.uf.viz.core.IGraphicsTarget) - */ - @Override - public int getCompatibilityValue(IGLTarget target) { - return Compatibilty.TARGET_COMPATIBLE; - } - - /** - * The shader program name to execute for this extension - * - * @return - */ - public abstract String getShaderProgramName(); - - /** - * Populate the shader program with data required for execution - * - * @param program - * @param image - * @param paintProps - * @throws VizException - */ - public abstract void loadShaderData(GLShaderProgram program, IImage image, - PaintProperties paintProps) throws VizException; -} diff --git a/edexOsgi/com.raytheon.uf.common.dataplugin.grib/src/com/raytheon/uf/common/dataplugin/grib/request/GetCoveragesRequest.java~HEAD b/cave/com.raytheon.viz.core.gl/src/com/raytheon/viz/core/gl/glsl/AbstractShaderLoader.java similarity index 59% rename from edexOsgi/com.raytheon.uf.common.dataplugin.grib/src/com/raytheon/uf/common/dataplugin/grib/request/GetCoveragesRequest.java~HEAD rename to cave/com.raytheon.viz.core.gl/src/com/raytheon/viz/core/gl/glsl/AbstractShaderLoader.java index 5d538a3118..5652c0d8de 100644 --- a/edexOsgi/com.raytheon.uf.common.dataplugin.grib/src/com/raytheon/uf/common/dataplugin/grib/request/GetCoveragesRequest.java~HEAD +++ b/cave/com.raytheon.viz.core.gl/src/com/raytheon/viz/core/gl/glsl/AbstractShaderLoader.java @@ -17,42 +17,36 @@ * See the AWIPS II Master Rights File ("Master Rights File.pdf") for * further licensing information. **/ -package com.raytheon.uf.common.dataplugin.grib.request; - -import java.util.List; - -import com.raytheon.uf.common.serialization.annotations.DynamicSerialize; -import com.raytheon.uf.common.serialization.annotations.DynamicSerializeElement; -import com.raytheon.uf.common.serialization.comm.IServerRequest; +package com.raytheon.viz.core.gl.glsl; /** - * * TODO Add Description * *
  * 
  * SOFTWARE HISTORY
- * 
  * Date         Ticket#    Engineer    Description
  * ------------ ---------- ----------- --------------------------
- * Dec 20, 2011            bsteffen     Initial creation
+ * May 25, 2010            mschenke     Initial creation
  * 
  * 
* - * @author bsteffen + * @author mschenke * @version 1.0 */ -@DynamicSerialize -public class GetCoveragesRequest implements IServerRequest { - @DynamicSerializeElement - private List modelNames; - public List getModelNames() { - return modelNames; +public abstract class AbstractShaderLoader implements IShaderLoader { + + private String programName; + + @Override + public final String getName() { + return programName; } - public void setModelNames(List modelNames) { - this.modelNames = modelNames; + @Override + public final void setName(String name) { + this.programName = name; } } diff --git a/cave/com.raytheon.viz.core.gl/src/com/raytheon/viz/core/gl/glsl/GLSLFactory.java b/cave/com.raytheon.viz.core.gl/src/com/raytheon/viz/core/gl/glsl/GLSLFactory.java index 445e9804b8..ff676ac70b 100644 --- a/cave/com.raytheon.viz.core.gl/src/com/raytheon/viz/core/gl/glsl/GLSLFactory.java +++ b/cave/com.raytheon.viz.core.gl/src/com/raytheon/viz/core/gl/glsl/GLSLFactory.java @@ -22,6 +22,15 @@ package com.raytheon.viz.core.gl.glsl; import java.util.HashMap; import java.util.Map; +import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.IConfigurationElement; +import org.eclipse.core.runtime.IExtension; +import org.eclipse.core.runtime.IExtensionPoint; +import org.eclipse.core.runtime.IExtensionRegistry; +import org.eclipse.core.runtime.Platform; + +import com.raytheon.uf.viz.core.drawables.IImage; +import com.raytheon.uf.viz.core.drawables.PaintProperties; import com.raytheon.uf.viz.core.exception.VizException; import com.raytheon.viz.core.gl.IGLTarget; import com.raytheon.viz.core.gl.glsl.internal.GLProgramManager; @@ -49,7 +58,45 @@ public class GLSLFactory { private final Map shadersPrograms = new HashMap(); + private static final Map shaderProgramMap = new HashMap(); + + static { + // Construct the resource mapping from Eclipse plugins + IExtensionRegistry registry = Platform.getExtensionRegistry(); + IExtensionPoint point = registry + .getExtensionPoint("com.raytheon.viz.core.gl.shader"); + if (point != null) { + IExtension[] extensions = point.getExtensions(); + + for (int i = 0; i < extensions.length; ++i) { + IConfigurationElement[] config = extensions[i] + .getConfigurationElements(); + + for (int j = 0; j < config.length; j++) { + String name = config[j].getAttribute("programName"); + shaderProgramMap.put(name, config[j]); + } + } + + } + } + + public static void registerProgramLoader(String name, IShaderLoader loader) { + shaderProgramMap.put(name, loader); + } + private GLSLFactory() { + // Register vetex.glsl as the default vertex program loader + IShaderLoader loader = new AbstractShaderLoader() { + @Override + public void loadData(IGLTarget target, GLShaderProgram program, + IImage image, PaintProperties paintProps) + throws VizException { + // does nothing + } + }; + loader.setName(DEFAULT_VERTEX); + registerProgramLoader(loader.getName(), loader); } /** @@ -86,17 +133,68 @@ public class GLSLFactory { String shaderName = new String(vertexName + "_" + fragName); GLShaderProgram shader = shadersPrograms.get(shaderName); if (shader == null - || GLProgramManager.getInstance().hasBeenModified(fragName) - || GLProgramManager.getInstance().hasBeenModified(vertexName)) { + || GLProgramManager.getInstance().hasBeenModified(fragName, + false) + || GLProgramManager.getInstance().hasBeenModified(vertexName, + false)) { if (shader != null) { shader.dispose(); } + // program object not cached, construct + IShaderLoader vertexShader = null; + if (vertexName != null) { + vertexShader = getShaderLoaderInstance(shaderProgramMap + .get(vertexName)); + } + IShaderLoader fragmentShader = null; + if (fragName != null) { + fragmentShader = getShaderLoaderInstance(shaderProgramMap + .get(fragName)); + fragmentShader.setName(fragName); + } - shader = new GLShaderProgram(target, shaderName, vertexName, - fragName); + shader = new GLShaderProgram(target, shaderName, vertexShader, + fragmentShader); shadersPrograms.put(shaderName, shader); } + if (shader != null) { + Object fshader = shaderProgramMap.get(fragName); + Object vshader = shaderProgramMap.get(vertexName); + if (fshader != null && fshader instanceof IShaderLoader + && shader.getFragmentShader() != fshader) { + shader.updateFragmentShader((IShaderLoader) fshader); + } + if (vshader != null && vshader instanceof IShaderLoader + && shader.getVertexShader() != vshader) { + shader.updateVertexShader((IShaderLoader) vshader); + } + } + return shader; } + + /** + * Construct an instance of the shader loader class + * + * @param className + * @return + */ + private IShaderLoader getShaderLoaderInstance(Object object) + throws VizException { + if (object instanceof IConfigurationElement) { + IConfigurationElement configElement = (IConfigurationElement) object; + try { + return (IShaderLoader) configElement + .createExecutableExtension("loaderClass"); + } catch (CoreException e) { + throw new VizException( + "Error constructing instance of loader class: " + + configElement.getAttribute("loaderClass"), e); + } + } else if (object instanceof IShaderLoader) { + return (IShaderLoader) object; + } + return null; + } } diff --git a/cave/com.raytheon.viz.core.gl/src/com/raytheon/viz/core/gl/glsl/GLSLRasterProgramLoader.java b/cave/com.raytheon.viz.core.gl/src/com/raytheon/viz/core/gl/glsl/GLSLRasterProgramLoader.java new file mode 100644 index 0000000000..8a8c22e78c --- /dev/null +++ b/cave/com.raytheon.viz.core.gl/src/com/raytheon/viz/core/gl/glsl/GLSLRasterProgramLoader.java @@ -0,0 +1,133 @@ +/** + * This software was developed and / or modified by Raytheon Company, + * pursuant to Contract DG133W-05-CQ-1067 with the US Government. + * + * U.S. EXPORT CONTROLLED TECHNICAL DATA + * This software product contains export-restricted data whose + * export/transfer/disclosure is restricted by U.S. law. Dissemination + * to non-U.S. persons whether in the United States or abroad requires + * an export license or other authorization. + * + * Contractor Name: Raytheon Company + * Contractor Address: 6825 Pine Street, Suite 340 + * Mail Stop B8 + * Omaha, NE 68106 + * 402.291.0100 + * + * See the AWIPS II Master Rights File ("Master Rights File.pdf") for + * further licensing information. + **/ +package com.raytheon.viz.core.gl.glsl; + +import javax.media.opengl.GL; + +import com.raytheon.uf.viz.core.drawables.ColorMapParameters; +import com.raytheon.uf.viz.core.drawables.IImage; +import com.raytheon.uf.viz.core.drawables.PaintProperties; +import com.raytheon.uf.viz.core.drawables.SingleColorImage; +import com.raytheon.uf.viz.core.exception.VizException; +import com.raytheon.viz.core.gl.IGLTarget; +import com.raytheon.viz.core.gl.images.AbstractGLImage; +import com.raytheon.viz.core.gl.images.GLColormappedImage; + +/** + * Shader loader for rasters + * + *
+ * 
+ * SOFTWARE HISTORY
+ * Date         Ticket#    Engineer    Description
+ * ------------ ---------- ----------- --------------------------
+ * May 25, 2010            mschenke     Initial creation
+ * 
+ * 
+ * + * @author mschenke + * @version 1.0 + */ + +public class GLSLRasterProgramLoader extends AbstractShaderLoader { + + /* + * (non-Javadoc + * + * @see + * com.raytheon.viz.core.gl.glsl.IShaderLoader#loadData(com.raytheon.viz + * .core.gl.IGLTarget, com.raytheon.viz.core.gl.glsl.GLShaderProgram, + * com.raytheon.uf.viz.core.drawables.IImage, + * com.raytheon.uf.viz.core.drawables.PaintProperties) + */ + @Override + public void loadData(IGLTarget target, GLShaderProgram program, + IImage iimage, PaintProperties paintProps) throws VizException { + // Check for single color image + if (iimage instanceof SingleColorImage) { + program.setUniform("doSingleColor", 1); + program.setUniform("singleColor", + ((SingleColorImage) iimage).getColor()); + iimage = ((SingleColorImage) iimage).getWrappedImage(); + } else { + program.setUniform("doSingleColor", 0); + } + + // Get image as AbstractGLImage + AbstractGLImage image = null; + if (iimage instanceof AbstractGLImage == false) { + throw new VizException( + "Cannot apply glsl raster shader to non gl image"); + } + image = (AbstractGLImage) iimage; + + program.setUniform("brightness", image.getBrightness()); + program.setUniform("contrast", image.getContrast()); + + int texId = image instanceof GLColormappedImage ? ((GLColormappedImage) image) + .getTextureid() : -1; + if (texId > -1) { + program.setUniform("doColorMap", 1); + } else { + program.setUniform("doColorMap", 0); + } + + float naturalMin = 0; + float naturalMax = 0; + + float cmapMin = 0; + float cmapMax = 0; + + if (texId > 0) { + GLColormappedImage colormappedImg = (GLColormappedImage) image; + ColorMapParameters colorMapParameters = colormappedImg + .getColorMapParameters(); + + naturalMin = colorMapParameters.getDataMin(); + naturalMax = colorMapParameters.getDataMax(); + cmapMin = colorMapParameters.getColorMapMin(); + cmapMax = colorMapParameters.getColorMapMax(); + + program.setUniform("colorMapSz", colorMapParameters.getColorMap() + .getSize()); + int textureType = ((GLColormappedImage) image).getTextureType(); + program.setUniform("isFloat", textureType == GL.GL_FLOAT + || textureType == GL.GL_HALF_FLOAT_ARB ? 1 : 0); + program.setUniform("logarithmic", + colorMapParameters.isLogarithmic() ? 1 : 0); + program.setUniform("logFactor", colorMapParameters.getLogFactor()); + program.setUniform("mirror", colorMapParameters.isMirror() ? 1 : 0); + + program.setUniform("applyMask", colorMapParameters.isUseMask() ? 1 + : 0); + } + + program.setUniform("naturalMin", naturalMin); + program.setUniform("naturalMax", naturalMax); + program.setUniform("cmapMin", cmapMin); + program.setUniform("cmapMax", cmapMax); + + program.setUniform("alphaMask", 2); + program.setUniform("colorMap", 1); + program.setUniform("rawText", 0); + + program.setUniform("alphaVal", paintProps.getAlpha()); + } +} diff --git a/cave/com.raytheon.viz.core.gl/src/com/raytheon/viz/core/gl/glsl/GLShaderProgram.java b/cave/com.raytheon.viz.core.gl/src/com/raytheon/viz/core/gl/glsl/GLShaderProgram.java index 7a4b7aae73..9e70031e2d 100644 --- a/cave/com.raytheon.viz.core.gl/src/com/raytheon/viz/core/gl/glsl/GLShaderProgram.java +++ b/cave/com.raytheon.viz.core.gl/src/com/raytheon/viz/core/gl/glsl/GLShaderProgram.java @@ -21,9 +21,7 @@ package com.raytheon.viz.core.gl.glsl; import java.nio.ByteBuffer; import java.nio.IntBuffer; -import java.util.ArrayList; import java.util.HashMap; -import java.util.List; import java.util.Map; import javax.media.opengl.GL; @@ -33,6 +31,8 @@ import org.eclipse.swt.graphics.RGB; import com.raytheon.uf.common.status.IUFStatusHandler; import com.raytheon.uf.common.status.UFStatus; import com.raytheon.uf.common.status.UFStatus.Priority; +import com.raytheon.uf.viz.core.drawables.IImage; +import com.raytheon.uf.viz.core.drawables.PaintProperties; import com.raytheon.uf.viz.core.exception.VizException; import com.raytheon.viz.core.gl.IGLTarget; import com.raytheon.viz.core.gl.glsl.internal.GLProgramManager; @@ -68,6 +68,14 @@ public class GLShaderProgram { private int glslContext = -1; + private int vertexShaderId = -1; + + private int fragmentShaderId = -1; + + private IShaderLoader vertexShader; + + private IShaderLoader fragmentShader; + private State state = State.INVALID; // Declaring and using variables in GLSL is similar to using variables in C. @@ -103,36 +111,28 @@ public class GLShaderProgram { * @param fragmentShader * - can be null (but not if vertexShader == null) */ - GLShaderProgram(IGLTarget target, String name, String vertexShader, - String fragmentShader) throws VizException { + GLShaderProgram(IGLTarget target, String name, IShaderLoader vertexShader, + IShaderLoader fragmentShader) throws VizException { gl = target.getGl(); - glslContext = gl.glCreateProgram(); + glslContext = gl.glCreateProgramObjectARB(); if (glslContext < 1) { throw new VizException( "Error creating glsl program, could not create program object"); } - List shaderIds = new ArrayList(2); + vertexShaderId = -1; + fragmentShaderId = -1; + if (vertexShader != null) { - shaderIds.add(addShader(vertexShader, GL.GL_VERTEX_SHADER)); + this.setVertexShader(vertexShader); } if (fragmentShader != null) { - shaderIds.add(addShader(fragmentShader, GL.GL_FRAGMENT_SHADER)); + this.setFragmentShader(fragmentShader); } - - for (Integer shaderId : shaderIds) { - gl.glAttachShader(glslContext, shaderId); - } - gl.glLinkProgram(glslContext); + gl.glLinkProgramARB(glslContext); if (!checkForLinkingErrors(gl)) { state = State.INITIALIZED; - for (Integer shaderId : shaderIds) { - gl.glDeleteShader(shaderId); - } - } else { - throw new VizException( - "Error creating glsl shader program, could not link"); } this.name = name; } @@ -142,7 +142,7 @@ public class GLShaderProgram { */ public void startShader() { if (state == State.INITIALIZED) { - gl.glUseProgram(glslContext); + gl.glUseProgramObjectARB(glslContext); state = State.IN_USE; } loadedUniforms.clear(); @@ -153,7 +153,7 @@ public class GLShaderProgram { */ public void endShader() { if (state == State.IN_USE) { - gl.glUseProgram(0); + gl.glUseProgramObjectARB(0); state = State.INITIALIZED; } loadedUniforms.clear(); @@ -168,18 +168,53 @@ public class GLShaderProgram { } /** - * Load, and compile the shader program + * Load data into the shader program * - * @param shader + * @param target + * @param image + * @param paintProps + * @throws VizException */ - private int addShader(String shaderName, int shaderType) - throws VizException { - int shaderId = loadShaderProgram(shaderName, shaderType); - if (shaderId < 1) { - throw new VizException( - "Error creating shader, object not allocated"); + public void loadData(IGLTarget target, IImage image, + PaintProperties paintProps) throws VizException { + if (state == State.IN_USE) { + if (vertexShader != null) { + vertexShader.loadData(target, this, image, paintProps); + } + if (fragmentShader != null) { + fragmentShader.loadData(target, this, image, paintProps); + } + } + } + + /** + * Set, load, and compile the vertex shader program + * + * @param vshader + */ + private void setVertexShader(IShaderLoader vshader) throws VizException { + this.vertexShader = vshader; + vertexShaderId = loadShaderProgram(GLProgramManager.getInstance() + .getProgramCode(vshader.getName()), GL.GL_VERTEX_SHADER); + if (vertexShaderId < 0) { + throw new VizException( + "Error creating vertex shader, object not allocated"); + } + } + + /** + * Set, load, and compile the fragment shader program + * + * @param fshader + */ + private void setFragmentShader(IShaderLoader fshader) throws VizException { + this.fragmentShader = fshader; + fragmentShaderId = loadShaderProgram(GLProgramManager.getInstance() + .getProgramCode(fshader.getName()), GL.GL_FRAGMENT_SHADER); + if (fragmentShaderId < 0) { + throw new VizException( + "Error creating fragment shader, object not allocated"); } - return shaderId; } /** @@ -189,20 +224,54 @@ public class GLShaderProgram { * @param glShaderId * @return the shader program id */ - private int loadShaderProgram(String programName, int glShaderId) - throws VizException { - String program = GLProgramManager.getInstance().getProgramCode( - programName); - int shaderId = gl.glCreateShader(glShaderId); + private int loadShaderProgram(String program, int glShaderId) { + int shaderId = gl.glCreateShaderObjectARB(glShaderId); if (shaderId >= 0) { - gl.glShaderSource(shaderId, 1, new String[] { program }, + gl.glShaderSourceARB(shaderId, 1, new String[] { program }, (int[]) null, 0); - gl.glCompileShader(shaderId); - checkForCompileErrors(gl, shaderId, glShaderId, programName); + gl.glCompileShaderARB(shaderId); + checkForCompileErrors(gl, shaderId, glShaderId); + gl.glAttachObjectARB(glslContext, shaderId); } return shaderId; } + /** + * Updates the fragment shader's loader object + * + * @param fshader + */ + public void updateFragmentShader(IShaderLoader fshader) { + this.fragmentShader = fshader; + } + + /** + * Update the vertex shader loader + * + * @param vshader + */ + public void updateVertexShader(IShaderLoader vshader) { + this.vertexShader = vshader; + } + + /** + * Get the shader loader + * + * @return + */ + IShaderLoader getVertexShader() { + return vertexShader; + } + + /** + * Get the fragment loader + * + * @return + */ + IShaderLoader getFragmentShader() { + return fragmentShader; + } + /** * Set the uniform variable for the shader program * @@ -214,9 +283,6 @@ public class GLShaderProgram { gl.glUniform1f(getUniformLocation(uniformName), (Float) value); } else if (value instanceof Integer) { gl.glUniform1i(getUniformLocation(uniformName), (Integer) value); - } else if (value instanceof Boolean) { - gl.glUniform1i(getUniformLocation(uniformName), - ((Boolean) value) == true ? 1 : 0); } else if (value instanceof int[]) { gl.glUniform1iv(getUniformLocation(uniformName), MAX_MULTIGRIDS, (int[]) value, 0); @@ -240,7 +306,7 @@ public class GLShaderProgram { * @param value */ public void setUniform(String key, Object value) { - if (value != null && state == State.IN_USE) { + if (value != null) { if (loadedUniforms.containsKey(key) == false || value.equals(loadedUniforms.get(key)) == false) { // we haven't loaded this uniform yet or it is different @@ -258,7 +324,7 @@ public class GLShaderProgram { * @return */ private int getUniformLocation(String name) { - return (gl.glGetUniformLocation(glslContext, name)); + return (gl.glGetUniformLocationARB(glslContext, name)); } /** @@ -268,22 +334,23 @@ public class GLShaderProgram { * @param shader * @return */ - private boolean checkForCompileErrors(GL gl, int shader, int glId, - String name) { + private boolean checkForCompileErrors(GL gl, int shader, int glId) { String type = "unknown"; + String fileName = "unkown"; if (glId == GL.GL_FRAGMENT_SHADER) { type = "fragment"; + fileName = fragmentShader.getName(); } else if (glId == GL.GL_VERTEX_SHADER) { type = "vertex"; + fileName = vertexShader.getName(); } - boolean rval = false; int[] compilecheck = new int[1]; gl.glGetObjectParameterivARB(shader, GL.GL_OBJECT_COMPILE_STATUS_ARB, compilecheck, 0); if (compilecheck[0] == GL.GL_FALSE) { System.err.println("A compilation error occured in the " + type - + " shader source file (" + name + ")"); + + " shader source file (" + fileName + ".glsl)"); IntBuffer iVal = BufferUtil.newIntBuffer(1); gl.glGetObjectParameterivARB(shader, @@ -300,8 +367,8 @@ public class GLShaderProgram { byte[] infoBytes = new byte[length - 1]; infoLog.get(infoBytes); statusHandler.handle(Priority.CRITICAL, "Problem occured during " - + type + " shader initialization of " + name + ": " - + new String(infoBytes)); + + type + " shader initialization of file " + fileName + + ".glsl: " + new String(infoBytes)); System.err.println(new String(infoBytes)); rval = true; } @@ -350,6 +417,18 @@ public class GLShaderProgram { endShader(); } if (state == State.INITIALIZED) { + if (fragmentShader != null) { + gl.glDetachShader(glslContext, fragmentShaderId); + gl.glDeleteShader(fragmentShaderId); + fragmentShaderId = -1; + } + + if (vertexShader != null) { + gl.glDetachShader(glslContext, vertexShaderId); + gl.glDeleteShader(vertexShaderId); + vertexShaderId = -1; + } + gl.glDeleteProgram(glslContext); glslContext = -1; } diff --git a/cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/drawables/ext/ISingleColorImageExtension.java b/cave/com.raytheon.viz.core.gl/src/com/raytheon/viz/core/gl/glsl/IShaderLoader.java similarity index 62% rename from cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/drawables/ext/ISingleColorImageExtension.java rename to cave/com.raytheon.viz.core.gl/src/com/raytheon/viz/core/gl/glsl/IShaderLoader.java index 7040c52203..6d8a0533d8 100644 --- a/cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/drawables/ext/ISingleColorImageExtension.java +++ b/cave/com.raytheon.viz.core.gl/src/com/raytheon/viz/core/gl/glsl/IShaderLoader.java @@ -17,49 +17,52 @@ * See the AWIPS II Master Rights File ("Master Rights File.pdf") for * further licensing information. **/ -package com.raytheon.uf.viz.core.drawables.ext; -import java.awt.image.RenderedImage; - -import org.eclipse.swt.graphics.RGB; - -import com.raytheon.uf.viz.core.drawables.IImage; -import com.raytheon.uf.viz.core.exception.VizException; +package com.raytheon.viz.core.gl.glsl; /** - * Extension for creating images that should be mapped to a single color + * Define common interface for vertex and fragement shaders. * *
- * 
  * SOFTWARE HISTORY
- * 
  * Date         Ticket#    Engineer    Description
  * ------------ ---------- ----------- --------------------------
- * Dec 15, 2011            mschenke     Initial creation
+ *  
  * 
  * 
* - * @author mschenke + * @author estrabal * @version 1.0 */ -public interface ISingleColorImageExtension extends IImagingExtension { +import com.raytheon.uf.viz.core.drawables.IImage; +import com.raytheon.uf.viz.core.drawables.PaintProperties; +import com.raytheon.uf.viz.core.exception.VizException; +import com.raytheon.viz.core.gl.IGLTarget; - public static interface ISingleColorImage extends IImage { - - public void setColor(RGB color); - - } +public interface IShaderLoader { /** - * Construct an ISingleColorImage image that maps the image passed into to - * the single color value * - * @param image - * @param color * @return + */ + public abstract String getName(); + + /** + * + * @param name + */ + public abstract void setName(String name); + + /** + * load shader variables using IImage and PaintProperties + * + * @param target + * @param program + * @param image + * @param paintProps * @throws VizException */ - public ISingleColorImage constructImage(RenderedImage image, RGB color); - + public abstract void loadData(IGLTarget target, GLShaderProgram program, + IImage image, PaintProperties paintProps) throws VizException; } diff --git a/cave/com.raytheon.viz.core.gl/src/com/raytheon/viz/core/gl/glsl/internal/GLProgramManager.java b/cave/com.raytheon.viz.core.gl/src/com/raytheon/viz/core/gl/glsl/internal/GLProgramManager.java index 7b4c6d1389..b0559aeac5 100644 --- a/cave/com.raytheon.viz.core.gl/src/com/raytheon/viz/core/gl/glsl/internal/GLProgramManager.java +++ b/cave/com.raytheon.viz.core.gl/src/com/raytheon/viz/core/gl/glsl/internal/GLProgramManager.java @@ -23,18 +23,11 @@ import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.IOException; -import java.util.ArrayList; import java.util.HashMap; -import java.util.List; import java.util.Map; -import java.util.regex.Matcher; -import java.util.regex.Pattern; import com.raytheon.uf.common.localization.IPathManager; -import com.raytheon.uf.common.localization.LocalizationFile; import com.raytheon.uf.common.localization.PathManagerFactory; -import com.raytheon.uf.common.status.UFStatus; -import com.raytheon.uf.common.status.UFStatus.Priority; import com.raytheon.uf.viz.core.exception.VizException; /** @@ -50,44 +43,16 @@ import com.raytheon.uf.viz.core.exception.VizException; */ public class GLProgramManager { - private static final String GLSL_FOLDER = "glsl"; - - private static final String GLSL_INCLUDE_FOLDER = GLSL_FOLDER - + IPathManager.SEPARATOR + "include"; - - private static final String GLSL_EXTENSION = ".glsl"; - - private static final String GLSL_HEADER_EXTENSION = ".glh"; - - private static final Pattern INCLUDE_PATTERN = Pattern - .compile("^#include\\s*<([a-zA-z0-9_]*)>.*"); - private static GLProgramManager instance; - private final Map includeCode = new HashMap(); - private final Map programsCode = new HashMap(); - private final Map headerFiles = new HashMap(); + private Map fileMap = new HashMap(); - private final Map includeFiles = new HashMap(); - - private final Map programFiles = new HashMap(); - - private final IPathManager pm; + private Map modificationMap = new HashMap(); private GLProgramManager() { - pm = PathManagerFactory.getPathManager(); - // Lookup available main programs (will be in glsl directory) - LocalizationFile[] files = pm.listStaticFiles(GLSL_FOLDER, - new String[] { GLSL_EXTENSION }, false, true); - for (LocalizationFile file : files) { - File fileObj = file.getFile(); - String name = fileObj.getName(); - programFiles.put(name, fileObj); - programsCode.put(name, readProgramContents(fileObj)); - } } public static GLProgramManager getInstance() { @@ -98,151 +63,67 @@ public class GLProgramManager { return instance; } - /** - * Get program code for the program name specified, these files live in glsl - * directory in localization. - * - * @param aProgramName - * @return - * @throws VizException - */ public String getProgramCode(String aProgramName) throws VizException { - String fileName = aProgramName + GLSL_EXTENSION; - hasBeenModified(aProgramName); - return programsCode.get(fileName); + String program = programsCode.get(aProgramName); + String searchPath = "glsl" + File.separator + aProgramName + ".glsl"; + if (hasBeenModified(searchPath, true) || program == null) { + File file = fileMap.get(searchPath); + modificationMap.put(file, file.lastModified()); + try { + program = readFile(file); + programsCode.put(aProgramName, program); + } catch (IOException e) { + throw new VizException("Error loading program code for: " + + aProgramName, e); + } + } + + return program; } - /** - * Checks if program has been modified - * - * @param programName - * @return - */ - public boolean hasBeenModified(String programName) { - // TODO: Check file modification time and reload contents. Should also - // check modification times of files depends on and reload if any - // changes + public boolean hasBeenModified(String searchPath, boolean path) { + if (searchPath == null) { + return false; + } + + if (!path) { + searchPath = "glsl" + File.separator + searchPath + ".glsl"; + } + + File file = fileMap.get(searchPath); + if (file == null) { + IPathManager pm = PathManagerFactory.getPathManager(); + file = pm.getStaticFile(searchPath); + fileMap.put(searchPath, file); + } + + if (file.exists() == false) { + return false; + } + + Long lastMod = modificationMap.get(file); + if (lastMod == null || file.lastModified() > lastMod) { + return true; + } return false; } - /** - * Reads program contends for file, will recursively load all #includes as - * well - * - * @param aFile - * @return - */ - private String readProgramContents(File aFile) { - try { - StringBuffer buffer = new StringBuffer(); - - List toInclude = new ArrayList(); - getIncludes(aFile, toInclude); - - for (String include : toInclude) { - // look for header file first - File header = getIncludeFile(include, true); - if (header != null) { - String name = header.getName(); - String contents = includeCode.get(name); - if (contents == null) { - contents = readFileContents(header); - includeCode.put(name, contents); - } - buffer.append(contents); - } - } - - for (String include : toInclude) { - // look for glsl files next - File header = getIncludeFile(include, false); - if (header != null) { - String name = header.getName(); - String contents = includeCode.get(name); - if (contents == null) { - contents = readFileContents(header); - includeCode.put(name, contents); - } - buffer.append(contents); - } - } - - // Read program file contents - buffer.append(readFileContents(aFile)); - return buffer.toString(); - } catch (IOException e) { - UFStatus.getHandler().handle(Priority.PROBLEM, - "Error reading glsl program code from file system", e); - } - return null; - } - - /** - * Read file contents off file system - * - * @param file - * @param includeCode - * @return - * @throws IOException - */ - private String readFileContents(File file) throws IOException { + private String readFile(File aFile) throws IOException { StringBuffer buffer = new StringBuffer(); - BufferedReader reader = new BufferedReader(new FileReader(file)); - - String line = null; - while ((line = reader.readLine()) != null) { - Matcher match = INCLUDE_PATTERN.matcher(line); - if (match.find() == false) { - buffer.append(line).append("\n"); - } - } - - return buffer.toString(); - } - - private void getIncludes(File file, List toInclude) - throws IOException { - List newIncludes = new ArrayList(); - BufferedReader reader = new BufferedReader(new FileReader(file)); - String line = null; - while ((line = reader.readLine()) != null) { - Matcher match = INCLUDE_PATTERN.matcher(line); - if (match.find()) { - String include = match.group(1); - if (toInclude.contains(include) == false - && newIncludes.contains(include) == false) { - newIncludes.add(include); - toInclude.add(include); - } - } + FileReader fr = new FileReader(aFile); + BufferedReader reader = new BufferedReader(fr); + String line = ""; + while (line != null) { + buffer.append(line); + buffer.append("\n"); + line = reader.readLine(); } reader.close(); + fr.close(); - // Recursively get all include files - for (String newInclude : newIncludes) { - getIncludes(getIncludeFile(newInclude, false), toInclude); - } + String text = buffer.toString(); + return text; } - private File getIncludeFile(String name, boolean header) { - String fileName = name - + (header ? GLSL_HEADER_EXTENSION : GLSL_EXTENSION); - - Map toUse = null; - if (header) { - toUse = headerFiles; - } else { - toUse = includeFiles; - } - - File file = toUse.get(name); - if (file == null) { - file = pm.getStaticFile(GLSL_INCLUDE_FOLDER - + IPathManager.SEPARATOR + fileName); - toUse.put(name, file); - } - - return file; - } } diff --git a/cave/com.raytheon.viz.core.gl/src/com/raytheon/viz/core/gl/images/AbstractGLImage.java b/cave/com.raytheon.viz.core.gl/src/com/raytheon/viz/core/gl/images/AbstractGLImage.java index 86b9a7d7d0..c27bf3f573 100644 --- a/cave/com.raytheon.viz.core.gl/src/com/raytheon/viz/core/gl/images/AbstractGLImage.java +++ b/cave/com.raytheon.viz.core.gl/src/com/raytheon/viz/core/gl/images/AbstractGLImage.java @@ -24,12 +24,10 @@ import javax.media.opengl.glu.GLU; import com.raytheon.uf.viz.core.IGraphicsTarget; import com.raytheon.uf.viz.core.drawables.IImage; -import com.raytheon.uf.viz.core.drawables.ext.IImagingExtension; import com.raytheon.uf.viz.core.exception.VizException; import com.raytheon.viz.core.gl.GLContextBridge; import com.raytheon.viz.core.gl.objects.GLFrameBufferObject; import com.raytheon.viz.core.gl.objects.GLRenderBuffer; -import com.sun.opengl.util.texture.TextureCoords; /** * @@ -71,10 +69,7 @@ public abstract class AbstractGLImage implements IImage { // Used for offscreen rendering private GLRenderBuffer rbuf; - private Class extensionClass; - - protected AbstractGLImage(Class extensionClass) { - this.extensionClass = extensionClass; + protected AbstractGLImage() { } /** @@ -222,75 +217,11 @@ public abstract class AbstractGLImage implements IImage { } } - /* - * (non-Javadoc) - * - * @see com.raytheon.uf.viz.core.drawables.IImage#getExtensionClass() - */ - @Override - public Class getExtensionClass() { - return extensionClass; - } - - /** - * Binds the texture. Default implementation takes the textureId and binds - * to GL_TEXTURE0. Use bind(int) for more control - * - * @return - */ - public boolean bind(GL gl) { - return bind(gl, GL.GL_TEXTURE0); - } - - public boolean bind(GL gl, int texture) { - int texId = getTextureid(); - if (texId > 0) { - int textureType = getTextureStorageType(); - gl.glActiveTexture(texture); - gl.glBindTexture(textureType, texId); - - // Apply interpolation - if (isInterpolated()) { - gl.glTexParameteri(textureType, GL.GL_TEXTURE_MIN_FILTER, - GL.GL_LINEAR); - gl.glTexParameteri(textureType, GL.GL_TEXTURE_MAG_FILTER, - GL.GL_LINEAR); - } else { - gl.glTexParameteri(textureType, GL.GL_TEXTURE_MIN_FILTER, - GL.GL_NEAREST); - gl.glTexParameteri(textureType, GL.GL_TEXTURE_MAG_FILTER, - GL.GL_NEAREST); - } - return true; - } - return false; - } - - /* - * (non-Javadoc) - * - * @see com.raytheon.uf.viz.core.drawables.IImage#stage() - */ - @Override - public final void stage() throws VizException { - Status status = getStatus(); - if (status != Status.LOADED && status != Status.STAGED) { - setStatus(Status.LOADING); - if (stageTexture()) { - setStatus(Status.STAGED); - } else { - setStatus(Status.FAILED); - } - } - } - - public abstract TextureCoords getTextureCoords(); - public abstract int getTextureid(); public abstract int getTextureStorageType(); - public abstract boolean stageTexture() throws VizException; + public abstract void stageTexture() throws VizException; public abstract void loadTexture(GL gl) throws VizException; diff --git a/cave/com.raytheon.viz.core.gl/src/com/raytheon/viz/core/gl/images/GLCMTextureData.java b/cave/com.raytheon.viz.core.gl/src/com/raytheon/viz/core/gl/images/GLCMTextureData.java index 4d7b046f17..e7ff4519c9 100644 --- a/cave/com.raytheon.viz.core.gl/src/com/raytheon/viz/core/gl/images/GLCMTextureData.java +++ b/cave/com.raytheon.viz.core.gl/src/com/raytheon/viz/core/gl/images/GLCMTextureData.java @@ -200,9 +200,12 @@ public class GLCMTextureData implements IImageCacheable { return GL.GL_TEXTURE_2D; } - public double getValue(int x, int y) { + public double getValue(int x, int y, float dataMin, float dataMax) { if (!isStaged() && isLoaded()) { GL gl = GLU.getCurrentGL(); + if (gl == null || data == null) { + return Double.NaN; + } int textureStorageType = getTextureStorageType(); int copybackTextureType = data.getCopyBackTextureType(); Buffer copybackBuffer = data.getCopybackBuffer(); diff --git a/cave/com.raytheon.viz.core.gl/src/com/raytheon/viz/core/gl/images/GLColormappedImage.java b/cave/com.raytheon.viz.core.gl/src/com/raytheon/viz/core/gl/images/GLColormappedImage.java index fdc594669b..28c59d934a 100644 --- a/cave/com.raytheon.viz.core.gl/src/com/raytheon/viz/core/gl/images/GLColormappedImage.java +++ b/cave/com.raytheon.viz.core.gl/src/com/raytheon/viz/core/gl/images/GLColormappedImage.java @@ -24,9 +24,8 @@ import javax.media.opengl.GL; import com.raytheon.uf.viz.core.data.IColorMapDataRetrievalCallback; import com.raytheon.uf.viz.core.drawables.ColorMapParameters; import com.raytheon.uf.viz.core.drawables.IColormappedImage; -import com.raytheon.uf.viz.core.drawables.ext.IImagingExtension; import com.raytheon.uf.viz.core.exception.VizException; -import com.sun.opengl.util.texture.TextureCoords; +import com.raytheon.viz.core.gl.IGLTarget; /** * @@ -52,30 +51,24 @@ public class GLColormappedImage extends AbstractGLImage implements protected GLCMTextureData data; public GLColormappedImage(IColorMapDataRetrievalCallback dataCallback, - ColorMapParameters params, - Class extensionClass) { - super(extensionClass); + ColorMapParameters params, IGLTarget target) { + super(); this.data = GLCMTextureData.getGlTextureId(dataCallback); this.colorMapParameters = params; - if (data.isLoaded()) { - setStatus(Status.LOADED); - } else if (data.isStaged()) { - setStatus(Status.STAGED); - } } /* * (non-Javadoc) * - * @see com.raytheon.viz.core.gl.images.AbstractGLImage#stageTexture() + * @see com.raytheon.viz.core.gl.GLImage#stageTexture() */ @Override - public boolean stageTexture() throws VizException { - if (data == null) { - throw new VizException( - "Cannot stage texture, image has been disposed"); + public void stageTexture() throws VizException { + if (data.stageTexture()) { + setStatus(Status.STAGED); + } else { + setStatus(Status.FAILED); } - return data.stageTexture(); } /* @@ -176,10 +169,8 @@ public class GLColormappedImage extends AbstractGLImage implements @Override public double getValue(int x, int y) { - double val = Double.NaN; - if (data != null) { - val = data.getValue(x, y); - } + double val = data.getValue(x, y, colorMapParameters.getDataMin(), + colorMapParameters.getDataMax()); return val; } @@ -231,11 +222,7 @@ public class GLColormappedImage extends AbstractGLImage implements @Override public Status getStatus() { Status status = super.getStatus(); - if (data == null) { - if (status != Status.UNLOADED) { - setStatus(Status.UNLOADED); - } - } else if (data.isLoaded()) { + if (data.isLoaded()) { if (status != Status.LOADED) { setStatus(Status.LOADED); } @@ -255,14 +242,4 @@ public class GLColormappedImage extends AbstractGLImage implements return super.getStatus(); } - /* - * (non-Javadoc) - * - * @see com.raytheon.viz.core.gl.images.AbstractGLImage#getTextureCoords() - */ - @Override - public TextureCoords getTextureCoords() { - return new TextureCoords(0, 1, 1, 0); - } - } diff --git a/cave/com.raytheon.viz.core.gl/src/com/raytheon/viz/core/gl/images/GLDelegateImage.java b/cave/com.raytheon.viz.core.gl/src/com/raytheon/viz/core/gl/images/GLDelegateImage.java deleted file mode 100644 index dfd6a56c41..0000000000 --- a/cave/com.raytheon.viz.core.gl/src/com/raytheon/viz/core/gl/images/GLDelegateImage.java +++ /dev/null @@ -1,176 +0,0 @@ -/** - * This software was developed and / or modified by Raytheon Company, - * pursuant to Contract DG133W-05-CQ-1067 with the US Government. - * - * U.S. EXPORT CONTROLLED TECHNICAL DATA - * This software product contains export-restricted data whose - * export/transfer/disclosure is restricted by U.S. law. Dissemination - * to non-U.S. persons whether in the United States or abroad requires - * an export license or other authorization. - * - * Contractor Name: Raytheon Company - * Contractor Address: 6825 Pine Street, Suite 340 - * Mail Stop B8 - * Omaha, NE 68106 - * 402.291.0100 - * - * See the AWIPS II Master Rights File ("Master Rights File.pdf") for - * further licensing information. - **/ -package com.raytheon.viz.core.gl.images; - -import javax.media.opengl.GL; - -import com.raytheon.uf.viz.core.IGraphicsTarget; -import com.raytheon.uf.viz.core.drawables.ext.IImagingExtension; -import com.raytheon.uf.viz.core.exception.VizException; -import com.sun.opengl.util.texture.TextureCoords; - -/** - * GL image that wraps another gl image - * - *
- * 
- * SOFTWARE HISTORY
- * 
- * Date         Ticket#    Engineer    Description
- * ------------ ---------- ----------- --------------------------
- * Dec 16, 2011            mschenke     Initial creation
- * 
- * 
- * - * @author mschenke - * @version 1.0 - */ - -public class GLDelegateImage extends AbstractGLImage { - - protected T image; - - public GLDelegateImage(T image, - Class extensionClass) { - super(extensionClass); - this.image = image; - } - - public T getWrappedImage() { - return image; - } - - /* - * (non-Javadoc) - * - * @see com.raytheon.uf.viz.core.drawables.IImage#getWidth() - */ - @Override - public int getWidth() { - return image.getWidth(); - } - - /* - * (non-Javadoc) - * - * @see com.raytheon.uf.viz.core.drawables.IImage#getHeight() - */ - @Override - public int getHeight() { - return image.getHeight(); - } - - /* - * (non-Javadoc) - * - * @see com.raytheon.viz.core.gl.images.AbstractGLImage#getTextureCoords() - */ - @Override - public TextureCoords getTextureCoords() { - return image.getTextureCoords(); - } - - /* - * (non-Javadoc) - * - * @see com.raytheon.viz.core.gl.images.AbstractGLImage#getTextureid() - */ - @Override - public int getTextureid() { - return image.getTextureid(); - } - - /* - * (non-Javadoc) - * - * @see - * com.raytheon.viz.core.gl.images.AbstractGLImage#getTextureStorageType () - */ - @Override - public int getTextureStorageType() { - return image.getTextureStorageType(); - } - - /* - * (non-Javadoc) - * - * @see com.raytheon.viz.core.gl.images.AbstractGLImage#stageTexture() - */ - @Override - public boolean stageTexture() throws VizException { - return image.stageTexture(); - } - - /* - * (non-Javadoc) - * - * @see com.raytheon.viz.core.gl.images.AbstractGLImage#loadTexture(javax - * .media.opengl.GLContext) - */ - @Override - public void loadTexture(GL gl) throws VizException { - image.loadTexture(gl); - } - - /* - * (non-Javadoc) - * - * @see - * com.raytheon.viz.core.gl.images.AbstractGLImage#target(com.raytheon.uf - * .viz.core.IGraphicsTarget) - */ - @Override - public void target(IGraphicsTarget target) throws VizException { - image.target(target); - } - - /* - * (non-Javadoc) - * - * @see com.raytheon.viz.core.gl.images.AbstractGLImage#getStatus() - */ - @Override - public Status getStatus() { - return image.getStatus(); - } - - /* - * (non-Javadoc) - * - * @see - * com.raytheon.viz.core.gl.images.AbstractGLImage#setStatus(com.raytheon - * .uf.viz.core.drawables.IImage.Status) - */ - @Override - public void setStatus(Status status) { - image.setStatus(status); - } - - /* - * (non-Javadoc) - * - * @see com.raytheon.viz.core.gl.images.AbstractGLImage#usaAsFrameBuffer() - */ - @Override - public void usaAsFrameBuffer() throws VizException { - image.usaAsFrameBuffer(); - } - -} diff --git a/cave/com.raytheon.viz.core.gl/src/com/raytheon/viz/core/gl/images/GLImage.java b/cave/com.raytheon.viz.core.gl/src/com/raytheon/viz/core/gl/images/GLImage.java index 28d71155c4..df5d54e09c 100644 --- a/cave/com.raytheon.viz.core.gl/src/com/raytheon/viz/core/gl/images/GLImage.java +++ b/cave/com.raytheon.viz.core.gl/src/com/raytheon/viz/core/gl/images/GLImage.java @@ -30,18 +30,17 @@ import javax.media.jai.PlanarImage; import javax.media.opengl.GL; import com.raytheon.uf.viz.core.data.IRenderedImageCallback; -import com.raytheon.uf.viz.core.drawables.ext.IImagingExtension; import com.raytheon.uf.viz.core.exception.VizException; +import com.raytheon.viz.core.gl.IGLTarget; import com.raytheon.viz.core.gl.internal.cache.IImageCacheable; import com.raytheon.viz.core.gl.internal.cache.ImageCache; import com.raytheon.viz.core.gl.internal.cache.ImageCache.CacheType; import com.sun.opengl.util.texture.Texture; -import com.sun.opengl.util.texture.TextureCoords; import com.sun.opengl.util.texture.TextureData; import com.sun.opengl.util.texture.TextureIO; /** - * Represents a GL "RenderedImage" + * Represents a GL "Image" * *
  * 
@@ -71,8 +70,8 @@ public class GLImage extends AbstractGLImage implements IImageCacheable {
 
     protected int size;
 
-    public GLImage(IRenderedImageCallback preparer, Class extensionClass) {
-        super(extensionClass);
+    public GLImage(IRenderedImageCallback preparer, IGLTarget target) {
+        super();
         theTexture = null;
         this.imagePreparer = preparer;
     }
@@ -126,20 +125,17 @@ public class GLImage extends AbstractGLImage implements IImageCacheable {
 
     }
 
-    /*
-     * (non-Javadoc)
+    /**
+     * Stage the texture in memory
      * 
-     * @see com.raytheon.viz.core.gl.images.AbstractGLImage#stageTexture()
+     * The texture will then be ready to load into the video card
+     * 
+     * @throws VizException
      */
-    @Override
-    public boolean stageTexture() throws VizException {
-        if (theImage == null) {
-            theImage = imagePreparer.getImage();
-        }
-        boolean rval = generateTextureData(theImage);
-        // Add to memory cache
-        ImageCache.getInstance(CacheType.MEMORY).put(this);
-        return rval;
+    public void stageTexture() throws VizException {
+        generateTextureData();
+        ImageCache.getInstance(CacheType.MEMORY).put(this); // Add to
+        // memory
     }
 
     /**
@@ -181,9 +177,9 @@ public class GLImage extends AbstractGLImage implements IImageCacheable {
      * @param rendImg
      *            the rendered image to load
      */
-    private boolean generateTextureData(RenderedImage rendImg) {
+    private void generateTextureData(RenderedImage rendImg) {
         if (rendImg == null) {
-            return false;
+            return;
         }
 
         if (rendImg instanceof BufferedImage) {
@@ -200,7 +196,18 @@ public class GLImage extends AbstractGLImage implements IImageCacheable {
 
         this.size = rendImg.getHeight() * rendImg.getWidth() * 4
                 * rendImg.getColorModel().getNumColorComponents();
-        return true;
+        setStatus(Status.STAGED);
+    }
+
+    private void generateTextureData() {
+        if (theImage == null) {
+            try {
+                theImage = imagePreparer.getImage();
+            } catch (VizException e) {
+                e.printStackTrace();
+            }
+        }
+        generateTextureData(theImage);
     }
 
     /**
@@ -243,9 +250,6 @@ public class GLImage extends AbstractGLImage implements IImageCacheable {
      * @see com.raytheon.viz.core.drawables.IImage#getHeight()
      */
     public int getHeight() {
-        if (theImage != null) {
-            return theImage.getHeight();
-        }
         if (theTexture != null) {
             return theTexture.getImageHeight();
         }
@@ -259,9 +263,6 @@ public class GLImage extends AbstractGLImage implements IImageCacheable {
      * @see com.raytheon.viz.core.drawables.IImage#getWidth()
      */
     public int getWidth() {
-        if (theImage != null) {
-            return theImage.getWidth();
-        }
         if (theTexture != null) {
             return theTexture.getImageWidth();
         }
@@ -304,14 +305,4 @@ public class GLImage extends AbstractGLImage implements IImageCacheable {
         return getTexture().getTextureObject();
     }
 
-    /*
-     * (non-Javadoc)
-     * 
-     * @see com.raytheon.viz.core.gl.images.AbstractGLImage#getTextureCoords()
-     */
-    @Override
-    public TextureCoords getTextureCoords() {
-        return theTexture.getImageTexCoords();
-    }
-
 }
diff --git a/cave/com.raytheon.viz.core.gl/src/com/raytheon/viz/core/gl/images/GLSingleColorImage.java b/cave/com.raytheon.viz.core.gl/src/com/raytheon/viz/core/gl/images/GLSingleColorImage.java
deleted file mode 100644
index ce8361b49d..0000000000
--- a/cave/com.raytheon.viz.core.gl/src/com/raytheon/viz/core/gl/images/GLSingleColorImage.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/**
- * This software was developed and / or modified by Raytheon Company,
- * pursuant to Contract DG133W-05-CQ-1067 with the US Government.
- * 
- * U.S. EXPORT CONTROLLED TECHNICAL DATA
- * This software product contains export-restricted data whose
- * export/transfer/disclosure is restricted by U.S. law. Dissemination
- * to non-U.S. persons whether in the United States or abroad requires
- * an export license or other authorization.
- * 
- * Contractor Name:        Raytheon Company
- * Contractor Address:     6825 Pine Street, Suite 340
- *                         Mail Stop B8
- *                         Omaha, NE 68106
- *                         402.291.0100
- * 
- * See the AWIPS II Master Rights File ("Master Rights File.pdf") for
- * further licensing information.
- **/
-package com.raytheon.viz.core.gl.images;
-
-import org.eclipse.swt.graphics.RGB;
-
-import com.raytheon.uf.viz.core.drawables.ext.ISingleColorImageExtension.ISingleColorImage;
-import com.raytheon.viz.core.gl.internal.ext.GLSingleColorImageExtension;
-
-/**
- * GL Image object that all non-zero values should be mapped to a single color
- * value
- * 
- * 
- * 
- * SOFTWARE HISTORY
- * 
- * Date         Ticket#    Engineer    Description
- * ------------ ---------- ----------- --------------------------
- * Dec 15, 2011            mschenke     Initial creation
- * 
- * 
- * - * @author mschenke - * @version 1.0 - */ - -public class GLSingleColorImage extends GLDelegateImage - implements ISingleColorImage { - - private RGB color; - - public GLSingleColorImage(AbstractGLImage image, RGB color) { - super(image, GLSingleColorImageExtension.class); - this.color = color; - } - - /* - * (non-Javadoc) - * - * @see com.raytheon.uf.viz.core.drawables.ext.ISingleColorImageExtension - * .ISingleColorImage#setColor(org.eclipse.swt.graphics.RGB) - */ - @Override - public void setColor(RGB color) { - this.color = color; - } - - public RGB getColor() { - return color; - } - -} \ No newline at end of file diff --git a/cave/com.raytheon.viz.core.gl/src/com/raytheon/viz/core/gl/internal/GLMesh2DStrips.java b/cave/com.raytheon.viz.core.gl/src/com/raytheon/viz/core/gl/internal/GLMesh2DStrips.java index fab333c4bf..0cd09510f8 100644 --- a/cave/com.raytheon.viz.core.gl/src/com/raytheon/viz/core/gl/internal/GLMesh2DStrips.java +++ b/cave/com.raytheon.viz.core.gl/src/com/raytheon/viz/core/gl/internal/GLMesh2DStrips.java @@ -21,17 +21,17 @@ package com.raytheon.viz.core.gl.internal; import javax.media.opengl.GL; -import org.geotools.coverage.grid.GeneralGridGeometry; -import org.geotools.coverage.grid.GridGeometry2D; -import org.geotools.geometry.jts.ReferencedEnvelope; import org.opengis.referencing.operation.MathTransform; import org.opengis.referencing.operation.TransformException; +import com.raytheon.uf.common.status.IUFStatusHandler; +import com.raytheon.uf.common.status.UFStatus; import com.raytheon.uf.common.status.UFStatus.Priority; -import com.raytheon.uf.viz.core.exception.VizException; +import com.raytheon.uf.viz.core.map.IMapDescriptor; +import com.raytheon.uf.viz.core.rsc.hdf5.ImageTile; import com.raytheon.viz.core.gl.AbstractGLMesh; -import com.raytheon.viz.core.gl.Activator; import com.raytheon.viz.core.gl.SharedCoordMap.SharedCoordinateKey; +import com.vividsolutions.jts.geom.Envelope; /** * @@ -51,10 +51,11 @@ import com.raytheon.viz.core.gl.SharedCoordMap.SharedCoordinateKey; */ public class GLMesh2DStrips extends AbstractGLMesh { - public GLMesh2DStrips(GridGeometry2D imageGeometry, - GeneralGridGeometry targetGeometry) throws VizException { - super(GL.GL_TRIANGLE_STRIP); - initialize(imageGeometry, targetGeometry); + private static final transient IUFStatusHandler statusHandler = UFStatus + .getHandler(GLMesh2DStrips.class); + + public GLMesh2DStrips(IMapDescriptor descriptor) { + super(GL.GL_TRIANGLE_STRIP, descriptor); } /* @@ -66,21 +67,19 @@ public class GLMesh2DStrips extends AbstractGLMesh { * org.opengis.referencing.operation.MathTransform) */ @Override - public double[][][] generateWorldCoords(GridGeometry2D imageGeometry, - MathTransform mt) throws TransformException { - ReferencedEnvelope envelope = new ReferencedEnvelope( - imageGeometry.getEnvelope()); - double worldMinX = envelope.getMinX(); - double worldMinY = envelope.getMinY(); - double worldWidth = envelope.getWidth(); - double worldHeight = envelope.getHeight(); + public double[][][] generateWorldCoords(ImageTile tile, MathTransform mt) + throws TransformException { + double worldMinX = tile.envelope.getMinX(); + double worldMinY = tile.envelope.getMinY(); + double worldWidth = tile.envelope.getWidth(); + double worldHeight = tile.envelope.getHeight(); // get dx and dy for texture points double dXWorld = worldWidth / (key.horizontalDivisions); - double dYWorld = worldHeight / (key.verticalDivisions); + double dYWorld = worldHeight / (key.verticalDivisions - 1); - double[][][] worldCoordinates = new double[key.horizontalDivisions][2 * (key.verticalDivisions + 1)][2]; + double[][][] worldCoordinates = new double[key.horizontalDivisions][2 * key.verticalDivisions][2]; int width = worldCoordinates.length; int height = worldCoordinates[0].length; @@ -137,74 +136,68 @@ public class GLMesh2DStrips extends AbstractGLMesh { return worldCoordinates; } - private static final int MIN_HORZ_DIVS = 1; - - private static final int MIN_VERT_DIVS = 1; - @Override - protected SharedCoordinateKey generateKey(GridGeometry2D imageGeometry, - MathTransform mt) { - int width = imageGeometry.getGridRange().getSpan(0); - int height = imageGeometry.getGridRange().getSpan(1); + protected SharedCoordinateKey generateKey(ImageTile tile, MathTransform mt) { try { - int maxHorzDiv = Math.max(width / 4, MIN_HORZ_DIVS); - int maxVertDiv = Math.max(height / 4, MIN_VERT_DIVS); - - ReferencedEnvelope envelope = new ReferencedEnvelope( - imageGeometry.getEnvelope()); + int maxHorzDiv = tile.rect.width / 4; + int maxVertDiv = tile.rect.height / 4; + Envelope envelope = tile.envelope; double[] tl = { envelope.getMinX(), envelope.getMaxY() }; double[] tr = { envelope.getMaxX(), envelope.getMaxY() }; double[] bl = { envelope.getMinX(), envelope.getMinY() }; double[] br = { envelope.getMaxX(), envelope.getMinY() }; - - int horzDiv = MIN_HORZ_DIVS; - if (maxHorzDiv > MIN_HORZ_DIVS) { - // start off estimating the number of horzintal divisions by - // using only the top and bottom. - int horzDivTop = getNumDivisions(tl, null, tr, null, - maxHorzDiv, mt); - int horzDivBot = getNumDivisions(bl, null, br, null, - maxHorzDiv, mt); - horzDiv = Math.max(horzDivTop, horzDivBot); - } + // start off estimating the number of horzintal divisions by using + // only the top and bottom. + int horzDivTop = 1 + getNumDivisions(tl, null, tr, null, + maxHorzDiv, mt); + int horzDivBot = 1 + getNumDivisions(bl, null, br, null, + maxHorzDiv, mt); + int horzDiv = Math.max(horzDivTop, horzDivBot); // Next get the number of vertical divisions by finding the maximum // needed in every horizontal row. - int vertDiv = MIN_VERT_DIVS; - if (maxVertDiv > MIN_VERT_DIVS) { - for (int i = 1; i <= horzDiv; i++) { - double topX = tl[0] + (tr[0] - tl[0]) * i / horzDiv; - double topY = tl[1] + (tr[1] - tl[1]) * i / horzDiv; - double botX = bl[0] + (br[0] - bl[0]) * i / horzDiv; - double botY = bl[1] + (br[1] - bl[1]) * i / horzDiv; - double[] top = { topX, topY }; - double[] bot = { botX, botY }; - int vertDivTest = getNumDivisions(top, null, bot, null, - maxVertDiv, mt); - vertDiv = Math.max(vertDiv, vertDivTest); + int vertDiv = 2; + for (int i = 1; i <= horzDiv; i++) { + double topX = tl[0] + (tr[0] - tl[0]) * i / horzDiv; + double topY = tl[1] + (tr[1] - tl[1]) * i / horzDiv; + double botX = bl[0] + (br[0] - bl[0]) * i / horzDiv; + double botY = bl[1] + (br[1] - bl[1]) * i / horzDiv; + double[] top = { topX, topY }; + double[] bot = { botX, botY }; + int vertDivTest = 1 + getNumDivisions(top, null, bot, null, + maxVertDiv, mt); + vertDiv = Math.max(vertDiv, vertDivTest); + if (vertDiv >= maxVertDiv) { + vertDiv = maxVertDiv; + break; } } - // Now fill in the actual number of horzontal divisions incase // distortion increases towards the middle. - for (int i = MIN_VERT_DIVS; i < vertDiv; i++) { + for (int i = 2; i < vertDiv; i++) { double leftX = bl[0] + (tl[0] - bl[0]) * i / vertDiv; double leftY = bl[1] + (tl[1] - bl[1]) * i / vertDiv; double rightX = br[0] + (tr[0] - br[0]) * i / vertDiv; double rightY = br[1] + (tr[1] - br[1]) * i / vertDiv; double[] left = { leftX, leftY }; double[] right = { rightX, rightY }; - int horzDivTest = getNumDivisions(left, null, right, null, + int horzDivTest = 1 + getNumDivisions(left, null, right, null, maxHorzDiv, mt); horzDiv = Math.max(horzDiv, horzDivTest); + if (horzDiv >= maxHorzDiv) { + horzDiv = maxHorzDiv; + break; + } } - + horzDiv = Math.max(2, horzDiv); + vertDiv = Math.max(2, vertDiv); return new SharedCoordinateKey(vertDiv, horzDiv); } catch (Exception e) { - Activator.statusHandler + statusHandler .handle(Priority.PROBLEM, "Error calculating divisions needed for image, defaulting to dims/4", e); - return new SharedCoordinateKey(height / 4, width / 4); + return new SharedCoordinateKey(tile.rect.height / 4, + tile.rect.width / 4); } } @@ -217,12 +210,12 @@ public class GLMesh2DStrips extends AbstractGLMesh { if (r1 == null) { r1 = new double[p1.length]; mt.transform(p1, 0, r1, 0, 1); - r1 = worldToPixel(r1); + r1 = descriptor.worldToPixel(r1); } if (r3 == null) { r3 = new double[p3.length]; mt.transform(p3, 0, r3, 0, 1); - r3 = worldToPixel(r3); + r3 = descriptor.worldToPixel(r3); } if (r1 == null || r3 == null) { // if the image has some points outside the valid range of the @@ -233,7 +226,7 @@ public class GLMesh2DStrips extends AbstractGLMesh { double[] p2 = { (p1[0] + p3[0]) / 2, (p1[1] + p3[1]) / 2 }; double[] r2 = new double[p2.length]; mt.transform(p2, 0, r2, 0, 1); - r2 = worldToPixel(r2); + r2 = descriptor.worldToPixel(r2); double[] interp2 = { (r1[0] + r3[0]) / 2, (r1[1] + r3[1]) / 2 }; double dX = r2[0] - interp2[0]; double dY = r2[1] - interp2[1]; diff --git a/cave/com.raytheon.viz.core.gl/src/com/raytheon/viz/core/gl/internal/GLTarget.java b/cave/com.raytheon.viz.core.gl/src/com/raytheon/viz/core/gl/internal/GLTarget.java index 800c55f07e..ee12b3121a 100644 --- a/cave/com.raytheon.viz.core.gl/src/com/raytheon/viz/core/gl/internal/GLTarget.java +++ b/cave/com.raytheon.viz.core.gl/src/com/raytheon/viz/core/gl/internal/GLTarget.java @@ -32,6 +32,7 @@ import java.nio.IntBuffer; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; +import java.util.HashSet; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; @@ -67,16 +68,21 @@ import com.raytheon.uf.viz.core.DrawableLine; import com.raytheon.uf.viz.core.DrawableString; import com.raytheon.uf.viz.core.IExtent; import com.raytheon.uf.viz.core.IGraphicsTarget; +import com.raytheon.uf.viz.core.IMesh; import com.raytheon.uf.viz.core.PixelCoverage; +import com.raytheon.uf.viz.core.PixelExtent; import com.raytheon.uf.viz.core.VizConstants; import com.raytheon.uf.viz.core.data.IColorMapDataRetrievalCallback; import com.raytheon.uf.viz.core.data.IColormappedDataPreparer; import com.raytheon.uf.viz.core.data.IDataPreparer; import com.raytheon.uf.viz.core.data.IImageDataPreparer; import com.raytheon.uf.viz.core.data.IRenderedImageCallback; +import com.raytheon.uf.viz.core.data.prep.CMDataPreparerManager; import com.raytheon.uf.viz.core.data.resp.NumericImageData; import com.raytheon.uf.viz.core.drawables.ColorMapLoader; import com.raytheon.uf.viz.core.drawables.ColorMapParameters; +import com.raytheon.uf.viz.core.drawables.ColorMapParameters.LabelEntry; +import com.raytheon.uf.viz.core.drawables.IColormappedImage; import com.raytheon.uf.viz.core.drawables.IDescriptor; import com.raytheon.uf.viz.core.drawables.IFont; import com.raytheon.uf.viz.core.drawables.IFont.Style; @@ -84,11 +90,9 @@ import com.raytheon.uf.viz.core.drawables.IImage; import com.raytheon.uf.viz.core.drawables.IRenderableDisplay; import com.raytheon.uf.viz.core.drawables.IShadedShape; import com.raytheon.uf.viz.core.drawables.IWireframeShape; -import com.raytheon.uf.viz.core.drawables.ImagingSupport; import com.raytheon.uf.viz.core.drawables.PaintProperties; -import com.raytheon.uf.viz.core.drawables.ext.GraphicsExtension.IGraphicsExtensionInterface; +import com.raytheon.uf.viz.core.drawables.SingleColorImage; import com.raytheon.uf.viz.core.drawables.ext.GraphicsExtensionManager; -import com.raytheon.uf.viz.core.drawables.ext.IImagingExtension; import com.raytheon.uf.viz.core.drawables.ext.IOffscreenRenderingExtension; import com.raytheon.uf.viz.core.drawables.ext.colormap.IColormappedImageExtension; import com.raytheon.uf.viz.core.exception.VizException; @@ -98,15 +102,18 @@ import com.raytheon.viz.core.gl.GLContextBridge; import com.raytheon.viz.core.gl.GLDisposalManager; import com.raytheon.viz.core.gl.IGLFont; import com.raytheon.viz.core.gl.IGLTarget; +import com.raytheon.viz.core.gl.TextureLoaderJob; +import com.raytheon.viz.core.gl.glsl.AbstractShaderLoader; import com.raytheon.viz.core.gl.glsl.GLSLFactory; import com.raytheon.viz.core.gl.glsl.GLShaderProgram; +import com.raytheon.viz.core.gl.images.AbstractGLImage; import com.raytheon.viz.core.gl.images.GLColormappedImage; import com.raytheon.viz.core.gl.images.GLImage; -import com.raytheon.viz.core.gl.internal.ext.GLColormappedImageExtension; -import com.raytheon.viz.core.gl.internal.ext.GLDefaultImagingExtension; import com.raytheon.viz.core.gl.objects.GLTextureObject; import com.sun.opengl.util.Screenshot; import com.sun.opengl.util.j2d.TextRenderer; +import com.sun.opengl.util.texture.Texture; +import com.sun.opengl.util.texture.TextureCoords; import com.vividsolutions.jts.geom.Coordinate; import com.vividsolutions.jts.geom.LinearRing; @@ -162,6 +169,8 @@ public class GLTarget implements IGLTarget { protected static final int maxColorMapCacheSize = com.raytheon.viz.core.gl.Activator .getDefault().getPreferenceStore().getInt("colorMapCacheSize"); + protected static GLTarget currentGl; + /** The gl context */ protected final GL gl; @@ -197,6 +206,9 @@ public class GLTarget implements IGLTarget { /** The current Zoom level */ protected double theCurrentZoom; + /** Display a built-in colorbar when displaying colormapped images */ + protected boolean useBuiltinColorbar = false; + /** The GLU object */ protected final GLU glu = new GLU(); @@ -242,6 +254,10 @@ public class GLTarget implements IGLTarget { protected final float textMagnification; + protected ColorMapParameters lastColormapUsed; + + protected double lastAlphaUsed = 1.0f; + protected final RGB DEFAULT_LABEL_COLOR = new RGB(255, 255, 255); protected Listener canvasResizeListener; @@ -335,6 +351,7 @@ public class GLTarget implements IGLTarget { public GLTarget(float width, float height) throws VizException { theCanvas = null; canvasSize = new Rectangle(0, 0, (int) width, (int) height); + theContext = new GLContextBridge((int) width, (int) height); theContext.makeContextCurrent(); @@ -406,6 +423,7 @@ public class GLTarget implements IGLTarget { display.setup(this); hasLoadedTextureOnLoop = false; + lastColormapUsed = null; synchronized (this) { if (refreshCount > 0) { refreshCount--; @@ -495,7 +513,7 @@ public class GLTarget implements IGLTarget { @Override public IWireframeShape createWireframeShape(boolean mutable, IDescriptor descriptor) { - return new GLWireframeShape2D(descriptor.getGridGeometry(), mutable); + return new GLWireframeShape2D(descriptor, mutable); } /* @@ -511,7 +529,7 @@ public class GLTarget implements IGLTarget { return new GLWireframeShape(descriptor, mutable, simplificationLevel); } else { - return new GLWireframeShape2D(descriptor.getGridGeometry(), mutable); + return new GLWireframeShape2D(descriptor, mutable); } } @@ -530,7 +548,7 @@ public class GLTarget implements IGLTarget { return new GLWireframeShape(descriptor, null, mutable, simplificationLevel, spatialChopFlag, extent); } else { - return new GLWireframeShape2D(descriptor.getGridGeometry(), mutable); + return new GLWireframeShape2D(descriptor, mutable); } } @@ -552,8 +570,10 @@ public class GLTarget implements IGLTarget { theContext.destroyContext(); if (theCanvas != null && theCanvas.isDisposed() == false) { + theCanvas.removeListener(SWT.Resize, this.canvasResizeListener); } + lastColormapUsed = null; extensionManager.dispose(); } @@ -614,6 +634,47 @@ public class GLTarget implements IGLTarget { drawCircle(circle); } + protected void drawColorbar(ColorMapParameters colorMapParameters) + throws VizException { + if (GLTarget.loadedColorMaps == null) { + return; + } + + this.clearClippingPlane(); + this.pushGLState(); + try { + + double x1 = this.viewExtent.getMinX(); + double x2 = x1 + ((this.viewExtent.getMaxX() - x1) / 2.0); + double y1 = this.viewExtent.getMinY(); + double y2 = y1 + ((x2 - x1) / 20.0); + + PixelExtent pixelExtent = new PixelExtent(x1, x2, y1, y2); + this.drawColorRamp(colorMapParameters.getColorMap(), pixelExtent, + (float) this.lastAlphaUsed); + + double yPos = y1 + (y2 - y1) / 2.0; + double zPos = 0; // draw the colorbar on the plane z = 0 + + List labels = colorMapParameters.getLabels(); + if (labels != null) { + for (LabelEntry label : labels) { + double xPos = x1 + ((x2 - x1) * label.getLocation()); + + String s = label.getText(); + + this.drawString(this.colorbarFont, s, xPos, yPos, zPos, + TextStyle.BLANKED, DEFAULT_LABEL_COLOR, + IGraphicsTarget.HorizontalAlignment.CENTER, + IGraphicsTarget.VerticalAlignment.MIDDLE, null); + } + } + + } finally { + this.popGLState(); + } + } + /* * (non-Javadoc) * @@ -639,13 +700,13 @@ public class GLTarget implements IGLTarget { throws VizException { this.pushGLState(); try { - ColorMapParameters colorMapParams = drawableColorMap + final ColorMapParameters colorMapParams = drawableColorMap .getColorMapParams(); IExtent pixelExtent = drawableColorMap.extent; - float blendAlpha = drawableColorMap.alpha; - float brightness = drawableColorMap.brightness; - float contrast = drawableColorMap.contrast; - float logFactor = drawableColorMap.getColorMapParams() + final float blendAlpha = drawableColorMap.alpha; + final float brightness = drawableColorMap.brightness; + final float contrast = drawableColorMap.contrast; + final float logFactor = drawableColorMap.getColorMapParams() .getLogFactor(); double x1 = pixelExtent.getMinX(); @@ -657,19 +718,12 @@ public class GLTarget implements IGLTarget { GLColormappedImage alphaMaskTexture = null; if (colorMapParams.isUseMask() && capabilities.cardSupportsShaders) { - final byte[] mask = colorMapParams.getAlphaMask(); - alphaMaskTexture = getExtension( - GLColormappedImageExtension.class).initializeRaster( - new IColorMapDataRetrievalCallback() { - @Override - public ColorMapData getColorMapData() - throws VizException { - return new ColorMapData(ByteBuffer.wrap(mask), - new int[] { mask.length, 1 }); - } - - }, colorMapParams); - alphaMaskTexture.stage(); + byte[] mask = colorMapParams.getAlphaMask(); + alphaMaskTexture = (GLColormappedImage) initializeRaster( + CMDataPreparerManager.getDataPreparer(mask, + new java.awt.Rectangle(0, 0, mask.length, 1), + new int[] { mask.length, 1 }), colorMapParams); + alphaMaskTexture.stageTexture(); alphaMaskTexture.target(this); } @@ -707,24 +761,36 @@ public class GLTarget implements IGLTarget { GLShaderProgram program = null; if (capabilities.cardSupportsShaders) { - program = GLSLFactory.getInstance().getShaderProgram(this, - null, "colormap"); - if (program != null) { - program.startShader(); - program.setUniform("alphaVal", blendAlpha); - program.setUniform("brightness", brightness); - program.setUniform("contrast", contrast); - program.setUniform("colorMap", 0); - program.setUniform("logFactor", logFactor); - program.setUniform("alphaMask", 1); - program.setUniform("applyMask", - colorMapParams.isUseMask() ? 1 : 0); - program.setUniform("bkgrndRed", - backgroundColor.red / 255.0f); - program.setUniform("bkgrndGreen", - backgroundColor.green / 255.0f); - program.setUniform("bkgrndBlue", - backgroundColor.blue / 255.0f); + synchronized (GLSLFactory.class) { + GLSLFactory.registerProgramLoader("colormap", + new AbstractShaderLoader() { + @Override + public void loadData(IGLTarget target, + GLShaderProgram program, IImage image, + PaintProperties paintProps) + throws VizException { + program.setUniform("alphaVal", blendAlpha); + program.setUniform("brightness", brightness); + program.setUniform("contrast", contrast); + program.setUniform("colorMap", 0); + program.setUniform("logFactor", logFactor); + program.setUniform("alphaMask", 1); + program.setUniform("applyMask", + colorMapParams.isUseMask() ? 1 : 0); + program.setUniform("bkgrndRed", + backgroundColor.red / 255.0f); + program.setUniform("bkgrndGreen", + backgroundColor.green / 255.0f); + program.setUniform("bkgrndBlue", + backgroundColor.blue / 255.0f); + } + }); + program = GLSLFactory.getInstance().getShaderProgram(this, + null, "colormap"); + if (program != null) { + program.startShader(); + program.loadData(this, null, null); + } } gl.glTexEnvi(GL.GL_TEXTURE_ENV, GL.GL_TEXTURE_ENV_MODE, @@ -828,6 +894,11 @@ public class GLTarget implements IGLTarget { } } + private float log(float f) { + // TODO Auto-generated method stub + return 0; + } + /* * (non-Javadoc) * @@ -1037,14 +1108,408 @@ public class GLTarget implements IGLTarget { * (non-Javadoc) * * @see - * com.raytheon.uf.viz.core.drawables.ext.IImagingExtension#drawRasters( + * com.raytheon.viz.core.gl.IGLTarget#drawRaster(com.raytheon.uf.viz.core + * .drawables.IImage, com.raytheon.uf.viz.core.PixelCoverage, + * com.raytheon.uf.viz.core.drawables.PaintProperties, java.lang.String) + */ + @Override + public boolean drawRaster(IImage image, PixelCoverage extent, + PaintProperties paintProps, String shaderProgram) + throws VizException { + return drawRaster(image, extent, paintProps, RasterMode.SYNCHRONOUS, + shaderProgram); + } + + /* + * (non-Javadoc) + * + * @see + * com.raytheon.viz.core.gl.IGLTarget#drawRaster(com.raytheon.uf.viz.core + * .drawables.IImage, com.raytheon.uf.viz.core.PixelCoverage, * com.raytheon.uf.viz.core.drawables.PaintProperties, + * com.raytheon.uf.viz.core.IGraphicsTarget.RasterMode, java.lang.String) + */ + @Override + public boolean drawRaster(IImage argImage, PixelCoverage extent, + PaintProperties paintProps, RasterMode mode, String shaderProgram) + throws VizException { + DrawableImage image = new DrawableImage(argImage, extent); + image.setMode(mode); + return drawRasters(shaderProgram, paintProps, image); + } + + /* + * (non-Javadoc) + * + * @see + * com.raytheon.uf.viz.core.IGraphicsTarget#drawRaster(com.raytheon.uf.viz + * .core.drawables.PaintProperties, * com.raytheon.uf.viz.core.DrawableImage[]) */ @Override public boolean drawRasters(PaintProperties paintProps, DrawableImage... images) throws VizException { - return ImagingSupport.drawRasters(this, paintProps, images); + return drawRasters("raster", paintProps, images); + } + + public boolean drawRasters(String shaderProgram, + PaintProperties paintProps, DrawableImage... images) + throws VizException { + gl.glGetError(); + int continues = 0; + int imgErrors = 0; + Set errorMsgs = new HashSet(); + List notDrawn = new ArrayList(); + + this.pushGLState(); + try { + gl.glPolygonMode(GL.GL_FRONT_AND_BACK, GL.GL_FILL); + + Texture tex = null; + int texId = -1; + GLShaderProgram program = null; + boolean attemptedToLoadShader = false; + int lastTextureType = -1; + // Only kept track for GLImage types + Boolean lastInterpState = null; + + for (DrawableImage di : images) { + IImage argImage = di.getImage(); + IImage image = argImage; + PixelCoverage extent = di.getCoverage(); + RasterMode mode = di.getMode(); + + if (argImage instanceof SingleColorImage) { + image = ((SingleColorImage) argImage).getWrappedImage(); + } + + if (!(image instanceof AbstractGLImage)) { + ++continues; + ++imgErrors; + errorMsgs.add("Can only draw GLImages on GLTarget"); + notDrawn.add(di); + continue; + } + + final AbstractGLImage glImage = (AbstractGLImage) image; + + synchronized (glImage) { + if (glImage.getStatus() == IImage.Status.UNLOADED + || glImage.getStatus() == IImage.Status.LOADING) { + glImage.setStatus(IImage.Status.LOADING); + if (mode == RasterMode.ASYNCHRONOUS) { + stage(glImage); + } else if (mode == RasterMode.SYNCHRONOUS) { + glImage.stageTexture(); + } + } + + if (glImage.getStatus() == IImage.Status.STAGED) { + glImage.target(this); + } + + if (glImage.getStatus() != IImage.Status.LOADED) { + ++continues; + notDrawn.add(di); + continue; + } + + ColorMapParameters usedColorMapParameters = null; + int textureType = glImage.getTextureStorageType(); + if (image instanceof GLColormappedImage) { + texId = ((GLColormappedImage) image).getTextureid(); + } else if (image instanceof GLImage) { + tex = ((GLImage) glImage).getTexture(); + } + + if (tex == null && texId <= 0) { + errorMsgs.add("Texture not loaded"); + continues++; + notDrawn.add(di); + continue; + } + + if (lastTextureType != textureType) { + if (lastTextureType != -1) { + gl.glDisable(lastTextureType); + } + gl.glEnable(textureType); + lastTextureType = textureType; + } + + GLColormappedImage alphaMaskTexture = null; + if (texId > 0) { + // First see if the colormap has been loaded + usedColorMapParameters = ((IColormappedImage) glImage) + .getColorMapParameters(); + if (usedColorMapParameters == null + || usedColorMapParameters.getColorMap() == null) { + ++continues; + continue; + } + + if (usedColorMapParameters.isUseMask() + && capabilities.cardSupportsShaders) { + byte[] mask = usedColorMapParameters.getAlphaMask(); + alphaMaskTexture = (GLColormappedImage) initializeRaster( + CMDataPreparerManager.getDataPreparer(mask, + new java.awt.Rectangle(0, 0, + mask.length, 1), new int[] { + mask.length, 1 }), + usedColorMapParameters); + alphaMaskTexture.stageTexture(); + alphaMaskTexture.target(this); + } + + // Get and stage colormap texture + GLTextureObject cmapTexture = getColorMapTexture(usedColorMapParameters); + + if (alphaMaskTexture != null) { + gl.glActiveTexture(GL.GL_TEXTURE2); + gl.glBindTexture( + alphaMaskTexture.getTextureStorageType(), + alphaMaskTexture.getTextureid()); + } + + gl.glActiveTexture(GL.GL_TEXTURE1); + cmapTexture.bind(gl, GL.GL_TEXTURE_1D); + + if (glImage.isInterpolated()) { + gl.glTexParameteri(GL.GL_TEXTURE_1D, + GL.GL_TEXTURE_MIN_FILTER, GL.GL_LINEAR); + gl.glTexParameteri(GL.GL_TEXTURE_1D, + GL.GL_TEXTURE_MAG_FILTER, GL.GL_LINEAR); + } else { + gl.glTexParameteri(GL.GL_TEXTURE_1D, + GL.GL_TEXTURE_MIN_FILTER, GL.GL_NEAREST); + gl.glTexParameteri(GL.GL_TEXTURE_1D, + GL.GL_TEXTURE_MAG_FILTER, GL.GL_NEAREST); + } + + gl.glActiveTexture(GL.GL_TEXTURE0); + gl.glBindTexture(textureType, texId); + + if (glImage.isInterpolated()) { + gl.glTexParameteri(textureType, + GL.GL_TEXTURE_MIN_FILTER, GL.GL_LINEAR); + gl.glTexParameteri(textureType, + GL.GL_TEXTURE_MAG_FILTER, GL.GL_LINEAR); + } else { + gl.glTexParameteri(textureType, + GL.GL_TEXTURE_MIN_FILTER, GL.GL_NEAREST); + gl.glTexParameteri(textureType, + GL.GL_TEXTURE_MAG_FILTER, GL.GL_NEAREST); + } + lastInterpState = null; + } else { + tex.bind(); + boolean interp = glImage.isInterpolated(); + if (lastInterpState == null + || lastInterpState != interp) { + lastInterpState = interp; + if (glImage.isInterpolated()) { + tex.setTexParameteri(GL.GL_TEXTURE_MIN_FILTER, + GL.GL_LINEAR); + tex.setTexParameteri(GL.GL_TEXTURE_MAG_FILTER, + GL.GL_LINEAR); + } else { + tex.setTexParameteri(GL.GL_TEXTURE_MIN_FILTER, + GL.GL_NEAREST); + tex.setTexParameteri(GL.GL_TEXTURE_MAG_FILTER, + GL.GL_NEAREST); + } + } + } + + if (capabilities.cardSupportsShaders) { + if (program == null && !attemptedToLoadShader) { + attemptedToLoadShader = true; + program = GLSLFactory + .getInstance() + .getShaderProgram(this, null, shaderProgram); + if (program != null) { + program.startShader(); + } + + gl.glTexEnvi(GL.GL_TEXTURE_ENV, + GL.GL_TEXTURE_ENV_MODE, GL.GL_ADD); + gl.glEnable(GL.GL_BLEND); + gl.glTexEnvi(GL.GL_TEXTURE_ENV, + GL.GL_TEXTURE_ENV_MODE, GL.GL_BLEND); + gl.glBlendFunc(GL.GL_SRC_ALPHA, + GL.GL_ONE_MINUS_SRC_ALPHA); + + gl.glColor4f(0.0f, 0.0f, 0.0f, + paintProps.getAlpha()); + } + + if (program != null) { + program.loadData(this, argImage, paintProps); + } + } else { + gl.glEnable(GL.GL_BLEND); + gl.glBlendFunc(GL.GL_SRC_ALPHA, + GL.GL_ONE_MINUS_SRC_ALPHA); + gl.glColor4f(1.0f, 1.0f, 1.0f, paintProps.getAlpha()); + } + + TextureCoords coords; + if (texId == -1) { + coords = tex.getImageTexCoords(); + } else { + coords = new TextureCoords(0, 1, 1, 0); + } + + drawCoverage(paintProps, extent, coords, 0); + + if (alphaMaskTexture != null) { + gl.glActiveTexture(GL.GL_TEXTURE2); + gl.glBindTexture( + alphaMaskTexture.getTextureStorageType(), 0); + } + + gl.glActiveTexture(GL.GL_TEXTURE1); + gl.glBindTexture(GL.GL_TEXTURE_1D, 0); + gl.glActiveTexture(GL.GL_TEXTURE0); + gl.glBindTexture(textureType, 0); + + if (usedColorMapParameters != null) { + this.lastColormapUsed = usedColorMapParameters; + } + this.lastAlphaUsed = paintProps.getAlpha(); + + if (alphaMaskTexture != null) { + alphaMaskTexture.dispose(); + } + + // Enable if you want to see mesh drawn + if (false) { + if (program != null) { + program.endShader(); + } + gl.glDisable(GL.GL_BLEND); + gl.glColor3f(0.0f, 1.0f, 0.0f); + gl.glPolygonMode(GL.GL_FRONT_AND_BACK, GL.GL_LINE); + drawCoverage(paintProps, extent, new TextureCoords(0, + 1, 1, 0), 0.0f); + gl.glPolygonMode(GL.GL_FRONT_AND_BACK, GL.GL_FILL); + gl.glEnable(GL.GL_BLEND); + if (program != null) { + program.startShader(); + } + + } + } + } + + if (lastTextureType != -1) { + gl.glDisable(lastTextureType); + } + + if (program != null) { + program.endShader(); + } + + gl.glPolygonMode(GL.GL_BACK, GL.GL_LINE); + + gl.glDisable(GL.GL_BLEND); + + for (DrawableImage di : notDrawn) { + if (drawTileBoundaries) { + gl.glColor3f(0.0f, 1.0f, 0.0f); + gl.glPolygonMode(GL.GL_FRONT, GL.GL_LINE); + drawCoverage(paintProps, di.getCoverage(), + new TextureCoords(0, 1, 1, 0), 0.0f); + gl.glPolygonMode(GL.GL_FRONT, GL.GL_FILL); + } + } + + } finally { + this.popGLState(); + } + + handleError(gl.glGetError()); + + if (errorMsgs.size() > 0) { + throw new VizException("Error rendering " + errorMsgs.size() + + " images: " + errorMsgs); + } + + boolean allDrawn = continues == 0; + if (!allDrawn) { + this.setNeedsRefresh(true); + synchronized (this) { + if (refreshCount <= 1) { + refreshCount++; + } + } + } + + return allDrawn; + } + + public void drawCoverage(PaintProperties paintProps, PixelCoverage pc, + TextureCoords coords, float corrFactor) throws VizException { + if (pc == null) { + return; + } + this.pushGLState(); + try { + // gl.glPolygonMode(GL.GL_BACK, GL.GL_FILL); + // gl.glColor3d(1.0, 0.0, 0.0); + // } + + // boolean useNormals = false; + IMesh mesh = pc.getMesh(); + + // if mesh exists, use it + if (mesh != null) { + mesh.paint(this, paintProps); + } else if (coords != null) { + FloatBuffer fb = ByteBuffer.allocateDirect(4 * 5 * 4) + .order(ByteOrder.nativeOrder()).asFloatBuffer(); + + Coordinate ul = pc.getUl(); + Coordinate ur = pc.getUr(); + Coordinate lr = pc.getLr(); + Coordinate ll = pc.getLl(); + + fb.put(new float[] { coords.left() + corrFactor, + coords.bottom() + corrFactor }); + fb.put(new float[] { (float) ll.x, (float) ll.y, (float) ll.z }); + + fb.put(new float[] { coords.right() - corrFactor, + coords.bottom() + corrFactor }); + fb.put(new float[] { (float) lr.x, (float) lr.y, (float) lr.z }); + + fb.put(new float[] { coords.left() + corrFactor, + coords.top() - corrFactor }); + fb.put(new float[] { (float) ul.x, (float) ul.y, (float) ul.z }); + + fb.put(new float[] { coords.right() - corrFactor, + coords.top() - corrFactor }); + fb.put(new float[] { (float) ur.x, (float) ur.y, (float) ur.z }); + + // Clear error bit + gl.glGetError(); + + gl.glEnableClientState(GL.GL_VERTEX_ARRAY); + gl.glEnableClientState(GL.GL_TEXTURE_COORD_ARRAY); + + gl.glInterleavedArrays(GL.GL_T2F_V3F, 0, fb.rewind()); + int error = gl.glGetError(); + if (error == GL.GL_NO_ERROR) { + gl.glDrawArrays(GL.GL_TRIANGLE_STRIP, 0, 4); + } else { + handleError(error); + } + + gl.glDisableClientState(GL.GL_VERTEX_ARRAY); + gl.glDisableClientState(GL.GL_TEXTURE_COORD_ARRAY); + } + } finally { + this.popGLState(); + } } /* @@ -1413,6 +1878,7 @@ public class GLTarget implements IGLTarget { private void drawWireframeShapeInternal(GLWireframeShape shape, RGB color, float lineWidth, LineStyle lineStyle, IGLFont font, float alpha) throws VizException { + this.pushGLState(); try { @@ -1564,10 +2030,27 @@ public class GLTarget implements IGLTarget { @Override public void endFrame() { makeContextCurrent(); + try { + if (this.lastColormapUsed != null && this.useBuiltinColorbar) { + this.drawColorbar(this.lastColormapUsed); + } + } catch (VizException e) { + e.printStackTrace(); + } + + if (theCanvas != null && theCanvas.isDisposed()) { + return; + } + gl.glFinish(); - if (theCanvas != null && theCanvas.isDisposed() == false) { + if (theCanvas != null) { + // if (allImagesSuccessfullyDrawn || redrawRetries > 0) { theCanvas.swapBuffers(); + // redrawRetries = 0; + // } else { + // redrawRetries++; + // } } GLContextBridge.makeMasterContextCurrent(); @@ -1786,8 +2269,14 @@ public class GLTarget implements IGLTarget { * .uf.viz.core.data.IRenderedImageCallback) */ @Override - public IImage initializeRaster(IRenderedImageCallback imageCallback) { - return new GLImage(imageCallback, GLDefaultImagingExtension.class); + public AbstractGLImage initializeRaster(IRenderedImageCallback imageCallback) { + GLImage image = new GLImage(imageCallback, this); + try { + image.stageTexture(); + } catch (VizException e) { + statusHandler.handle(Priority.PROBLEM, "Error staging texture", e); + } + return image; } /* @@ -2070,6 +2559,33 @@ public class GLTarget implements IGLTarget { gl.glPopMatrix(); } + /* + * (non-Javadoc) + * + * @see com.raytheon.viz.core.IGraphicsTarget#setUseBuiltinColorbar(boolean) + */ + @Override + public void setUseBuiltinColorbar(boolean isColorbarDisplayed) { + this.useBuiltinColorbar = isColorbarDisplayed; + } + + /* + * (non-Javadoc) + * + * @see + * com.raytheon.viz.core.IGraphicsTarget#stage(com.raytheon.viz.core.drawables + * .IImage) + */ + @Override + public void stage(final IImage image) throws VizException { + if (!(image instanceof AbstractGLImage)) { + throw new VizException("Must pass GLImages to GLTarget"); + } + + TextureLoaderJob.getInstance().requestLoad((AbstractGLImage) image); + + } + /** * (non-Javadoc) * @@ -2177,6 +2693,67 @@ public class GLTarget implements IGLTarget { return this.canvasSize; } + /* + * (non-Javadoc) + * + * @see com.raytheon.viz.core.gl.IGLTarget#bindTexture(int, + * com.raytheon.viz.core.gl.internal.images.AbstractGLColormappedImage) + */ + @Override + public void bindTexture(int textureUnit, GLColormappedImage image) { + gl.glActiveTexture(textureUnit); + gl.glBindTexture(image.getTextureStorageType(), image.getTextureid()); + } + + /* + * (non-Javadoc) + * + * @see com.raytheon.viz.core.gl.IGLTarget#disposeOcclusionQuery(int) + */ + @Override + public void disposeOcclusionQueries(int[] id) { + gl.glDeleteQueriesARB(id.length, id, 0); + + } + + /* + * (non-Javadoc) + * + * @see + * com.raytheon.viz.core.gl.IGLTarget#beginOcclusionTest(com.raytheon.viz + * .core.IRenderableDisplay) + */ + @Override + public void beginOcclusionTest(IRenderableDisplay display) + throws VizException { + beginFrame(display, true); + + // don't actually update framebuffer + gl.glColorMask(false, false, false, false); + gl.glDisable(GL.GL_CULL_FACE); + gl.glDisable(GL.GL_NORMALIZE); + + gl.glDisable(GL.GL_STENCIL_TEST); + } + + /* + * (non-Javadoc) + * + * @see com.raytheon.viz.core.gl.IGLTarget#endOcclusionTest() + */ + @Override + public void endOcclusionTest() throws VizException { + + // don't actually update framebuffer + gl.glColorMask(true, true, true, true); + // gl.glEnable(GL.GL_CULL_FACE); + // gl.glEnable(GL.GL_NORMALIZE); + + gl.glDepthFunc(GL.GL_LESS); + gl.glEnable(GL.GL_STENCIL_TEST); + + } + public void drawCylinder(PixelCoordinate coord, RGB color, float alpha, double height, double baseRadius, double topRadius, int sideCount, int sliceCount, double rotation, double lean) { @@ -2272,24 +2849,12 @@ public class GLTarget implements IGLTarget { return VizConstants.VIEW_2D; } - /* - * (non-Javadoc) - * - * @see com.raytheon.viz.core.gl.IGLTarget#pushGLState() - */ - @Override - public void pushGLState() { + private void pushGLState() { gl.glPushAttrib(GL.GL_COLOR_BUFFER_BIT | GL.GL_CURRENT_BIT | GL.GL_ENABLE_BIT | GL.GL_TEXTURE_BIT | GL.GL_LINE_BIT); } - /* - * (non-Javadoc) - * - * @see com.raytheon.viz.core.gl.IGLTarget#popGLState() - */ - @Override - public void popGLState() { + private void popGLState() { gl.glPopAttrib(); } @@ -2298,15 +2863,7 @@ public class GLTarget implements IGLTarget { this.updatedExtent = updatedExtent; } - /* - * (non-Javadoc) - * - * @see - * com.raytheon.viz.core.gl.IGLTarget#getColorMapTexture(com.raytheon.uf - * .viz.core.drawables.ColorMapParameters) - */ - @Override - public GLTextureObject getColorMapTexture(ColorMapParameters cmapParams) { + private GLTextureObject getColorMapTexture(ColorMapParameters cmapParams) { IColorMap cmap = cmapParams.getColorMap(); String name = cmap.getName(); if (name == null) { @@ -3115,25 +3672,9 @@ public class GLTarget implements IGLTarget { } @Override - public final T getExtension( - Class extensionClass) throws VizException { - Class toUse = extensionClass; - if (extensionClass == IImagingExtension.class) { - toUse = GLDefaultImagingExtension.class; - } - return extensionClass.cast(extensionManager.getExtension(toUse)); - } - - /* - * (non-Javadoc) - * - * @see - * com.raytheon.uf.viz.core.IGraphicsTarget#setUseBuiltinColorbar(boolean) - */ - @Override - @Deprecated - public void setUseBuiltinColorbar(boolean isColorbarDisplayed) { - // No effect + public final T getExtension(Class extensionClass) + throws VizException { + return extensionManager.getExtension(extensionClass); } } diff --git a/cave/com.raytheon.viz.core.gl/src/com/raytheon/viz/core/gl/internal/GLWireframeShape.java b/cave/com.raytheon.viz.core.gl/src/com/raytheon/viz/core/gl/internal/GLWireframeShape.java index 98212d2d16..6026310930 100644 --- a/cave/com.raytheon.viz.core.gl/src/com/raytheon/viz/core/gl/internal/GLWireframeShape.java +++ b/cave/com.raytheon.viz.core.gl/src/com/raytheon/viz/core/gl/internal/GLWireframeShape.java @@ -802,8 +802,7 @@ public class GLWireframeShape implements IWireframeShape { recursiveDispose(baseLevel); if (vboAssociatedTarget != null && vboID > 0) { - vboAssociatedTarget.getGl().glDeleteBuffers(1, new int[] { vboID }, - 0); + vboAssociatedTarget.disposeVBO(vboID); vboID = 0; vboAssociatedTarget = null; } diff --git a/cave/com.raytheon.viz.core.gl/src/com/raytheon/viz/core/gl/internal/GLWireframeShape2D.java b/cave/com.raytheon.viz.core.gl/src/com/raytheon/viz/core/gl/internal/GLWireframeShape2D.java index ebacba59f9..cc6e7b756f 100644 --- a/cave/com.raytheon.viz.core.gl/src/com/raytheon/viz/core/gl/internal/GLWireframeShape2D.java +++ b/cave/com.raytheon.viz.core.gl/src/com/raytheon/viz/core/gl/internal/GLWireframeShape2D.java @@ -28,22 +28,17 @@ import javax.media.opengl.GL; import org.eclipse.swt.graphics.RGB; import org.eclipse.swt.graphics.Rectangle; import org.geotools.coverage.grid.GeneralGridGeometry; -import org.geotools.referencing.operation.DefaultMathTransformFactory; -import org.opengis.referencing.operation.MathTransform; -import org.opengis.referencing.operation.TransformException; -import com.raytheon.uf.common.status.UFStatus.Priority; import com.raytheon.uf.viz.core.DrawableString; import com.raytheon.uf.viz.core.IExtent; import com.raytheon.uf.viz.core.IGraphicsTarget.HorizontalAlignment; import com.raytheon.uf.viz.core.IGraphicsTarget.LineStyle; import com.raytheon.uf.viz.core.IGraphicsTarget.VerticalAlignment; import com.raytheon.uf.viz.core.PixelExtent; -import com.raytheon.uf.viz.core.drawables.AbstractDescriptor; +import com.raytheon.uf.viz.core.drawables.IDescriptor; import com.raytheon.uf.viz.core.drawables.IFont; import com.raytheon.uf.viz.core.drawables.IWireframeShape; import com.raytheon.uf.viz.core.exception.VizException; -import com.raytheon.viz.core.gl.Activator; import com.raytheon.viz.core.gl.GLGeometryObject2D; import com.raytheon.viz.core.gl.GLGeometryObject2D.GLGeometryObjectData; import com.raytheon.viz.core.gl.IGLTarget; @@ -74,7 +69,7 @@ public class GLWireframeShape2D implements IWireframeShape { /** list of labels to draw */ private List labels; - private MathTransform worldToTargetGrid; + private IDescriptor descriptor; private boolean compiled = false; @@ -87,24 +82,14 @@ public class GLWireframeShape2D implements IWireframeShape { GL.GL_VERTEX_ARRAY); geomData.mutable = mutable; geomData.worldExtent = new PixelExtent(gridGeometry.getGridRange()); - - MathTransform worldToCRS = AbstractDescriptor - .getWorldToCRSTransform(gridGeometry); - if (worldToCRS != null) { - try { - MathTransform crsToGrid = gridGeometry.getGridToCRS().inverse(); - worldToTargetGrid = new DefaultMathTransformFactory() - .createConcatenatedTransform(worldToCRS, crsToGrid); - } catch (Exception e) { - Activator.statusHandler.handle(Priority.PROBLEM, - "Error getting transform from base crs to target grid", - e); - } - } - initialize(); } + public GLWireframeShape2D(IDescriptor descriptor, boolean mutable) { + this(descriptor.getGridGeometry(), mutable); + this.descriptor = descriptor; + } + private void initialize() { compiled = false; labels = new ArrayList(); @@ -173,23 +158,16 @@ public class GLWireframeShape2D implements IWireframeShape { */ @Override public void addLineSegment(Coordinate[] worldCoords) { + if (descriptor == null) { + throw new UnsupportedOperationException( + "Cannot add coordinate line segment to a wireframe shape that does not have a MapDescriptor."); + } + double screenCoords[][] = new double[worldCoords.length][]; for (int i = 0; i < worldCoords.length; ++i) { Coordinate c = worldCoords[i]; - if (worldToTargetGrid != null) { - try { - double[] out = new double[2]; - worldToTargetGrid.transform(new double[] { c.x, c.y }, 0, - out, 0, 1); - screenCoords[i] = out; - } catch (TransformException e) { - // Ignore... - } - } else { - // Assume no conversion needed - screenCoords[i] = new double[] { c.x, c.y }; - } - + screenCoords[i] = descriptor + .worldToPixel(new double[] { c.x, c.y }); } addLineSegment(screenCoords); } diff --git a/cave/com.raytheon.viz.core.gl/src/com/raytheon/viz/core/gl/internal/ext/GLColormapShadedShapeExtension.java b/cave/com.raytheon.viz.core.gl/src/com/raytheon/viz/core/gl/internal/ext/GLColormapShadedShapeExtension.java index ef79916243..972a2d5399 100644 --- a/cave/com.raytheon.viz.core.gl/src/com/raytheon/viz/core/gl/internal/ext/GLColormapShadedShapeExtension.java +++ b/cave/com.raytheon.viz.core.gl/src/com/raytheon/viz/core/gl/internal/ext/GLColormapShadedShapeExtension.java @@ -246,7 +246,7 @@ public class GLColormapShadedShapeExtension extends */ @Override public int getCompatibilityValue(IGLTarget target) { - return Compatibilty.TARGET_COMPATIBLE; + return Compatibilty.TARGET_COMPATIBLE.value; } } diff --git a/cave/com.raytheon.viz.core.gl/src/com/raytheon/viz/core/gl/internal/ext/GLColormappedImageExtension.java b/cave/com.raytheon.viz.core.gl/src/com/raytheon/viz/core/gl/internal/ext/GLColormappedImageExtension.java index 8b15f26afe..9c2b26a3de 100644 --- a/cave/com.raytheon.viz.core.gl/src/com/raytheon/viz/core/gl/internal/ext/GLColormappedImageExtension.java +++ b/cave/com.raytheon.viz.core.gl/src/com/raytheon/viz/core/gl/internal/ext/GLColormappedImageExtension.java @@ -19,23 +19,19 @@ **/ package com.raytheon.viz.core.gl.internal.ext; -import java.nio.ByteBuffer; - -import javax.media.opengl.GL; - -import com.raytheon.uf.viz.core.PixelCoverage; +import com.raytheon.uf.common.status.IUFStatusHandler; +import com.raytheon.uf.common.status.UFStatus; +import com.raytheon.uf.common.status.UFStatus.Priority; import com.raytheon.uf.viz.core.data.IColorMapDataRetrievalCallback; import com.raytheon.uf.viz.core.drawables.ColorMapParameters; import com.raytheon.uf.viz.core.drawables.IColormappedImage; -import com.raytheon.uf.viz.core.drawables.IImage; -import com.raytheon.uf.viz.core.drawables.PaintProperties; +import com.raytheon.uf.viz.core.drawables.ext.GraphicsExtension; import com.raytheon.uf.viz.core.drawables.ext.colormap.IColormappedImageExtension; import com.raytheon.uf.viz.core.exception.VizException; -import com.raytheon.viz.core.gl.glsl.AbstractGLSLImagingExtension; -import com.raytheon.viz.core.gl.glsl.GLShaderProgram; -import com.raytheon.viz.core.gl.images.AbstractGLImage; +import com.raytheon.viz.core.gl.GLCapabilities; +import com.raytheon.viz.core.gl.IGLTarget; import com.raytheon.viz.core.gl.images.GLColormappedImage; -import com.raytheon.viz.core.gl.objects.GLTextureObject; +import com.raytheon.viz.core.gl.internal.GLTarget; /** * GL {@link IColormappedImageExtension} implementation, creates @@ -55,12 +51,11 @@ import com.raytheon.viz.core.gl.objects.GLTextureObject; * @version 1.0 */ -public class GLColormappedImageExtension extends AbstractGLSLImagingExtension +public class GLColormappedImageExtension extends GraphicsExtension implements IColormappedImageExtension { - private static class GLColormappedImageExtensionData { - public GLColormappedImage alphaMaskTexture; - } + private static final transient IUFStatusHandler statusHandler = UFStatus + .getHandler(GLColormappedImageExtension.class); /* * (non-Javadoc) @@ -71,165 +66,33 @@ public class GLColormappedImageExtension extends AbstractGLSLImagingExtension * com.raytheon.uf.viz.core.drawables.ColorMapParameters) */ @Override - public GLColormappedImage initializeRaster( + public IColormappedImage initializeRaster( IColorMapDataRetrievalCallback dataCallback, ColorMapParameters colorMapParameters) { - return new GLColormappedImage(dataCallback, colorMapParameters, - GLColormappedImageExtension.class); - } - - /* - * (non-Javadoc) - * - * @see - * com.raytheon.viz.core.gl.ext.AbstractGLImagingExtension#preImageRender - * (com.raytheon.uf.viz.core.drawables.PaintProperties, - * com.raytheon.viz.core.gl.images.AbstractGLImage) - */ - @Override - public Object preImageRender(PaintProperties paintProps, - AbstractGLImage image, PixelCoverage coverage) throws VizException { - GLColormappedImageExtensionData data = null; - if (image instanceof GLColormappedImage) { - data = new GLColormappedImageExtensionData(); - GL gl = target.getGl(); - GLColormappedImage glImage = (GLColormappedImage) image; - // First see if the colormap has been loaded - ColorMapParameters usedColorMapParameters = ((IColormappedImage) glImage) - .getColorMapParameters(); - if (usedColorMapParameters == null - || usedColorMapParameters.getColorMap() == null) { - return null; - } - - if (usedColorMapParameters.isUseMask()) { - final byte[] mask = usedColorMapParameters.getAlphaMask(); - data.alphaMaskTexture = initializeRaster( - new IColorMapDataRetrievalCallback() { - @Override - public ColorMapData getColorMapData() - throws VizException { - return new ColorMapData(ByteBuffer.wrap(mask), - new int[] { mask.length, 1 }); - } - }, usedColorMapParameters); - data.alphaMaskTexture.stage(); - data.alphaMaskTexture.target(target); - } - - // Get and stage colormap texture - GLTextureObject cmapTexture = target - .getColorMapTexture(usedColorMapParameters); - - if (data.alphaMaskTexture != null) { - gl.glActiveTexture(GL.GL_TEXTURE2); - gl.glBindTexture(data.alphaMaskTexture.getTextureStorageType(), - data.alphaMaskTexture.getTextureid()); - } - - gl.glActiveTexture(GL.GL_TEXTURE1); - cmapTexture.bind(gl, GL.GL_TEXTURE_1D); - - if (glImage.isInterpolated()) { - gl.glTexParameteri(GL.GL_TEXTURE_1D, GL.GL_TEXTURE_MIN_FILTER, - GL.GL_LINEAR); - gl.glTexParameteri(GL.GL_TEXTURE_1D, GL.GL_TEXTURE_MAG_FILTER, - GL.GL_LINEAR); - } else { - gl.glTexParameteri(GL.GL_TEXTURE_1D, GL.GL_TEXTURE_MIN_FILTER, - GL.GL_NEAREST); - gl.glTexParameteri(GL.GL_TEXTURE_1D, GL.GL_TEXTURE_MAG_FILTER, - GL.GL_NEAREST); - } + GLColormappedImage image = new GLColormappedImage(dataCallback, + colorMapParameters, target); + try { + image.stageTexture(); + } catch (VizException e) { + statusHandler.handle(Priority.PROBLEM, "Error staging texture", e); } - return data; + return image; } /* * (non-Javadoc) * - * @see - * com.raytheon.viz.core.gl.ext.AbstractGLImagingExtension#postImageRender - * (com.raytheon.uf.viz.core.drawables.PaintProperties, - * com.raytheon.viz.core.gl.images.AbstractGLImage, java.lang.Object) + * @see com.raytheon.uf.viz.core.drawables.ext.GraphicsExtension# + * getCompatibilityValue(com.raytheon.uf.viz.core.IGraphicsTarget) */ @Override - public void postImageRender(PaintProperties paintProps, - AbstractGLImage image, Object data) throws VizException { - GLColormappedImageExtensionData imageData = (GLColormappedImageExtensionData) data; - GL gl = target.getGl(); - if (imageData.alphaMaskTexture != null) { - gl.glActiveTexture(GL.GL_TEXTURE2); - gl.glBindTexture( - imageData.alphaMaskTexture.getTextureStorageType(), 0); - - imageData.alphaMaskTexture.dispose(); + public int getCompatibilityValue(IGLTarget target) { + if (GLCapabilities.getInstance(target.getGl()).cardSupportsShaders + && GLTarget.FORCE_NO_SHADER == false) { + return Compatibilty.ENHANCED_TARGET_COMPATIBLE.value; + } else { + return Compatibilty.INCOMPATIBLE.value; } - - gl.glActiveTexture(GL.GL_TEXTURE1); - gl.glBindTexture(GL.GL_TEXTURE_1D, 0); - } - - /* - * (non-Javadoc) - * - * @see - * com.raytheon.viz.core.gl.ext.AbstractGLImagingExtension#getShaderProgramName - * () - */ - @Override - public String getShaderProgramName() { - return "colormapRaster"; - } - - /* - * (non-Javadoc) - * - * @see - * com.raytheon.viz.core.gl.ext.AbstractGLImagingExtension#loadShaderData - * (com.raytheon.viz.core.gl.glsl.GLShaderProgram, - * com.raytheon.uf.viz.core.drawables.IImage, - * com.raytheon.uf.viz.core.drawables.PaintProperties) - */ - @Override - public void loadShaderData(GLShaderProgram program, IImage iimage, - PaintProperties paintProps) throws VizException { - // Get image as AbstractGLImage - GLColormappedImage image = null; - if (iimage instanceof GLColormappedImage == false) { - throw new VizException( - "Cannot apply glsl colormap raster shader to non gl colormap image"); - } - image = (GLColormappedImage) iimage; - - GLColormappedImage colormappedImg = (GLColormappedImage) image; - ColorMapParameters colorMapParameters = colormappedImg - .getColorMapParameters(); - - program.setUniform("colorMapSz", colorMapParameters.getColorMap() - .getSize()); - int textureType = ((GLColormappedImage) image).getTextureType(); - program.setUniform("isFloat", textureType == GL.GL_FLOAT - || textureType == GL.GL_HALF_FLOAT_ARB ? 1 : 0); - program.setUniform("logarithmic", - colorMapParameters.isLogarithmic() ? 1 : 0); - program.setUniform("logFactor", colorMapParameters.getLogFactor()); - program.setUniform("mirror", colorMapParameters.isMirror() ? 1 : 0); - - program.setUniform("applyMask", colorMapParameters.isUseMask() ? 1 : 0); - - program.setUniform("naturalMin", colorMapParameters.getDataMin()); - program.setUniform("naturalMax", colorMapParameters.getDataMax()); - program.setUniform("cmapMin", colorMapParameters.getColorMapMin()); - program.setUniform("cmapMax", colorMapParameters.getColorMapMax()); - - program.setUniform("alphaMask", 2); - program.setUniform("colorMap", 1); - program.setUniform("rawText", 0); - - program.setUniform("brightness", image.getBrightness()); - program.setUniform("contrast", image.getContrast()); - program.setUniform("alpha", paintProps.getAlpha()); } } diff --git a/cave/com.raytheon.viz.core.gl/src/com/raytheon/viz/core/gl/internal/ext/GLMapMeshExtension.java b/cave/com.raytheon.viz.core.gl/src/com/raytheon/viz/core/gl/internal/ext/GLMapMeshExtension.java index 97b08b7aed..c6f4abf8b5 100644 --- a/cave/com.raytheon.viz.core.gl/src/com/raytheon/viz/core/gl/internal/ext/GLMapMeshExtension.java +++ b/cave/com.raytheon.viz.core.gl/src/com/raytheon/viz/core/gl/internal/ext/GLMapMeshExtension.java @@ -19,13 +19,10 @@ **/ package com.raytheon.viz.core.gl.internal.ext; -import org.geotools.coverage.grid.GeneralGridGeometry; -import org.geotools.coverage.grid.GridGeometry2D; - import com.raytheon.uf.viz.core.IMesh; -import com.raytheon.uf.viz.core.drawables.IDescriptor; import com.raytheon.uf.viz.core.drawables.ext.GraphicsExtension; import com.raytheon.uf.viz.core.exception.VizException; +import com.raytheon.uf.viz.core.map.IMapDescriptor; import com.raytheon.uf.viz.core.map.IMapMeshExtension; import com.raytheon.viz.core.gl.IGLTarget; import com.raytheon.viz.core.gl.internal.GLMesh2DStrips; @@ -54,28 +51,12 @@ public class GLMapMeshExtension extends GraphicsExtension implements * (non-Javadoc) * * @see - * com.raytheon.uf.viz.core.map.IMapMeshExtension#constructMesh(org.geotools - * .coverage.grid.GridGeometry2D, - * org.geotools.coverage.grid.GeneralGridGeometry) + * com.raytheon.uf.viz.core.map.IMapMeshExtension#constructMesh(com.raytheon + * .uf.viz.core.map.IMapDescriptor) */ @Override - public IMesh constructMesh(GridGeometry2D imageGeometry, - GeneralGridGeometry targetGeometry) throws VizException { - return new GLMesh2DStrips(imageGeometry, targetGeometry); - } - - /* - * (non-Javadoc) - * - * @see - * com.raytheon.uf.viz.core.map.IMapMeshExtension#constructMesh(org.geotools - * .coverage.grid.GridGeometry2D, - * com.raytheon.uf.viz.core.drawables.IDescriptor) - */ - @Override - public IMesh constructMesh(GridGeometry2D imageGeometry, - IDescriptor targetDescriptor) throws VizException { - return constructMesh(imageGeometry, targetDescriptor.getGridGeometry()); + public IMesh constructMesh(IMapDescriptor descriptor) throws VizException { + return new GLMesh2DStrips(descriptor); } /* @@ -86,7 +67,7 @@ public class GLMapMeshExtension extends GraphicsExtension implements */ @Override public int getCompatibilityValue(IGLTarget target) { - return Compatibilty.TARGET_COMPATIBLE; + return Compatibilty.TARGET_COMPATIBLE.value; } } diff --git a/cave/com.raytheon.viz.core.gl/src/com/raytheon/viz/core/gl/ext/GLOffscreenRenderingExtension.java b/cave/com.raytheon.viz.core.gl/src/com/raytheon/viz/core/gl/internal/ext/GLOffscreenRenderingExtension.java similarity index 91% rename from cave/com.raytheon.viz.core.gl/src/com/raytheon/viz/core/gl/ext/GLOffscreenRenderingExtension.java rename to cave/com.raytheon.viz.core.gl/src/com/raytheon/viz/core/gl/internal/ext/GLOffscreenRenderingExtension.java index 90f77f275e..2a54154aec 100644 --- a/cave/com.raytheon.viz.core.gl/src/com/raytheon/viz/core/gl/ext/GLOffscreenRenderingExtension.java +++ b/cave/com.raytheon.viz.core.gl/src/com/raytheon/viz/core/gl/internal/ext/GLOffscreenRenderingExtension.java @@ -1,4 +1,4 @@ -package com.raytheon.viz.core.gl.ext; +package com.raytheon.viz.core.gl.internal.ext; import java.nio.Buffer; import java.nio.ByteBuffer; @@ -12,13 +12,13 @@ import com.raytheon.uf.viz.core.drawables.ColorMapParameters; import com.raytheon.uf.viz.core.drawables.IImage; import com.raytheon.uf.viz.core.drawables.ext.GraphicsExtension; import com.raytheon.uf.viz.core.drawables.ext.IOffscreenRenderingExtension; +import com.raytheon.uf.viz.core.drawables.ext.colormap.IColormappedImageExtension; import com.raytheon.uf.viz.core.exception.VizException; import com.raytheon.viz.core.gl.IGLTarget; import com.raytheon.viz.core.gl.dataformat.AbstractGLColorMapDataFormat; import com.raytheon.viz.core.gl.dataformat.GLByteDataFormat; import com.raytheon.viz.core.gl.dataformat.IGLColorMapDataFormatProvider; import com.raytheon.viz.core.gl.images.AbstractGLImage; -import com.raytheon.viz.core.gl.internal.ext.GLColormappedImageExtension; public class GLOffscreenRenderingExtension extends GraphicsExtension implements IOffscreenRenderingExtension { @@ -37,7 +37,7 @@ public class GLOffscreenRenderingExtension extends GraphicsExtension if (glImage.getStatus() == IImage.Status.UNLOADED || glImage.getStatus() == IImage.Status.LOADING) { glImage.setStatus(IImage.Status.LOADING); - glImage.stage(); + glImage.stageTexture(); } if (glImage.getStatus() == IImage.Status.STAGED) { @@ -63,7 +63,7 @@ public class GLOffscreenRenderingExtension extends GraphicsExtension */ @Override public int getCompatibilityValue(IGLTarget target) { - return Compatibilty.TARGET_COMPATIBLE; + return Compatibilty.TARGET_COMPATIBLE.value; } /* @@ -73,9 +73,8 @@ public class GLOffscreenRenderingExtension extends GraphicsExtension * constructOffscreenImage(java.lang.Class, java.awt.Rectangle) */ @Override - public AbstractGLImage constructOffscreenImage( - Class dataType, int[] dimensions) - throws VizException { + public IImage constructOffscreenImage(Class dataType, + int[] dimensions) throws VizException { return constructOffscreenImage(dataType, dimensions, null); } @@ -86,9 +85,9 @@ public class GLOffscreenRenderingExtension extends GraphicsExtension * constructOffscreenImage(java.lang.Class, java.awt.Rectangle) */ @Override - public AbstractGLImage constructOffscreenImage( - Class dataType, final int[] dimensions, - ColorMapParameters parameters) throws VizException { + public IImage constructOffscreenImage(Class dataType, + final int[] dimensions, ColorMapParameters parameters) + throws VizException { int width = dimensions[0]; int height = dimensions[1]; // Need to add support for multiple buffer types @@ -103,10 +102,10 @@ public class GLOffscreenRenderingExtension extends GraphicsExtension } if (imageBuffer != null) { - AbstractGLImage image = null; + IImage image = null; final Buffer buffer = imageBuffer; - GLColormappedImageExtension cmapExt = target - .getExtension(GLColormappedImageExtension.class); + IColormappedImageExtension cmapExt = target + .getExtension(IColormappedImageExtension.class); if (supportsLuminance) { image = cmapExt.initializeRaster( new IColorMapDataRetrievalCallback() { diff --git a/cave/com.raytheon.viz.core.gl/src/com/raytheon/viz/core/gl/internal/ext/GLSingleColorImageExtension.java b/cave/com.raytheon.viz.core.gl/src/com/raytheon/viz/core/gl/internal/ext/GLSingleColorImageExtension.java deleted file mode 100644 index 480f06220f..0000000000 --- a/cave/com.raytheon.viz.core.gl/src/com/raytheon/viz/core/gl/internal/ext/GLSingleColorImageExtension.java +++ /dev/null @@ -1,114 +0,0 @@ -/** - * This software was developed and / or modified by Raytheon Company, - * pursuant to Contract DG133W-05-CQ-1067 with the US Government. - * - * U.S. EXPORT CONTROLLED TECHNICAL DATA - * This software product contains export-restricted data whose - * export/transfer/disclosure is restricted by U.S. law. Dissemination - * to non-U.S. persons whether in the United States or abroad requires - * an export license or other authorization. - * - * Contractor Name: Raytheon Company - * Contractor Address: 6825 Pine Street, Suite 340 - * Mail Stop B8 - * Omaha, NE 68106 - * 402.291.0100 - * - * See the AWIPS II Master Rights File ("Master Rights File.pdf") for - * further licensing information. - **/ -package com.raytheon.viz.core.gl.internal.ext; - -import java.awt.image.RenderedImage; - -import org.eclipse.swt.graphics.RGB; - -import com.raytheon.uf.viz.core.data.IRenderedImageCallback; -import com.raytheon.uf.viz.core.drawables.IImage; -import com.raytheon.uf.viz.core.drawables.PaintProperties; -import com.raytheon.uf.viz.core.drawables.ext.ISingleColorImageExtension; -import com.raytheon.uf.viz.core.exception.VizException; -import com.raytheon.viz.core.gl.glsl.AbstractGLSLImagingExtension; -import com.raytheon.viz.core.gl.glsl.GLShaderProgram; -import com.raytheon.viz.core.gl.images.GLImage; -import com.raytheon.viz.core.gl.images.GLSingleColorImage; - -/** - * GL implementation of ISingleColorImageExtension, uses shader to assign color - * value - * - *
- * 
- * SOFTWARE HISTORY
- * 
- * Date         Ticket#    Engineer    Description
- * ------------ ---------- ----------- --------------------------
- * Dec 15, 2011            mschenke     Initial creation
- * 
- * 
- * - * @author mschenke - * @version 1.0 - */ - -public class GLSingleColorImageExtension extends AbstractGLSLImagingExtension - implements ISingleColorImageExtension { - - /* - * (non-Javadoc) - * - * @see - * com.raytheon.viz.core.gl.ext.AbstractGLImagingExtension#getShaderProgramName - * () - */ - @Override - public String getShaderProgramName() { - return "singleColor"; - } - - /* - * (non-Javadoc) - * - * @see com.raytheon.uf.viz.core.drawables.ext.ISingleColorImageExtension# - * constructImage(com.raytheon.uf.viz.core.drawables.IImage, - * org.eclipse.swt.graphics.RGB) - */ - @Override - public ISingleColorImage constructImage(final RenderedImage image, RGB color) { - return new GLSingleColorImage(new GLImage(new IRenderedImageCallback() { - @Override - public RenderedImage getImage() throws VizException { - return image; - } - }, GLSingleColorImageExtension.class), color); - } - - /* - * (non-Javadoc) - * - * @see - * com.raytheon.viz.core.gl.ext.AbstractGLImagingExtension#loadShaderData - * (com.raytheon.viz.core.gl.glsl.GLShaderProgram, - * com.raytheon.uf.viz.core.drawables.IImage, - * com.raytheon.uf.viz.core.drawables.PaintProperties) - */ - @Override - public void loadShaderData(GLShaderProgram program, IImage iimage, - PaintProperties paintProps) throws VizException { - // Get image as AbstractGLImage - GLSingleColorImage image = null; - if (iimage instanceof GLSingleColorImage == false) { - throw new VizException( - "Cannot apply single color raster shader to non single color image"); - } - - image = (GLSingleColorImage) iimage; - - program.setUniform("brightness", image.getBrightness()); - program.setUniform("contrast", image.getContrast()); - program.setUniform("alpha", paintProps.getAlpha()); - program.setUniform("color", image.getColor()); - program.setUniform("rawTex", 0); - } - -} diff --git a/cave/com.raytheon.viz.core.gl/src/com/raytheon/viz/core/gl/objects/GLVertexBufferObject.java b/cave/com.raytheon.viz.core.gl/src/com/raytheon/viz/core/gl/objects/GLVertexBufferObject.java index e4ac6fa2be..da0c8a880e 100644 --- a/cave/com.raytheon.viz.core.gl/src/com/raytheon/viz/core/gl/objects/GLVertexBufferObject.java +++ b/cave/com.raytheon.viz.core.gl/src/com/raytheon/viz/core/gl/objects/GLVertexBufferObject.java @@ -50,7 +50,7 @@ public class GLVertexBufferObject extends GLIdWrapper { * @param gl */ public GLVertexBufferObject(Object parent) { - super(parent); + super(); } /** diff --git a/cave/com.raytheon.viz.core.graphing/com.raytheon.viz.core.graphing.ecl b/cave/com.raytheon.viz.core.graphing/com.raytheon.viz.core.graphing.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/cave/com.raytheon.viz.core.graphing/src/com/raytheon/viz/core/graphing/GraphDescriptor.java b/cave/com.raytheon.viz.core.graphing/src/com/raytheon/viz/core/graphing/GraphDescriptor.java index dad4f696d4..de9633d3b9 100644 --- a/cave/com.raytheon.viz.core.graphing/src/com/raytheon/viz/core/graphing/GraphDescriptor.java +++ b/cave/com.raytheon.viz.core.graphing/src/com/raytheon/viz/core/graphing/GraphDescriptor.java @@ -24,10 +24,16 @@ import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; +import org.geotools.coverage.grid.GeneralGridEnvelope; +import org.geotools.coverage.grid.GeneralGridGeometry; +import org.geotools.coverage.grid.GridGeometry2D; +import org.geotools.geometry.GeneralEnvelope; import org.geotools.referencing.crs.DefaultEngineeringCRS; +import org.opengis.referencing.crs.CoordinateReferenceSystem; import com.raytheon.uf.common.serialization.ISerializableObject; import com.raytheon.uf.common.serialization.adapters.CoordAdapter; +import com.raytheon.uf.common.serialization.adapters.GridGeometryAdapter; import com.raytheon.uf.viz.core.PixelExtent; import com.raytheon.uf.viz.core.drawables.AbstractDescriptor; import com.vividsolutions.jts.geom.Coordinate; @@ -59,12 +65,34 @@ public class GraphDescriptor extends AbstractDescriptor implements protected int verticalFrameCount = 0; + @XmlElement + @XmlJavaTypeAdapter(value = GridGeometryAdapter.class) + protected GeneralGridGeometry geometry; + public GraphDescriptor() { this(new PixelExtent(0, 1000, 0, 1000)); } public GraphDescriptor(PixelExtent anExtent) { - super(createGridGeometry(anExtent, DefaultEngineeringCRS.CARTESIAN_2D)); + super(); + GeneralEnvelope envelope = new GeneralEnvelope(2); + envelope.setRange(0, anExtent.getMinX(), anExtent.getMaxX()); + envelope.setRange(1, anExtent.getMinY(), anExtent.getMaxY()); + envelope.setCoordinateReferenceSystem(DefaultEngineeringCRS.CARTESIAN_2D); + geometry = new GridGeometry2D(new GeneralGridEnvelope( + new int[] { 0, 0 }, new int[] { (int) anExtent.getWidth(), + (int) anExtent.getHeight() }, false), envelope); + } + + @Override + public CoordinateReferenceSystem getCRS() { + // TODO Auto-generated method stub + return null; + } + + @Override + public GeneralGridGeometry getGridGeometry() { + return geometry; } /** @@ -82,4 +110,24 @@ public class GraphDescriptor extends AbstractDescriptor implements this.location = location; } + /* + * (non-Javadoc) + * + * @see com.raytheon.viz.core.drawables.IDescriptor#pixelToWorld(double[]) + */ + @Override + public double[] pixelToWorld(double[] pixel) { + return pixel; + } + + /* + * (non-Javadoc) + * + * @see com.raytheon.viz.core.drawables.IDescriptor#worldToPixel(double[]) + */ + @Override + public double[] worldToPixel(double[] worldPixel) { + return worldPixel; + } + } diff --git a/cave/com.raytheon.viz.core/com.raytheon.viz.core.ecl b/cave/com.raytheon.viz.core/com.raytheon.viz.core.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/cave/com.raytheon.viz.core/src/com/raytheon/viz/core/rsc/displays/GriddedImageDisplay2.java b/cave/com.raytheon.viz.core/src/com/raytheon/viz/core/rsc/displays/GriddedImageDisplay2.java index 02f0e02610..ad1f00c583 100644 --- a/cave/com.raytheon.viz.core/src/com/raytheon/viz/core/rsc/displays/GriddedImageDisplay2.java +++ b/cave/com.raytheon.viz.core/src/com/raytheon/viz/core/rsc/displays/GriddedImageDisplay2.java @@ -139,8 +139,7 @@ public class GriddedImageDisplay2 extends AbstractTileSet { } // tile bounds - Rectangle rect = this.tileSet.getTileSet().get(level)[i][j] - .getRectangle(); + Rectangle rect = this.tileSet.getTileSet().get(level)[i][j].rect; // total width int width = gridGeometry[level].getGridRange().getSpan(0); IImage image = null; diff --git a/cave/com.raytheon.viz.core/src/com/raytheon/viz/core/rsc/hdf5/AbstractTileSet.java b/cave/com.raytheon.viz.core/src/com/raytheon/viz/core/rsc/hdf5/AbstractTileSet.java index 4204b49667..91a9d7f660 100644 --- a/cave/com.raytheon.viz.core/src/com/raytheon/viz/core/rsc/hdf5/AbstractTileSet.java +++ b/cave/com.raytheon.viz.core/src/com/raytheon/viz/core/rsc/hdf5/AbstractTileSet.java @@ -51,9 +51,11 @@ import com.raytheon.uf.common.status.UFStatus; import com.raytheon.uf.common.status.UFStatus.Priority; import com.raytheon.uf.viz.core.AbstractGraphicsFactoryAdapter; import com.raytheon.uf.viz.core.DrawableImage; +import com.raytheon.uf.viz.core.GraphicsFactory; import com.raytheon.uf.viz.core.IExtent; import com.raytheon.uf.viz.core.IGraphicsTarget; import com.raytheon.uf.viz.core.IGraphicsTarget.RasterMode; +import com.raytheon.uf.viz.core.IMesh; import com.raytheon.uf.viz.core.IMeshCallback; import com.raytheon.uf.viz.core.PixelCoverage; import com.raytheon.uf.viz.core.VizApp; @@ -70,6 +72,7 @@ import com.raytheon.uf.viz.core.rsc.AbstractVizResource; import com.raytheon.uf.viz.core.rsc.capabilities.ColorMapCapability; import com.raytheon.uf.viz.core.rsc.capabilities.ImagingCapability; import com.raytheon.uf.viz.core.rsc.hdf5.ImageTile; +import com.raytheon.uf.viz.core.rsc.hdf5.MeshCalculatorJob; import com.vividsolutions.jts.geom.Coordinate; /** @@ -189,6 +192,7 @@ public abstract class AbstractTileSet implements IRenderable, IMeshCallback { this.tileSize = tileSize; this.rsc = rsc; this.cellOrientation = pixelOrientation; + graphicsAdapter = GraphicsFactory.getGraphicsAdapter(viewType); setup(levels, tileSize, gridGeometry); } @@ -212,6 +216,7 @@ public abstract class AbstractTileSet implements IRenderable, IMeshCallback { this.rsc = rsc; } setSharedGeometryTileSet(sharedGeometryTileset); + disposed = false; } /** @@ -256,6 +261,7 @@ public abstract class AbstractTileSet implements IRenderable, IMeshCallback { protected void setup(int levels, int tileSize, GridGeometry2D gridGeometry) throws VizException { + disposed = false; this.levels = levels; try { @@ -386,8 +392,15 @@ public abstract class AbstractTileSet implements IRenderable, IMeshCallback { if (generalEnv.intersects(generalMapEnv, true)) { tiles[i][j] = new ImageTile(); - tiles[i][j].setGridGeometry(new Rectangle(startX, - startY, effectiveWidth, effectiveHeight), env); + + tiles[i][j].rect = new Rectangle(startX, startY, + effectiveWidth, effectiveHeight); + + tiles[i][j].envelope = env; + tiles[i][j].elevation = this.elevation; + // System.out.println(tiles[i][j].envelope.toString()); + tiles[i][j].rect.width = effectiveWidth; + tiles[i][j].rect.height = effectiveHeight; } } @@ -416,22 +429,24 @@ public abstract class AbstractTileSet implements IRenderable, IMeshCallback { for (int i = 0; i < tiles.length; i++) { for (int j = 0; j < tiles[i].length; j++) { ImageTile tile = tiles[i][j]; - if (tile != null && tile.coverage != null - && tile.coverage.intersects(extent)) { - IImage image = imageMap.get(tile); - if (image == null || image.getStatus() == Status.FAILED - || image.getStatus() == Status.INVALID) { + if (tile != null && tile.occlude == false) { + if (tile.coverage != null + && tile.coverage.intersects(extent)) { + IImage image = imageMap.get(tile); + if (image == null || image.getStatus() == Status.FAILED + || image.getStatus() == Status.INVALID) { - try { - if (!this.hasDataPreloaded(lvl)) { - this.preloadDataObject(lvl); + try { + if (!this.hasDataPreloaded(lvl)) { + this.preloadDataObject(lvl); + } + } catch (StorageException e) { + throw new VizException( + "Error reading data to draw: ", e); } - } catch (StorageException e) { - throw new VizException( - "Error reading data to draw: ", e); - } - tilesToCreate.add(new Point(i, j)); + tilesToCreate.add(new Point(i, j)); + } } } } @@ -492,13 +507,15 @@ public abstract class AbstractTileSet implements IRenderable, IMeshCallback { for (int i = 0; i < tiles.length; i++) { for (int j = 0; j < tiles[i].length; j++) { ImageTile tile = tiles[i][j]; - if (tile != null - && tile.coverage != null - && tile.coverage.intersects(paintProps.getView() - .getExtent()) - && tile.coverage.intersects(paintProps - .getClippingPane())) { - intersectedTiles.add(tile); + if (tile != null && tile.occlude == false) { + + if (tile.coverage != null + && tile.coverage.intersects(paintProps.getView() + .getExtent()) + && tile.coverage.intersects(paintProps + .getClippingPane())) { + intersectedTiles.add(tile); + } } } } @@ -536,10 +553,11 @@ public abstract class AbstractTileSet implements IRenderable, IMeshCallback { needDrawLower = true; if (tile.coverage != null && tile.coverage.getMesh() == null) { - tile.coverage.setMesh(target.getExtension( - IMapMeshExtension.class) - .constructMesh(tile.imageGeometry, - mapDescriptor.getGridGeometry())); + IMesh mesh = target.getExtension(IMapMeshExtension.class) + .constructMesh(mapDescriptor); + MeshCalculatorJob.getInstance().requestLoad(this, mesh, + tile, this.localProjToLL); + target.setNeedsRefresh(true); } } @@ -677,7 +695,6 @@ public abstract class AbstractTileSet implements IRenderable, IMeshCallback { } public void init(IGraphicsTarget target) throws VizException { - disposed = false; this.lastPaintedTarget = target; if (this.sharedGeometryTileSet == null) { @@ -723,6 +740,7 @@ public abstract class AbstractTileSet implements IRenderable, IMeshCallback { this.originalGridGeometry = sharedGeometryTileset.originalGridGeometry; this.originalMathTransform = sharedGeometryTileset.originalMathTransform; this.cellOrientation = sharedGeometryTileset.cellOrientation; + this.graphicsAdapter = sharedGeometryTileset.graphicsAdapter; } public void reproject() throws VizException { @@ -793,7 +811,6 @@ public abstract class AbstractTileSet implements IRenderable, IMeshCallback { continue; } - ReferencedEnvelope envelope = tile.getEnvelope(); if (sharedGeometryTileSet != null && sharedGeometryTileSet.tileSet != tileSet) { ImageTile baseTile = sharedGeometryTileSet.tileSet @@ -806,8 +823,9 @@ public abstract class AbstractTileSet implements IRenderable, IMeshCallback { double[] ur = new double[2]; try { - envelope = envelope.transform( - mapDescriptor.getCRS(), false); + ReferencedEnvelope envelope = ((ReferencedEnvelope) tile.envelope) + .transform(mapDescriptor.getCRS(), + false); ll[0] = envelope.getMinX(); ll[1] = envelope.getMinY(); @@ -860,9 +878,11 @@ public abstract class AbstractTileSet implements IRenderable, IMeshCallback { tile.coverage = new PixelCoverage(ulc, urc, lrc, llc); } - } else if (envelope != null) { - tile.coverage = mapDescriptor - .worldToPixel(envelope); + } else { + if (tile.envelope != null) { + tile.coverage = mapDescriptor + .worldToPixel(tile.envelope); + } } } @@ -918,7 +938,7 @@ public abstract class AbstractTileSet implements IRenderable, IMeshCallback { for (int i = 0; i < tiles.length; i++) { for (int j = 0; j < tiles[0].length; j++) { ImageTile tile = tiles[i][j]; - if (tile != null && tile.contains(out[0], out[1])) { + if (tile != null && tile.envelope.contains(out[0], out[1])) { int coordX = (int) (outCoords[0]); int coordY = (int) (outCoords[1]); diff --git a/cave/com.raytheon.viz.core/src/com/raytheon/viz/core/rsc/hdf5/FileBasedTileSet.java b/cave/com.raytheon.viz.core/src/com/raytheon/viz/core/rsc/hdf5/FileBasedTileSet.java index c12bcc09a8..f2427fd945 100644 --- a/cave/com.raytheon.viz.core/src/com/raytheon/viz/core/rsc/hdf5/FileBasedTileSet.java +++ b/cave/com.raytheon.viz.core/src/com/raytheon/viz/core/rsc/hdf5/FileBasedTileSet.java @@ -111,8 +111,8 @@ public class FileBasedTileSet extends AbstractTileSet { .initializeRaster( new HDF5DataRetriever(new File(this.hdf5File), "/" + this.group + "/" + this.dataset - + "-interpolated/" + level, this.tileSet - .getTile(level, i, j).getRectangle()), + + "-interpolated/" + level, + this.tileSet.getTile(level, i, j).rect), rsc.getCapability(ColorMapCapability.class) .getColorMapParameters()); return raster; diff --git a/cave/com.raytheon.viz.core/src/com/raytheon/viz/core/rsc/hdf5/MemoryBasedTileSet.java b/cave/com.raytheon.viz.core/src/com/raytheon/viz/core/rsc/hdf5/MemoryBasedTileSet.java index 3768231f00..525adc3c2c 100644 --- a/cave/com.raytheon.viz.core/src/com/raytheon/viz/core/rsc/hdf5/MemoryBasedTileSet.java +++ b/cave/com.raytheon.viz.core/src/com/raytheon/viz/core/rsc/hdf5/MemoryBasedTileSet.java @@ -172,8 +172,8 @@ public class MemoryBasedTileSet extends AbstractTileSet { protected IImage createTile(IGraphicsTarget target, int level, int i, int j) throws VizException { IDataPreparer preparer = CMDataPreparerManager.getDataPreparer( - loadedData[level], this.tileSet.getTile(level, i, j) - .getRectangle(), dims[level]); + loadedData[level], this.tileSet.getTile(level, i, j).rect, + dims[level]); return target.initializeRaster(preparer, rsc.getCapability(ColorMapCapability.class) .getColorMapParameters()); diff --git a/cave/com.raytheon.viz.core/src/com/raytheon/viz/core/rsc/jts/JTSCompiler.java b/cave/com.raytheon.viz.core/src/com/raytheon/viz/core/rsc/jts/JTSCompiler.java index 6937def7b6..41d7e694bb 100644 --- a/cave/com.raytheon.viz.core/src/com/raytheon/viz/core/rsc/jts/JTSCompiler.java +++ b/cave/com.raytheon.viz.core/src/com/raytheon/viz/core/rsc/jts/JTSCompiler.java @@ -22,12 +22,12 @@ package com.raytheon.viz.core.rsc.jts; import org.eclipse.swt.graphics.RGB; import com.raytheon.uf.common.geospatial.ReferencedGeometry; -import com.raytheon.uf.common.geospatial.util.WorldWrapCorrector; import com.raytheon.uf.viz.core.drawables.IDescriptor; import com.raytheon.uf.viz.core.drawables.IShadedShape; import com.raytheon.uf.viz.core.drawables.IWireframeShape; import com.raytheon.uf.viz.core.exception.VizException; import com.raytheon.uf.viz.core.map.IMapDescriptor; +import com.raytheon.uf.viz.core.map.WorldWrapCorrector; import com.vividsolutions.jts.geom.Coordinate; import com.vividsolutions.jts.geom.Geometry; import com.vividsolutions.jts.geom.GeometryCollection; @@ -107,8 +107,7 @@ public class JTSCompiler { this.descriptor = descriptor; this.pointStyle = pointStyle; if (descriptor instanceof IMapDescriptor) { - this.corrector = new WorldWrapCorrector( - descriptor.getGridGeometry()); + this.corrector = new WorldWrapCorrector((IMapDescriptor) descriptor); } } diff --git a/cave/com.raytheon.viz.core/src/com/raytheon/viz/core/topo/TopoTileSet.java b/cave/com.raytheon.viz.core/src/com/raytheon/viz/core/topo/TopoTileSet.java index 9b067b418b..e94e0915a1 100644 --- a/cave/com.raytheon.viz.core/src/com/raytheon/viz/core/topo/TopoTileSet.java +++ b/cave/com.raytheon.viz.core/src/com/raytheon/viz/core/topo/TopoTileSet.java @@ -142,8 +142,7 @@ public class TopoTileSet extends FileBasedTileSet { return target.getExtension(IColormappedImageExtension.class) .initializeRaster( new HDF5DataRetriever(new File(this.hdf5File), dataset, - this.tileSet.getTile(level, i, j) - .getRectangle()), + this.tileSet.getTile(level, i, j).rect), rsc.getCapability(ColorMapCapability.class) .getColorMapParameters()); } diff --git a/cave/com.raytheon.viz.drawing/com.raytheon.viz.drawing.ecl b/cave/com.raytheon.viz.drawing/com.raytheon.viz.drawing.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/cave/com.raytheon.viz.feature.awips.developer/com.raytheon.viz.feature.awips.developer.ecl b/cave/com.raytheon.viz.feature.awips.developer/com.raytheon.viz.feature.awips.developer.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/cave/com.raytheon.viz.feature.awips/com.raytheon.viz.feature.awips.ecl b/cave/com.raytheon.viz.feature.awips/com.raytheon.viz.feature.awips.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/cave/com.raytheon.viz.geotiff/com.raytheon.viz.geotiff.ecl b/cave/com.raytheon.viz.geotiff/com.raytheon.viz.geotiff.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/cave/com.raytheon.viz.gfe.feature/com.raytheon.viz.gfe.feature.ecl b/cave/com.raytheon.viz.gfe.feature/com.raytheon.viz.gfe.feature.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/cave/com.raytheon.viz.gfe/com.raytheon.viz.gfe.ecl b/cave/com.raytheon.viz.gfe/com.raytheon.viz.gfe.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/cave/com.raytheon.viz.gfe/src/com/raytheon/viz/gfe/core/parm/ParmListeners.java b/cave/com.raytheon.viz.gfe/src/com/raytheon/viz/gfe/core/parm/ParmListeners.java index 4b4fa0464e..5895942315 100644 --- a/cave/com.raytheon.viz.gfe/src/com/raytheon/viz/gfe/core/parm/ParmListeners.java +++ b/cave/com.raytheon.viz.gfe/src/com/raytheon/viz/gfe/core/parm/ParmListeners.java @@ -21,6 +21,7 @@ package com.raytheon.viz.gfe.core.parm; import org.apache.commons.lang.Validate; import org.eclipse.core.runtime.ListenerList; +import org.eclipse.swt.widgets.Display; import com.raytheon.uf.common.dataplugin.gfe.db.objects.ParmID; import com.raytheon.uf.common.dataplugin.gfe.server.lock.LockTable; @@ -57,6 +58,7 @@ import com.raytheon.viz.gfe.core.wxvalue.WxValue; * multiple registration * Feb 23, 2012 #346 dgilling Implement clearParmListeners. * Mar 01, 2012 #346 dgilling Use identity-based ListenerLists. + * Mar 21, 2012 14583 mli fix invalid thread access for PickupValueChange * *
* @@ -246,14 +248,13 @@ public class ParmListeners { for (Object listener : this.pickupValueChangedListeners.getListeners()) { final IPickupValueChangedListener casted = (IPickupValueChangedListener) listener; - Runnable notTask = new Runnable() { - + Display.getDefault().asyncExec( new Runnable() { + @Override public void run() { casted.pickupValueChanged(parm, pickupValue); } - }; - notificationPool.schedule(notTask); + }); } } diff --git a/cave/com.raytheon.viz.ghg/com.raytheon.viz.ghg.ecl b/cave/com.raytheon.viz.ghg/com.raytheon.viz.ghg.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/cave/com.raytheon.viz.grib.feature/com.raytheon.viz.grib.feature.ecl b/cave/com.raytheon.viz.grib.feature/com.raytheon.viz.grib.feature.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/cave/com.raytheon.viz.grid/com.raytheon.viz.grid.ecl b/cave/com.raytheon.viz.grid/com.raytheon.viz.grid.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/cave/com.raytheon.viz.grid/localization/styleRules/gridImageryStyleRules.xml b/cave/com.raytheon.viz.grid/localization/styleRules/gridImageryStyleRules.xml index 6d2ce7d639..f00055fb5c 100644 --- a/cave/com.raytheon.viz.grid/localization/styleRules/gridImageryStyleRules.xml +++ b/cave/com.raytheon.viz.grid/localization/styleRules/gridImageryStyleRules.xml @@ -39,7 +39,29 @@ - + + + + + GH + GHxSM + zAGL + HRRR-East + HRRR-West + + + ft + Grid/gridded data + + 0 + 4000 + + + + diff --git a/cave/com.raytheon.viz.mpe/com.raytheon.viz.mpe.ecl b/cave/com.raytheon.viz.mpe/com.raytheon.viz.mpe.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/cave/com.raytheon.viz.mpe/src/com/raytheon/viz/mpe/util/EstMissingStations.java b/cave/com.raytheon.viz.mpe/src/com/raytheon/viz/mpe/util/EstMissingStations.java index 64c2d0b3b6..55a0c2a94a 100644 --- a/cave/com.raytheon.viz.mpe/src/com/raytheon/viz/mpe/util/EstMissingStations.java +++ b/cave/com.raytheon.viz.mpe/src/com/raytheon/viz/mpe/util/EstMissingStations.java @@ -141,7 +141,7 @@ public class EstMissingStations { } if (method == 2 && isoh > 0 && isoh1 > 0) { - padj = pdata[j].stn[i].frain[h].data * (isoh1 / isoh); + padj = pdata[j].stn[i].frain[h].data * isoh1 / isoh; } else { padj = pdata[j].stn[i].frain[h].data; } @@ -200,7 +200,7 @@ public class EstMissingStations { if (method == 2 && isoh > 0 && isoh1 > 0) { padj = pdata[j].stn[i].frain[h].data - * (isoh1 / isoh); + * isoh1 / isoh; } else { padj = pdata[j].stn[i].frain[h].data; } diff --git a/cave/com.raytheon.viz.mpe/src/com/raytheon/viz/mpe/util/MeanMonthlyPrecip.java b/cave/com.raytheon.viz.mpe/src/com/raytheon/viz/mpe/util/MeanMonthlyPrecip.java index 0455611550..f35a86def5 100644 --- a/cave/com.raytheon.viz.mpe/src/com/raytheon/viz/mpe/util/MeanMonthlyPrecip.java +++ b/cave/com.raytheon.viz.mpe/src/com/raytheon/viz/mpe/util/MeanMonthlyPrecip.java @@ -42,7 +42,7 @@ import com.raytheon.viz.mpe.core.MPEDataManager; * Date Ticket# Engineer Description * ------------ ---------- ----------- -------------------------- * Feb 24, 2009 snaples Initial creation - * + * April , 2012 8672 lbousaidi fixed the reading of the PRISM data. * * * @author snaples @@ -85,7 +85,7 @@ public class MeanMonthlyPrecip { Unit dataUnit = Unit.ONE; displayUnit = NonSI.INCH; - dataUnit = SI.MILLIMETER; + dataUnit = NonSI.INCH; cmc.setDisplayUnit(displayUnit); cmc.setDataUnit(dataUnit); @@ -135,16 +135,21 @@ public class MeanMonthlyPrecip { return false; } pdata = xmfile.getData(); - // for (int i = MaxY - 1; i >= 0; i--) { - for (int i = 0; i < MaxY; ++i) { + short temp=0; + for (int i = MaxY - 1; i >= 0; i--) { if (pdata.length == 0) { System.out.println("Error reading " + pfile); return false; } - + for (int j = 0; j < MaxX; j++) { + + temp = pdata[i * MaxX + j]; + pdata[i * MaxX + j ]=pdata[i + MaxX * (MaxY - 1)]; + pdata[i + MaxX *(MaxY -1)] =temp; + float f = 0; - short s = pdata[i * MaxX + j]; + short s= pdata[j + MaxX * (MaxY - i -1)]; if (s < 0) { if (s == -9999 || s == -999 || s == -99 || (s == -9)) { f = s; diff --git a/cave/com.raytheon.viz.pointdata/com.raytheon.viz.pointdata.ecl b/cave/com.raytheon.viz.pointdata/com.raytheon.viz.pointdata.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/cave/com.raytheon.viz.pointdata/plugin.xml b/cave/com.raytheon.viz.pointdata/plugin.xml index 0c8b38892c..75332bb6e2 100644 --- a/cave/com.raytheon.viz.pointdata/plugin.xml +++ b/cave/com.raytheon.viz.pointdata/plugin.xml @@ -1,20 +1,20 @@ diff --git a/cave/com.raytheon.viz.pointdata/src/com/raytheon/viz/pointdata/PlotAlertParser.java b/cave/com.raytheon.viz.pointdata/src/com/raytheon/viz/pointdata/PlotAlertParser.java index 00a582d0ea..e155670c48 100644 --- a/cave/com.raytheon.viz.pointdata/src/com/raytheon/viz/pointdata/PlotAlertParser.java +++ b/cave/com.raytheon.viz.pointdata/src/com/raytheon/viz/pointdata/PlotAlertParser.java @@ -1,19 +1,19 @@ /** * This software was developed and / or modified by Raytheon Company, - * pursuant to Contract DG133W-05-CQ-1067 with the US Government. - * - * U.S. EXPORT CONTROLLED TECHNICAL DATA + * pursuant to Contract DG133W-05-CQ-1067 with the US Government. + * + * U.S. EXPORT CONTROLLED TECHNICAL DATA * This software product contains export-restricted data whose * export/transfer/disclosure is restricted by U.S. law. Dissemination * to non-U.S. persons whether in the United States or abroad requires * an export license or other authorization. * - * Contractor Name: Raytheon Company - * Contractor Address: 6825 Pine Street, Suite 340 - * Mail Stop B8 - * Omaha, NE 68106 - * 402.291.0100 - * + * Contractor Name: Raytheon Company + * Contractor Address: 6825 Pine Street, Suite 340 + * Mail Stop B8 + * Omaha, NE 68106 + * 402.291.0100 + * * See the AWIPS II Master Rights File ("Master Rights File.pdf") for * further licensing information. **/ diff --git a/cave/com.raytheon.viz.pointdata/src/com/raytheon/viz/pointdata/PlotModelGeneratorJob.java b/cave/com.raytheon.viz.pointdata/src/com/raytheon/viz/pointdata/PlotModelGeneratorJob.java index 9b9ad1c25d..f71bb2deba 100644 --- a/cave/com.raytheon.viz.pointdata/src/com/raytheon/viz/pointdata/PlotModelGeneratorJob.java +++ b/cave/com.raytheon.viz.pointdata/src/com/raytheon/viz/pointdata/PlotModelGeneratorJob.java @@ -21,6 +21,7 @@ package com.raytheon.viz.pointdata; import java.awt.image.BufferedImage; import java.util.Map; +import java.util.UUID; import java.util.concurrent.ConcurrentLinkedQueue; import org.apache.commons.collections.map.LRUMap; @@ -32,8 +33,8 @@ import org.eclipse.core.runtime.jobs.Job; import com.raytheon.uf.common.status.IUFStatusHandler; import com.raytheon.uf.common.status.UFStatus; import com.raytheon.uf.viz.core.IGraphicsTarget; +import com.raytheon.uf.viz.core.data.prep.IODataPreparer; import com.raytheon.uf.viz.core.drawables.IImage; -import com.raytheon.uf.viz.core.drawables.ext.ISingleColorImageExtension; /** * Job separated from PlotModelGenerator2 that creates the plot images. @@ -101,9 +102,8 @@ public class PlotModelGeneratorJob extends Job { } } if (image == null) { - image = target.getExtension( - ISingleColorImageExtension.class) - .constructImage(bImage, null); + image = target.initializeRaster(new IODataPreparer( + bImage, UUID.randomUUID().toString(), 0), null); if (plotCreator.isCachingImages()) { imageCache.put(bImage, image); } diff --git a/cave/com.raytheon.viz.pointdata/src/com/raytheon/viz/pointdata/drawables/GeneralPointImageExtension.java b/cave/com.raytheon.viz.pointdata/src/com/raytheon/viz/pointdata/drawables/GeneralPointImageExtension.java index 1a81bb63d1..748a6216e9 100644 --- a/cave/com.raytheon.viz.pointdata/src/com/raytheon/viz/pointdata/drawables/GeneralPointImageExtension.java +++ b/cave/com.raytheon.viz.pointdata/src/com/raytheon/viz/pointdata/drawables/GeneralPointImageExtension.java @@ -62,7 +62,7 @@ public class GeneralPointImageExtension extends @Override public int getCompatibilityValue(IGraphicsTarget target) { - return Compatibilty.GENERIC; + return Compatibilty.GENERIC.value; } @Override diff --git a/cave/com.raytheon.viz.pointdata/src/com/raytheon/viz/pointdata/drawables/IPointImageExtension.java b/cave/com.raytheon.viz.pointdata/src/com/raytheon/viz/pointdata/drawables/IPointImageExtension.java index e164e01300..cba8abb754 100644 --- a/cave/com.raytheon.viz.pointdata/src/com/raytheon/viz/pointdata/drawables/IPointImageExtension.java +++ b/cave/com.raytheon.viz.pointdata/src/com/raytheon/viz/pointdata/drawables/IPointImageExtension.java @@ -25,7 +25,6 @@ import com.raytheon.uf.viz.core.IGraphicsTarget.HorizontalAlignment; import com.raytheon.uf.viz.core.IGraphicsTarget.VerticalAlignment; import com.raytheon.uf.viz.core.drawables.IImage; import com.raytheon.uf.viz.core.drawables.PaintProperties; -import com.raytheon.uf.viz.core.drawables.ext.GraphicsExtension.IGraphicsExtensionInterface; import com.raytheon.uf.viz.core.exception.VizException; import com.vividsolutions.jts.geom.Coordinate; @@ -47,7 +46,7 @@ import com.vividsolutions.jts.geom.Coordinate; * @version 1.0 */ -public interface IPointImageExtension extends IGraphicsExtensionInterface { +public interface IPointImageExtension { public static class PointImage { diff --git a/cave/com.raytheon.viz.pointdata/src/com/raytheon/viz/pointdata/rsc/PlotResource2.java b/cave/com.raytheon.viz.pointdata/src/com/raytheon/viz/pointdata/rsc/PlotResource2.java index a1f15de6e8..c531924211 100644 --- a/cave/com.raytheon.viz.pointdata/src/com/raytheon/viz/pointdata/rsc/PlotResource2.java +++ b/cave/com.raytheon.viz.pointdata/src/com/raytheon/viz/pointdata/rsc/PlotResource2.java @@ -48,7 +48,7 @@ import com.raytheon.uf.viz.core.IGraphicsTarget; import com.raytheon.uf.viz.core.PixelExtent; import com.raytheon.uf.viz.core.drawables.IImage; import com.raytheon.uf.viz.core.drawables.PaintProperties; -import com.raytheon.uf.viz.core.drawables.ext.ISingleColorImageExtension.ISingleColorImage; +import com.raytheon.uf.viz.core.drawables.SingleColorImage; import com.raytheon.uf.viz.core.exception.VizException; import com.raytheon.uf.viz.core.jobs.JobPool; import com.raytheon.uf.viz.core.map.MapDescriptor; @@ -222,7 +222,7 @@ public class PlotResource2 extends continue; } // set image color so shader can draw in appropriate color - ((ISingleColorImage) station.plotImage.getImage()) + ((SingleColorImage) station.plotImage.getImage()) .setColor(imageColor); images.add(station.plotImage); } @@ -639,7 +639,7 @@ public class PlotResource2 extends Station s = frameInfo.stationMap.get(key[0].stationId); if (s != null) { if (image != null) { - ISingleColorImage si = (ISingleColorImage) image; + SingleColorImage si = new SingleColorImage(image); s.plotImage = new PointImage(si, s.pixelLocation); s.plotImage.setSiteId(s.info[0].stationId); si.setColor(imageColor); diff --git a/cave/com.raytheon.viz.pointdata/src/com/raytheon/viz/pointdata/util/HeightOfLevelNode.java b/cave/com.raytheon.viz.pointdata/src/com/raytheon/viz/pointdata/util/HeightOfLevelNode.java index 42049dbc32..38d2f329d4 100644 --- a/cave/com.raytheon.viz.pointdata/src/com/raytheon/viz/pointdata/util/HeightOfLevelNode.java +++ b/cave/com.raytheon.viz.pointdata/src/com/raytheon/viz/pointdata/util/HeightOfLevelNode.java @@ -25,7 +25,6 @@ import java.util.Map; import java.util.Set; import com.raytheon.uf.common.dataplugin.level.Level; -import com.raytheon.uf.common.dataquery.requests.TimeQueryRequest; import com.raytheon.uf.common.time.DataTime; import com.raytheon.uf.viz.core.catalog.LayerProperty; import com.raytheon.uf.viz.core.exception.VizException; @@ -126,8 +125,7 @@ public class HeightOfLevelNode extends AbstractDerivedLevelNode { * timeQueryInternal(boolean, java.util.Map) */ @Override - protected Set timeQueryInternal(TimeQueryRequest originalRequest, - boolean latestOnly, + protected Set timeQueryInternal(boolean latestOnly, Map> cache, Map> latestOnlyCache) throws VizException { diff --git a/cave/com.raytheon.viz.pointdata/src/com/raytheon/viz/pointdata/util/PointAccumLevelNode.java b/cave/com.raytheon.viz.pointdata/src/com/raytheon/viz/pointdata/util/PointAccumLevelNode.java index 97ba8f5800..75d5305eee 100644 --- a/cave/com.raytheon.viz.pointdata/src/com/raytheon/viz/pointdata/util/PointAccumLevelNode.java +++ b/cave/com.raytheon.viz.pointdata/src/com/raytheon/viz/pointdata/util/PointAccumLevelNode.java @@ -25,7 +25,6 @@ import java.util.List; import java.util.Map; import java.util.Set; -import com.raytheon.uf.common.dataquery.requests.TimeQueryRequest; import com.raytheon.uf.common.time.DataTime; import com.raytheon.uf.viz.core.catalog.LayerProperty; import com.raytheon.uf.viz.core.exception.VizException; @@ -122,8 +121,7 @@ public class PointAccumLevelNode extends AbstractDerivedLevelNode { * timeQueryInternal(boolean, java.util.Map) */ @Override - protected Set timeQueryInternal(TimeQueryRequest originalRequest, - boolean latestOnly, + protected Set timeQueryInternal(boolean latestOnly, Map> cache, Map> latestOnlyCache) throws VizException { diff --git a/cave/com.raytheon.viz.pointdata/src/com/raytheon/viz/pointdata/util/PointDataCubeAdapter.java b/cave/com.raytheon.viz.pointdata/src/com/raytheon/viz/pointdata/util/PointDataCubeAdapter.java index 597365dc22..3203d28b3b 100644 --- a/cave/com.raytheon.viz.pointdata/src/com/raytheon/viz/pointdata/util/PointDataCubeAdapter.java +++ b/cave/com.raytheon.viz.pointdata/src/com/raytheon/viz/pointdata/util/PointDataCubeAdapter.java @@ -320,6 +320,19 @@ public class PointDataCubeAdapter implements IDataCubeAdapter { } } + /* + * (non-Javadoc) + * + * @see + * com.raytheon.uf.viz.core.datastructure.IDataCubeAdapter#recordKeyGenerator + * (com.raytheon.uf.common.dataplugin.PluginDataObject) + */ + @Override + public String recordKeyGenerator(PluginDataObject pdo) { + // TODO Auto-generated method stub + return null; + } + @Override public IDataRecord[] getRecord(PluginDataObject obj, Request req, String dataset) throws VizDataCubeException { diff --git a/cave/com.raytheon.viz.pointdata/src/com/raytheon/viz/pointdata/util/PointDataLevelNode.java b/cave/com.raytheon.viz.pointdata/src/com/raytheon/viz/pointdata/util/PointDataLevelNode.java index 6a12f9e190..860718a23c 100644 --- a/cave/com.raytheon.viz.pointdata/src/com/raytheon/viz/pointdata/util/PointDataLevelNode.java +++ b/cave/com.raytheon.viz.pointdata/src/com/raytheon/viz/pointdata/util/PointDataLevelNode.java @@ -120,8 +120,7 @@ public class PointDataLevelNode extends AbstractRequestableLevelNode { } @Override - protected TimeQueryRequest getTimeQueryInternal( - TimeQueryRequest originalRequest, boolean latestOnly, + protected TimeQueryRequest getTimeQueryInternal(boolean latestOnly, Map> cache) throws VizException { throw new UnsupportedOperationException( @@ -146,8 +145,7 @@ public class PointDataLevelNode extends AbstractRequestableLevelNode { * timeQueryInternal(boolean, java.util.Map) */ @Override - protected Set timeQueryInternal(TimeQueryRequest originalRequest, - boolean latestOnly, + protected Set timeQueryInternal(boolean latestOnly, Map> cache, Map> latestOnlyCache) throws VizException { diff --git a/cave/com.raytheon.viz.product.awips/com.raytheon.viz.product.awips.ecl b/cave/com.raytheon.viz.product.awips/com.raytheon.viz.product.awips.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/cave/com.raytheon.viz.radar.feature/com.raytheon.viz.radar.feature.ecl b/cave/com.raytheon.viz.radar.feature/com.raytheon.viz.radar.feature.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/cave/com.raytheon.viz.radar/com.raytheon.viz.radar.ecl b/cave/com.raytheon.viz.radar/com.raytheon.viz.radar.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/cave/com.raytheon.viz.radar/src/com/raytheon/viz/radar/rsc/AbstractRadarResource.java b/cave/com.raytheon.viz.radar/src/com/raytheon/viz/radar/rsc/AbstractRadarResource.java index ecd49dd71a..6d0cf489c9 100644 --- a/cave/com.raytheon.viz.radar/src/com/raytheon/viz/radar/rsc/AbstractRadarResource.java +++ b/cave/com.raytheon.viz.radar/src/com/raytheon/viz/radar/rsc/AbstractRadarResource.java @@ -302,16 +302,8 @@ public class AbstractRadarResource extends if (resourceData.mode.equals("CZ-Pg")) { return null; } - - // Grab current time - DataTime displayedDate = descriptor.getTimeForResource(this); - - if (displayedDate == null) { - displayedDate = this.displayedDate; - } - try { - dataMap = interrogate(displayedDate, latLon.asLatLon()); + dataMap = interrogate(latLon.asLatLon()); } catch (Exception e) { throw new VizException("Error converting coordinate for hover", e); } @@ -341,23 +333,20 @@ public class AbstractRadarResource extends boolean visible = descriptor.getRenderableDisplay().getContainer() .getActiveDisplayPane().getDescriptor() == descriptor; if (visible && primary) { - return "=" - + inspect(displayedDate, primaryInspectLabels, dataMap); + return "=" + inspect(primaryInspectLabels, dataMap); } else { - return " " - + inspect(displayedDate, offscreenInspectLabels, - dataMap); + return " " + inspect(offscreenInspectLabels, dataMap); } } else if (primary) { - return inspect(displayedDate, dataMap); + return inspect(dataMap); } else { // The secondary returns slightly less data - return inspect(displayedDate, secondaryInspectLabels, dataMap); + return inspect(secondaryInspectLabels, dataMap); } } - public String inspect(DataTime dataTime, Map dataMap) { - return inspect(dataTime, defaultInspectLabels, dataMap); + public String inspect(Map dataMap) { + return inspect(defaultInspectLabels, dataMap); } /** @@ -366,7 +355,7 @@ public class AbstractRadarResource extends * @param dataMap * @return */ - public String inspect(DataTime dataTime, List labels, + public String inspect(List labels, Map dataMap) { if (dataMap == null) { return "NO DATA"; @@ -427,13 +416,8 @@ public class AbstractRadarResource extends public Map interrogate(ReferencedCoordinate coord) throws VizException { try { - DataTime displayedDate = descriptor.getTimeForResource(this); - - if (displayedDate == null) { - displayedDate = this.displayedDate; - } - return new HashMap(interrogate(displayedDate, - coord.asLatLon())); + return new HashMap(this.interrogate(coord + .asLatLon())); } catch (TransformException e) { throw new VizException( "Transformation error creating lat/lon from referenced coordinate", @@ -444,7 +428,7 @@ public class AbstractRadarResource extends } } - public Map interrogate(DataTime dataTime, Coordinate latLon) { + public Map interrogate(Coordinate latLon) { if (interrogator == null) { return new HashMap(); } @@ -454,7 +438,13 @@ public class AbstractRadarResource extends .getColorMapParameters(); } - VizRadarRecord radarRecord = getRadarRecord(dataTime); + DataTime displayedDate = descriptor.getTimeForResource(this); + + if (displayedDate == null) { + displayedDate = this.displayedDate; + } + + VizRadarRecord radarRecord = getRadarRecord(displayedDate); if (radarRecord != null && radarRecord.getStoredDataAsync() != null) { return interrogator.sample(radarRecord, latLon, params); } diff --git a/cave/com.raytheon.viz.radar/src/com/raytheon/viz/radar/rsc/RadarImageResource.java b/cave/com.raytheon.viz.radar/src/com/raytheon/viz/radar/rsc/RadarImageResource.java index 7b5ad69540..da10c1e912 100644 --- a/cave/com.raytheon.viz.radar/src/com/raytheon/viz/radar/rsc/RadarImageResource.java +++ b/cave/com.raytheon.viz.radar/src/com/raytheon/viz/radar/rsc/RadarImageResource.java @@ -31,9 +31,13 @@ import javax.measure.converter.MultiplyConverter; import javax.measure.converter.UnitConverter; import javax.measure.unit.Unit; +import org.geotools.coverage.grid.GridGeometry2D; +import org.geotools.geometry.jts.ReferencedEnvelope; import org.geotools.referencing.CRS; +import org.geotools.referencing.crs.DefaultGeographicCRS; import org.opengis.referencing.FactoryException; import org.opengis.referencing.crs.CoordinateReferenceSystem; +import org.opengis.referencing.datum.PixelInCell; import org.opengis.referencing.operation.MathTransform; import org.opengis.referencing.operation.TransformException; @@ -53,7 +57,6 @@ import com.raytheon.uf.viz.core.IMeshCallback; import com.raytheon.uf.viz.core.PixelCoverage; import com.raytheon.uf.viz.core.VizApp; import com.raytheon.uf.viz.core.data.IColorMapDataRetrievalCallback; -import com.raytheon.uf.viz.core.drawables.ColorMapLoader; import com.raytheon.uf.viz.core.drawables.ColorMapParameters; import com.raytheon.uf.viz.core.drawables.IDescriptor; import com.raytheon.uf.viz.core.drawables.IImage; @@ -67,6 +70,7 @@ import com.raytheon.uf.viz.core.rsc.capabilities.ColorableCapability; import com.raytheon.uf.viz.core.rsc.capabilities.ImagingCapability; import com.raytheon.uf.viz.core.rsc.capabilities.OutlineCapability; import com.raytheon.uf.viz.core.rsc.hdf5.ImageTile; +import com.raytheon.uf.viz.core.rsc.hdf5.MeshCalculatorJob; import com.raytheon.uf.viz.core.style.DataMappingPreferences; import com.raytheon.uf.viz.core.style.DataMappingPreferences.DataMappingEntry; import com.raytheon.viz.awipstools.capabilities.RangeRingsOverlayCapability; @@ -184,16 +188,64 @@ public class RadarImageResource extends ColorMapParameters params = getColorMapParameters(target, populatedRecord); - PixelCoverage coverage = buildCoverage(target, populatedRecord); - if (coverage.getMesh() == null) { - coverage.setMesh(buildMesh(target, populatedRecord)); + ImageTile tile = new ImageTile(); + RadarRecord record = populatedRecord; + try { + // Attempt to create envelope, adapted from AbstractTileSet + double maxExtent = RadarUtil.calculateExtent(record); + GridGeometry2D geom = RadarUtil.constructGridGeometry( + record.getCRS(), maxExtent, + Math.max(record.getNumBins(), record.getNumRadials())); + + MathTransform mt = geom.getGridToCRS(PixelInCell.CELL_CORNER); + + double[] ul = new double[3]; + double[] lr = new double[3]; + double[] in = new double[2]; + in[0] = 0; + in[1] = 0; + mt.transform(in, 0, ul, 0, 1); + in[0] = record.getNumRadials(); + in[1] = record.getNumBins(); + mt.transform(in, 0, lr, 0, 1); + + tile.envelope = new ReferencedEnvelope(ul[0], lr[0], ul[1], lr[1], + record.getCRS()); + } catch (Exception e) { + statusHandler.handle(Priority.PROBLEM, "Error constructing extent", + e); } - IImage image = createImage(target, params, populatedRecord, - new Rectangle(0, 0, populatedRecord.getNumBins(), - populatedRecord.getNumRadials())); + tile.rect = new Rectangle(0, 0, populatedRecord.getNumBins(), + populatedRecord.getNumRadials()); + + if (tile.coverage == null) { + tile.coverage = buildCoverage(target, tile, populatedRecord); + } + + if (tile.coverage.getMesh() == null) { + IMesh mesh = buildMesh(target, populatedRecord); + + if (mesh != null) { + try { + MeshCalculatorJob.getInstance().requestLoad( + this, + mesh, + tile, + CRS.findMathTransform(populatedRecord.getCRS(), + DefaultGeographicCRS.WGS84)); + } catch (FactoryException e) { + statusHandler + .handle(Priority.PROBLEM, + "Error finding math transform to lat/lon for radar record", + e); + } + } + } + + IImage image = createImage(target, params, record, tile.rect); DrawableImage dImage = images.put(populatedRecord.getDataTime(), - new DrawableImage(image, coverage)); + new DrawableImage(image, tile.coverage)); if (dImage != null) { disposeImage(dImage); } @@ -270,7 +322,7 @@ public class RadarImageResource extends colorMapName = "Radar/OSF/16 Level Reflectivity"; } - params.setColorMap(ColorMapLoader.loadColorMap(colorMapName)); + params.setColorMap(target.buildColorMap(colorMapName)); } @@ -356,53 +408,38 @@ public class RadarImageResource extends this.actualLevel = String.format("%1.1f", record.getTrueElevationAngle()); - DrawableImage image = getImage(target, displayedDate); - if (image != null) { - ImagingCapability cap = getCapability(ImagingCapability.class); - image.getImage().setBrightness(cap.getBrightness()); - image.getImage().setContrast(cap.getContrast()); - image.getImage().setInterpolated(cap.isInterpolationState()); - target.drawRasters(paintProps, image); - } - - if (image == null || image.getCoverage() == null - || image.getCoverage().getMesh() == null) { - issueRefresh(); - } - } - } - - /** - * Get the radar image for the given time - * - * @param target - * @param dataTime - * @return - * @throws VizException - */ - public DrawableImage getImage(IGraphicsTarget target, DataTime dataTime) - throws VizException { - DrawableImage image = images.get(dataTime); - if (image == null || image.getCoverage() == null) { - VizRadarRecord record = getRadarRecord(dataTime); - if (record != null) { - if (record.getStoredDataAsync() == null) { - issueRefresh(); - } else { - try { - createTile(target, record); - image = images.get(dataTime); - } catch (Exception e) { - String msg = e.getMessage(); - if (msg == null) { - msg = "Error rendering radar"; - } - throw new VizException(msg, e); + try { + DrawableImage image = images.get(displayedDate); + if (image == null || image.getCoverage() == null) { + if (record.getStoredDataAsync() == null) { + issueRefresh(); + return; } + createTile(target, record); + image = images.get(displayedDate); } + + if (image != null) { + ImagingCapability cap = getCapability(ImagingCapability.class); + image.getImage().setBrightness(cap.getBrightness()); + image.getImage().setContrast(cap.getContrast()); + image.getImage() + .setInterpolated(cap.isInterpolationState()); + target.drawRasters(paintProps, image); + } + + if (image == null || image.getCoverage() == null + || image.getCoverage().getMesh() == null) { + issueRefresh(); + } + } catch (Exception e) { + String msg = e.getMessage(); + if (msg == null) { + msg = "Error rendering radar"; + } + throw new VizException(msg, e); } } - return image; } /** @@ -562,7 +599,7 @@ public class RadarImageResource extends return null; } - public PixelCoverage buildCoverage(IGraphicsTarget target, + public PixelCoverage buildCoverage(IGraphicsTarget target, ImageTile tile, VizRadarRecord timeRecord) throws VizException { return new PixelCoverage(new Coordinate(0, 0), 0, 0); } diff --git a/cave/com.raytheon.viz.radar/src/com/raytheon/viz/radar/rsc/graphic/RadarGraphicFunctions.java b/cave/com.raytheon.viz.radar/src/com/raytheon/viz/radar/rsc/graphic/RadarGraphicFunctions.java index 6895ed1cb2..8a8cbc4148 100644 --- a/cave/com.raytheon.viz.radar/src/com/raytheon/viz/radar/rsc/graphic/RadarGraphicFunctions.java +++ b/cave/com.raytheon.viz.radar/src/com/raytheon/viz/radar/rsc/graphic/RadarGraphicFunctions.java @@ -846,7 +846,8 @@ public class RadarGraphicFunctions { } private static Document loadSVG(String plotModelFile) throws VizException { - Document document = docMap.get(plotModelFile); + Document document = null; + // document = docMap.get(plotModelFile); if (document == null) { String parser = XMLResourceDescriptor.getXMLParserClassName(); diff --git a/cave/com.raytheon.viz.radar/src/com/raytheon/viz/radar/rsc/image/IRadialMeshExtension.java b/cave/com.raytheon.viz.radar/src/com/raytheon/viz/radar/rsc/image/IRadialMeshExtension.java index dec8810bb7..c60d493c0f 100644 --- a/cave/com.raytheon.viz.radar/src/com/raytheon/viz/radar/rsc/image/IRadialMeshExtension.java +++ b/cave/com.raytheon.viz.radar/src/com/raytheon/viz/radar/rsc/image/IRadialMeshExtension.java @@ -21,7 +21,6 @@ package com.raytheon.viz.radar.rsc.image; import com.raytheon.uf.common.dataplugin.radar.RadarRecord; import com.raytheon.uf.viz.core.IMesh; -import com.raytheon.uf.viz.core.drawables.ext.GraphicsExtension.IGraphicsExtensionInterface; import com.raytheon.uf.viz.core.exception.VizException; import com.raytheon.uf.viz.core.map.IMapDescriptor; @@ -42,7 +41,7 @@ import com.raytheon.uf.viz.core.map.IMapDescriptor; * @version 1.0 */ -public interface IRadialMeshExtension extends IGraphicsExtensionInterface { +public interface IRadialMeshExtension { /** * Construct a mesh to be used for the radar record on the descriptor diff --git a/cave/com.raytheon.viz.radar/src/com/raytheon/viz/radar/rsc/image/RadarRadialResource.java b/cave/com.raytheon.viz.radar/src/com/raytheon/viz/radar/rsc/image/RadarRadialResource.java index 2e2707fcb8..45287dd648 100644 --- a/cave/com.raytheon.viz.radar/src/com/raytheon/viz/radar/rsc/image/RadarRadialResource.java +++ b/cave/com.raytheon.viz.radar/src/com/raytheon/viz/radar/rsc/image/RadarRadialResource.java @@ -29,7 +29,6 @@ import org.opengis.referencing.crs.CoordinateReferenceSystem; import com.raytheon.uf.common.dataplugin.IDecoderGettable.Amount; import com.raytheon.uf.common.dataplugin.radar.RadarRecord; -import com.raytheon.uf.common.time.DataTime; import com.raytheon.uf.viz.core.DrawableImage; import com.raytheon.uf.viz.core.IGraphicsTarget; import com.raytheon.uf.viz.core.IMesh; @@ -134,8 +133,8 @@ public class RadarRadialResource extends RadarImageResource { } @Override - public String inspect(DataTime dataTime, Map dataMap) { - StringBuilder sb = new StringBuilder(super.inspect(dataTime, dataMap)); + public String inspect(Map dataMap) { + StringBuilder sb = new StringBuilder(super.inspect(dataMap)); if (dataMap != null && dataMap.containsKey(EAV_VALUE)) { sb.append(" ").append(dataMap.get(EAV_VALUE)); @@ -144,8 +143,8 @@ public class RadarRadialResource extends RadarImageResource { } @Override - public Map interrogate(DataTime dataTime, Coordinate latLon) { - Map dataMap = super.interrogate(dataTime, latLon); + public Map interrogate(Coordinate latLon) { + Map dataMap = super.interrogate(latLon); // add EAV values to dataMap, if necessary if (hasCapability(EAVCapability.class)) { diff --git a/cave/com.raytheon.viz.radar/src/com/raytheon/viz/radar/rsc/image/RadarRasterResource.java b/cave/com.raytheon.viz.radar/src/com/raytheon/viz/radar/rsc/image/RadarRasterResource.java index d02f66b57b..4e62cd31f0 100644 --- a/cave/com.raytheon.viz.radar/src/com/raytheon/viz/radar/rsc/image/RadarRasterResource.java +++ b/cave/com.raytheon.viz.radar/src/com/raytheon/viz/radar/rsc/image/RadarRasterResource.java @@ -21,13 +21,16 @@ package com.raytheon.viz.radar.rsc.image; import java.awt.Rectangle; -import org.geotools.coverage.grid.GridGeometry2D; +import org.geotools.referencing.CRS; +import org.geotools.referencing.crs.DefaultGeographicCRS; +import org.opengis.referencing.FactoryException; import org.opengis.referencing.crs.CoordinateReferenceSystem; import com.raytheon.uf.common.dataplugin.radar.RadarRecord; -import com.raytheon.uf.common.dataplugin.radar.util.RadarUtil; +import com.raytheon.uf.common.status.UFStatus.Priority; import com.raytheon.uf.viz.core.DrawableImage; import com.raytheon.uf.viz.core.IGraphicsTarget; +import com.raytheon.uf.viz.core.IMesh; import com.raytheon.uf.viz.core.PixelCoverage; import com.raytheon.uf.viz.core.drawables.ColorMapParameters; import com.raytheon.uf.viz.core.drawables.IImage; @@ -36,6 +39,7 @@ import com.raytheon.uf.viz.core.exception.VizException; import com.raytheon.uf.viz.core.map.IMapMeshExtension; import com.raytheon.uf.viz.core.map.MapDescriptor; import com.raytheon.uf.viz.core.rsc.LoadProperties; +import com.raytheon.uf.viz.core.rsc.hdf5.ImageTile; import com.raytheon.viz.radar.VizRadarRecord; import com.raytheon.viz.radar.interrogators.IRadarInterrogator; import com.raytheon.viz.radar.rsc.RadarImageResource; @@ -81,19 +85,22 @@ public class RadarRasterResource extends RadarImageResource { } @Override - public PixelCoverage buildCoverage(IGraphicsTarget target, + public PixelCoverage buildCoverage(IGraphicsTarget target, ImageTile tile, VizRadarRecord timeRecord) throws VizException { if (sharedCoverage == null) { - double maxExtent = RadarUtil.calculateExtent(timeRecord); - GridGeometry2D geom = RadarUtil.constructGridGeometry( - timeRecord.getCRS(), - maxExtent, - Math.max(timeRecord.getNumBins(), - timeRecord.getNumRadials())); + sharedCoverage = super.buildCoverage(target, tile, timeRecord); - sharedCoverage = super.buildCoverage(target, timeRecord); - sharedCoverage.setMesh(target.getExtension(IMapMeshExtension.class) - .constructMesh(geom, descriptor.getGridGeometry())); + IMesh mesh = target.getExtension(IMapMeshExtension.class) + .constructMesh(descriptor); + try { + mesh.calculateMesh(sharedCoverage, tile, CRS.findMathTransform( + timeRecord.getCRS(), DefaultGeographicCRS.WGS84)); + } catch (FactoryException e) { + statusHandler + .handle(Priority.PROBLEM, + "Error finding math transform to lat/lon for radar record", + e); + } } return sharedCoverage; } @@ -108,9 +115,17 @@ public class RadarRasterResource extends RadarImageResource { @Override public void project(CoordinateReferenceSystem crs) throws VizException { super.project(crs); - if (sharedCoverage != null && sharedCoverage.getMesh() != null) { - sharedCoverage.getMesh().reproject(descriptor.getGridGeometry()); + if (sharedCoverage != null) { + sharedCoverage.dispose(); + sharedCoverage = null; } + // TODO dispose just the coverage, not the image. + for (DrawableImage image : images.values()) { + if (image != null) { + image.dispose(); + } + } + images.clear(); } @Override diff --git a/cave/com.raytheon.viz.radar/src/com/raytheon/viz/radar/rsc/mosaic/MergeRasterRadarMosaicRenderer.java b/cave/com.raytheon.viz.radar/src/com/raytheon/viz/radar/rsc/mosaic/MergeRasterRadarMosaicRenderer.java index 32407ba004..dac7b28510 100644 --- a/cave/com.raytheon.viz.radar/src/com/raytheon/viz/radar/rsc/mosaic/MergeRasterRadarMosaicRenderer.java +++ b/cave/com.raytheon.viz.radar/src/com/raytheon/viz/radar/rsc/mosaic/MergeRasterRadarMosaicRenderer.java @@ -41,7 +41,7 @@ import com.raytheon.uf.viz.core.rsc.AbstractVizResource; import com.raytheon.viz.core.rsc.BestResResource; import com.raytheon.viz.radar.rsc.MosaicPaintProperties; import com.raytheon.viz.radar.rsc.RadarImageResource; -import com.raytheon.viz.radar.rsc.mosaic.RadarMosaicRendererFactory.IRadarMosaicRenderer; +import com.raytheon.viz.radar.rsc.mosaic.ext.IRadarMosaicRendererFactoryExtension.IRadarMosaicRenderer; import com.raytheon.viz.radar.util.DataUtilities; /** diff --git a/cave/com.raytheon.viz.radar/src/com/raytheon/viz/radar/rsc/mosaic/RadarMosaicResource.java b/cave/com.raytheon.viz.radar/src/com/raytheon/viz/radar/rsc/mosaic/RadarMosaicResource.java index 021cfcc55a..79fbfd29d0 100644 --- a/cave/com.raytheon.viz.radar/src/com/raytheon/viz/radar/rsc/mosaic/RadarMosaicResource.java +++ b/cave/com.raytheon.viz.radar/src/com/raytheon/viz/radar/rsc/mosaic/RadarMosaicResource.java @@ -60,7 +60,8 @@ import com.raytheon.viz.radar.rsc.AbstractRadarResource; import com.raytheon.viz.radar.rsc.MosaicPaintProperties; import com.raytheon.viz.radar.rsc.RadarImageResource; import com.raytheon.viz.radar.rsc.RadarTextResource.IRadarTextGeneratingResource; -import com.raytheon.viz.radar.rsc.mosaic.RadarMosaicRendererFactory.IRadarMosaicRenderer; +import com.raytheon.viz.radar.rsc.mosaic.ext.IRadarMosaicRendererFactoryExtension; +import com.raytheon.viz.radar.rsc.mosaic.ext.IRadarMosaicRendererFactoryExtension.IRadarMosaicRenderer; import com.vividsolutions.jts.geom.Coordinate; /** @@ -152,8 +153,10 @@ public class RadarMosaicResource extends */ @Override protected void initInternal(IGraphicsTarget target) throws VizException { - mosaicRenderer = RadarMosaicRendererFactory - .createNewRenderer(resourceData.getMosaicType()); + + mosaicRenderer = target.getExtension( + IRadarMosaicRendererFactoryExtension.class).createNewRenderer( + resourceData.getMosaicType()); // We want to init the most severe resource first so the colormap // matches. @@ -226,11 +229,11 @@ public class RadarMosaicResource extends if (recordsToMosaic.isEmpty() == false) { DataTime curTime = getTimeForResource(this); synchronized (this) { - boolean forceIt = force || !curTime.equals(lastTime); + force = force || !curTime.equals(lastTime); + mosaicRenderer.mosaic(target, new MosaicPaintProperties( + paintProps, force), this); force = false; lastTime = curTime; - mosaicRenderer.mosaic(target, new MosaicPaintProperties( - paintProps, forceIt), this); } } @@ -423,8 +426,6 @@ public class RadarMosaicResource extends } catch (Exception e) { // ignore } - - Map, DataTime> rscTimeMap = new HashMap, DataTime>(); Map, Map> rscInspectMap = new HashMap, Map>(); AbstractRadarResource highestRsc = null; String inspectString = null; @@ -441,7 +442,6 @@ public class RadarMosaicResource extends if (rsc instanceof AbstractRadarResource) { @SuppressWarnings("unchecked") AbstractRadarResource rr = (AbstractRadarResource) rsc; - rscTimeMap.put(rr, time); try { // Everything in this try block is to only sample // records within range @@ -478,10 +478,8 @@ public class RadarMosaicResource extends if (resources.isEmpty() && highestRsc != null) { resources.add(highestRsc); } - for (AbstractRadarResource rr : resources) { - Map vals = rr.interrogate(rscTimeMap.get(rr), - coord); + Map vals = rr.interrogate(coord); if (vals != null) { rscInspectMap.put(rr, vals); } @@ -502,8 +500,7 @@ public class RadarMosaicResource extends } if (highestRsc != null) { - inspectString = highestRsc.inspect(rscTimeMap.get(highestRsc), - rscInspectMap.get(highestRsc)); + inspectString = highestRsc.inspect(rscInspectMap.get(highestRsc)); } return inspectString == null ? "NO DATA" : inspectString; } diff --git a/cave/com.raytheon.viz.radar/src/com/raytheon/viz/radar/rsc/mosaic/RadarMosaicResourceData.java b/cave/com.raytheon.viz.radar/src/com/raytheon/viz/radar/rsc/mosaic/RadarMosaicResourceData.java index 1cd2503287..85ae6a03b5 100644 --- a/cave/com.raytheon.viz.radar/src/com/raytheon/viz/radar/rsc/mosaic/RadarMosaicResourceData.java +++ b/cave/com.raytheon.viz.radar/src/com/raytheon/viz/radar/rsc/mosaic/RadarMosaicResourceData.java @@ -48,7 +48,7 @@ import com.raytheon.uf.viz.core.rsc.AbstractResourceData; import com.raytheon.uf.viz.core.rsc.AbstractVizResource; import com.raytheon.uf.viz.core.rsc.LoadProperties; import com.raytheon.uf.viz.core.rsc.ResourceList; -import com.raytheon.viz.radar.rsc.mosaic.RadarMosaicRendererFactory.MosaicType; +import com.raytheon.viz.radar.rsc.mosaic.ext.IRadarMosaicRendererFactoryExtension.MosaicType; /** * Provides the metadata and constructor for Radar diff --git a/cave/com.raytheon.viz.radar/src/com/raytheon/viz/radar/rsc/mosaic/ext/IRadarMosaicImageExtension.java b/cave/com.raytheon.viz.radar/src/com/raytheon/viz/radar/rsc/mosaic/ext/IRadarMosaicImageExtension.java deleted file mode 100644 index fe0ef14d81..0000000000 --- a/cave/com.raytheon.viz.radar/src/com/raytheon/viz/radar/rsc/mosaic/ext/IRadarMosaicImageExtension.java +++ /dev/null @@ -1,56 +0,0 @@ -/** - * This software was developed and / or modified by Raytheon Company, - * pursuant to Contract DG133W-05-CQ-1067 with the US Government. - * - * U.S. EXPORT CONTROLLED TECHNICAL DATA - * This software product contains export-restricted data whose - * export/transfer/disclosure is restricted by U.S. law. Dissemination - * to non-U.S. persons whether in the United States or abroad requires - * an export license or other authorization. - * - * Contractor Name: Raytheon Company - * Contractor Address: 6825 Pine Street, Suite 340 - * Mail Stop B8 - * Omaha, NE 68106 - * 402.291.0100 - * - * See the AWIPS II Master Rights File ("Master Rights File.pdf") for - * further licensing information. - **/ -package com.raytheon.viz.radar.rsc.mosaic.ext; - -import com.raytheon.uf.viz.core.DrawableImage; -import com.raytheon.uf.viz.core.drawables.ColorMapParameters; -import com.raytheon.uf.viz.core.drawables.IImage; -import com.raytheon.uf.viz.core.drawables.ext.IImagingExtension; -import com.raytheon.uf.viz.core.exception.VizException; - -/** - * Radar mosaic image extension, creates IMosaicImages - * - *
- * 
- * SOFTWARE HISTORY
- * 
- * Date         Ticket#    Engineer    Description
- * ------------ ---------- ----------- --------------------------
- * Dec 16, 2011            mschenke     Initial creation
- * 
- * 
- * - * @author mschenke - * @version 1.0 - */ - -public interface IRadarMosaicImageExtension extends IImagingExtension { - - public static interface IMosaicImage extends IImage { - - public void setImagesToMosaic(DrawableImage... images); - - } - - public IMosaicImage initializeRaster(int[] imageBounds, - ColorMapParameters params) throws VizException; - -} diff --git a/cave/com.raytheon.viz.radar/src/com/raytheon/viz/radar/rsc/mosaic/RadarMosaicRendererFactory.java b/cave/com.raytheon.viz.radar/src/com/raytheon/viz/radar/rsc/mosaic/ext/IRadarMosaicRendererFactoryExtension.java similarity index 63% rename from cave/com.raytheon.viz.radar/src/com/raytheon/viz/radar/rsc/mosaic/RadarMosaicRendererFactory.java rename to cave/com.raytheon.viz.radar/src/com/raytheon/viz/radar/rsc/mosaic/ext/IRadarMosaicRendererFactoryExtension.java index 3feac88fd0..03a5043781 100644 --- a/cave/com.raytheon.viz.radar/src/com/raytheon/viz/radar/rsc/mosaic/RadarMosaicRendererFactory.java +++ b/cave/com.raytheon.viz.radar/src/com/raytheon/viz/radar/rsc/mosaic/ext/IRadarMosaicRendererFactoryExtension.java @@ -17,14 +17,16 @@ * See the AWIPS II Master Rights File ("Master Rights File.pdf") for * further licensing information. **/ -package com.raytheon.viz.radar.rsc.mosaic; +package com.raytheon.viz.radar.rsc.mosaic.ext; import com.raytheon.uf.viz.core.IGraphicsTarget; import com.raytheon.uf.viz.core.drawables.PaintProperties; import com.raytheon.uf.viz.core.exception.VizException; +import com.raytheon.viz.radar.rsc.mosaic.RadarMosaicResource; /** - * Radar mosaic renderer factory, creates mosaic renderers + * Mosaic Renderer factory extension. Implementers of this extension will + * construct IRadarMosaicRenderers * *
  * 
@@ -40,7 +42,7 @@ import com.raytheon.uf.viz.core.exception.VizException;
  * @version 1.0
  */
 
-public class RadarMosaicRendererFactory {
+public interface IRadarMosaicRendererFactoryExtension {
 
     public static enum MosaicType {
         MergeRaster, MaxValue;
@@ -48,23 +50,31 @@ public class RadarMosaicRendererFactory {
 
     public static interface IRadarMosaicRenderer {
 
+        /**
+         * similar to the paint(...) call on IRenderable, this function tells
+         * the mosaic renderer to render the mosaic given the target,
+         * paintProperties, and mosaic resource
+         * 
+         * @param target
+         * @param paintProps
+         * @param mosaicToRender
+         * @throws VizException
+         */
         public void mosaic(IGraphicsTarget target, PaintProperties paintProps,
                 RadarMosaicResource mosaicToRender) throws VizException;
 
+        /**
+         * Dispose of any resources being used
+         */
         public void dispose();
-
     }
 
-    public static IRadarMosaicRenderer createNewRenderer(MosaicType mosaicType)
-            throws VizException {
-        switch (mosaicType) {
-        case MergeRaster:
-            return new MergeRasterRadarMosaicRenderer();
-        case MaxValue:
-            return new RadarMosaicRenderer();
-        }
-        throw new VizException("Could not find mosaic renderer for type = "
-                + mosaicType);
-    }
+    /**
+     * Create a new radar mosaic renderer
+     * 
+     * @return
+     */
+    public IRadarMosaicRenderer createNewRenderer(MosaicType mosaicType)
+            throws VizException;
 
 }
diff --git a/cave/com.raytheon.viz.radar/src/com/raytheon/viz/radar/ui/xy/RadarXYResource.java b/cave/com.raytheon.viz.radar/src/com/raytheon/viz/radar/ui/xy/RadarXYResource.java
index c41016fd04..5d8824d554 100644
--- a/cave/com.raytheon.viz.radar/src/com/raytheon/viz/radar/ui/xy/RadarXYResource.java
+++ b/cave/com.raytheon.viz.radar/src/com/raytheon/viz/radar/ui/xy/RadarXYResource.java
@@ -59,6 +59,7 @@ import com.raytheon.uf.viz.core.rsc.capabilities.ColorMapCapability;
 import com.raytheon.uf.viz.core.rsc.capabilities.ImagingCapability;
 import com.raytheon.uf.viz.core.rsc.capabilities.MagnificationCapability;
 import com.raytheon.uf.viz.core.rsc.capabilities.TimeMatchBasisCapability;
+import com.raytheon.uf.viz.core.rsc.hdf5.ImageTile;
 import com.raytheon.viz.awipstools.capabilities.RangeRingsOverlayCapability;
 import com.raytheon.viz.core.contours.util.VectorGraphicsRenderable;
 import com.raytheon.viz.radar.RadarHelper;
@@ -183,7 +184,7 @@ public class RadarXYResource extends RadarImageResource {
      * com.raytheon.viz.radar.RadarTimeRecord.RadarTiltRecord)
      */
     @Override
-    public PixelCoverage buildCoverage(IGraphicsTarget target,
+    public PixelCoverage buildCoverage(IGraphicsTarget target, ImageTile tile,
             VizRadarRecord radarRecord) throws VizException {
         double width = radarRecord.getNumBins();
         double height = radarRecord.getNumRadials();
diff --git a/cave/com.raytheon.viz.radar/src/com/raytheon/viz/radar/ui/xy/RadarXsectXYResource.java b/cave/com.raytheon.viz.radar/src/com/raytheon/viz/radar/ui/xy/RadarXsectXYResource.java
index b8f096de02..7e4d677b84 100644
--- a/cave/com.raytheon.viz.radar/src/com/raytheon/viz/radar/ui/xy/RadarXsectXYResource.java
+++ b/cave/com.raytheon.viz.radar/src/com/raytheon/viz/radar/ui/xy/RadarXsectXYResource.java
@@ -40,6 +40,7 @@ import com.raytheon.uf.viz.core.exception.VizException;
 import com.raytheon.uf.viz.core.map.MapDescriptor;
 import com.raytheon.uf.viz.core.rsc.LoadProperties;
 import com.raytheon.uf.viz.core.rsc.capabilities.ColorableCapability;
+import com.raytheon.uf.viz.core.rsc.hdf5.ImageTile;
 import com.raytheon.uf.viz.xy.map.rsc.IInsetMapResource;
 import com.raytheon.viz.radar.VizRadarRecord;
 import com.raytheon.viz.radar.interrogators.IRadarInterrogator;
@@ -180,7 +181,7 @@ public class RadarXsectXYResource extends RadarXYResource implements
      * com.raytheon.viz.radar.RadarTimeRecord.RadarTiltRecord)
      */
     @Override
-    public PixelCoverage buildCoverage(IGraphicsTarget target,
+    public PixelCoverage buildCoverage(IGraphicsTarget target, ImageTile tile,
             VizRadarRecord rec) throws VizException {
         int iStart = rec.getIstart();
         int jStart = rec.getJstart();
diff --git a/cave/com.raytheon.viz.radar/src/com/raytheon/viz/radar/util/RadarPlotInfoRetriever.java b/cave/com.raytheon.viz.radar/src/com/raytheon/viz/radar/util/RadarPlotInfoRetriever.java
index 388d54cf8c..69760501bb 100644
--- a/cave/com.raytheon.viz.radar/src/com/raytheon/viz/radar/util/RadarPlotInfoRetriever.java
+++ b/cave/com.raytheon.viz.radar/src/com/raytheon/viz/radar/util/RadarPlotInfoRetriever.java
@@ -1,19 +1,19 @@
 /**
  * This software was developed and / or modified by Raytheon Company,
- * pursuant to Contract DG133W-05-CQ-1067 with the US Government.
- * 
- * U.S. EXPORT CONTROLLED TECHNICAL DATA
+ * pursuant to Contract DG133W-05-CQ-1067 with the US Government.
+ * 
+ * U.S. EXPORT CONTROLLED TECHNICAL DATA
  * This software product contains export-restricted data whose
  * export/transfer/disclosure is restricted by U.S. law. Dissemination
  * to non-U.S. persons whether in the United States or abroad requires
  * an export license or other authorization.
  * 
- * Contractor Name:        Raytheon Company
- * Contractor Address:     6825 Pine Street, Suite 340
- *                         Mail Stop B8
- *                         Omaha, NE 68106
- *                         402.291.0100
- * 
+ * Contractor Name:        Raytheon Company
+ * Contractor Address:     6825 Pine Street, Suite 340
+ *                         Mail Stop B8
+ *                         Omaha, NE 68106
+ *                         402.291.0100
+ * 
  * See the AWIPS II Master Rights File ("Master Rights File.pdf") for
  * further licensing information.
  **/
diff --git a/cave/com.raytheon.viz.redbook/com.raytheon.viz.redbook.ecl b/cave/com.raytheon.viz.redbook/com.raytheon.viz.redbook.ecl
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/cave/com.raytheon.viz.satellite.feature/com.raytheon.viz.satellite.feature.ecl b/cave/com.raytheon.viz.satellite.feature/com.raytheon.viz.satellite.feature.ecl
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/cave/com.raytheon.viz.satellite/com.raytheon.viz.satellite.ecl b/cave/com.raytheon.viz.satellite/com.raytheon.viz.satellite.ecl
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/cave/com.raytheon.viz.satellite/src/com/raytheon/viz/satellite/rsc/SatBlendedResource.java b/cave/com.raytheon.viz.satellite/src/com/raytheon/viz/satellite/rsc/SatBlendedResource.java
index 0363933567..2579678a59 100644
--- a/cave/com.raytheon.viz.satellite/src/com/raytheon/viz/satellite/rsc/SatBlendedResource.java
+++ b/cave/com.raytheon.viz.satellite/src/com/raytheon/viz/satellite/rsc/SatBlendedResource.java
@@ -149,10 +149,10 @@ public class SatBlendedResource extends
     @Override
     protected void paintInternal(IGraphicsTarget target,
             PaintProperties paintProps) throws VizException {
-        if (offscreenImage == null
-                || Arrays.equals(imageBounds,
-                        new int[] { paintProps.getCanvasBounds().width,
-                                paintProps.getCanvasBounds().height }) == false) {
+        if (Arrays.equals(
+                imageBounds,
+                new int[] { paintProps.getCanvasBounds().width,
+                        paintProps.getCanvasBounds().height }) == false) {
             disposeImage();
             initImage(target, paintProps);
         }
diff --git a/cave/com.raytheon.viz.satellite/src/com/raytheon/viz/satellite/rsc/SatFileBasedTileSet.java b/cave/com.raytheon.viz.satellite/src/com/raytheon/viz/satellite/rsc/SatFileBasedTileSet.java
index 49c08353b0..61925b6666 100644
--- a/cave/com.raytheon.viz.satellite/src/com/raytheon/viz/satellite/rsc/SatFileBasedTileSet.java
+++ b/cave/com.raytheon.viz.satellite/src/com/raytheon/viz/satellite/rsc/SatFileBasedTileSet.java
@@ -128,7 +128,7 @@ public class SatFileBasedTileSet extends FileBasedTileSet {
             int j = (Integer) key.getKey(2);
             ImageTile tile = this.tileSet.getTile(level, i, j);
             if (tile != null) {
-                Rectangle tileRect = tile.getRectangle();
+                Rectangle tileRect = tile.rect;
                 ByteBuffer tileData = ByteBuffer.allocate(tileRect.height
                         * tileRect.width);
 
@@ -147,7 +147,8 @@ public class SatFileBasedTileSet extends FileBasedTileSet {
                 try {
                     IImage raster = target.getExtension(
                             IColormappedImageExtension.class).initializeRaster(
-                            new SatDataRetriever(pdo, level, tileRect,
+                            new SatDataRetriever(pdo, level,
+                                    this.tileSet.getTile(level, i, j).rect,
                                     signed, tileData), cmp);
                     if (raster != null) {
                         addImage(raster, level, i, j);
@@ -179,11 +180,10 @@ public class SatFileBasedTileSet extends FileBasedTileSet {
         if (cmp != null && cmp.getDataUnit() instanceof GenericPixel) {
             signed = true;
         }
-        return target
-                .getExtension(IColormappedImageExtension.class)
+        return target.getExtension(IColormappedImageExtension.class)
                 .initializeRaster(
                         new SatDataRetriever(pdo, level, this.tileSet.getTile(
-                                level, i, j).getRectangle(), signed, null), cmp);
+                                level, i, j).rect, signed, null), cmp);
     }
 
     @Override
@@ -193,7 +193,7 @@ public class SatFileBasedTileSet extends FileBasedTileSet {
         // joining adjacent requests.
         List rectangles = new ArrayList();
         for (Point p : tilesToCreate) {
-            rectangles.add(tileSet.getTile(lvl, p.x, p.y).getRectangle());
+            rectangles.add(tileSet.getTile(lvl, p.x, p.y).rect);
         }
         // Join together any adjacent rectangles
         for (int i = 0; i < rectangles.size(); i++) {
@@ -228,8 +228,7 @@ public class SatFileBasedTileSet extends FileBasedTileSet {
             for (Point p : tilesToCreate) {
                 int i = p.x;
                 int j = p.y;
-                Rectangle tileRectangle = tileSet.getTileSet().get(lvl)[i][j]
-                        .getRectangle();
+                Rectangle tileRectangle = tileSet.getTileSet().get(lvl)[i][j].rect;
                 MultiKey key = new MultiKey(lvl, i, j);
                 if (bigRectangle.equals(tileRectangle)) {
                     // This tile is my big rectangle, schedule single tile
diff --git a/cave/com.raytheon.viz.shapefile/com.raytheon.viz.shapefile.ecl b/cave/com.raytheon.viz.shapefile/com.raytheon.viz.shapefile.ecl
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/cave/com.raytheon.viz.skewT/com.raytheon.viz.skewT.ecl b/cave/com.raytheon.viz.skewT/com.raytheon.viz.skewT.ecl
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/cave/com.raytheon.viz.spi/com.raytheon.viz.spi.ecl b/cave/com.raytheon.viz.spi/com.raytheon.viz.spi.ecl
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/cave/com.raytheon.viz.text.feature/com.raytheon.viz.text.feature.ecl b/cave/com.raytheon.viz.text.feature/com.raytheon.viz.text.feature.ecl
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/cave/com.raytheon.viz.texteditor/com.raytheon.viz.texteditor.ecl b/cave/com.raytheon.viz.texteditor/com.raytheon.viz.texteditor.ecl
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/cave/com.raytheon.viz.texteditor/src/com/raytheon/viz/texteditor/alarmalert/dialogs/CurrentAlarmQueue.java b/cave/com.raytheon.viz.texteditor/src/com/raytheon/viz/texteditor/alarmalert/dialogs/CurrentAlarmQueue.java
index a4d76370fc..476e8854f4 100644
--- a/cave/com.raytheon.viz.texteditor/src/com/raytheon/viz/texteditor/alarmalert/dialogs/CurrentAlarmQueue.java
+++ b/cave/com.raytheon.viz.texteditor/src/com/raytheon/viz/texteditor/alarmalert/dialogs/CurrentAlarmQueue.java
@@ -85,6 +85,11 @@ import com.raytheon.viz.ui.dialogs.ModeListener;
  *                                      removed shellListener().
  * Jun 03, 2011 9681       cjeanbap    Changed list style.
  * Aug 12, 2011 10045      rferrel     Now remembers screen location
+ * Mar 19, 2012 14624      mhuang      Fixed problem of always retrieval of latest 
+ *                                      product when a number of alarm products
+ *                                      with same afos pil but different issue
+ *                                      times showed up in the product list of
+ *                                      current alarm queue window. 
  * 
* * @author mnash @@ -111,7 +116,7 @@ public class CurrentAlarmQueue extends CaveSWTDialog implements private IQueryTransport queryTransport = null; private java.util.List prodList = null; - + private static CurrentAlarmQueue INSTANCE; private static Point closeLocation; @@ -355,9 +360,20 @@ public class CurrentAlarmQueue extends CaveSWTDialog implements private void displayList() { String command = ""; + String alarmHHMM = ""; if (list != null && list.getItemCount() > 0 && list.getSelectionCount() > 0 && list.getSelection() != null) { command = list.getSelection()[0].split(" ")[0]; + + // Get issue time of current alarm product (DR_14624) + String headTime = list.getSelection()[0].split(" ")[5]; + String[] hdrTimeFields = null; + if (headTime != null) { + hdrTimeFields = headTime.split(":"); + } + if (hdrTimeFields.length >= 2) { + alarmHHMM = hdrTimeFields[0] + hdrTimeFields[1]; + } AlarmAlertLists.getInstance().getCurrentAlarms() .remove(list.getSelectionIndex()); list.remove(list.getSelectionIndex()); @@ -371,6 +387,31 @@ public class CurrentAlarmQueue extends CaveSWTDialog implements if (command != "") { prods = produceTextProduct(command); } + + String inprod = null; + if (prods.size() == 1) { + inprod = prods.get(0).getProduct(); + } + + // Check incoming alarm product matching selected product from + // current Alarm Queue Window (DR_14624) + String[] prodLines = inprod.split("\n"); + String[] hdrFields = prodLines[0].split(" "); + String wmoId = hdrFields[0]; + String site = hdrFields[1]; + String hdrTime = hdrFields[2]; + String hhmm = hdrTime.substring(2); + String bbb = ""; + String awipsId = ""; + + // Use awips command to retrieve correct alarm product if it does + // not match (DR_14624) + if (!alarmHHMM.equals(hhmm)) { + String hdrDate = hdrTime.substring(0,2); + hdrTime = hdrDate.concat(alarmHHMM); + prods = getAwipsTextProduct(awipsId, wmoId, site, hdrTime, bbb); + } + if (alarmDisplayDlg == null) { alarmDisplayDlg = new AlarmDisplayWindow(shell, prods); alarmDisplayDlg.open(); @@ -516,6 +557,15 @@ public class CurrentAlarmQueue extends CaveSWTDialog implements return prodList; } + /* + * get text product using wmo command (DR_14624) + */ + public java.util.List getAwipsTextProduct(String awipsId, + String wmoId, String site, String hdrTime, String bbb) { + ICommand cmd = CommandFactory.getAwipsCommand(awipsId, wmoId, site, hdrTime, bbb); + executeCommand(cmd); + return prodList; + } /* * (non-Javadoc) * diff --git a/cave/com.raytheon.viz.texteditor/src/com/raytheon/viz/texteditor/dialogs/TextEditorDialog.java b/cave/com.raytheon.viz.texteditor/src/com/raytheon/viz/texteditor/dialogs/TextEditorDialog.java index 4417e285df..ab18e54020 100755 --- a/cave/com.raytheon.viz.texteditor/src/com/raytheon/viz/texteditor/dialogs/TextEditorDialog.java +++ b/cave/com.raytheon.viz.texteditor/src/com/raytheon/viz/texteditor/dialogs/TextEditorDialog.java @@ -274,6 +274,7 @@ import com.raytheon.viz.ui.dialogs.SWTMessageBox; * for queued WarnGen and fixed autosave. * 11Nov2011 11552 rferrel Product no longer needs to be a RESEND in order to be sent. * 14Nov2011 11203 rferrel Header included when exporting a file while in edit mode. + * 08Mar2012 14553 mhuang Add blank line between product header and body. * * * @author lvenable @@ -4388,7 +4389,7 @@ public class TextEditorDialog extends CaveSWTDialog implements VerifyListener, return; } - String body = textEditor.getText(); + String body = textEditor.getText(); if (result) { removeOptionalFields(); @@ -4405,6 +4406,12 @@ public class TextEditorDialog extends CaveSWTDialog implements VerifyListener, String product = TextDisplayModel.getInstance().getProduct( token); + // DR_14553: Add blank line between product header and body + String[] results = product.split("\n"); + String wmoHead = results[0]; + String awipsId = results[1]; + String header = wmoHead + "\n" + awipsId + "\n\n"; + product = header.concat(body); OUPRequest req = new OUPRequest(); OfficialUserProduct oup = new OfficialUserProduct(); prod = getStdTextProduct(); diff --git a/cave/com.raytheon.viz.textworkstation/com.raytheon.viz.textworkstation.ecl b/cave/com.raytheon.viz.textworkstation/com.raytheon.viz.textworkstation.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/cave/com.raytheon.viz.ui.personalities.awips/com.raytheon.viz.ui.personalities.awips.ecl b/cave/com.raytheon.viz.ui.personalities.awips/com.raytheon.viz.ui.personalities.awips.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/cave/com.raytheon.viz.ui.tools.looping/com.raytheon.viz.ui.tools.looping.ecl b/cave/com.raytheon.viz.ui.tools.looping/com.raytheon.viz.ui.tools.looping.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/cave/com.raytheon.viz.ui.tools.map/com.raytheon.viz.ui.tools.map.ecl b/cave/com.raytheon.viz.ui.tools.map/com.raytheon.viz.ui.tools.map.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/cave/com.raytheon.viz.ui.tools.nav/com.raytheon.viz.ui.tools.nav.ecl b/cave/com.raytheon.viz.ui.tools.nav/com.raytheon.viz.ui.tools.nav.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/cave/com.raytheon.viz.ui/com.raytheon.viz.ui.ecl b/cave/com.raytheon.viz.ui/com.raytheon.viz.ui.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/cave/com.raytheon.viz.ui/src/com/raytheon/viz/ui/VizWorkbenchManager.java b/cave/com.raytheon.viz.ui/src/com/raytheon/viz/ui/VizWorkbenchManager.java index eeaf803329..aa3675d9fa 100644 --- a/cave/com.raytheon.viz.ui/src/com/raytheon/viz/ui/VizWorkbenchManager.java +++ b/cave/com.raytheon.viz.ui/src/com/raytheon/viz/ui/VizWorkbenchManager.java @@ -377,22 +377,6 @@ public class VizWorkbenchManager implements IPartListener, IPartListener2, if (parts != null) { parts.add((IEditorPart) part); } - - IEditorPart active = activeEditorMap.get(part.getSite() - .getWorkbenchWindow()); - if (active == null) { - // Active will be null if our active editor became hidden, try - // and get an active editor from the page - active = part.getSite().getPage().getActiveEditor(); - if (active == null) { - // Active will be null here if the page doesn't have an - // active editor so we should use the part that became - // visible - active = (IEditorPart) part; - } - activeEditorMap - .put(part.getSite().getWorkbenchWindow(), active); - } } } diff --git a/cave/com.raytheon.viz.ui/src/com/raytheon/viz/ui/panes/VizDisplayPane.java b/cave/com.raytheon.viz.ui/src/com/raytheon/viz/ui/panes/VizDisplayPane.java index a64ec118e1..7b4d5443f3 100644 --- a/cave/com.raytheon.viz.ui/src/com/raytheon/viz/ui/panes/VizDisplayPane.java +++ b/cave/com.raytheon.viz.ui/src/com/raytheon/viz/ui/panes/VizDisplayPane.java @@ -120,11 +120,8 @@ public class VizDisplayPane implements IDisplayPane { protected static final double ZOOM_ANIMATION_FACTOR = 2.0; - /** The canvas composite */ - private final Composite canvasComp; - /** The canvas */ - private final Canvas canvas; + protected final Canvas canvas; /** The graphics target */ protected IGraphicsTarget target; @@ -199,17 +196,9 @@ public class VizDisplayPane implements IDisplayPane { Composite canvasComp, IRenderableDisplay display, boolean enableContextualMenus) throws VizException { this.container = container; - this.canvasComp = canvasComp; - this.canvasComp.addDisposeListener(new DisposeListener() { - @Override - public void widgetDisposed(DisposeEvent e) { - VizDisplayPane.this.dispose(); - } - }); // create the graphics adapter - graphicsAdapter = GraphicsFactory.getGraphicsAdapter(display - .getDisplayType()); + graphicsAdapter = getGraphicsAdapter(display); // create the canvas this.canvas = graphicsAdapter.constrcutCanvas(canvasComp); // set the renderable display @@ -247,7 +236,7 @@ public class VizDisplayPane implements IDisplayPane { }); Menu menu = menuMgr.createContextMenu(canvas); menu.setVisible(false); - canvasComp.setMenu(menu); + canvas.getParent().setMenu(menu); } // Register ourselves with the DrawCoordinatorJob @@ -274,6 +263,15 @@ public class VizDisplayPane implements IDisplayPane { } }); + canvas.addDisposeListener(new DisposeListener() { + + @Override + public void widgetDisposed(DisposeEvent e) { + VizDisplayPane.this.dispose(); + } + + }); + canvas.addListener(SWT.MouseMove, new Listener() { @Override public void handleEvent(Event event) { @@ -296,8 +294,9 @@ public class VizDisplayPane implements IDisplayPane { * @param display * @return */ - public AbstractGraphicsFactoryAdapter getGraphicsAdapter() { - return graphicsAdapter; + protected AbstractGraphicsFactoryAdapter getGraphicsAdapter( + IRenderableDisplay display) throws VizException { + return GraphicsFactory.getGraphicsAdapter(display.getDisplayType()); } /** @@ -404,9 +403,7 @@ public class VizDisplayPane implements IDisplayPane { renderableDisplay, DisplayChangeType.REMOVE); } - if (canvas.isDisposed() == false) { - canvasComp.dispose(); - } + graphicsAdapter.disposeCanvas(canvas); } } @@ -943,7 +940,7 @@ public class VizDisplayPane implements IDisplayPane { */ @Override public void setVisible(boolean visible) { - canvasComp.setVisible(visible); + canvas.getParent().setVisible(visible); canvas.setVisible(visible); } @@ -966,7 +963,7 @@ public class VizDisplayPane implements IDisplayPane { lastClickX = lastMouseX = e.x; lastClickY = lastMouseY = e.y; if (prefManager.handleLongClick(CONTEXT_MENU_PREF, e.button)) { - canvasComp.getMenu().setVisible(false); + canvas.getParent().getMenu().setVisible(false); synchronized (menuLock) { if (menuJob != null) { menuJob.cancel(); @@ -979,7 +976,7 @@ public class VizDisplayPane implements IDisplayPane { @Override public void run() { if (canvas.isDisposed() == false - && canvasComp.getMenu() != null) { + && canvas.getParent().getMenu() != null) { showMenu(); } } @@ -992,7 +989,7 @@ public class VizDisplayPane implements IDisplayPane { }; menuJob.schedule(275); } else if (prefManager.handleClick(CONTEXT_MENU_PREF, e.button)) { - canvasComp.getMenu().setVisible(false); + canvas.getParent().getMenu().setVisible(false); showMenu(); } } @@ -1003,8 +1000,8 @@ public class VizDisplayPane implements IDisplayPane { protected void showMenu() { Point canvasLoc = canvas.getDisplay().map(canvas, null, lastClickX, lastClickY); - canvasComp.getMenu().setLocation(canvasLoc); - canvasComp.getMenu().setVisible(true); + canvas.getParent().getMenu().setLocation(canvasLoc); + canvas.getParent().getMenu().setVisible(true); } /** diff --git a/cave/com.raytheon.viz.ui/src/com/raytheon/viz/ui/perspectives/AbstractVizPerspectiveManager.java b/cave/com.raytheon.viz.ui/src/com/raytheon/viz/ui/perspectives/AbstractVizPerspectiveManager.java index dc41c90bce..f846a1b937 100644 --- a/cave/com.raytheon.viz.ui/src/com/raytheon/viz/ui/perspectives/AbstractVizPerspectiveManager.java +++ b/cave/com.raytheon.viz.ui/src/com/raytheon/viz/ui/perspectives/AbstractVizPerspectiveManager.java @@ -73,6 +73,7 @@ import com.raytheon.viz.ui.tools.ModalToolManager; * Date Ticket# Engineer Description * ------------ ---------- ----------- -------------------------- * Jul 22, 2008 randerso Initial creation + * Mar 27, 2012 mli add isOpened() * * * @@ -578,4 +579,8 @@ public abstract class AbstractVizPerspectiveManager implements } } } + + public boolean isOpened() { + return opened; + } } diff --git a/cave/com.raytheon.viz.volumebrowser.feature/com.raytheon.viz.volumebrowser.feature.ecl b/cave/com.raytheon.viz.volumebrowser.feature/com.raytheon.viz.volumebrowser.feature.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/cave/com.raytheon.viz.volumebrowser/com.raytheon.viz.volumebrowser.ecl b/cave/com.raytheon.viz.volumebrowser/com.raytheon.viz.volumebrowser.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/cave/com.raytheon.viz.volumebrowser/src/com/raytheon/viz/volumebrowser/catalog/GridDataCatalog.java b/cave/com.raytheon.viz.volumebrowser/src/com/raytheon/viz/volumebrowser/catalog/GridDataCatalog.java index afaf9cbc4a..66d2f6fd9e 100644 --- a/cave/com.raytheon.viz.volumebrowser/src/com/raytheon/viz/volumebrowser/catalog/GridDataCatalog.java +++ b/cave/com.raytheon.viz.volumebrowser/src/com/raytheon/viz/volumebrowser/catalog/GridDataCatalog.java @@ -59,15 +59,15 @@ import com.raytheon.viz.grid.rsc.GridResourceData; * *
  * 
- * SOFTWARE HISTORY
- * 
- * Date         Ticket#    Engineer    Description
- * ------------ ---------- ----------- --------------------------
- * 11/29/2006   #7         brockwoo    Initial creation
- * 12/05/2006   #98        brockwoo    Fix for the grid parameter list not
- *                                     updating when only the model time
- *                                     changes
- * Aug 27, 2008 1502       dglazesk    Updated to use JAXB marshalling
+ * SOFTWARE HISTORY
+ * 
+ * Date         Ticket#    Engineer    Description
+ * ------------ ---------- ----------- --------------------------
+ * 11/29/2006   #7         brockwoo    Initial creation
+ * 12/05/2006   #98        brockwoo    Fix for the grid parameter list not
+ *                                     updating when only the model time
+ *                                     changes
+ * Aug 27, 2008 1502       dglazesk    Updated to use JAXB marshalling
  *                                     Switched to GridModel from plugin-grib
  * 
  * 
diff --git a/cave/com.raytheon.viz.volumebrowser/src/com/raytheon/viz/volumebrowser/vbui/ProductTableComp.java b/cave/com.raytheon.viz.volumebrowser/src/com/raytheon/viz/volumebrowser/vbui/ProductTableComp.java index 6123fadab3..9fa6646035 100644 --- a/cave/com.raytheon.viz.volumebrowser/src/com/raytheon/viz/volumebrowser/vbui/ProductTableComp.java +++ b/cave/com.raytheon.viz.volumebrowser/src/com/raytheon/viz/volumebrowser/vbui/ProductTableComp.java @@ -105,6 +105,8 @@ import com.vividsolutions.jts.geom.LineString; * Date Ticket# Engineer Description * ------------ ---------- ----------- -------------------------- * Jun 8, 2009 #2161 lvenable Initial creation + * Mar 27, 2012 #14506 Qinglu Lin For cross section plot along a line of + * latitude, swap xStart and xEnd. * * * @@ -935,8 +937,8 @@ public class ProductTableComp extends Composite implements IProductTable, new Coordinate(xEnd, yEnd) }); } else if (selectedPlaneKey.startsWith("Lat")) { double yEnd, yStart, xEnd, xStart; - xEnd = coverageRectangle.getMinX(); - xStart = coverageRectangle.getMaxX(); + xStart = coverageRectangle.getMinX(); + xEnd = coverageRectangle.getMaxX(); yEnd = Double.parseDouble(selectedPlaneKey.replace("Lat", "")); yStart = yEnd; diff --git a/cave/com.raytheon.viz.warngen.feature/com.raytheon.viz.warngen.feature.ecl b/cave/com.raytheon.viz.warngen.feature/com.raytheon.viz.warngen.feature.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/cave/com.raytheon.viz.warngen/com.raytheon.viz.warngen.ecl b/cave/com.raytheon.viz.warngen/com.raytheon.viz.warngen.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/cave/com.raytheon.viz.warngen/src/com/raytheon/viz/warngen/gis/Area.java b/cave/com.raytheon.viz.warngen/src/com/raytheon/viz/warngen/gis/Area.java index 575eec747f..f429d5ed99 100644 --- a/cave/com.raytheon.viz.warngen/src/com/raytheon/viz/warngen/gis/Area.java +++ b/cave/com.raytheon.viz.warngen/src/com/raytheon/viz/warngen/gis/Area.java @@ -64,6 +64,11 @@ import com.vividsolutions.jts.geom.Geometry; * Date Ticket# Engineer Description * ------------ ---------- ----------- -------------------------- * Nov 15, 2007 #601 chammack Initial Creation. + * Mar 28, 2012 #14691 Qinglu lin Created AffectedAreas' partOfParentRegion based on + * FE_AREA stored in GeospatialData's attributes map, + * instead of calculating them. + * Apr 11, 2012 #14691 Qinglu lin Extra code were added to handle marine warnings as + * MarineZones shapefiles have no FE_AREA. * * * @@ -166,8 +171,7 @@ public class Area { List uniqueFips = new ArrayList(); List areas = new ArrayList(); for (GeospatialData regionFeature : countyMap.values()) { - Geometry regionGeom = regionFeature.geometry; - Geometry parentGeom = regionFeature.parent.geometry; + Geometry regionGeom = regionFeature.geometry; AffectedAreas area = new AffectedAreas(); area.name = regionFeature.attributes.get(areaField).toString(); area.fips = regionFeature.attributes.get(fipsField).toString(); @@ -222,10 +226,64 @@ public class Area { if (parentRegion != null) { area.parentRegion = String.valueOf(parentRegion.attributes .get(parentAreaField)); - - area.partOfParentRegion = GisUtil.asStringList(GisUtil - .calculatePortion(parentGeom, regionGeom.getCentroid() - .getCoordinate())); + String feArea = (String)regionFeature.attributes.get("FE_AREA"); + final List partList = new ArrayList(); + if (feArea == null) { + // Marine warnings + partList.add(""); + } else { + if (feArea.equals("pa")) + partList.add("PA"); + else if(feArea.equals("mi")) + partList.add("MI"); + else if(feArea.equals("pd")) + partList.add("PD"); + else if(feArea.equals("up")) + partList.add("UP"); + else if(feArea.equals("bb")) + partList.add("BB"); + else if(feArea.equals("er")) + partList.add("ER"); + else if(feArea.equals("sr")) + partList.add("SR"); + else if(feArea.equals("wu")) + partList.add("WU"); + else if(feArea.equals("ds")) + partList.add("DS"); + else if(feArea.equals("ne")) + partList.add("NE"); + else if(feArea.equals("nw")) + partList.add("NW"); + else if(feArea.equals("se")) + partList.add("SE"); + else if(feArea.equals("sw")) + partList.add("SW"); + else { + for (int i=0; i * @@ -1124,6 +1127,7 @@ public class WarngenLayer extends AbstractStormTrackResource { try { double ratio = intersection.getArea() / geom.getArea(); + double ratioInPercent = ratio * 100.; Double areaOfGeom = (Double) f.attributes.get(AREA); double areaInKmSqOfIntersection = meterSqToKmSq .convert(areaOfGeom * ratio); @@ -1133,14 +1137,14 @@ public class WarngenLayer extends AbstractStormTrackResource { includeArea = areaInKmSqOfIntersection > 1; } else if (getConfiguration().getAreaConfig() .getInclusionAndOr().equalsIgnoreCase("AND")) { - if ((ratio >= getConfiguration().getAreaConfig() + if ((ratioInPercent >= getConfiguration().getAreaConfig() .getInclusionPercent()) && (areaInKmSqOfIntersection > getConfiguration() .getAreaConfig().getInclusionArea())) { includeArea = true; } } else { - if ((ratio >= getConfiguration().getAreaConfig() + if ((ratioInPercent >= getConfiguration().getAreaConfig() .getInclusionPercent()) || (areaInKmSqOfIntersection > getConfiguration() .getAreaConfig().getInclusionArea())) { @@ -1221,22 +1225,43 @@ public class WarngenLayer extends AbstractStormTrackResource { } } if (newHatchedArea == null) { - newHatchedArea = buildArea(getPolygon()); + boolean initialWarning = false; + String[] followUps = this.getConfiguration().getFollowUps(); + if (followUps.length == 0) + initialWarning = true; + else + for (String followup : followUps) { + if (followup.equals("NEW")) { + initialWarning = true; + break; + } + } + if (initialWarning) + state.clear2(); // not to hatch polygon for initial warning + else { + // Snap back for follow-ups + state.setWarningPolygon((Polygon) state + .getMarkedWarningPolygon().clone()); + newHatchedArea = latLonToLocal((Geometry) state + .getMarkedWarningArea().clone()); + state.resetMarked(); + updateWarnedAreas(snapHatchedAreaToPolygon, true); + } } else { - newHatchedArea = localToLatLon(newHatchedArea); + newHatchedArea = localToLatLon(newHatchedArea); + state.setWarningArea(newHatchedArea); + state.mark(newHatchedArea); + newHatchedArea = buildArea(getPolygon()); + // add "W" strings + if (determineInclusion) { + populateStrings(); + } } - state.setWarningArea(newHatchedArea); - state.mark(newHatchedArea); // Apply new hatched area state.geometryChanged = true; issueRefresh(); - // add "W" strings - if (determineInclusion) { - populateStrings(); - } - VizApp.runAsync(new Runnable() { public void run() { if (dialog != null) { diff --git a/cave/com.raytheon.viz.warngen/src/com/raytheon/viz/warngen/gui/WarngenUIState.java b/cave/com.raytheon.viz.warngen/src/com/raytheon/viz/warngen/gui/WarngenUIState.java index 4acdf6d95d..73a88b9a2f 100644 --- a/cave/com.raytheon.viz.warngen/src/com/raytheon/viz/warngen/gui/WarngenUIState.java +++ b/cave/com.raytheon.viz.warngen/src/com/raytheon/viz/warngen/gui/WarngenUIState.java @@ -35,6 +35,7 @@ import com.vividsolutions.jts.geom.Polygon; * Date Ticket# Engineer Description * ------------ ---------- ----------- -------------------------- * May 7, 2010 mschenke Initial creation + * 03/14/2012 DR 14690 Qinglu Lin Add clear2(). * * * @@ -144,13 +145,23 @@ public class WarngenUIState { } public void clear() { - oldWarningArea = null; + warningPolygon = null; + clear2(); + } + + /** + * clear2 + * Same as clear(), except for not assigning null to warningPolygon. + * History + * 03-16-2012 Qinglu Lin DR14690 Created. + */ + public void clear2() { + oldWarningArea = null; oldWarningPolygon = null; oldWarningArea = null; oldWarningPolygon = null; strings.clear(); warningArea = null; - warningPolygon = null; markedWarningArea = null; markedWarningPolygon = null; } diff --git a/cave/com.raytheon.viz.warnings/com.raytheon.viz.warnings.ecl b/cave/com.raytheon.viz.warnings/com.raytheon.viz.warnings.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/cave/com.raytheon.viz.xdat/com.raytheon.viz.xdat.ecl b/cave/com.raytheon.viz.xdat/com.raytheon.viz.xdat.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/cave/ohd.hseb.common/ohd.hseb.common.ecl b/cave/ohd.hseb.common/ohd.hseb.common.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/cave/ohd.hseb.fcstservice/ohd.hseb.fcstservice.ecl b/cave/ohd.hseb.fcstservice/ohd.hseb.fcstservice.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/cave/ohd.hseb.ihfsdb/ohd.hseb.ihfsdb.ecl b/cave/ohd.hseb.ihfsdb/ohd.hseb.ihfsdb.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/cave/ohd.hseb.monitor/ohd.hseb.monitor.ecl b/cave/ohd.hseb.monitor/ohd.hseb.monitor.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/cave/ohd.hseb.sshp/ohd.hseb.sshp.ecl b/cave/ohd.hseb.sshp/ohd.hseb.sshp.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/cots/com.facebook.thrift/com.facebook.thrift.ecl b/cots/com.facebook.thrift/com.facebook.thrift.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/cots/com.mchange/com.mchange.ecl b/cots/com.mchange/com.mchange.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/cots/com.opensymphony.ognl/com.opensymphony.ognl.ecl b/cots/com.opensymphony.ognl/com.opensymphony.ognl.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/cots/com.sun.jna/com.sun.jna.ecl b/cots/com.sun.jna/com.sun.jna.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/cots/com.sun.jndi.nis/com.sun.jndi.nis.ecl b/cots/com.sun.jndi.nis/com.sun.jndi.nis.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/cots/edu.oswego/edu.oswego.ecl b/cots/edu.oswego/edu.oswego.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/cots/javax.activation/javax.activation.ecl b/cots/javax.activation/javax.activation.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/cots/javax.jms/javax.jms.ecl b/cots/javax.jms/javax.jms.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/cots/javax.mail/javax.mail.ecl b/cots/javax.mail/javax.mail.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/cots/javax.measure/javax.measure.ecl b/cots/javax.measure/javax.measure.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/cots/javax.media.opengl.linux32/javax.media.opengl.linux32.ecl b/cots/javax.media.opengl.linux32/javax.media.opengl.linux32.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/cots/javax.media.opengl.linux64/javax.media.opengl.linux64.ecl b/cots/javax.media.opengl.linux64/javax.media.opengl.linux64.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/cots/javax.media.opengl.win32/javax.media.opengl.win32.ecl b/cots/javax.media.opengl.win32/javax.media.opengl.win32.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/cots/javax.media.opengl/javax.media.opengl.ecl b/cots/javax.media.opengl/javax.media.opengl.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/cots/javax.persistence/javax.persistence.ecl b/cots/javax.persistence/javax.persistence.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/cots/javax.vecmath/javax.vecmath.ecl b/cots/javax.vecmath/javax.vecmath.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/cots/ncsa.hdf5.linux32/ncsa.hdf5.linux32.ecl b/cots/ncsa.hdf5.linux32/ncsa.hdf5.linux32.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/cots/ncsa.hdf5.win32/ncsa.hdf5.win32.ecl b/cots/ncsa.hdf5.win32/ncsa.hdf5.win32.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/cots/ncsa.hdf5/ncsa.hdf5.ecl b/cots/ncsa.hdf5/ncsa.hdf5.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/cots/net.sf.cglib/net.sf.cglib.ecl b/cots/net.sf.cglib/net.sf.cglib.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/cots/net.sf.ehcache/net.sf.ehcache.ecl b/cots/net.sf.ehcache/net.sf.ehcache.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/cots/net.sf.swtaddons/net.sf.swtaddons.ecl b/cots/net.sf.swtaddons/net.sf.swtaddons.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/cots/org.apache.activemq/org.apache.activemq.ecl b/cots/org.apache.activemq/org.apache.activemq.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/cots/org.apache.batik/org.apache.batik.ecl b/cots/org.apache.batik/org.apache.batik.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/cots/org.apache.camel/org.apache.camel.ecl b/cots/org.apache.camel/org.apache.camel.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/cots/org.apache.commons.beanutils/org.apache.commons.beanutils.ecl b/cots/org.apache.commons.beanutils/org.apache.commons.beanutils.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/cots/org.apache.commons.cli/org.apache.commons.cli.ecl b/cots/org.apache.commons.cli/org.apache.commons.cli.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/cots/org.apache.commons.codec/org.apache.commons.codec.ecl b/cots/org.apache.commons.codec/org.apache.commons.codec.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/cots/org.apache.commons.collections/org.apache.commons.collections.ecl b/cots/org.apache.commons.collections/org.apache.commons.collections.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/cots/org.apache.commons.configuration/org.apache.commons.configuration.ecl b/cots/org.apache.commons.configuration/org.apache.commons.configuration.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/cots/org.apache.commons.digester/org.apache.commons.digester.ecl b/cots/org.apache.commons.digester/org.apache.commons.digester.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/cots/org.apache.commons.lang/org.apache.commons.lang.ecl b/cots/org.apache.commons.lang/org.apache.commons.lang.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/cots/org.apache.commons.logging/org.apache.commons.logging.ecl b/cots/org.apache.commons.logging/org.apache.commons.logging.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/cots/org.apache.commons.management/org.apache.commons.management.ecl b/cots/org.apache.commons.management/org.apache.commons.management.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/cots/org.apache.commons.pool/org.apache.commons.pool.ecl b/cots/org.apache.commons.pool/org.apache.commons.pool.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/cots/org.apache.commons.validator/org.apache.commons.validator.ecl b/cots/org.apache.commons.validator/org.apache.commons.validator.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/cots/org.apache.http/org.apache.http.ecl b/cots/org.apache.http/org.apache.http.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/cots/org.apache.log4j/org.apache.log4j.ecl b/cots/org.apache.log4j/org.apache.log4j.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/cots/org.apache.mina/org.apache.mina.ecl b/cots/org.apache.mina/org.apache.mina.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/cots/org.apache.qpid/org.apache.qpid.ecl b/cots/org.apache.qpid/org.apache.qpid.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/cots/org.apache.tomcat.nativ/org.apache.tomcat.nativ.ecl b/cots/org.apache.tomcat.nativ/org.apache.tomcat.nativ.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/cots/org.apache.tools.bzip2/org.apache.tools.bzip2.ecl b/cots/org.apache.tools.bzip2/org.apache.tools.bzip2.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/cots/org.apache.velocity/org.apache.velocity.ecl b/cots/org.apache.velocity/org.apache.velocity.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/cots/org.dom4j/org.dom4j.ecl b/cots/org.dom4j/org.dom4j.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/cots/org.eclipse.jetty/org.eclipse.jetty.ecl b/cots/org.eclipse.jetty/org.eclipse.jetty.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/cots/org.geotools/org.geotools.ecl b/cots/org.geotools/org.geotools.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/cots/org.hibernate/org.hibernate.ecl b/cots/org.hibernate/org.hibernate.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/cots/org.jboss.cache/org.jboss.cache.ecl b/cots/org.jboss.cache/org.jboss.cache.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/cots/org.jep.linux32/org.jep.linux32.ecl b/cots/org.jep.linux32/org.jep.linux32.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/cots/org.jep.linux64/org.jep.linux64.ecl b/cots/org.jep.linux64/org.jep.linux64.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/cots/org.jep.win32/org.jep.win32.ecl b/cots/org.jep.win32/org.jep.win32.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/cots/org.jep/org.jep.ecl b/cots/org.jep/org.jep.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/cots/org.jivesoftware.smack/org.jivesoftware.smack.ecl b/cots/org.jivesoftware.smack/org.jivesoftware.smack.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/cots/org.junit/org.junit.ecl b/cots/org.junit/org.junit.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/cots/org.objectweb/org.objectweb.ecl b/cots/org.objectweb/org.objectweb.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/cots/org.postgres/org.postgres.ecl b/cots/org.postgres/org.postgres.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/cots/org.slf4j/org.slf4j.ecl b/cots/org.slf4j/org.slf4j.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/cots/org.springframework.dm/org.springframework.dm.ecl b/cots/org.springframework.dm/org.springframework.dm.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/cots/org.springframework/org.springframework.ecl b/cots/org.springframework/org.springframework.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/cots/ucar.nc2/ucar.nc2.ecl b/cots/ucar.nc2/ucar.nc2.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/cots/uk.ltd.getahead/uk.ltd.getahead.ecl b/cots/uk.ltd.getahead/uk.ltd.getahead.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/deltaScripts/deltaScripts.ecl b/deltaScripts/deltaScripts.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/build.edex/build.edex.ecl b/edexOsgi/build.edex/build.edex.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/VM_global_library.vm b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/VM_global_library.vm index 619a22cd8f..8050df9ff7 100644 --- a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/VM_global_library.vm +++ b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/VM_global_library.vm @@ -1,4 +1,5 @@ ##### UPDATED 3/2/12 12.2.1-4 BY EVAN BOOKBINDER +##### Qinglu Lin 04-04-2012 DR 14691. #* #################################################################################################### @@ -253,6 +254,39 @@ SOUTH## EXTREME ## #end #end +#if($list.contains($directionSet, "PA")) +THE PANHANDLE OF## +#end +#if($list.contains($directionSet, "MI")) +MIDDLE## +#end +#if($list.contains($directionSet, "PD")) +THE PIEDMONT OF## +#end +#if($list.contains($directionSet, "UP")) +UPSTATE## +#end +#if($list.contains($directionSet, "BB")) +BIG BEND## +#end +#if($list.contains($directionSet, "ER")) +EAST CENTRAL UPPER## +#end +#if($list.contains($directionSet, "EU")) +EASTERN UPPER## +#end +#if($list.contains($directionSet, "SR")) +SOUTH CENTRAL UPPER## +#end +#if($list.contains($directionSet, "NR")) +NORTH CENTRAL UPPER## +#end +#if($list.contains($directionSet, "WU")) +WESTERN UPPER## +#end +#if($list.contains($directionSet, "DS")) +DEEP SOUTH## +#end #if($list.contains($directionSet, "NORTH")) NORTH## #end @@ -264,6 +298,18 @@ EAST## #end #if($list.contains($directionSet, "WEST")) WEST## +#end +#if($list.contains($directionSet, "NE")) +NORTHEAST## +#end +#if($list.contains($directionSet, "NW")) +NORTHWEST## +#end +#if($list.contains($directionSet, "SE")) +SOUTHEAST## +#end +#if($list.contains($directionSet, "SW")) +SOUTHWEST## #end #if($useCentral && $list.contains($directionSet, "CENTRAL")) #if ($list.contains($directionSet, "NORTH") || $list.contains($directionSet, "SOUTH") || $list.contains($directionSet, "EAST") ||$list.contains($directionSet, "WEST")) diff --git a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/arealFloodAdvisory.xml b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/arealFloodAdvisory.xml index 1d4bac0d0d..a94cae4b68 100644 --- a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/arealFloodAdvisory.xml +++ b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/arealFloodAdvisory.xml @@ -5,6 +5,8 @@ Mike Dangelo 01-25-2012 at CRH TIM Evan Bookbinder 2-24-2012 for OB12.2.1 Phil Kurimski 2-28-2012 for OB12.2.1-3 + Qinglu Lin 04-04-2012 DR 14691. Added tag. + --> @@ -204,6 +206,7 @@ COUNTYNAME NAME STATE + FE_AREA countyTypes.txt FIPS NAME diff --git a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/arealFloodAdvisoryFollowup.xml b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/arealFloodAdvisoryFollowup.xml index 4d0fe2281b..231d017250 100644 --- a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/arealFloodAdvisoryFollowup.xml +++ b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/arealFloodAdvisoryFollowup.xml @@ -5,6 +5,7 @@ Mike and Phil 01-25-2012 at CRH TIM Evan Bookbinder 09-16-2011 for OB11.8.0-8 Phil Kurimski 03-02-2012 for OB12.1.1-4 + Qinglu Lin 04-04-2012 DR 14691. Added tag. --> @@ -166,6 +167,7 @@ COUNTYNAME NAME STATE + FE_AREA countyTypes.txt FIPS NAME diff --git a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/arealFloodAdvisoryFollowup_Zones.xml b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/arealFloodAdvisoryFollowup_Zones.xml index 5ac13ae050..9ef695da9c 100644 --- a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/arealFloodAdvisoryFollowup_Zones.xml +++ b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/arealFloodAdvisoryFollowup_Zones.xml @@ -2,7 +2,9 @@ + Phil Kurimski 2-29-2012 + Qinglu Lin 04-04-2012 DR 14691. Added tag. +--> @@ -197,6 +199,7 @@ STATE_ZONE NAME STATE + FE_AREA countyTypes.txt NAME diff --git a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/arealFloodAdvisory_Zones.xml b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/arealFloodAdvisory_Zones.xml index 9ebaa9cafb..07185126ab 100644 --- a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/arealFloodAdvisory_Zones.xml +++ b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/arealFloodAdvisory_Zones.xml @@ -2,7 +2,9 @@ + Phil Kurimski 2-29-2012 + Qinglu Lin 04-04-2012 DR 14691. Added tag. +--> @@ -249,6 +251,7 @@ STATE_ZONE NAME STATE + FE_AREA countyTypes.txt NAME diff --git a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/arealFloodWarning.xml b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/arealFloodWarning.xml index dfa51957e9..d18790cbec 100644 --- a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/arealFloodWarning.xml +++ b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/arealFloodWarning.xml @@ -3,7 +3,8 @@ Mike Dangelo 09-19-2011 at TIM Alaska Mike Dangelo 01-25-2012 at CRH TIM Evan Bookbinder 2-24-2012 - Phil Kurimski 2-28-2012 + Phil Kurimski 2-28-2012 + Qinglu Lin 04-04-2012 DR 14691. Added tag. --> @@ -236,6 +237,7 @@ COUNTYNAME NAME STATE + FE_AREA countyTypes.txt FIPS NAME diff --git a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/arealFloodWarningFollowup.xml b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/arealFloodWarningFollowup.xml index 11c69f5810..145045990e 100644 --- a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/arealFloodWarningFollowup.xml +++ b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/arealFloodWarningFollowup.xml @@ -3,6 +3,7 @@ Edited by Mike Dangelo 01-25-2012 at CRH TIM Edited by Evan Bookbinder 2-24-2012 Edited by Phil Kurimski 2-28-2012 + Qinglu Lin 04-04-2012 DR 14691. Added tag. --> @@ -181,6 +182,7 @@ NAME STATE + FE_AREA countyTypes.txt NAME diff --git a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/arealFloodWarningFollowup_Zones.xml b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/arealFloodWarningFollowup_Zones.xml index c510be1645..efe8e417bd 100644 --- a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/arealFloodWarningFollowup_Zones.xml +++ b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/arealFloodWarningFollowup_Zones.xml @@ -2,7 +2,9 @@ + Phil Kurimski 2-29-2012 + Qinglu Lin 04-04-2012 DR 14691. Added tag. +--> @@ -214,6 +216,7 @@ STATE_ZONE NAME STATE + FE_AREA countyTypes.txt NAME diff --git a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/arealFloodWarning_Zones.xml b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/arealFloodWarning_Zones.xml index 172aecd894..ebd55fe99d 100644 --- a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/arealFloodWarning_Zones.xml +++ b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/arealFloodWarning_Zones.xml @@ -2,7 +2,9 @@ + Phil Kurimski 2-29-2012 + Qinglu Lin 04-04-2012 DR 14691. Added tag. +--> @@ -257,6 +259,7 @@ STATE_ZONE NAME STATE + FE_AREA countyTypes.txt NAME diff --git a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/customTemplate.xml b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/customTemplate.xml index 4524a1bc49..c96e01abc3 100644 --- a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/customTemplate.xml +++ b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/customTemplate.xml @@ -1,3 +1,6 @@ + + @@ -96,6 +99,7 @@ COUNTYNAME NAME STATE + FE_AREA countyTypes.txt FIPS NAME diff --git a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/extremeWindWarning.xml b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/extremeWindWarning.xml index 8d6cef67e6..9fd918e725 100644 --- a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/extremeWindWarning.xml +++ b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/extremeWindWarning.xml @@ -1,5 +1,6 @@ @@ -111,6 +112,7 @@ COUNTYNAME NAME STATE + FE_AREA countyTypes.txt FIPS NAME diff --git a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/extremeWindWarningFollowup.xml b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/extremeWindWarningFollowup.xml index fbceee500e..9a99fb309d 100644 --- a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/extremeWindWarningFollowup.xml +++ b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/extremeWindWarningFollowup.xml @@ -1,6 +1,7 @@ @@ -121,6 +122,7 @@ COUNTYNAME NAME STATE + FE_AREA countyTypes.txt FIPS NAME diff --git a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/ffwfaw.xml b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/ffwfaw.xml index cc65a3e41f..fc06317912 100644 --- a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/ffwfaw.xml +++ b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/ffwfaw.xml @@ -2,6 +2,7 @@ @@ -255,6 +256,7 @@ NAME STATE + FE_AREA countyTypes.txt FIPS diff --git a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/flashFloodWarning.xml b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/flashFloodWarning.xml index 8d51784bf2..31f40e99ac 100644 --- a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/flashFloodWarning.xml +++ b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/flashFloodWarning.xml @@ -5,6 +5,7 @@ Modified by Phil Kurimski 09-23-2011 for burn scars and mud slides Modified by Mike Dangelo 01-25-2012 at CRH TIM Modified by Mike Dangelo 02-23-2012 + Qinglu Lin 04-04-2012 DR 14691. Added tag. --> @@ -217,6 +218,7 @@ NAME STATE + FE_AREA countyTypes.txt FIPS diff --git a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/flashFloodWarningFollowup.xml b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/flashFloodWarningFollowup.xml index 808deac39d..bae885e23f 100644 --- a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/flashFloodWarningFollowup.xml +++ b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/flashFloodWarningFollowup.xml @@ -5,6 +5,7 @@ Modified by Mike Dangelo 01-25-2012 at CRH TIM Modified by Mike Dangelo 02-23-2012 Modified by Phil Kurimski 3-02-2012 OB12.2.1-4 + Qinglu Lin 04-04-2012 DR 14691. Added tag. --> @@ -176,6 +177,7 @@ NAME STATE + FE_AREA countyTypes.txt FIPS diff --git a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/flashFloodWarningFollowup_Zones.xml b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/flashFloodWarningFollowup_Zones.xml index d256f5ef36..6fb1a163a6 100644 --- a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/flashFloodWarningFollowup_Zones.xml +++ b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/flashFloodWarningFollowup_Zones.xml @@ -2,7 +2,9 @@ + Phil Kurimski 2-29-2012 + Qinglu Lin 04-04-2012 DR 14691. Added tag. +--> @@ -180,6 +182,7 @@ NAME NAME STATE + FE_AREA countyTypes.txt STATE_ZONE diff --git a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/flashFloodWarning_Zones.xml b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/flashFloodWarning_Zones.xml index facef76c93..693ea1ad18 100644 --- a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/flashFloodWarning_Zones.xml +++ b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/flashFloodWarning_Zones.xml @@ -4,7 +4,9 @@ + Phil Kurimski 2-29-2012 + Qinglu Lin 04-04-2012 DR 14691. Added tag. +--> @@ -213,6 +215,7 @@ NAME NAME STATE + FE_AREA countyTypes.txt STATE_ZONE diff --git a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/nonConvectiveFlashFloodWarning.xml b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/nonConvectiveFlashFloodWarning.xml index e485bf5935..d92fc21ff2 100644 --- a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/nonConvectiveFlashFloodWarning.xml +++ b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/nonConvectiveFlashFloodWarning.xml @@ -3,7 +3,9 @@ + Modified Phil Kurimski 01-26-2012 OB 12.1.1-1 + Qinglu Lin 04-04-2012 DR 14691. Added tag. +--> mi @@ -273,6 +275,7 @@ NAME STATE + FE_AREA countyTypes.txt FIPS diff --git a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/nonConvectiveFlashFloodWarningFollowup.xml b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/nonConvectiveFlashFloodWarningFollowup.xml index 38f88b2d61..682fe1cfd8 100644 --- a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/nonConvectiveFlashFloodWarningFollowup.xml +++ b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/nonConvectiveFlashFloodWarningFollowup.xml @@ -2,7 +2,9 @@ + Modified Phil Kurimski 01-26-2012 OB 12.1.1-1 + Qinglu Lin 04-04-2012 DR 14691. Added tag. +--> @@ -300,6 +302,7 @@ NAME STATE + FE_AREA countyTypes.txt FIPS diff --git a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/nonConvectiveFlashFloodWarningFollowup_Zones.xml b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/nonConvectiveFlashFloodWarningFollowup_Zones.xml index 2f5716c271..218996ec53 100644 --- a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/nonConvectiveFlashFloodWarningFollowup_Zones.xml +++ b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/nonConvectiveFlashFloodWarningFollowup_Zones.xml @@ -4,6 +4,7 @@ Modified Phil Kurimski 09-23-2011 OB 11.0.8-8 Modified Phil Kurimski 01-26-2012 OB 12.1.1-1 Modified Phil Kurimski 02-29-2012 OB 12.2.1-3 + Qinglu Lin 04-04-2012 DR 14691. Added tag. --> @@ -302,6 +303,7 @@ NAME NAME STATE + FE_AREA countyTypes.txt STATE_ZONE diff --git a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/nonConvectiveFlashFloodWarning_Zones.xml b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/nonConvectiveFlashFloodWarning_Zones.xml index b0545a41b4..267fadbb12 100644 --- a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/nonConvectiveFlashFloodWarning_Zones.xml +++ b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/nonConvectiveFlashFloodWarning_Zones.xml @@ -4,7 +4,9 @@ Modified Evan Bookbinder 09-16-2011 OB 11.0.8-8 Modified Phil Kurimski 09-21-2011 OB 11.0.8-8 Modified Phil Kurimski 01-26-2012 OB 12.1.1-1 - Modified Phil Kurimski 02-29-2012 OB 12.2.1-3 --> + Modified Phil Kurimski 02-29-2012 OB 12.2.1-3 + Qinglu Lin 04-04-2012 DR 14691. Added tag. +--> mi @@ -273,6 +275,7 @@ NAME NAME STATE + FE_AREA countyTypes.txt STATE_ZONE diff --git a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/severeThunderstormWarning.xml b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/severeThunderstormWarning.xml index e2a16626bf..60241e67ed 100644 --- a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/severeThunderstormWarning.xml +++ b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/severeThunderstormWarning.xml @@ -6,6 +6,7 @@ 9-17-2011 Merge in OB11.8.0-8 NEW XML SYNTAX CHANGES Mike Dangelo WFO CTP 9-22-2011 to add in remarks and lines which will allow Zone-based products (Alaska TIM) Phil Kurimski WFO DTX 2-28-2012 to fix parse string issues + Qinglu Lin 04-04-2012 DR 14691. Added tag. --> @@ -202,6 +203,7 @@ NAME STATE + FE_AREA countyTypes.txt FIPS diff --git a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/severeWeatherStatement.xml b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/severeWeatherStatement.xml index 57c3614fd7..a80e071ac7 100644 --- a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/severeWeatherStatement.xml +++ b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/severeWeatherStatement.xml @@ -5,6 +5,7 @@ Mike Dangelo WFO CTP 9-22-2011 to add in remarks and lines which will allow Zone-based products (Alaska TIM) EVAN BOOKBINDER WFO EAX 11-4-2011 removed bulletDefaults that prevented auto selection EVAN BOOKBINDER WFO EAX 2-24-2012 corrected parseString errors that prevented auto selection + Qinglu Lin 04-04-2012 DR 14691. Added tag. --> NAME STATE + FE_AREA countyTypes.txt FIPS diff --git a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/shortTermForecast.xml b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/shortTermForecast.xml index 88edc1bde3..36aa500757 100644 --- a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/shortTermForecast.xml +++ b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/shortTermForecast.xml @@ -1,7 +1,9 @@ - + @@ -138,6 +140,7 @@ NAME NAME STATE + FE_AREA countyTypes.txt STATE_ZONE diff --git a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/significantWeatherAdvisory.xml b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/significantWeatherAdvisory.xml index 398ca991df..153b333332 100644 --- a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/significantWeatherAdvisory.xml +++ b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/significantWeatherAdvisory.xml @@ -5,6 +5,7 @@ 9-15-2011 Merge in OB11.8.0-8 Coding Changes, Zone Codes Mike Dangelo 02-27-2012 minor tweaks Phil Kurimski 3-01-2012 + Qinglu Lin 04-04-2012 DR 14691. Added tag. --> @@ -137,6 +138,7 @@ NAME NAME STATE + FE_AREA countyTypes.txt STATE_ZONE diff --git a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/specialWeatherStatement.xml b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/specialWeatherStatement.xml index a9500f8f79..b006fecc36 100644 --- a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/specialWeatherStatement.xml +++ b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/specialWeatherStatement.xml @@ -1,6 +1,7 @@ @@ -78,6 +79,7 @@ NAME NAME STATE + FE_AREA countyTypes.txt STATE_ZONE NAME diff --git a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/sws_county.xml b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/sws_county.xml index c6f1b6eebd..8c0112aa8a 100644 --- a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/sws_county.xml +++ b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/sws_county.xml @@ -1,4 +1,6 @@ + @@ -68,6 +70,7 @@ COUNTYNAME NAME STATE + FE_AREA countyTypes.txt FIPS NAME diff --git a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/tornadoWarning.xml b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/tornadoWarning.xml index 99ea8b582f..ce7f37c0dd 100644 --- a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/tornadoWarning.xml +++ b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/tornadoWarning.xml @@ -6,6 +6,7 @@ 9-15-2011 Merge in OB11.8.0-8 NEW XML SYNTAX CHANGES Mike Dangelo WFO CTP 9-22-2011 to add in remarks and lines which will allow Zone-based products (Alaska TIM) EVAN BOOKBINDER WFO EAX 2-24-2012 corrected parseString errors that prevented auto selection + Qinglu Lin 04-04-2012 DR 14691. Added tag. --> @@ -39,7 +40,7 @@ true - true + false 30 @@ -190,6 +191,7 @@ NAME STATE + FE_AREA countyTypes.txt FIPS diff --git a/edexOsgi/build.edex/esb/etc/ingestDat.sh b/edexOsgi/build.edex/esb/etc/ingestDat.sh index a90e7a6d4b..85400eab6b 100644 --- a/edexOsgi/build.edex/esb/etc/ingestDat.sh +++ b/edexOsgi/build.edex/esb/etc/ingestDat.sh @@ -21,7 +21,7 @@ export INIT_MEM=256 # in Meg if [ $HIGH_MEM_FLAG == "on" ]; then - export MAX_MEM=1280 # in Meg + export MAX_MEM=1792 # in Meg else export MAX_MEM=768 # in Meg fi diff --git a/edexOsgi/build.edex/opt/db/ddl/ncep/loadState.sql b/edexOsgi/build.edex/opt/db/ddl/ncep/loadState.sql index 8d19db7f7e..50f0553e72 100644 --- a/edexOsgi/build.edex/opt/db/ddl/ncep/loadState.sql +++ b/edexOsgi/build.edex/opt/db/ddl/ncep/loadState.sql @@ -1,60 +1,60 @@ COPY stns.STATE (STATEID , STATENAME) FROM stdin with delimiter as ','; -AL,ALABAMA -AK,ALASKA -AZ,ARIZONA -AR,ARKANSAS -CA,CALIFORNIA -CO,COLORADO -CT,CONNECTICUT -DE,DELAWARE -DC,DISTRICT OF COLUMBIA -FL,FLORIDA -GA,GEORGIA -HI,HAWAII -ID,IDAHO -IL,ILLINOIS -IN,INDIANA -IA,IOWA -KS,KANSAS -KY,KENTUCKY -LA,LOUISIANA -ME,MAINE -MD,MARYLAND -MA,MASSACHUSETTS -MI,MICHIGAN -MN,MINNESOTA -MS,MISSISSIPPI -MO,MISSOURI -MT,MONTANA -NE,NEBRASKA -NV,NEVADA -NH,NEW HAMPSHIRE -NJ,NEW JERSEY -NM,NEW MEXICO -NY,NEW YORK -NC,NORTH CAROLINA -ND,NORTH DAKOTA -OH,OHIO -OK,OKLAHOMA -OR,OREGON -PA,PENNSYLVANIA -RI,RHODE ISLAND -SC,SOUTH CAROLINA -SD,SOUTH DAKOTA -TN,TENNESSEE -TX,TEXAS -UT,UTAH -VT,VERMONT -VA,VIRGINIA -WA,WASHINGTON -WV,WEST VIRGINIA -WI,WISCONSIN -WY,WYOMING -LH,LAKE HURON -LO,LAKE ONTARIO -LM,LAKE MICHIGAN -LE,LAKE ERIE -LS,LAKE SUPERIOR -CW,COASTAL WATERS -PR,PUERTO RICO +AL,ALABAMA +AK,ALASKA +AZ,ARIZONA +AR,ARKANSAS +CA,CALIFORNIA +CO,COLORADO +CT,CONNECTICUT +DE,DELAWARE +DC,DISTRICT OF COLUMBIA +FL,FLORIDA +GA,GEORGIA +HI,HAWAII +ID,IDAHO +IL,ILLINOIS +IN,INDIANA +IA,IOWA +KS,KANSAS +KY,KENTUCKY +LA,LOUISIANA +ME,MAINE +MD,MARYLAND +MA,MASSACHUSETTS +MI,MICHIGAN +MN,MINNESOTA +MS,MISSISSIPPI +MO,MISSOURI +MT,MONTANA +NE,NEBRASKA +NV,NEVADA +NH,NEW HAMPSHIRE +NJ,NEW JERSEY +NM,NEW MEXICO +NY,NEW YORK +NC,NORTH CAROLINA +ND,NORTH DAKOTA +OH,OHIO +OK,OKLAHOMA +OR,OREGON +PA,PENNSYLVANIA +RI,RHODE ISLAND +SC,SOUTH CAROLINA +SD,SOUTH DAKOTA +TN,TENNESSEE +TX,TEXAS +UT,UTAH +VT,VERMONT +VA,VIRGINIA +WA,WASHINGTON +WV,WEST VIRGINIA +WI,WISCONSIN +WY,WYOMING +LH,LAKE HURON +LO,LAKE ONTARIO +LM,LAKE MICHIGAN +LE,LAKE ERIE +LS,LAKE SUPERIOR +CW,COASTAL WATERS +PR,PUERTO RICO \. diff --git a/edexOsgi/build.edex/opt/db/ddl/setup/postgresql.conf b/edexOsgi/build.edex/opt/db/ddl/setup/postgresql.conf index cca205eebc..29d7883eaa 100644 --- a/edexOsgi/build.edex/opt/db/ddl/setup/postgresql.conf +++ b/edexOsgi/build.edex/opt/db/ddl/setup/postgresql.conf @@ -1,471 +1,471 @@ -# ----------------------------- -# PostgreSQL configuration file -# ----------------------------- -# -# This file consists of lines of the form: -# -# name = value -# -# (The '=' is optional.) White space may be used. Comments are introduced -# with '#' anywhere on a line. The complete list of option names and -# allowed values can be found in the PostgreSQL documentation. The -# commented-out settings shown in this file represent the default values. -# -# Please note that re-commenting a setting is NOT sufficient to revert it -# to the default value, unless you restart the server. -# -# Any option can also be given as a command line switch to the server, -# e.g., 'postgres -c log_connections=on'. Some options can be changed at -# run-time with the 'SET' SQL command. -# -# This file is read on server startup and when the server receives a -# SIGHUP. If you edit the file on a running system, you have to SIGHUP the -# server for the changes to take effect, or use "pg_ctl reload". Some -# settings, which are marked below, require a server shutdown and restart -# to take effect. -# -# Memory units: kB = kilobytes MB = megabytes GB = gigabytes -# Time units: ms = milliseconds s = seconds min = minutes h = hours d = days - - -#--------------------------------------------------------------------------- -# FILE LOCATIONS -#--------------------------------------------------------------------------- - -# The default values of these variables are driven from the -D command line -# switch or PGDATA environment variable, represented here as ConfigDir. - -#data_directory = 'ConfigDir' # use data in another directory - # (change requires restart) -#hba_file = 'ConfigDir/pg_hba.conf' # host-based authentication file - # (change requires restart) -#ident_file = 'ConfigDir/pg_ident.conf' # ident configuration file - # (change requires restart) - -# If external_pid_file is not explicitly set, no extra PID file is written. -#external_pid_file = '(none)' # write an extra PID file - # (change requires restart) - - -#--------------------------------------------------------------------------- -# CONNECTIONS AND AUTHENTICATION -#--------------------------------------------------------------------------- - -# - Connection Settings - - -listen_addresses = '*' # what IP address(es) to listen on; - # comma-separated list of addresses; - # defaults to 'localhost', '*' = all - # (change requires restart) -#port = 5432 # (change requires restart) -max_connections = 300 # (change requires restart) -# Note: increasing max_connections costs ~400 bytes of shared memory per -# connection slot, plus lock space (see max_locks_per_transaction). You -# might also need to raise shared_buffers to support more connections. -#superuser_reserved_connections = 3 # (change requires restart) -#unix_socket_directory = '' # (change requires restart) -#unix_socket_group = '' # (change requires restart) -#unix_socket_permissions = 0777 # octal - # (change requires restart) -#bonjour_name = '' # defaults to the computer name - # (change requires restart) - -# - Security & Authentication - - -#authentication_timeout = 1min # 1s-600s -#ssl = off # (change requires restart) -#password_encryption = on -#db_user_namespace = off - -# Kerberos -#krb_server_keyfile = '' # (change requires restart) -#krb_srvname = 'postgres' # (change requires restart) -#krb_server_hostname = '' # empty string matches any keytab entry - # (change requires restart) -#krb_caseins_users = off # (change requires restart) - -# - TCP Keepalives - -# see 'man 7 tcp' for details - -#tcp_keepalives_idle = 0 # TCP_KEEPIDLE, in seconds; - # 0 selects the system default -#tcp_keepalives_interval = 0 # TCP_KEEPINTVL, in seconds; - # 0 selects the system default -#tcp_keepalives_count = 0 # TCP_KEEPCNT; - # 0 selects the system default - - -#--------------------------------------------------------------------------- -# RESOURCE USAGE (except WAL) -#--------------------------------------------------------------------------- - -# - Memory - - -shared_buffers = 1024MB # min 128kB or max_connections*16kB - # (change requires restart) -temp_buffers = 16MB # min 800kB -#max_prepared_transactions = 5 # can be 0 or more - # (change requires restart) -# Note: increasing max_prepared_transactions costs ~600 bytes of shared memory -# per transaction slot, plus lock space (see max_locks_per_transaction). -work_mem = 8MB # min 64kB -maintenance_work_mem = 32MB # min 1MB -#max_stack_depth = 2MB # min 100kB - -# - Free Space Map - - -max_fsm_pages = 153600 # min max_fsm_relations*16, 6 bytes each - # (change requires restart) -#max_fsm_relations = 1000 # min 100, ~70 bytes each - # (change requires restart) - -# - Kernel Resource Usage - - -#max_files_per_process = 1000 # min 25 - # (change requires restart) -#shared_preload_libraries = '' # (change requires restart) - -# - Cost-Based Vacuum Delay - - -#vacuum_cost_delay = 0 # 0-1000 milliseconds -#vacuum_cost_page_hit = 1 # 0-10000 credits -#vacuum_cost_page_miss = 10 # 0-10000 credits -#vacuum_cost_page_dirty = 20 # 0-10000 credits -#vacuum_cost_limit = 200 # 0-10000 credits - -# - Background writer - - -#bgwriter_delay = 200ms # 10-10000ms between rounds -#bgwriter_lru_percent = 1.0 # 0-100% of LRU buffers scanned/round -#bgwriter_lru_maxpages = 5 # 0-1000 buffers max written/round -#bgwriter_all_percent = 0.333 # 0-100% of all buffers scanned/round -#bgwriter_all_maxpages = 5 # 0-1000 buffers max written/round - - -#--------------------------------------------------------------------------- -# WRITE AHEAD LOG -#--------------------------------------------------------------------------- - -# - Settings - - -fsync = off # turns forced synchronization on or off -#wal_sync_method = fsync # the default is the first option - # supported by the operating system: - # open_datasync - # fdatasync - # fsync - # fsync_writethrough - # open_sync -#full_page_writes = on # recover from partial page writes -#wal_buffers = 64kB # min 32kB - # (change requires restart) -commit_delay = 50000 # range 0-100000, in microseconds -commit_siblings = 5 # range 1-1000 - -# - Checkpoints - - -checkpoint_segments = 10 # in logfile segments, min 1, 16MB each -#checkpoint_timeout = 5min # range 30s-1h -#checkpoint_warning = 30s # 0 is off - -# - Archiving - - -#archive_command = '' # command to use to archive a logfile segment -#archive_timeout = 0 # force a logfile segment switch after this - # many seconds; 0 is off - - -#--------------------------------------------------------------------------- -# QUERY TUNING -#--------------------------------------------------------------------------- - -# - Planner Method Configuration - - -#enable_bitmapscan = on -#enable_hashagg = on -#enable_hashjoin = on -#enable_indexscan = on -#enable_mergejoin = on -#enable_nestloop = on -#enable_seqscan = on -#enable_sort = on -#enable_tidscan = on - -# - Planner Cost Constants - - -#seq_page_cost = 1.0 # measured on an arbitrary scale -#random_page_cost = 4.0 # same scale as above -#cpu_tuple_cost = 0.01 # same scale as above -#cpu_index_tuple_cost = 0.005 # same scale as above -#cpu_operator_cost = 0.0025 # same scale as above -effective_cache_size = 2048MB - -# - Genetic Query Optimizer - - -#geqo = on -#geqo_threshold = 12 -#geqo_effort = 5 # range 1-10 -#geqo_pool_size = 0 # selects default based on effort -#geqo_generations = 0 # selects default based on effort -#geqo_selection_bias = 2.0 # range 1.5-2.0 - -# - Other Planner Options - - -#default_statistics_target = 10 # range 1-1000 -#constraint_exclusion = off -#from_collapse_limit = 8 -#join_collapse_limit = 8 # 1 disables collapsing of explicit - # JOINs - - -#--------------------------------------------------------------------------- -# ERROR REPORTING AND LOGGING -#--------------------------------------------------------------------------- - -# - Where to Log - - -#log_destination = 'stderr' # Valid values are combinations of - # stderr, syslog and eventlog, - # depending on platform. - -# This is used when logging to stderr: -logging_collector = on # Enable capturing of stderr into log - # files - # (change requires restart) - -# These are only used if redirect_stderr is on: -log_directory = 'pg_log' # Directory where log files are written - # Can be absolute or relative to PGDATA -#log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log' # Log file name pattern. - # Can include strftime() escapes -log_truncate_on_rotation = on # If on, any existing log file of the same - # name as the new log file will be - # truncated rather than appended to. But - # such truncation only occurs on - # time-driven rotation, not on restarts - # or size-driven rotation. Default is - # off, meaning append to existing files - # in all cases. -log_rotation_age = 1d # Automatic rotation of logfiles will - # happen after that time. 0 to - # disable. -log_rotation_size = 0 # Automatic rotation of logfiles will - # happen after that much log - # output. 0 to disable. - -# These are relevant when logging to syslog: -#syslog_facility = 'LOCAL0' -#syslog_ident = 'postgres' - - -# - When to Log - - -#client_min_messages = notice # Values, in order of decreasing detail: - # debug5 - # debug4 - # debug3 - # debug2 - # debug1 - # log - # notice - # warning - # error - -#log_min_messages = notice # Values, in order of decreasing detail: - # debug5 - # debug4 - # debug3 - # debug2 - # debug1 - # info - # notice - # warning - # error - # log - # fatal - # panic - -#log_error_verbosity = default # terse, default, or verbose messages - -log_min_error_statement = log # Values in order of increasing severity: - # debug5 - # debug4 - # debug3 - # debug2 - # debug1 - # info - # notice - # warning - # error - # log - # fatal - # panic (effectively off) - -#log_min_duration_statement = -1 # -1 is disabled, 0 logs all statements - # and their durations. - -#silent_mode = off # DO NOT USE without syslog or - # redirect_stderr - # (change requires restart) - -# - What to Log - - -#debug_print_parse = off -#debug_print_rewritten = off -#debug_print_plan = off -#debug_pretty_print = off -#log_connections = off -#log_disconnections = off -#log_duration = off -log_line_prefix='%t %x %d : %h : ' - # Special values: - # %u = user name - # %d = database name - # %r = remote host and port - # %h = remote host - # %p = PID - # %t = timestamp (no milliseconds) - # %m = timestamp with milliseconds - # %i = command tag - # %c = session id - # %l = session line number - # %s = session start timestamp - # %x = transaction id - # %q = stop here in non-session - # processes - # %% = '%' - # e.g. '<%u%%%d> ' -#log_statement = 'none' # none, ddl, mod, all -#log_hostname = off - - -#--------------------------------------------------------------------------- -# RUNTIME STATISTICS -#--------------------------------------------------------------------------- - -# - Query/Index Statistics Collector - - -#stats_command_string = on -#update_process_title = on - -#stats_block_level = off -track_counts = on -#stats_reset_on_server_start = off # (change requires restart) - - -# - Statistics Monitoring - - -#log_parser_stats = off -#log_planner_stats = off -#log_executor_stats = off -#log_statement_stats = off - - -#--------------------------------------------------------------------------- -# AUTOVACUUM PARAMETERS -#--------------------------------------------------------------------------- - -autovacuum = on # enable autovacuum subprocess? - # 'on' requires stats_start_collector - # and stats_row_level to also be on -#autovacuum_naptime = 1min # time between autovacuum runs -#autovacuum_vacuum_threshold = 500 # min # of tuple updates before - # vacuum -#autovacuum_analyze_threshold = 250 # min # of tuple updates before - # analyze -#autovacuum_vacuum_scale_factor = 0.2 # fraction of rel size before - # vacuum -#autovacuum_analyze_scale_factor = 0.1 # fraction of rel size before - # analyze -#autovacuum_freeze_max_age = 200000000 # maximum XID age before forced vacuum - # (change requires restart) -#autovacuum_vacuum_cost_delay = -1 # default vacuum cost delay for - # autovacuum, -1 means use - # vacuum_cost_delay -#autovacuum_vacuum_cost_limit = -1 # default vacuum cost limit for - # autovacuum, -1 means use - # vacuum_cost_limit - - -#--------------------------------------------------------------------------- -# CLIENT CONNECTION DEFAULTS -#--------------------------------------------------------------------------- - -# - Statement Behavior - - -#search_path = '"$user",public' # schema names -#default_tablespace = '' # a tablespace name, '' uses - # the default -#check_function_bodies = on -#default_transaction_isolation = 'read committed' -#default_transaction_read_only = off -#statement_timeout = 0 # 0 is disabled -#vacuum_freeze_min_age = 100000000 - -# - Locale and Formatting - - -datestyle = 'iso, mdy' -timezone = GMT # actually, defaults to TZ - # environment setting -#timezone_abbreviations = 'Default' # select the set of available timezone - # abbreviations. Currently, there are - # Default - # Australia - # India - # However you can also create your own - # file in share/timezonesets/. -#extra_float_digits = 0 # min -15, max 2 -#client_encoding = 'en_US.UTF-8' # actually, defaults to database - # encoding - -# These settings are initialized by initdb -- they might be changed -lc_messages = 'en_US.UTF-8' # locale for system error message - # strings -lc_monetary = 'en_US.UTF-8' # locale for monetary formatting -lc_numeric = 'en_US.UTF-8' # locale for number formatting -lc_time = 'en_US.UTF-8' # locale for time formatting - -# - Other Defaults - - -#explain_pretty_print = on -#dynamic_library_path = '$libdir' -#local_preload_libraries = '' - - -#--------------------------------------------------------------------------- -# LOCK MANAGEMENT -#--------------------------------------------------------------------------- - -#deadlock_timeout = 1s -#max_locks_per_transaction = 64 # min 10 - # (change requires restart) -# Note: each lock table slot uses ~270 bytes of shared memory, and there are -# max_locks_per_transaction * (max_connections + max_prepared_transactions) -# lock table slots. - - -#--------------------------------------------------------------------------- -# VERSION/PLATFORM COMPATIBILITY -#--------------------------------------------------------------------------- - -# - Previous Postgres Versions - - -#add_missing_from = off -#array_nulls = on -#backslash_quote = safe_encoding # on, off, or safe_encoding -#default_with_oids = off -#escape_string_warning = on -#standard_conforming_strings = off -#regex_flavor = advanced # advanced, extended, or basic -#sql_inheritance = on - -# - Other Platforms & Clients - - -#transform_null_equals = off - - -#--------------------------------------------------------------------------- -# CUSTOMIZED OPTIONS -#--------------------------------------------------------------------------- - -#custom_variable_classes = '' # list of custom variable class names +# ----------------------------- +# PostgreSQL configuration file +# ----------------------------- +# +# This file consists of lines of the form: +# +# name = value +# +# (The '=' is optional.) White space may be used. Comments are introduced +# with '#' anywhere on a line. The complete list of option names and +# allowed values can be found in the PostgreSQL documentation. The +# commented-out settings shown in this file represent the default values. +# +# Please note that re-commenting a setting is NOT sufficient to revert it +# to the default value, unless you restart the server. +# +# Any option can also be given as a command line switch to the server, +# e.g., 'postgres -c log_connections=on'. Some options can be changed at +# run-time with the 'SET' SQL command. +# +# This file is read on server startup and when the server receives a +# SIGHUP. If you edit the file on a running system, you have to SIGHUP the +# server for the changes to take effect, or use "pg_ctl reload". Some +# settings, which are marked below, require a server shutdown and restart +# to take effect. +# +# Memory units: kB = kilobytes MB = megabytes GB = gigabytes +# Time units: ms = milliseconds s = seconds min = minutes h = hours d = days + + +#--------------------------------------------------------------------------- +# FILE LOCATIONS +#--------------------------------------------------------------------------- + +# The default values of these variables are driven from the -D command line +# switch or PGDATA environment variable, represented here as ConfigDir. + +#data_directory = 'ConfigDir' # use data in another directory + # (change requires restart) +#hba_file = 'ConfigDir/pg_hba.conf' # host-based authentication file + # (change requires restart) +#ident_file = 'ConfigDir/pg_ident.conf' # ident configuration file + # (change requires restart) + +# If external_pid_file is not explicitly set, no extra PID file is written. +#external_pid_file = '(none)' # write an extra PID file + # (change requires restart) + + +#--------------------------------------------------------------------------- +# CONNECTIONS AND AUTHENTICATION +#--------------------------------------------------------------------------- + +# - Connection Settings - + +listen_addresses = '*' # what IP address(es) to listen on; + # comma-separated list of addresses; + # defaults to 'localhost', '*' = all + # (change requires restart) +#port = 5432 # (change requires restart) +max_connections = 300 # (change requires restart) +# Note: increasing max_connections costs ~400 bytes of shared memory per +# connection slot, plus lock space (see max_locks_per_transaction). You +# might also need to raise shared_buffers to support more connections. +#superuser_reserved_connections = 3 # (change requires restart) +#unix_socket_directory = '' # (change requires restart) +#unix_socket_group = '' # (change requires restart) +#unix_socket_permissions = 0777 # octal + # (change requires restart) +#bonjour_name = '' # defaults to the computer name + # (change requires restart) + +# - Security & Authentication - + +#authentication_timeout = 1min # 1s-600s +#ssl = off # (change requires restart) +#password_encryption = on +#db_user_namespace = off + +# Kerberos +#krb_server_keyfile = '' # (change requires restart) +#krb_srvname = 'postgres' # (change requires restart) +#krb_server_hostname = '' # empty string matches any keytab entry + # (change requires restart) +#krb_caseins_users = off # (change requires restart) + +# - TCP Keepalives - +# see 'man 7 tcp' for details + +#tcp_keepalives_idle = 0 # TCP_KEEPIDLE, in seconds; + # 0 selects the system default +#tcp_keepalives_interval = 0 # TCP_KEEPINTVL, in seconds; + # 0 selects the system default +#tcp_keepalives_count = 0 # TCP_KEEPCNT; + # 0 selects the system default + + +#--------------------------------------------------------------------------- +# RESOURCE USAGE (except WAL) +#--------------------------------------------------------------------------- + +# - Memory - + +shared_buffers = 1024MB # min 128kB or max_connections*16kB + # (change requires restart) +temp_buffers = 16MB # min 800kB +#max_prepared_transactions = 5 # can be 0 or more + # (change requires restart) +# Note: increasing max_prepared_transactions costs ~600 bytes of shared memory +# per transaction slot, plus lock space (see max_locks_per_transaction). +work_mem = 8MB # min 64kB +maintenance_work_mem = 32MB # min 1MB +#max_stack_depth = 2MB # min 100kB + +# - Free Space Map - + +max_fsm_pages = 3500000 # min max_fsm_relations*16, 6 bytes each + # (change requires restart) +max_fsm_relations = 1500 # min 100, ~70 bytes each + # (change requires restart) + +# - Kernel Resource Usage - + +#max_files_per_process = 1000 # min 25 + # (change requires restart) +#shared_preload_libraries = '' # (change requires restart) + +# - Cost-Based Vacuum Delay - + +#vacuum_cost_delay = 0 # 0-1000 milliseconds +#vacuum_cost_page_hit = 1 # 0-10000 credits +#vacuum_cost_page_miss = 10 # 0-10000 credits +#vacuum_cost_page_dirty = 20 # 0-10000 credits +#vacuum_cost_limit = 200 # 0-10000 credits + +# - Background writer - + +#bgwriter_delay = 200ms # 10-10000ms between rounds +#bgwriter_lru_percent = 1.0 # 0-100% of LRU buffers scanned/round +#bgwriter_lru_maxpages = 5 # 0-1000 buffers max written/round +#bgwriter_all_percent = 0.333 # 0-100% of all buffers scanned/round +#bgwriter_all_maxpages = 5 # 0-1000 buffers max written/round + + +#--------------------------------------------------------------------------- +# WRITE AHEAD LOG +#--------------------------------------------------------------------------- + +# - Settings - + +fsync = off # turns forced synchronization on or off +#wal_sync_method = fsync # the default is the first option + # supported by the operating system: + # open_datasync + # fdatasync + # fsync + # fsync_writethrough + # open_sync +#full_page_writes = on # recover from partial page writes +#wal_buffers = 64kB # min 32kB + # (change requires restart) +commit_delay = 50000 # range 0-100000, in microseconds +commit_siblings = 5 # range 1-1000 + +# - Checkpoints - + +checkpoint_segments = 10 # in logfile segments, min 1, 16MB each +#checkpoint_timeout = 5min # range 30s-1h +#checkpoint_warning = 30s # 0 is off + +# - Archiving - + +#archive_command = '' # command to use to archive a logfile segment +#archive_timeout = 0 # force a logfile segment switch after this + # many seconds; 0 is off + + +#--------------------------------------------------------------------------- +# QUERY TUNING +#--------------------------------------------------------------------------- + +# - Planner Method Configuration - + +#enable_bitmapscan = on +#enable_hashagg = on +#enable_hashjoin = on +#enable_indexscan = on +#enable_mergejoin = on +#enable_nestloop = on +#enable_seqscan = on +#enable_sort = on +#enable_tidscan = on + +# - Planner Cost Constants - + +#seq_page_cost = 1.0 # measured on an arbitrary scale +#random_page_cost = 4.0 # same scale as above +#cpu_tuple_cost = 0.01 # same scale as above +#cpu_index_tuple_cost = 0.005 # same scale as above +#cpu_operator_cost = 0.0025 # same scale as above +effective_cache_size = 2048MB + +# - Genetic Query Optimizer - + +#geqo = on +#geqo_threshold = 12 +#geqo_effort = 5 # range 1-10 +#geqo_pool_size = 0 # selects default based on effort +#geqo_generations = 0 # selects default based on effort +#geqo_selection_bias = 2.0 # range 1.5-2.0 + +# - Other Planner Options - + +#default_statistics_target = 10 # range 1-1000 +#constraint_exclusion = off +#from_collapse_limit = 8 +#join_collapse_limit = 8 # 1 disables collapsing of explicit + # JOINs + + +#--------------------------------------------------------------------------- +# ERROR REPORTING AND LOGGING +#--------------------------------------------------------------------------- + +# - Where to Log - + +#log_destination = 'stderr' # Valid values are combinations of + # stderr, syslog and eventlog, + # depending on platform. + +# This is used when logging to stderr: +logging_collector = on # Enable capturing of stderr into log + # files + # (change requires restart) + +# These are only used if redirect_stderr is on: +log_directory = 'pg_log' # Directory where log files are written + # Can be absolute or relative to PGDATA +#log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log' # Log file name pattern. + # Can include strftime() escapes +log_truncate_on_rotation = on # If on, any existing log file of the same + # name as the new log file will be + # truncated rather than appended to. But + # such truncation only occurs on + # time-driven rotation, not on restarts + # or size-driven rotation. Default is + # off, meaning append to existing files + # in all cases. +log_rotation_age = 1d # Automatic rotation of logfiles will + # happen after that time. 0 to + # disable. +log_rotation_size = 0 # Automatic rotation of logfiles will + # happen after that much log + # output. 0 to disable. + +# These are relevant when logging to syslog: +#syslog_facility = 'LOCAL0' +#syslog_ident = 'postgres' + + +# - When to Log - + +#client_min_messages = notice # Values, in order of decreasing detail: + # debug5 + # debug4 + # debug3 + # debug2 + # debug1 + # log + # notice + # warning + # error + +#log_min_messages = notice # Values, in order of decreasing detail: + # debug5 + # debug4 + # debug3 + # debug2 + # debug1 + # info + # notice + # warning + # error + # log + # fatal + # panic + +#log_error_verbosity = default # terse, default, or verbose messages + +log_min_error_statement = log # Values in order of increasing severity: + # debug5 + # debug4 + # debug3 + # debug2 + # debug1 + # info + # notice + # warning + # error + # log + # fatal + # panic (effectively off) + +#log_min_duration_statement = -1 # -1 is disabled, 0 logs all statements + # and their durations. + +#silent_mode = off # DO NOT USE without syslog or + # redirect_stderr + # (change requires restart) + +# - What to Log - + +#debug_print_parse = off +#debug_print_rewritten = off +#debug_print_plan = off +#debug_pretty_print = off +#log_connections = off +#log_disconnections = off +#log_duration = off +log_line_prefix='%t %x %d : %h : ' + # Special values: + # %u = user name + # %d = database name + # %r = remote host and port + # %h = remote host + # %p = PID + # %t = timestamp (no milliseconds) + # %m = timestamp with milliseconds + # %i = command tag + # %c = session id + # %l = session line number + # %s = session start timestamp + # %x = transaction id + # %q = stop here in non-session + # processes + # %% = '%' + # e.g. '<%u%%%d> ' +#log_statement = 'none' # none, ddl, mod, all +#log_hostname = off + + +#--------------------------------------------------------------------------- +# RUNTIME STATISTICS +#--------------------------------------------------------------------------- + +# - Query/Index Statistics Collector - + +#stats_command_string = on +#update_process_title = on + +#stats_block_level = off +track_counts = on +#stats_reset_on_server_start = off # (change requires restart) + + +# - Statistics Monitoring - + +#log_parser_stats = off +#log_planner_stats = off +#log_executor_stats = off +#log_statement_stats = off + + +#--------------------------------------------------------------------------- +# AUTOVACUUM PARAMETERS +#--------------------------------------------------------------------------- + +autovacuum = on # enable autovacuum subprocess? + # 'on' requires stats_start_collector + # and stats_row_level to also be on +#autovacuum_naptime = 1min # time between autovacuum runs +#autovacuum_vacuum_threshold = 500 # min # of tuple updates before + # vacuum +#autovacuum_analyze_threshold = 250 # min # of tuple updates before + # analyze +#autovacuum_vacuum_scale_factor = 0.2 # fraction of rel size before + # vacuum +#autovacuum_analyze_scale_factor = 0.1 # fraction of rel size before + # analyze +#autovacuum_freeze_max_age = 200000000 # maximum XID age before forced vacuum + # (change requires restart) +#autovacuum_vacuum_cost_delay = -1 # default vacuum cost delay for + # autovacuum, -1 means use + # vacuum_cost_delay +#autovacuum_vacuum_cost_limit = -1 # default vacuum cost limit for + # autovacuum, -1 means use + # vacuum_cost_limit + + +#--------------------------------------------------------------------------- +# CLIENT CONNECTION DEFAULTS +#--------------------------------------------------------------------------- + +# - Statement Behavior - + +#search_path = '"$user",public' # schema names +#default_tablespace = '' # a tablespace name, '' uses + # the default +#check_function_bodies = on +#default_transaction_isolation = 'read committed' +#default_transaction_read_only = off +#statement_timeout = 0 # 0 is disabled +#vacuum_freeze_min_age = 100000000 + +# - Locale and Formatting - + +datestyle = 'iso, mdy' +timezone = GMT # actually, defaults to TZ + # environment setting +#timezone_abbreviations = 'Default' # select the set of available timezone + # abbreviations. Currently, there are + # Default + # Australia + # India + # However you can also create your own + # file in share/timezonesets/. +#extra_float_digits = 0 # min -15, max 2 +#client_encoding = 'en_US.UTF-8' # actually, defaults to database + # encoding + +# These settings are initialized by initdb -- they might be changed +lc_messages = 'en_US.UTF-8' # locale for system error message + # strings +lc_monetary = 'en_US.UTF-8' # locale for monetary formatting +lc_numeric = 'en_US.UTF-8' # locale for number formatting +lc_time = 'en_US.UTF-8' # locale for time formatting + +# - Other Defaults - + +#explain_pretty_print = on +#dynamic_library_path = '$libdir' +#local_preload_libraries = '' + + +#--------------------------------------------------------------------------- +# LOCK MANAGEMENT +#--------------------------------------------------------------------------- + +#deadlock_timeout = 1s +#max_locks_per_transaction = 64 # min 10 + # (change requires restart) +# Note: each lock table slot uses ~270 bytes of shared memory, and there are +# max_locks_per_transaction * (max_connections + max_prepared_transactions) +# lock table slots. + + +#--------------------------------------------------------------------------- +# VERSION/PLATFORM COMPATIBILITY +#--------------------------------------------------------------------------- + +# - Previous Postgres Versions - + +#add_missing_from = off +#array_nulls = on +#backslash_quote = safe_encoding # on, off, or safe_encoding +#default_with_oids = off +#escape_string_warning = on +#standard_conforming_strings = off +#regex_flavor = advanced # advanced, extended, or basic +#sql_inheritance = on + +# - Other Platforms & Clients - + +#transform_null_equals = off + + +#--------------------------------------------------------------------------- +# CUSTOMIZED OPTIONS +#--------------------------------------------------------------------------- + +#custom_variable_classes = '' # list of custom variable class names diff --git a/edexOsgi/com.raytheon.edex.adaptersrv/com.raytheon.edex.adaptersrv.ecl b/edexOsgi/com.raytheon.edex.adaptersrv/com.raytheon.edex.adaptersrv.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.edex.autobldsrv/com.raytheon.edex.autobldsrv.ecl b/edexOsgi/com.raytheon.edex.autobldsrv/com.raytheon.edex.autobldsrv.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.edex.collaboration/com.raytheon.edex.collaboration.ecl b/edexOsgi/com.raytheon.edex.collaboration/com.raytheon.edex.collaboration.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.edex.common/com.raytheon.edex.common.ecl b/edexOsgi/com.raytheon.edex.common/com.raytheon.edex.common.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.edex.feature.uframe/com.raytheon.edex.feature.uframe.ecl b/edexOsgi/com.raytheon.edex.feature.uframe/com.raytheon.edex.feature.uframe.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.edex.ingestsrv/com.raytheon.edex.ingestsrv.ecl b/edexOsgi/com.raytheon.edex.ingestsrv/com.raytheon.edex.ingestsrv.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.edex.kml/com.raytheon.edex.kml.ecl b/edexOsgi/com.raytheon.edex.kml/com.raytheon.edex.kml.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.edex.meteolib/com.raytheon.edex.meteolib.ecl b/edexOsgi/com.raytheon.edex.meteolib/com.raytheon.edex.meteolib.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.edex.monitorsrv/com.raytheon.edex.monitorsrv.ecl b/edexOsgi/com.raytheon.edex.monitorsrv/com.raytheon.edex.monitorsrv.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.edex.msgutility/com.raytheon.edex.msgutility.ecl b/edexOsgi/com.raytheon.edex.msgutility/com.raytheon.edex.msgutility.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.edex.notifysrv/com.raytheon.edex.notifysrv.ecl b/edexOsgi/com.raytheon.edex.notifysrv/com.raytheon.edex.notifysrv.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.edex.plugin.airep/com.raytheon.edex.plugin.airep.ecl b/edexOsgi/com.raytheon.edex.plugin.airep/com.raytheon.edex.plugin.airep.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.edex.plugin.binlightning/com.raytheon.edex.plugin.binlightning.ecl b/edexOsgi/com.raytheon.edex.plugin.binlightning/com.raytheon.edex.plugin.binlightning.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.edex.plugin.bufrmos/com.raytheon.edex.plugin.bufrmos.ecl b/edexOsgi/com.raytheon.edex.plugin.bufrmos/com.raytheon.edex.plugin.bufrmos.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.edex.plugin.bufrua/com.raytheon.edex.plugin.bufrua.ecl b/edexOsgi/com.raytheon.edex.plugin.bufrua/com.raytheon.edex.plugin.bufrua.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.edex.plugin.ccfp/com.raytheon.edex.plugin.ccfp.ecl b/edexOsgi/com.raytheon.edex.plugin.ccfp/com.raytheon.edex.plugin.ccfp.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/com.raytheon.edex.plugin.gfe.ecl b/edexOsgi/com.raytheon.edex.plugin.gfe/com.raytheon.edex.plugin.gfe.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/src/com/raytheon/edex/plugin/gfe/db/dao/GFEDao.java b/edexOsgi/com.raytheon.edex.plugin.gfe/src/com/raytheon/edex/plugin/gfe/db/dao/GFEDao.java index 9799c8fb70..7ccd4f1896 100644 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/src/com/raytheon/edex/plugin/gfe/db/dao/GFEDao.java +++ b/edexOsgi/com.raytheon.edex.plugin.gfe/src/com/raytheon/edex/plugin/gfe/db/dao/GFEDao.java @@ -279,7 +279,7 @@ public class GFEDao extends DefaultPluginDao { // commit persistIndividually = true; index = commitPoint; - notDone = false; + notDone = true; } tx = sess.beginTransaction(); diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/gfe/isc/ifpnetCDF.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/gfe/isc/ifpnetCDF.py index 48aa2055f4..b5b35a4939 100644 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/gfe/isc/ifpnetCDF.py +++ b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/gfe/isc/ifpnetCDF.py @@ -525,14 +525,13 @@ def storeLatLonGrids(client, file, databaseID, maskGrid, krunch, clipArea): latLonGrid = numpy.reshape(latLonGrid, (2,gridLoc.getNy().intValue(),gridLoc.getNx().intValue()), order='F') - # recast the arrays for compatibility with netCDF - lonGrid = numpy.flipud(latLonGrid[0]) - latGrid = numpy.flipud(latLonGrid[1]) - - # clip them - latGrid = clipToExtrema(latGrid, clipArea) - lonGrid = clipToExtrema(lonGrid, clipArea) + lonGrid = clipToExtrema(latLonGrid[0], clipArea) + latGrid = clipToExtrema(latLonGrid[1], clipArea) + + # recast the arrays for compatibility with netCDF + lonGrid = numpy.flipud(lonGrid) + latGrid = numpy.flipud(latGrid) # clipped size clipSize = (clipArea[1] - clipArea[0] + 1, clipArea[3] - clipArea[2] + 1) @@ -620,6 +619,7 @@ def storeTopoGrid(client, file, databaseID, maskGrid, clipArea): # Get the topo grid topoGrid = TopoDatabaseManager.getTopoDatabase(DatabaseID(databaseID).getSiteId()).getTopo().__numpy__[0] topoGrid = clipToExtrema(topoGrid, clipArea) + topoGrid = numpy.flipud(topoGrid) # clipped size clipGridSize = (clipArea[1] - clipArea[0] + 1, clipArea[3] - clipArea[2] + 1) diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/gfe/isc/iscMosaic.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/gfe/isc/iscMosaic.py index 23c3285770..1a1ef4c91f 100644 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/gfe/isc/iscMosaic.py +++ b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/gfe/isc/iscMosaic.py @@ -151,7 +151,11 @@ class WECache(object): self._inv.insert(index, tr) history = ArrayList() for h in hist: - history.add(GridDataHistory(h)) + #strip out grid history to allow for publishing correctly + #when merging Fcst/Official out of A1 + hh = GridDataHistory(h) + hh.setPublishTime(None) + history.add(hh) if gridType == 'SCALAR': self._we.setItemScalar(timeRange, grid.astype(numpy.float32), history) elif gridType == 'VECTOR': diff --git a/edexOsgi/com.raytheon.edex.plugin.goessounding/com.raytheon.edex.plugin.goessounding.ecl b/edexOsgi/com.raytheon.edex.plugin.goessounding/com.raytheon.edex.plugin.goessounding.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.edex.plugin.grib/com.raytheon.edex.plugin.grib.ecl b/edexOsgi/com.raytheon.edex.plugin.grib/com.raytheon.edex.plugin.grib.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.edex.plugin.ldad/com.raytheon.edex.plugin.ldad.ecl b/edexOsgi/com.raytheon.edex.plugin.ldad/com.raytheon.edex.plugin.ldad.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.edex.plugin.ldadhydro/com.raytheon.edex.plugin.ldadhydro.ecl b/edexOsgi/com.raytheon.edex.plugin.ldadhydro/com.raytheon.edex.plugin.ldadhydro.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.edex.plugin.ldadmanual/com.raytheon.edex.plugin.ldadmanual.ecl b/edexOsgi/com.raytheon.edex.plugin.ldadmanual/com.raytheon.edex.plugin.ldadmanual.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.edex.plugin.ldadprofiler/com.raytheon.edex.plugin.ldadprofiler.ecl b/edexOsgi/com.raytheon.edex.plugin.ldadprofiler/com.raytheon.edex.plugin.ldadprofiler.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.edex.plugin.modelsounding/com.raytheon.edex.plugin.modelsounding.ecl b/edexOsgi/com.raytheon.edex.plugin.modelsounding/com.raytheon.edex.plugin.modelsounding.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.edex.plugin.obs/com.raytheon.edex.plugin.obs.ecl b/edexOsgi/com.raytheon.edex.plugin.obs/com.raytheon.edex.plugin.obs.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.edex.plugin.pirep/com.raytheon.edex.plugin.pirep.ecl b/edexOsgi/com.raytheon.edex.plugin.pirep/com.raytheon.edex.plugin.pirep.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.edex.plugin.poessounding/com.raytheon.edex.plugin.poessounding.ecl b/edexOsgi/com.raytheon.edex.plugin.poessounding/com.raytheon.edex.plugin.poessounding.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.edex.plugin.profiler/com.raytheon.edex.plugin.profiler.ecl b/edexOsgi/com.raytheon.edex.plugin.profiler/com.raytheon.edex.plugin.profiler.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.edex.plugin.radar/com.raytheon.edex.plugin.radar.ecl b/edexOsgi/com.raytheon.edex.plugin.radar/com.raytheon.edex.plugin.radar.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.edex.plugin.recco/com.raytheon.edex.plugin.recco.ecl b/edexOsgi/com.raytheon.edex.plugin.recco/com.raytheon.edex.plugin.recco.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.edex.plugin.redbook/com.raytheon.edex.plugin.redbook.ecl b/edexOsgi/com.raytheon.edex.plugin.redbook/com.raytheon.edex.plugin.redbook.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.edex.plugin.satellite/com.raytheon.edex.plugin.satellite.ecl b/edexOsgi/com.raytheon.edex.plugin.satellite/com.raytheon.edex.plugin.satellite.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.edex.plugin.sfcobs/com.raytheon.edex.plugin.sfcobs.ecl b/edexOsgi/com.raytheon.edex.plugin.sfcobs/com.raytheon.edex.plugin.sfcobs.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.edex.plugin.shef/com.raytheon.edex.plugin.shef.ecl b/edexOsgi/com.raytheon.edex.plugin.shef/com.raytheon.edex.plugin.shef.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.edex.plugin.taf/com.raytheon.edex.plugin.taf.ecl b/edexOsgi/com.raytheon.edex.plugin.taf/com.raytheon.edex.plugin.taf.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.edex.plugin.text/com.raytheon.edex.plugin.text.ecl b/edexOsgi/com.raytheon.edex.plugin.text/com.raytheon.edex.plugin.text.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.edex.plugin.textlightning/com.raytheon.edex.plugin.textlightning.ecl b/edexOsgi/com.raytheon.edex.plugin.textlightning/com.raytheon.edex.plugin.textlightning.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.edex.plugin.warning/com.raytheon.edex.plugin.warning.ecl b/edexOsgi/com.raytheon.edex.plugin.warning/com.raytheon.edex.plugin.warning.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.edex.plugin.warning/src/com/raytheon/edex/plugin/warning/gis/GeospatialDataGenerator.java b/edexOsgi/com.raytheon.edex.plugin.warning/src/com/raytheon/edex/plugin/warning/gis/GeospatialDataGenerator.java index 8da1ac14a4..1bf8f8ebc4 100644 --- a/edexOsgi/com.raytheon.edex.plugin.warning/src/com/raytheon/edex/plugin/warning/gis/GeospatialDataGenerator.java +++ b/edexOsgi/com.raytheon.edex.plugin.warning/src/com/raytheon/edex/plugin/warning/gis/GeospatialDataGenerator.java @@ -83,7 +83,8 @@ import com.vividsolutions.jts.simplify.TopologyPreservingSimplifier; * Date Ticket# Engineer Description * ------------ ---------- ----------- -------------------------- * Jul 18, 2011 rjpeter Initial creation - * + * Mar 29, 2012 #14691 Qinglu Lin Added returned value of getFeArea() of + * AreaConfiguration to areaFields List. * * * @author rjpeter @@ -303,6 +304,7 @@ public class GeospatialDataGenerator { areaFields.add(areaConfig.getAreaField()); areaFields.add(areaConfig.getFipsField()); areaFields.add(areaConfig.getAreaNotationField()); + areaFields.add(areaConfig.getFeAreaField()); rval.setFipsField(areaConfig.getFipsField()); rval.setAreaFields(areaFields); rval.setTimeZoneSource(geoConfig.getTimezoneSource()); diff --git a/edexOsgi/com.raytheon.edex.product.uframe/com.raytheon.edex.product.uframe.ecl b/edexOsgi/com.raytheon.edex.product.uframe/com.raytheon.edex.product.uframe.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.edex.productsrv/com.raytheon.edex.productsrv.ecl b/edexOsgi/com.raytheon.edex.productsrv/com.raytheon.edex.productsrv.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.edex.rpgenvdata/com.raytheon.edex.rpgenvdata.ecl b/edexOsgi/com.raytheon.edex.rpgenvdata/com.raytheon.edex.rpgenvdata.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.edex.textdb/com.raytheon.edex.textdb.ecl b/edexOsgi/com.raytheon.edex.textdb/com.raytheon.edex.textdb.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.edex.uengine/com.raytheon.edex.uengine.ecl b/edexOsgi/com.raytheon.edex.uengine/com.raytheon.edex.uengine.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.edex.utilitysrv/com.raytheon.edex.utilitysrv.ecl b/edexOsgi/com.raytheon.edex.utilitysrv/com.raytheon.edex.utilitysrv.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.messaging.mhs/com.raytheon.messaging.mhs.ecl b/edexOsgi/com.raytheon.messaging.mhs/com.raytheon.messaging.mhs.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.uf.common.activetable/com.raytheon.uf.common.activetable.ecl b/edexOsgi/com.raytheon.uf.common.activetable/com.raytheon.uf.common.activetable.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.uf.common.alertmonitor/com.raytheon.uf.common.alertmonitor.ecl b/edexOsgi/com.raytheon.uf.common.alertmonitor/com.raytheon.uf.common.alertmonitor.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.uf.common.alertviz/com.raytheon.uf.common.alertviz.ecl b/edexOsgi/com.raytheon.uf.common.alertviz/com.raytheon.uf.common.alertviz.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.uf.common.auth/com.raytheon.uf.common.auth.ecl b/edexOsgi/com.raytheon.uf.common.auth/com.raytheon.uf.common.auth.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.uf.common.awipstools/com.raytheon.uf.common.awipstools.ecl b/edexOsgi/com.raytheon.uf.common.awipstools/com.raytheon.uf.common.awipstools.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.uf.common.cache/com.raytheon.uf.common.cache.ecl b/edexOsgi/com.raytheon.uf.common.cache/com.raytheon.uf.common.cache.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.uf.common.climo/com.raytheon.uf.common.climo.ecl b/edexOsgi/com.raytheon.uf.common.climo/com.raytheon.uf.common.climo.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.uf.common.colormap/com.raytheon.uf.common.colormap.ecl b/edexOsgi/com.raytheon.uf.common.colormap/com.raytheon.uf.common.colormap.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.uf.common.comm/com.raytheon.uf.common.comm.ecl b/edexOsgi/com.raytheon.uf.common.comm/com.raytheon.uf.common.comm.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.uf.common.dataplugin.acars/com.raytheon.uf.common.dataplugin.acars.ecl b/edexOsgi/com.raytheon.uf.common.dataplugin.acars/com.raytheon.uf.common.dataplugin.acars.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.uf.common.dataplugin.acarssounding/com.raytheon.uf.common.dataplugin.acarssounding.ecl b/edexOsgi/com.raytheon.uf.common.dataplugin.acarssounding/com.raytheon.uf.common.dataplugin.acarssounding.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.uf.common.dataplugin.airep/com.raytheon.uf.common.dataplugin.airep.ecl b/edexOsgi/com.raytheon.uf.common.dataplugin.airep/com.raytheon.uf.common.dataplugin.airep.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.uf.common.dataplugin.binlightning/com.raytheon.uf.common.dataplugin.binlightning.ecl b/edexOsgi/com.raytheon.uf.common.dataplugin.binlightning/com.raytheon.uf.common.dataplugin.binlightning.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.uf.common.dataplugin.bufrascat/com.raytheon.uf.common.dataplugin.bufrascat.ecl b/edexOsgi/com.raytheon.uf.common.dataplugin.bufrascat/com.raytheon.uf.common.dataplugin.bufrascat.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.uf.common.dataplugin.bufrhdw/com.raytheon.uf.common.dataplugin.bufrhdw.ecl b/edexOsgi/com.raytheon.uf.common.dataplugin.bufrhdw/com.raytheon.uf.common.dataplugin.bufrhdw.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.uf.common.dataplugin.bufrmthdw/com.raytheon.uf.common.dataplugin.bufrmthdw.ecl b/edexOsgi/com.raytheon.uf.common.dataplugin.bufrmthdw/com.raytheon.uf.common.dataplugin.bufrmthdw.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.uf.common.dataplugin.bufrncwf/com.raytheon.uf.common.dataplugin.bufrncwf.ecl b/edexOsgi/com.raytheon.uf.common.dataplugin.bufrncwf/com.raytheon.uf.common.dataplugin.bufrncwf.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.uf.common.dataplugin.bufrquikscat/com.raytheon.uf.common.dataplugin.bufrquikscat.ecl b/edexOsgi/com.raytheon.uf.common.dataplugin.bufrquikscat/com.raytheon.uf.common.dataplugin.bufrquikscat.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.uf.common.dataplugin.bufrsigwx/com.raytheon.uf.common.dataplugin.bufrsigwx.ecl b/edexOsgi/com.raytheon.uf.common.dataplugin.bufrsigwx/com.raytheon.uf.common.dataplugin.bufrsigwx.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.uf.common.dataplugin.bufrssmi/com.raytheon.uf.common.dataplugin.bufrssmi.ecl b/edexOsgi/com.raytheon.uf.common.dataplugin.bufrssmi/com.raytheon.uf.common.dataplugin.bufrssmi.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.uf.common.dataplugin.bufrua/com.raytheon.uf.common.dataplugin.bufrua.ecl b/edexOsgi/com.raytheon.uf.common.dataplugin.bufrua/com.raytheon.uf.common.dataplugin.bufrua.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.uf.common.dataplugin.cwa/com.raytheon.uf.common.dataplugin.cwa.ecl b/edexOsgi/com.raytheon.uf.common.dataplugin.cwa/com.raytheon.uf.common.dataplugin.cwa.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.uf.common.dataplugin.cwat/com.raytheon.uf.common.dataplugin.cwat.ecl b/edexOsgi/com.raytheon.uf.common.dataplugin.cwat/com.raytheon.uf.common.dataplugin.cwat.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.uf.common.dataplugin.ffmp/com.raytheon.uf.common.dataplugin.ffmp.ecl b/edexOsgi/com.raytheon.uf.common.dataplugin.ffmp/com.raytheon.uf.common.dataplugin.ffmp.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.uf.common.dataplugin.fog/com.raytheon.uf.common.dataplugin.fog.ecl b/edexOsgi/com.raytheon.uf.common.dataplugin.fog/com.raytheon.uf.common.dataplugin.fog.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.uf.common.dataplugin.fssobs/com.raytheon.uf.common.dataplugin.fssobs.ecl b/edexOsgi/com.raytheon.uf.common.dataplugin.fssobs/com.raytheon.uf.common.dataplugin.fssobs.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.uf.common.dataplugin.gfe/com.raytheon.uf.common.dataplugin.gfe.ecl b/edexOsgi/com.raytheon.uf.common.dataplugin.gfe/com.raytheon.uf.common.dataplugin.gfe.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.uf.common.dataplugin.goessounding/com.raytheon.uf.common.dataplugin.goessounding.ecl b/edexOsgi/com.raytheon.uf.common.dataplugin.goessounding/com.raytheon.uf.common.dataplugin.goessounding.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.uf.common.dataplugin.grib/com.raytheon.uf.common.dataplugin.grib.ecl b/edexOsgi/com.raytheon.uf.common.dataplugin.grib/com.raytheon.uf.common.dataplugin.grib.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.uf.common.dataplugin.ldadhydro/com.raytheon.uf.common.dataplugin.ldadhydro.ecl b/edexOsgi/com.raytheon.uf.common.dataplugin.ldadhydro/com.raytheon.uf.common.dataplugin.ldadhydro.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.uf.common.dataplugin.ldadmesonet/com.raytheon.uf.common.dataplugin.ldadmesonet.ecl b/edexOsgi/com.raytheon.uf.common.dataplugin.ldadmesonet/com.raytheon.uf.common.dataplugin.ldadmesonet.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.uf.common.dataplugin.level/com.raytheon.uf.common.dataplugin.level.ecl b/edexOsgi/com.raytheon.uf.common.dataplugin.level/com.raytheon.uf.common.dataplugin.level.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.uf.common.dataplugin.lsr/com.raytheon.uf.common.dataplugin.lsr.ecl b/edexOsgi/com.raytheon.uf.common.dataplugin.lsr/com.raytheon.uf.common.dataplugin.lsr.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.uf.common.dataplugin.npp.viirs/com.raytheon.uf.common.dataplugin.npp.viirs.ecl b/edexOsgi/com.raytheon.uf.common.dataplugin.npp.viirs/com.raytheon.uf.common.dataplugin.npp.viirs.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.uf.common.dataplugin.obs/com.raytheon.uf.common.dataplugin.obs.ecl b/edexOsgi/com.raytheon.uf.common.dataplugin.obs/com.raytheon.uf.common.dataplugin.obs.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.uf.common.dataplugin.pirep/com.raytheon.uf.common.dataplugin.pirep.ecl b/edexOsgi/com.raytheon.uf.common.dataplugin.pirep/com.raytheon.uf.common.dataplugin.pirep.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.uf.common.dataplugin.poessounding/com.raytheon.uf.common.dataplugin.poessounding.ecl b/edexOsgi/com.raytheon.uf.common.dataplugin.poessounding/com.raytheon.uf.common.dataplugin.poessounding.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.uf.common.dataplugin.preciprate/com.raytheon.uf.common.dataplugin.preciprate.ecl b/edexOsgi/com.raytheon.uf.common.dataplugin.preciprate/com.raytheon.uf.common.dataplugin.preciprate.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.uf.common.dataplugin.profiler/com.raytheon.uf.common.dataplugin.profiler.ecl b/edexOsgi/com.raytheon.uf.common.dataplugin.profiler/com.raytheon.uf.common.dataplugin.profiler.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.uf.common.dataplugin.qc/com.raytheon.uf.common.dataplugin.qc.ecl b/edexOsgi/com.raytheon.uf.common.dataplugin.qc/com.raytheon.uf.common.dataplugin.qc.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.uf.common.dataplugin.qpf/com.raytheon.uf.common.dataplugin.qpf.ecl b/edexOsgi/com.raytheon.uf.common.dataplugin.qpf/com.raytheon.uf.common.dataplugin.qpf.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.uf.common.dataplugin.radar/com.raytheon.uf.common.dataplugin.radar.ecl b/edexOsgi/com.raytheon.uf.common.dataplugin.radar/com.raytheon.uf.common.dataplugin.radar.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.uf.common.dataplugin.satellite/com.raytheon.uf.common.dataplugin.satellite.ecl b/edexOsgi/com.raytheon.uf.common.dataplugin.satellite/com.raytheon.uf.common.dataplugin.satellite.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.uf.common.dataplugin.scan/com.raytheon.uf.common.dataplugin.scan.ecl b/edexOsgi/com.raytheon.uf.common.dataplugin.scan/com.raytheon.uf.common.dataplugin.scan.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.uf.common.dataplugin.sfcobs/com.raytheon.uf.common.dataplugin.sfcobs.ecl b/edexOsgi/com.raytheon.uf.common.dataplugin.sfcobs/com.raytheon.uf.common.dataplugin.sfcobs.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.uf.common.dataplugin.shef/com.raytheon.uf.common.dataplugin.shef.ecl b/edexOsgi/com.raytheon.uf.common.dataplugin.shef/com.raytheon.uf.common.dataplugin.shef.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.uf.common.dataplugin.svrwx/com.raytheon.uf.common.dataplugin.svrwx.ecl b/edexOsgi/com.raytheon.uf.common.dataplugin.svrwx/com.raytheon.uf.common.dataplugin.svrwx.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.uf.common.dataplugin.tcg/com.raytheon.uf.common.dataplugin.tcg.ecl b/edexOsgi/com.raytheon.uf.common.dataplugin.tcg/com.raytheon.uf.common.dataplugin.tcg.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.uf.common.dataplugin.tcs/com.raytheon.uf.common.dataplugin.tcs.ecl b/edexOsgi/com.raytheon.uf.common.dataplugin.tcs/com.raytheon.uf.common.dataplugin.tcs.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.uf.common.dataplugin.text/com.raytheon.uf.common.dataplugin.text.ecl b/edexOsgi/com.raytheon.uf.common.dataplugin.text/com.raytheon.uf.common.dataplugin.text.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.uf.common.dataplugin.vaa/com.raytheon.uf.common.dataplugin.vaa.ecl b/edexOsgi/com.raytheon.uf.common.dataplugin.vaa/com.raytheon.uf.common.dataplugin.vaa.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.uf.common.dataplugin.vil/com.raytheon.uf.common.dataplugin.vil.ecl b/edexOsgi/com.raytheon.uf.common.dataplugin.vil/com.raytheon.uf.common.dataplugin.vil.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.uf.common.dataplugin.warning/com.raytheon.uf.common.dataplugin.warning.ecl b/edexOsgi/com.raytheon.uf.common.dataplugin.warning/com.raytheon.uf.common.dataplugin.warning.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.uf.common.dataplugin.warning/src/com/raytheon/uf/common/dataplugin/warning/config/AreaConfiguration.java b/edexOsgi/com.raytheon.uf.common.dataplugin.warning/src/com/raytheon/uf/common/dataplugin/warning/config/AreaConfiguration.java index 903cf92c7b..014f5a3d6a 100644 --- a/edexOsgi/com.raytheon.uf.common.dataplugin.warning/src/com/raytheon/uf/common/dataplugin/warning/config/AreaConfiguration.java +++ b/edexOsgi/com.raytheon.uf.common.dataplugin.warning/src/com/raytheon/uf/common/dataplugin/warning/config/AreaConfiguration.java @@ -42,6 +42,7 @@ import com.raytheon.uf.common.dataquery.requests.RequestableMetadataMarshaller; * ------------ ---------- ----------- -------------------------- * Nov 26, 2007 chammack Initial Creation. * Aug 26, 2008 #1502 bclement Added JAXB annotations + * Mar 29, 2012 #14691 Qinglu Lin Added feAreaField and its getter and setter. * * * @@ -69,6 +70,9 @@ public class AreaConfiguration { @XmlElement private String areaField; + @XmlElement + private String feAreaField; + @XmlElement private String fipsField; @@ -131,6 +135,13 @@ public class AreaConfiguration { return areaField; } + /** + * @return the feAreaField + */ + public String getFeAreaField() { + return feAreaField; + } + /** * @param areaField * the areaField to set @@ -139,6 +150,14 @@ public class AreaConfiguration { this.areaField = areaField; } + /** + * @param feAreaField + * the feAreaField to set + */ + public void setFeAreaField(String feAreaField) { + this.feAreaField = feAreaField; + } + /** * @return the areaNotationTranslationFile */ diff --git a/edexOsgi/com.raytheon.uf.common.dataplugin.warning/src/com/raytheon/uf/common/dataplugin/warning/config/AreaSourceConfiguration.java b/edexOsgi/com.raytheon.uf.common.dataplugin.warning/src/com/raytheon/uf/common/dataplugin/warning/config/AreaSourceConfiguration.java index bd4ad47a66..83d1995be4 100644 --- a/edexOsgi/com.raytheon.uf.common.dataplugin.warning/src/com/raytheon/uf/common/dataplugin/warning/config/AreaSourceConfiguration.java +++ b/edexOsgi/com.raytheon.uf.common.dataplugin.warning/src/com/raytheon/uf/common/dataplugin/warning/config/AreaSourceConfiguration.java @@ -12,6 +12,23 @@ import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; import com.raytheon.uf.common.dataquery.requests.RequestConstraint; import com.raytheon.uf.common.dataquery.requests.RequestableMetadataMarshaller; +/** + * AreaSourceConfiguration + * + *
+ * 
+ *    SOFTWARE HISTORY
+ *   
+ *    Date         Ticket#     Engineer    Description
+ *    ------------ ----------  ----------- --------------------------
+ *    Mar 29, 2012 #14691      Qinglu Lin  Added feAreaField and its getter and setter, etc. 
+ * 
+ * 
+ * + * @author + * @version 1 + */ + @XmlAccessorType(XmlAccessType.NONE) public class AreaSourceConfiguration { @XmlAccessorType(XmlAccessType.NONE) @@ -31,6 +48,9 @@ public class AreaSourceConfiguration { @XmlElement private String areaField; + @XmlElement + private String feAreaField; + @XmlElement private String fipsField; @@ -74,6 +94,7 @@ public class AreaSourceConfiguration { setVariable("areas"); setAreaField(areaConfig.getAreaField()); setAreaNotationField(areaConfig.getAreaNotationField()); + setFeAreaField(areaConfig.getFeAreaField()); setAreaNotationTranslationFile(areaConfig .getAreaNotationTranslationFile()); setFipsField(areaConfig.getFipsField()); @@ -90,6 +111,7 @@ public class AreaSourceConfiguration { public AreaConfiguration getAreaConfig() { AreaConfiguration areaConfig = new AreaConfiguration(); areaConfig.setAreaField(areaField); + areaConfig.setFeAreaField(feAreaField); areaConfig.setAreaNotationField(areaNotationField); areaConfig.setAreaNotationTranslationFile(areaNotationTranslationFile); areaConfig.setFipsField(fipsField); @@ -119,10 +141,18 @@ public class AreaSourceConfiguration { return areaField; } + public String getFeAreaField() { + return feAreaField; + } + public void setAreaField(String areaField) { this.areaField = areaField; } + public void setFeAreaField(String feAreaField) { + this.feAreaField = feAreaField; + } + public String getFipsField() { return fipsField; } diff --git a/edexOsgi/com.raytheon.uf.common.dataplugin.warning/src/com/raytheon/uf/common/dataplugin/warning/gis/GeospatialFactory.java b/edexOsgi/com.raytheon.uf.common.dataplugin.warning/src/com/raytheon/uf/common/dataplugin/warning/gis/GeospatialFactory.java index 8aa1e6cc7a..a26724d931 100644 --- a/edexOsgi/com.raytheon.uf.common.dataplugin.warning/src/com/raytheon/uf/common/dataplugin/warning/gis/GeospatialFactory.java +++ b/edexOsgi/com.raytheon.uf.common.dataplugin.warning/src/com/raytheon/uf/common/dataplugin/warning/gis/GeospatialFactory.java @@ -56,6 +56,11 @@ import com.vividsolutions.jts.geom.prep.PreparedGeometryFactory; * Date Ticket# Engineer Description * ------------ ---------- ----------- -------------------------- * Jul 18, 2011 rjpeter Initial creation + * Mar 29, 2012 #14691 Qinglu Lin Added returned value of getFeAreaField() of + * AreaSourceConfiguration to areaFields List. + * Apr 11, 2012 #14691 Qinglu Lin For marine warnings, getFeAreaField() returns null. + * So, do not add the returned value of getFeAreaField() + * to areaFields. * * * @@ -242,11 +247,20 @@ public class GeospatialFactory { AreaSourceConfiguration[] ascs = template.getAreaSources(); for (AreaSourceConfiguration asc : ascs) { - List areaFields = new ArrayList(4); - areaFields.add(WarningConstants.GID); + List areaFields; + String tmp = asc.getFeAreaField(); + if (tmp == null) { + areaFields = new ArrayList(4); + } else { + areaFields = new ArrayList(5); + } + areaFields.add(WarningConstants.GID); areaFields.add(asc.getAreaField()); + if (tmp != null) { + areaFields.add(tmp); + } areaFields.add(asc.getFipsField()); - areaFields.add(asc.getAreaNotationField()); + areaFields.add(asc.getAreaNotationField()); GeospatialMetadata gmd = new GeospatialMetadata(); gmd.setAreaSource(asc.getAreaSource()); diff --git a/edexOsgi/com.raytheon.uf.common.dataplugin/com.raytheon.uf.common.dataplugin.ecl b/edexOsgi/com.raytheon.uf.common.dataplugin/com.raytheon.uf.common.dataplugin.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.uf.common.dataplugin/src/com/raytheon/uf/common/dataplugin/persist/DefaultPathProvider.java b/edexOsgi/com.raytheon.uf.common.dataplugin/src/com/raytheon/uf/common/dataplugin/persist/DefaultPathProvider.java index 1cad2b4fba..6409d0f4b4 100644 --- a/edexOsgi/com.raytheon.uf.common.dataplugin/src/com/raytheon/uf/common/dataplugin/persist/DefaultPathProvider.java +++ b/edexOsgi/com.raytheon.uf.common.dataplugin/src/com/raytheon/uf/common/dataplugin/persist/DefaultPathProvider.java @@ -125,23 +125,19 @@ public class DefaultPathProvider implements IHDFFilePathProvider { // This key is not an embedded object meaning it is a field // in the class passed in. We can get the value directly. else { - try { - property = PropertyUtils.getProperty(persistable, - key); - } catch (Throwable t) { - // Ignore - property = null; - } + property = PropertyUtils.getProperty(persistable, key); } // For times and dates, we must format them correctly - if (property instanceof Calendar) { + if (property == null) { + pathBuilder.append("null"); + } else if (property instanceof Calendar) { pathBuilder.append(TimeUtil .formatCalendar((Calendar) property)); } else if (property instanceof Date) { pathBuilder .append(TimeUtil.formatDate((Date) property)); - } else if (property != null) { + } else { pathBuilder.append(property.toString()); } } catch (Exception e) { @@ -230,7 +226,11 @@ public class DefaultPathProvider implements IHDFFilePathProvider { @Override public String getHDFFileName(String pluginName, IPersistable persistable) { Integer partition = persistable.getHdfFileId(); - if (pluginName == null) { + if (partition == null) { + throw new IllegalArgumentException( + "Expected argument hdfFileId not set on object " + + persistable.toString()); + } else if (pluginName == null) { throw new IllegalArgumentException( "Expected argument pluginName not set on object " + persistable.toString()); @@ -262,20 +262,12 @@ public class DefaultPathProvider implements IHDFFilePathProvider { refTimeString = fileNameFormat.format(refTime); } sb.append(refTimeString); - - if (partition != null) { - sb.append("-"); - sb.append(partition); - } - + sb.append("-"); + sb.append(partition); sb.append(".h5"); return sb.toString(); } - if (partition == null) { - return pluginName + ".h5"; - } - return pluginName + "-" + partition + ".h5"; } diff --git a/edexOsgi/com.raytheon.uf.common.dataquery/com.raytheon.uf.common.dataquery.ecl b/edexOsgi/com.raytheon.uf.common.dataquery/com.raytheon.uf.common.dataquery.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.uf.common.datastorage.hdf5/com.raytheon.uf.common.datastorage.hdf5.ecl b/edexOsgi/com.raytheon.uf.common.datastorage.hdf5/com.raytheon.uf.common.datastorage.hdf5.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.uf.common.datastorage.remote/com.raytheon.uf.common.datastorage.remote.ecl b/edexOsgi/com.raytheon.uf.common.datastorage.remote/com.raytheon.uf.common.datastorage.remote.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.uf.common.datastorage/com.raytheon.uf.common.datastorage.ecl b/edexOsgi/com.raytheon.uf.common.datastorage/com.raytheon.uf.common.datastorage.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.uf.common.derivparam/com.raytheon.uf.common.derivparam.ecl b/edexOsgi/com.raytheon.uf.common.derivparam/com.raytheon.uf.common.derivparam.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.uf.common.dissemination/com.raytheon.uf.common.dissemination.ecl b/edexOsgi/com.raytheon.uf.common.dissemination/com.raytheon.uf.common.dissemination.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.uf.common.geospatial/com.raytheon.uf.common.geospatial.ecl b/edexOsgi/com.raytheon.uf.common.geospatial/com.raytheon.uf.common.geospatial.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.uf.common.hlstopo/com.raytheon.uf.common.hlstopo.ecl b/edexOsgi/com.raytheon.uf.common.hlstopo/com.raytheon.uf.common.hlstopo.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.uf.common.hydro/com.raytheon.uf.common.hydro.ecl b/edexOsgi/com.raytheon.uf.common.hydro/com.raytheon.uf.common.hydro.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.uf.common.jms/com.raytheon.uf.common.jms.ecl b/edexOsgi/com.raytheon.uf.common.jms/com.raytheon.uf.common.jms.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.uf.common.jms/src/com/raytheon/uf/common/jms/JmsPooledConnection.java b/edexOsgi/com.raytheon.uf.common.jms/src/com/raytheon/uf/common/jms/JmsPooledConnection.java index 031903f524..8f4cfd2b35 100644 --- a/edexOsgi/com.raytheon.uf.common.jms/src/com/raytheon/uf/common/jms/JmsPooledConnection.java +++ b/edexOsgi/com.raytheon.uf.common.jms/src/com/raytheon/uf/common/jms/JmsPooledConnection.java @@ -44,6 +44,7 @@ import com.raytheon.uf.common.status.UFStatus.Priority; * Date Ticket# Engineer Description * ------------ ---------- ----------- -------------------------- * Apr 15, 2011 rjpeter Initial creation + * Mar 08, 2012 194 njensen Improved safety of close() * * * @@ -182,6 +183,11 @@ public class JmsPooledConnection implements ExceptionListener { if (canClose) { synchronized (this) { + // njensen: I moved removing the connection from the pool to be + // the first thing in this block instead of last thing so + // there's no chance it could be closed and then retrieved from + // the pool by something else + connFactory.removeConnectionFromPool(this); if (conn != null) { try { conn.stop(); @@ -207,11 +213,10 @@ public class JmsPooledConnection implements ExceptionListener { conn.close(); } catch (Exception e) { statusHandler.handle(Priority.INFO, - "Failed to close connection", e); + "Failed to close connection " + conn, e); } } conn = null; - connFactory.removeConnectionFromPool(this); } } @@ -237,13 +242,17 @@ public class JmsPooledConnection implements ExceptionListener { synchronized (stateLock) { if (availableSession != null) { - if (availableSession.expired(System.currentTimeMillis(), - resourceRetention)) { - availableSession.getPooledObject().close(); - count++; - availableSession = null; - } else { - sessionToCheck = availableSession.getPooledObject(); + // njensen: I added the synchronized line below so we're + // synchronized on availableSession.stateLock + synchronized (availableSession.getPooledObject().getStateLock()) { + if (availableSession.expired(System.currentTimeMillis(), + resourceRetention)) { + availableSession.getPooledObject().close(); + count++; + availableSession = null; + } else { + sessionToCheck = availableSession.getPooledObject(); + } } } } diff --git a/edexOsgi/com.raytheon.uf.common.jms/src/com/raytheon/uf/common/jms/JmsPooledConsumer.java b/edexOsgi/com.raytheon.uf.common.jms/src/com/raytheon/uf/common/jms/JmsPooledConsumer.java index 91941b3039..50d894d38a 100644 --- a/edexOsgi/com.raytheon.uf.common.jms/src/com/raytheon/uf/common/jms/JmsPooledConsumer.java +++ b/edexOsgi/com.raytheon.uf.common.jms/src/com/raytheon/uf/common/jms/JmsPooledConsumer.java @@ -41,6 +41,7 @@ import com.raytheon.uf.common.status.UFStatus.Priority; * Date Ticket# Engineer Description * ------------ ---------- ----------- -------------------------- * Apr 18, 2011 rjpeter Initial creation + * Mar 08, 2012 194 njensen Improved logging * * * @@ -160,10 +161,11 @@ public class JmsPooledConsumer { if (close) { if (consumer != null) { try { + statusHandler.info("Closing consumer " + consumer); // njensen consumer.close(); } catch (Throwable e) { statusHandler.handle(Priority.INFO, - "Failed to close producer", e); + "Failed to close consumer " + consumer, e); } consumer = null; } diff --git a/edexOsgi/com.raytheon.uf.common.jms/src/com/raytheon/uf/common/jms/JmsPooledProducer.java b/edexOsgi/com.raytheon.uf.common.jms/src/com/raytheon/uf/common/jms/JmsPooledProducer.java index 3d61c8837f..892a90a511 100644 --- a/edexOsgi/com.raytheon.uf.common.jms/src/com/raytheon/uf/common/jms/JmsPooledProducer.java +++ b/edexOsgi/com.raytheon.uf.common.jms/src/com/raytheon/uf/common/jms/JmsPooledProducer.java @@ -44,6 +44,7 @@ import com.raytheon.uf.common.status.UFStatus.Priority; * Date Ticket# Engineer Description * ------------ ---------- ----------- -------------------------- * Apr 18, 2011 rjpeter Initial creation + * Mar 08, 2012 194 njensen Improved logging * * * @@ -160,6 +161,7 @@ public class JmsPooledProducer { if (close) { if (producer != null) { try { + statusHandler.info("Closing producer " + producer); // njensen producer.close(); } catch (Throwable e) { statusHandler.handle(Priority.INFO, diff --git a/edexOsgi/com.raytheon.uf.common.jms/src/com/raytheon/uf/common/jms/JmsPooledSession.java b/edexOsgi/com.raytheon.uf.common.jms/src/com/raytheon/uf/common/jms/JmsPooledSession.java index 6a66f95125..c04465fd73 100644 --- a/edexOsgi/com.raytheon.uf.common.jms/src/com/raytheon/uf/common/jms/JmsPooledSession.java +++ b/edexOsgi/com.raytheon.uf.common.jms/src/com/raytheon/uf/common/jms/JmsPooledSession.java @@ -48,6 +48,7 @@ import com.raytheon.uf.common.status.UFStatus.Priority; * Date Ticket# Engineer Description * ------------ ---------- ----------- -------------------------- * Apr 15, 2011 rjpeter Initial creation + * Mar 08, 2012 194 njensen Improved logging * * * @@ -471,7 +472,7 @@ public class JmsPooledSession { sess.close(); } catch (Exception e) { statusHandler.handle(Priority.INFO, - "Failed to close session", e); + "Failed to close session " + sess, e); } } } diff --git a/edexOsgi/com.raytheon.uf.common.localization/com.raytheon.uf.common.localization.ecl b/edexOsgi/com.raytheon.uf.common.localization/com.raytheon.uf.common.localization.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.uf.common.management/com.raytheon.uf.common.management.ecl b/edexOsgi/com.raytheon.uf.common.management/com.raytheon.uf.common.management.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.uf.common.menus/com.raytheon.uf.common.menus.ecl b/edexOsgi/com.raytheon.uf.common.menus/com.raytheon.uf.common.menus.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.uf.common.message/com.raytheon.uf.common.message.ecl b/edexOsgi/com.raytheon.uf.common.message/com.raytheon.uf.common.message.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.uf.common.monitor.cpg/com.raytheon.uf.common.monitor.cpg.ecl b/edexOsgi/com.raytheon.uf.common.monitor.cpg/com.raytheon.uf.common.monitor.cpg.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.uf.common.monitor/com.raytheon.uf.common.monitor.ecl b/edexOsgi/com.raytheon.uf.common.monitor/com.raytheon.uf.common.monitor.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.uf.common.mpe/com.raytheon.uf.common.mpe.ecl b/edexOsgi/com.raytheon.uf.common.mpe/com.raytheon.uf.common.mpe.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.uf.common.ohd/com.raytheon.uf.common.ohd.ecl b/edexOsgi/com.raytheon.uf.common.ohd/com.raytheon.uf.common.ohd.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.uf.common.plugin.nwsauth/com.raytheon.uf.common.plugin.nwsauth.ecl b/edexOsgi/com.raytheon.uf.common.plugin.nwsauth/com.raytheon.uf.common.plugin.nwsauth.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.uf.common.pointdata/com.raytheon.uf.common.pointdata.ecl b/edexOsgi/com.raytheon.uf.common.pointdata/com.raytheon.uf.common.pointdata.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.uf.common.pypies/com.raytheon.uf.common.pypies.ecl b/edexOsgi/com.raytheon.uf.common.pypies/com.raytheon.uf.common.pypies.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.uf.common.python/com.raytheon.uf.common.python.ecl b/edexOsgi/com.raytheon.uf.common.python/com.raytheon.uf.common.python.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.uf.common.qpf/com.raytheon.uf.common.qpf.ecl b/edexOsgi/com.raytheon.uf.common.qpf/com.raytheon.uf.common.qpf.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.uf.common.serialization.comm/com.raytheon.uf.common.serialization.comm.ecl b/edexOsgi/com.raytheon.uf.common.serialization.comm/com.raytheon.uf.common.serialization.comm.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.uf.common.serialization/com.raytheon.uf.common.serialization.ecl b/edexOsgi/com.raytheon.uf.common.serialization/com.raytheon.uf.common.serialization.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.uf.common.site/com.raytheon.uf.common.site.ecl b/edexOsgi/com.raytheon.uf.common.site/com.raytheon.uf.common.site.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.uf.common.sounding/com.raytheon.uf.common.sounding.ecl b/edexOsgi/com.raytheon.uf.common.sounding/com.raytheon.uf.common.sounding.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.uf.common.status/com.raytheon.uf.common.status.ecl b/edexOsgi/com.raytheon.uf.common.status/com.raytheon.uf.common.status.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.uf.common.time/com.raytheon.uf.common.time.ecl b/edexOsgi/com.raytheon.uf.common.time/com.raytheon.uf.common.time.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.uf.common.topo/com.raytheon.uf.common.topo.ecl b/edexOsgi/com.raytheon.uf.common.topo/com.raytheon.uf.common.topo.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.uf.common.util/com.raytheon.uf.common.util.ecl b/edexOsgi/com.raytheon.uf.common.util/com.raytheon.uf.common.util.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.uf.edex.activetable/com.raytheon.uf.edex.activetable.ecl b/edexOsgi/com.raytheon.uf.edex.activetable/com.raytheon.uf.edex.activetable.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.uf.edex.alertviz/com.raytheon.uf.edex.alertviz.ecl b/edexOsgi/com.raytheon.uf.edex.alertviz/com.raytheon.uf.edex.alertviz.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.uf.edex.auth/com.raytheon.uf.edex.auth.ecl b/edexOsgi/com.raytheon.uf.edex.auth/com.raytheon.uf.edex.auth.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.uf.edex.awipstools/com.raytheon.uf.edex.awipstools.ecl b/edexOsgi/com.raytheon.uf.edex.awipstools/com.raytheon.uf.edex.awipstools.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.uf.edex.bufrtools/com.raytheon.uf.edex.bufrtools.ecl b/edexOsgi/com.raytheon.uf.edex.bufrtools/com.raytheon.uf.edex.bufrtools.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.uf.edex.core/com.raytheon.uf.edex.core.ecl b/edexOsgi/com.raytheon.uf.edex.core/com.raytheon.uf.edex.core.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.uf.edex.cpgsrv/com.raytheon.uf.edex.cpgsrv.ecl b/edexOsgi/com.raytheon.uf.edex.cpgsrv/com.raytheon.uf.edex.cpgsrv.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.uf.edex.dat.utils/com.raytheon.uf.edex.dat.utils.ecl b/edexOsgi/com.raytheon.uf.edex.dat.utils/com.raytheon.uf.edex.dat.utils.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.uf.edex.database/com.raytheon.uf.edex.database.ecl b/edexOsgi/com.raytheon.uf.edex.database/com.raytheon.uf.edex.database.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.uf.edex.decodertools/com.raytheon.uf.edex.decodertools.ecl b/edexOsgi/com.raytheon.uf.edex.decodertools/com.raytheon.uf.edex.decodertools.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.uf.edex.dissemination/com.raytheon.uf.edex.dissemination.ecl b/edexOsgi/com.raytheon.uf.edex.dissemination/com.raytheon.uf.edex.dissemination.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.uf.edex.distribution/com.raytheon.uf.edex.distribution.ecl b/edexOsgi/com.raytheon.uf.edex.distribution/com.raytheon.uf.edex.distribution.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.uf.edex.esb.camel.launcher/com.raytheon.uf.edex.esb.camel.launcher.ecl b/edexOsgi/com.raytheon.uf.edex.esb.camel.launcher/com.raytheon.uf.edex.esb.camel.launcher.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.uf.edex.esb.camel/com.raytheon.uf.edex.esb.camel.ecl b/edexOsgi/com.raytheon.uf.edex.esb.camel/com.raytheon.uf.edex.esb.camel.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.uf.edex.log/com.raytheon.uf.edex.log.ecl b/edexOsgi/com.raytheon.uf.edex.log/com.raytheon.uf.edex.log.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.uf.edex.maintenance/com.raytheon.uf.edex.maintenance.ecl b/edexOsgi/com.raytheon.uf.edex.maintenance/com.raytheon.uf.edex.maintenance.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.uf.edex.management/com.raytheon.uf.edex.management.ecl b/edexOsgi/com.raytheon.uf.edex.management/com.raytheon.uf.edex.management.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.uf.edex.metartohmdbsrv/com.raytheon.uf.edex.metartohmdbsrv.ecl b/edexOsgi/com.raytheon.uf.edex.metartohmdbsrv/com.raytheon.uf.edex.metartohmdbsrv.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.uf.edex.ohd/com.raytheon.uf.edex.ohd.ecl b/edexOsgi/com.raytheon.uf.edex.ohd/com.raytheon.uf.edex.ohd.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.uf.edex.ohd/res/spring/hpeDHRDecoder-spring.xml b/edexOsgi/com.raytheon.uf.edex.ohd/res/spring/hpeDHRDecoder-spring.xml index 7d886951ab..bd3cc509bb 100644 --- a/edexOsgi/com.raytheon.uf.edex.ohd/res/spring/hpeDHRDecoder-spring.xml +++ b/edexOsgi/com.raytheon.uf.edex.ohd/res/spring/hpeDHRDecoder-spring.xml @@ -18,13 +18,11 @@ - - - - + + dhr @@ -34,6 +32,26 @@ + + + + java.lang.Throwable + + + + + + + + + + + + + @@ -44,8 +62,8 @@ - + + \ No newline at end of file diff --git a/edexOsgi/com.raytheon.uf.edex.ohd/src/com/raytheon/uf/edex/ohd/pproc/HPEDhrMessage.java b/edexOsgi/com.raytheon.uf.edex.ohd/src/com/raytheon/uf/edex/ohd/pproc/HPEDhrMessage.java new file mode 100644 index 0000000000..349417268c --- /dev/null +++ b/edexOsgi/com.raytheon.uf.edex.ohd/src/com/raytheon/uf/edex/ohd/pproc/HPEDhrMessage.java @@ -0,0 +1,102 @@ +/** + * This software was developed and / or modified by Raytheon Company, + * pursuant to Contract DG133W-05-CQ-1067 with the US Government. + * + * U.S. EXPORT CONTROLLED TECHNICAL DATA + * This software product contains export-restricted data whose + * export/transfer/disclosure is restricted by U.S. law. Dissemination + * to non-U.S. persons whether in the United States or abroad requires + * an export license or other authorization. + * + * Contractor Name: Raytheon Company + * Contractor Address: 6825 Pine Street, Suite 340 + * Mail Stop B8 + * Omaha, NE 68106 + * 402.291.0100 + * + * See the AWIPS II Master Rights File ("Master Rights File.pdf") for + * further licensing information. + **/ +package com.raytheon.uf.edex.ohd.pproc; + +import com.raytheon.uf.common.serialization.annotations.DynamicSerialize; +import com.raytheon.uf.common.serialization.annotations.DynamicSerializeElement; + +/** + * A class that describes a DHR radar record that needs to be ingested. + * + *
+ * 
+ * SOFTWARE HISTORY
+ * 
+ * Date         Ticket#    Engineer    Description
+ * ------------ ---------- ----------- --------------------------
+ * Mar 09, 2012            dgilling    Initial creation
+ * 
+ * 
+ * + * @author dgilling + * @version 1.0 + */ + +@DynamicSerialize +public class HPEDhrMessage { + + @DynamicSerializeElement + private byte[] data; + + @DynamicSerializeElement + private String radarId; + + @DynamicSerializeElement + private String dtype; + + @DynamicSerializeElement + private String dt; + + public byte[] getData() { + return data; + } + + /** + * For use by Thrift serialization/deserialization only. Do not use. + */ + public HPEDhrMessage() { + + } + + public HPEDhrMessage(byte[] data, String radid, String dtype, String dt) { + this.data = data; + this.radarId = radid; + this.dtype = dtype; + this.dt = dt; + } + + public void setData(byte[] data) { + this.data = data; + } + + public String getRadarId() { + return radarId; + } + + public void setRadarId(String radarId) { + this.radarId = radarId; + } + + public String getDtype() { + return dtype; + } + + public void setDtype(String dtype) { + this.dtype = dtype; + } + + public String getDt() { + return dt; + } + + public void setDt(String dt) { + this.dt = dt; + } +} diff --git a/edexOsgi/com.raytheon.uf.edex.ohd/src/com/raytheon/uf/edex/ohd/pproc/HPEDhrSrv.java b/edexOsgi/com.raytheon.uf.edex.ohd/src/com/raytheon/uf/edex/ohd/pproc/HPEDhrSrv.java index 551488a32b..535c0f2637 100644 --- a/edexOsgi/com.raytheon.uf.edex.ohd/src/com/raytheon/uf/edex/ohd/pproc/HPEDhrSrv.java +++ b/edexOsgi/com.raytheon.uf.edex.ohd/src/com/raytheon/uf/edex/ohd/pproc/HPEDhrSrv.java @@ -30,11 +30,14 @@ import java.io.IOException; import java.util.regex.Matcher; import java.util.regex.Pattern; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - import com.raytheon.uf.common.ohd.AppsDefaults; +import com.raytheon.uf.common.serialization.SerializationException; +import com.raytheon.uf.common.serialization.SerializationUtil; +import com.raytheon.uf.common.status.IUFStatusHandler; +import com.raytheon.uf.common.status.UFStatus; +import com.raytheon.uf.common.status.UFStatus.Priority; import com.raytheon.uf.common.util.FileUtil; +import com.raytheon.uf.edex.core.EDEXUtil; import com.raytheon.uf.edex.core.EdexException; import com.raytheon.uf.edex.database.dao.CoreDao; import com.raytheon.uf.edex.database.dao.DaoConfig; @@ -48,6 +51,8 @@ import com.raytheon.uf.edex.ohd.MainMethod; * Date Ticket# Engineer Description * ------------ ---------- ----------- -------------------------- * Jan 20, 2010 4200 snaples Initial creation + * Mar 09, 2012 417 dgilling Refactor to use two-stage queue + * process. * * * @author snaples @@ -55,62 +60,225 @@ import com.raytheon.uf.edex.ohd.MainMethod; */ public class HPEDhrSrv { - private Log logger = LogFactory.getLog(getClass()); - - private AppsDefaults appsDefaults = AppsDefaults.getInstance(); - - private CoreDao dao; - - private File outFile; + private static final transient IUFStatusHandler logger = UFStatus + .getHandler(HPEDhrSrv.class); private static final Pattern WMO_PATTERN = Pattern .compile("([A-Z]{4}[0-9]{2} [A-Z]{4} [0-9]{6})\\x0D\\x0D\\x0A(\\w{6})\\x0D\\x0D\\x0A"); - /** WMO header regex */ - // private static final Pattern wmoPat = Pattern - // .compile("(\\p{Alpha}{4}\\d{2}) (\\p{Alnum}{4}) (\\d{6})"); - - private static final Pattern ldmPat = Pattern + private static final Pattern LDM_PATTERN = Pattern .compile("(\\p{Alpha}{3})(\\p{Alpha}{3})"); - private static final Pattern radPat = Pattern + private static final Pattern RAD_PATTERN = Pattern .compile("(\\p{Alpha}{4}).(\\d{2,3}).(\\d{8}_\\d{4})"); - private final String DHR = "DHR"; + private static final String DHRTYPE = "32"; - private final String dhrtype = "32"; + private static final String DSPTYPE1 = "138"; - private final String dsptype1 = "138"; + private static final String DSPTYPE2 = "80"; - private final String dsptype2 = "80"; + private static final String DHR = "DHR"; - private final String DSP = "DSP"; + private static final String DSP = "DSP"; - private final String STP = "STP"; + private static final String STP = "STP"; - public Object process(File hpeFile) throws EdexException { - // logger.info("Starting HPE Check message."); - checkMessage(hpeFile); + private static final int RADID_IDX = 0; - return null; + private static final int DTYPE_IDX = 1; + + private static final int DT_IDX = 2; + + private static final String JMS_QUEUE_URI = "jms-generic:queue:dhrProcess"; + + private AppsDefaults appsDefaults = AppsDefaults.getInstance(); + + /** + * Route endpoint for "dhrIngestRoute". Takes a message, writes the file to + * disk, and then runs the DHR data processing scripts so the file is + * ingested. + * + * @param message + * A HPEDhrMessage describing the DHR radar file to + * be ingested. + */ + public void process(HPEDhrMessage message) { + // logger.info("Starting HPE process message."); + try { + writeFile(message); + } catch (FileNotFoundException e) { + logger.handle(Priority.PROBLEM, "HPE cannot create output file.", e); + return; + } catch (IOException e) { + logger.handle(Priority.PROBLEM, + "HPE Error writing updated contents of HPE file", e); + return; + } + runGatherScripts(); } /** + * DPA radar files have been known to contain extra bytes at the beginning + * of the file. These bytes will cause the DHR decoder to fail. + *

+ * This method removes the leading bytes to ensure proper decoding of DHR + * files. * - * @param dhrFile - * The radar server message - * @throws EdexException - * If IOExceptions occur + * @param message + * A HPEDhrMessage describing the DHR radar file to + * be ingested. + * @throws FileNotFoundException + * If the output file cannot be created or opened for any + * reason. + * @throws IOException + * If an I/O error occurs while writing the file. */ - private void checkMessage(File hpeFile) throws EdexException { + private void writeFile(HPEDhrMessage message) throws FileNotFoundException, + IOException { + String dtype = message.getDtype(); + String outname = dtype + message.getRadarId() + "." + message.getDt(); + String outPath; + if (dtype.equals(DHR)) { + outPath = appsDefaults.getToken("dhr_prod_dir"); + } else { + outPath = appsDefaults.getToken("dsp_prod_dir"); + } + File oP = new File(outPath); + if (!oP.exists()) { + oP.mkdirs(); + } - boolean proc = false; - // logger.info("Starting HPE CheckFile. "); - proc = checkFile(hpeFile); - if (proc == false) { + byte[] fileContents = message.getData(); + int offset = findStartRadarData(new String(fileContents, 0, 80)); + String outFile = FileUtil.join(outPath, outname); + BufferedOutputStream outStream = null; + + try { + outStream = new BufferedOutputStream(new FileOutputStream(outFile)); + // logger.info("HPE Writing contents of file to " + + // outFile); + outStream.write(fileContents, offset, fileContents.length - offset); + } finally { + if (outStream != null) { + outStream.close(); + } + } + } + + /** + * Route endpoint for "dhrIngestFilter". Reads the given file to memory and + * determines whether or not this file is a DHR radar file. If it is, a + * message is sent to a JMS queue so it is later ingested. + * + * @param hpeFile + * The radar file to check. + */ + public void filter(File hpeFile) { + // logger.info("Starting HPE Check message."); + byte[] fileContents = new byte[0]; + try { + fileContents = readHpeFile(hpeFile); + } catch (FileNotFoundException e) { + logger.handle(Priority.PROBLEM, + "HPE Cannot find file: " + hpeFile.toString(), e); + } catch (IOException e) { + logger.handle(Priority.PROBLEM, "HPE Error reading file: " + + hpeFile.toString(), e); + } + + if (fileContents.length < 80) { return; } + + // check header + String fileStartStr = new String(fileContents, 0, 80); + // array will hold radar id, dtype, and dt information. using array so + // its contents can be modified by the checkFile() method. + String[] fileMetadata = new String[3]; + boolean validFile = checkFile(hpeFile.getName(), fileStartStr, + fileMetadata); + + // write file to queue + if (validFile) { + try { + sendFileToQueue(fileContents, fileMetadata[RADID_IDX], + fileMetadata[DTYPE_IDX], fileMetadata[DT_IDX]); + } catch (SerializationException e) { + logger.handle(Priority.PROBLEM, + "HPE can't serialize HPEDhrMessage for file: " + + hpeFile.toString(), e); + } catch (EdexException e) { + logger.handle(Priority.PROBLEM, + "HPE can't send message to QPID queue for file: " + + hpeFile.toString(), e); + } + } + // logger.info("Finished HPE CheckFile. "); + } + + /** + * Reads the given radar file to memory for later processing by the + * filter function. + * + * @param hpeFile + * The file to read. + * @return The contents of the file. + * @throws FileNotFoundException + * If the specified file does not exist or cannot be opened. + * @throws IOException + * If an I/O error occurs while reading the file. + */ + private byte[] readHpeFile(File hpeFile) throws FileNotFoundException, + IOException { + BufferedInputStream inStream = null; + byte[] fileContents = null; + + try { + inStream = new BufferedInputStream(new FileInputStream(hpeFile)); + fileContents = new byte[(int) hpeFile.length()]; + inStream.read(fileContents); + } finally { + if (inStream != null) { + inStream.close(); + } + } + + return fileContents; + } + + /** + * Takes the given parameters and constructs a HPEDhrMessage to + * be placed onto the queue used by HPEDhrSrv for actual data + * processing. + * + * @param data + * The contents of the radar file. + * @param radid + * The radar id for the given file. + * @param dtype + * The file's dtype. + * @param dt + * The file's dt. + * @throws SerializationException + * If the constructed HPEDhrMessage cannot be + * serialized by Thrift. + * @throws EdexException + * If the message cannot be placed onto the QPID queue for DHR + * data processing. + */ + private void sendFileToQueue(byte[] data, String radid, String dtype, + String dt) throws SerializationException, EdexException { + HPEDhrMessage message = new HPEDhrMessage(data, radid, dtype, dt); + byte[] messageData = SerializationUtil.transformToThrift(message); + EDEXUtil.getMessageProducer().sendAsyncUri(JMS_QUEUE_URI, messageData); + } + + /** + * Runs the DSPgather and DHRgather data processing scripts. + */ + private void runGatherScripts() { // logger.info("Starting HPE DSP gather."); int exitValue = MainMethod.runProgram("ksh", appsDefaults.getToken("pproc_bin") + "/DSPgather"); @@ -135,86 +303,55 @@ public class HPEDhrSrv { } /** - * DPA radar files have been known to contain extra bytes at the beginning - * of the file. These bytes will cause the DHR decoder to fail. - *

- * This method removes the leading bytes to ensure proper decoding of DHR - * files + * Given a radar file name and file header, this function determines whether + * or not this file is a DHR radar file. * * @param fileName - * The name of the DHR radar file - * @throws EdexException - * If IOExceptions occur + * The name of the radar file + * @param fileHeader + * The first 80 bytes from the radar file. + * @param metadata + * A length 3 String array that will be used to pass + * the radar id, dtype, and dt back to the caller. + * @return If the specified file is a DHR radar file. */ - private boolean checkFile(File hpeFile) throws EdexException { - /* - * Read the contents of the file into memory. - */ - BufferedInputStream inStream = null; - try { - inStream = new BufferedInputStream(new FileInputStream(hpeFile)); - } catch (FileNotFoundException e) { - throw new EdexException("HPE Cannot find file: " + hpeFile, e); - } - byte[] fileContents = new byte[(int) hpeFile.length()]; - try { - inStream.read(fileContents); - } catch (IOException e) { - throw new EdexException("HPE Error reading file: " + hpeFile, e); - } finally { - try { - inStream.close(); - } catch (IOException e1) { - throw new EdexException("HPE Error closing stream to file: " - + hpeFile, e1); - } - } - String outPath = ""; - String fname = hpeFile.getName(); - String radid = ""; - String dtype = ""; - String dt = ""; - String outname = ""; - - Matcher r = radPat.matcher(fname); - /* - * Copy off the first few bytes to see if leading bytes are present - * before the WMO header - */ - if (fileContents.length < 80) { - return false; - } - String fileStartStr = new String(fileContents, 0, 80); - + private boolean checkFile(String fileName, String fileHeader, + String[] metadata) { /* * Find the WMO header */ - Matcher wmomat = WMO_PATTERN.matcher(fileStartStr); - Matcher dhrmat = ldmPat.matcher(fileStartStr); + Matcher r = RAD_PATTERN.matcher(fileName); + Matcher wmomat = WMO_PATTERN.matcher(fileHeader); if (r.find()) { // logger.info("HPE DHRSrv found Radar file."); - radid = r.group(1).substring(1).toUpperCase().trim(); + // getting the radid + metadata[RADID_IDX] = r.group(1).substring(1).toUpperCase().trim(); String ftype = r.group(2); - dt = r.group(3); - if (ftype.equals(dhrtype)) { - dtype = DHR; + // getting the dt + metadata[DT_IDX] = r.group(3); + // getting the dtype + if (ftype.equals(DHRTYPE)) { + metadata[DTYPE_IDX] = DHR; // logger.info("HPE DHRSrv found Radar file type DHR."); - } else if (ftype.equals(dsptype1) || ftype.equals(dsptype2)) { - dtype = DSP; + } else if (ftype.equals(DSPTYPE1) || ftype.equals(DSPTYPE2)) { + metadata[DTYPE_IDX] = DSP; // logger.info("HPE DHRSrv found Radar file type DSP."); } else { // logger.info("HPE DHRSrv found Radar type unknown."); return false; } } else if (wmomat.find()) { + Matcher dhrmat = LDM_PATTERN.matcher(fileHeader); if (dhrmat.find()) { - // logger.info("HPE DHRSrv found LDM file."); - dt = wmomat.group(1).substring(wmomat.group(1).length() - 6); - radid = dhrmat.group(2).toUpperCase().trim(); - dtype = dhrmat.group(1).toUpperCase().trim(); - if (!dtype.equals(DSP) || !dtype.equals(STP) - || !dtype.equals(DHR)) { + // logger.info("HPEDHRSrv found LDM file."); + metadata[DT_IDX] = wmomat.group(1).substring( + wmomat.group(1).length() - 6); + metadata[RADID_IDX] = dhrmat.group(2).toUpperCase().trim(); + metadata[DTYPE_IDX] = dhrmat.group(1).toUpperCase().trim(); + if ((!metadata[DTYPE_IDX].equals(DSP)) + && (!metadata[DTYPE_IDX].equals(STP)) + && (!metadata[DTYPE_IDX].equals(DHR))) { return false; } } else { @@ -223,80 +360,42 @@ public class HPEDhrSrv { } else { return false; } + // logger.info("HPE DHRSrv querying db for radid=" + radid // + " and use_radar=T."); String query = String.format( "select * from radarloc where radid='%s' and use_radar='T' ", - radid); - dao = new CoreDao(DaoConfig.forDatabase("ihfs")); + metadata[RADID_IDX]); + CoreDao dao = new CoreDao(DaoConfig.forDatabase("ihfs")); Object[] rs = dao.executeSQLQuery(query); - // logger.info("HPE DHRSrv querying db done."); - if (rs.length > 0) { - outname = dtype + radid + "." + dt; - if (dtype.equals(DHR)) { - outPath = appsDefaults.getToken("dhr_prod_dir"); - } else { - outPath = appsDefaults.getToken("dsp_prod_dir"); - } - File oP = new File(outPath); - if (!oP.exists()) { - oP.mkdir(); - } - - int offset = 0; - offset = findStartRadarData(fileStartStr); - outFile = new File(FileUtil.join(outPath, outname)); - BufferedOutputStream outStream = null; - - try { - outStream = new BufferedOutputStream(new FileOutputStream( - outFile)); - } catch (FileNotFoundException e) { - throw new EdexException("HPE Cannot find file: " + outFile, e); - } - - try { - outStream.write(fileContents, offset, fileContents.length - - offset); - // logger.info("HPE Re-writing contents of file: " + hpeFile - // + " to " + outFile); - } catch (IOException e) { - throw new EdexException( - "HPE Error writing updated contents of HPE file: " - + outFile, e); - } finally { - try { - outStream.close(); - } catch (IOException e1) { - throw new EdexException("HPE Unable to close file: " - + outFile, e1); - } - } - return true; - } else { - return false; - } + return (rs.length > 0); } + /** + * Given the header data from a radar file, this function determines the + * ending offset of the WMO header. + * + * @param headerInfo + * The header data from a radar file. + * @return Returns the offset after the last character in the WMO header. + */ private int findStartRadarData(String headerInfo) { - int startOfRadarData = 0; Matcher matcher = WMO_PATTERN.matcher(headerInfo); - boolean foundHeader = matcher.find(); - if (foundHeader) { - startOfRadarData = matcher.end(); + if (matcher.find()) { + return matcher.end(); } - return startOfRadarData; + return 0; } public static final void main(String[] args) { String input = "SDUS53_ABR_DSP_201538_185076111.rad"; String input2 = "koax.32.20111020_1553"; - Matcher m = ldmPat.matcher(input); - Matcher p = radPat.matcher(input2); + Matcher m = LDM_PATTERN.matcher(input); + Matcher p = RAD_PATTERN.matcher(input2); if (m.find()) { System.out.println(m.group(0)); diff --git a/edexOsgi/com.raytheon.uf.edex.plugin.acars/com.raytheon.uf.edex.plugin.acars.ecl b/edexOsgi/com.raytheon.uf.edex.plugin.acars/com.raytheon.uf.edex.plugin.acars.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.uf.edex.plugin.acarssounding/com.raytheon.uf.edex.plugin.acarssounding.ecl b/edexOsgi/com.raytheon.uf.edex.plugin.acarssounding/com.raytheon.uf.edex.plugin.acarssounding.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.uf.edex.plugin.bufrascat/com.raytheon.uf.edex.plugin.bufrascat.ecl b/edexOsgi/com.raytheon.uf.edex.plugin.bufrascat/com.raytheon.uf.edex.plugin.bufrascat.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.uf.edex.plugin.bufrhdw/com.raytheon.uf.edex.plugin.bufrhdw.ecl b/edexOsgi/com.raytheon.uf.edex.plugin.bufrhdw/com.raytheon.uf.edex.plugin.bufrhdw.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.uf.edex.plugin.bufrmthdw/com.raytheon.uf.edex.plugin.bufrmthdw.ecl b/edexOsgi/com.raytheon.uf.edex.plugin.bufrmthdw/com.raytheon.uf.edex.plugin.bufrmthdw.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.uf.edex.plugin.bufrncwf/com.raytheon.uf.edex.plugin.bufrncwf.ecl b/edexOsgi/com.raytheon.uf.edex.plugin.bufrncwf/com.raytheon.uf.edex.plugin.bufrncwf.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.uf.edex.plugin.bufrquikscat/com.raytheon.uf.edex.plugin.bufrquikscat.ecl b/edexOsgi/com.raytheon.uf.edex.plugin.bufrquikscat/com.raytheon.uf.edex.plugin.bufrquikscat.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.uf.edex.plugin.bufrsigwx/com.raytheon.uf.edex.plugin.bufrsigwx.ecl b/edexOsgi/com.raytheon.uf.edex.plugin.bufrsigwx/com.raytheon.uf.edex.plugin.bufrsigwx.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.uf.edex.plugin.bufrssmi/com.raytheon.uf.edex.plugin.bufrssmi.ecl b/edexOsgi/com.raytheon.uf.edex.plugin.bufrssmi/com.raytheon.uf.edex.plugin.bufrssmi.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.uf.edex.plugin.cwa/com.raytheon.uf.edex.plugin.cwa.ecl b/edexOsgi/com.raytheon.uf.edex.plugin.cwa/com.raytheon.uf.edex.plugin.cwa.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.uf.edex.plugin.cwat/com.raytheon.uf.edex.plugin.cwat.ecl b/edexOsgi/com.raytheon.uf.edex.plugin.cwat/com.raytheon.uf.edex.plugin.cwat.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.uf.edex.plugin.ffmp/com.raytheon.uf.edex.plugin.ffmp.ecl b/edexOsgi/com.raytheon.uf.edex.plugin.ffmp/com.raytheon.uf.edex.plugin.ffmp.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.uf.edex.plugin.fog/com.raytheon.uf.edex.plugin.fog.ecl b/edexOsgi/com.raytheon.uf.edex.plugin.fog/com.raytheon.uf.edex.plugin.fog.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.uf.edex.plugin.fssobs/com.raytheon.uf.edex.plugin.fssobs.ecl b/edexOsgi/com.raytheon.uf.edex.plugin.fssobs/com.raytheon.uf.edex.plugin.fssobs.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.uf.edex.plugin.ldadmesonet/com.raytheon.uf.edex.plugin.ldadmesonet.ecl b/edexOsgi/com.raytheon.uf.edex.plugin.ldadmesonet/com.raytheon.uf.edex.plugin.ldadmesonet.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.uf.edex.plugin.level.handler/com.raytheon.uf.edex.plugin.level.handler.ecl b/edexOsgi/com.raytheon.uf.edex.plugin.level.handler/com.raytheon.uf.edex.plugin.level.handler.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.uf.edex.plugin.level/com.raytheon.uf.edex.plugin.level.ecl b/edexOsgi/com.raytheon.uf.edex.plugin.level/com.raytheon.uf.edex.plugin.level.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.uf.edex.plugin.loctables/com.raytheon.uf.edex.plugin.loctables.ecl b/edexOsgi/com.raytheon.uf.edex.plugin.loctables/com.raytheon.uf.edex.plugin.loctables.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.uf.edex.plugin.lsr/com.raytheon.uf.edex.plugin.lsr.ecl b/edexOsgi/com.raytheon.uf.edex.plugin.lsr/com.raytheon.uf.edex.plugin.lsr.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.uf.edex.plugin.manualIngest/com.raytheon.uf.edex.plugin.manualIngest.ecl b/edexOsgi/com.raytheon.uf.edex.plugin.manualIngest/com.raytheon.uf.edex.plugin.manualIngest.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.uf.edex.plugin.mesowest/com.raytheon.uf.edex.plugin.mesowest.ecl b/edexOsgi/com.raytheon.uf.edex.plugin.mesowest/com.raytheon.uf.edex.plugin.mesowest.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.uf.edex.plugin.npp.viirs/com.raytheon.uf.edex.plugin.npp.viirs.ecl b/edexOsgi/com.raytheon.uf.edex.plugin.npp.viirs/com.raytheon.uf.edex.plugin.npp.viirs.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.uf.edex.plugin.nwsauth/com.raytheon.uf.edex.plugin.nwsauth.ecl b/edexOsgi/com.raytheon.uf.edex.plugin.nwsauth/com.raytheon.uf.edex.plugin.nwsauth.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.uf.edex.plugin.preciprate/com.raytheon.uf.edex.plugin.preciprate.ecl b/edexOsgi/com.raytheon.uf.edex.plugin.preciprate/com.raytheon.uf.edex.plugin.preciprate.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.uf.edex.plugin.qc/com.raytheon.uf.edex.plugin.qc.ecl b/edexOsgi/com.raytheon.uf.edex.plugin.qc/com.raytheon.uf.edex.plugin.qc.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.uf.edex.plugin.qpf/com.raytheon.uf.edex.plugin.qpf.ecl b/edexOsgi/com.raytheon.uf.edex.plugin.qpf/com.raytheon.uf.edex.plugin.qpf.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.uf.edex.plugin.satellite.mcidas/com.raytheon.uf.edex.plugin.satellite.mcidas.ecl b/edexOsgi/com.raytheon.uf.edex.plugin.satellite.mcidas/com.raytheon.uf.edex.plugin.satellite.mcidas.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.uf.edex.plugin.scan.common/com.raytheon.uf.edex.plugin.scan.common.ecl b/edexOsgi/com.raytheon.uf.edex.plugin.scan.common/com.raytheon.uf.edex.plugin.scan.common.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.uf.edex.plugin.scan/com.raytheon.uf.edex.plugin.scan.ecl b/edexOsgi/com.raytheon.uf.edex.plugin.scan/com.raytheon.uf.edex.plugin.scan.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.uf.edex.plugin.svrwx/com.raytheon.uf.edex.plugin.svrwx.ecl b/edexOsgi/com.raytheon.uf.edex.plugin.svrwx/com.raytheon.uf.edex.plugin.svrwx.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.uf.edex.plugin.tcg/com.raytheon.uf.edex.plugin.tcg.ecl b/edexOsgi/com.raytheon.uf.edex.plugin.tcg/com.raytheon.uf.edex.plugin.tcg.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.uf.edex.plugin.tcs/com.raytheon.uf.edex.plugin.tcs.ecl b/edexOsgi/com.raytheon.uf.edex.plugin.tcs/com.raytheon.uf.edex.plugin.tcs.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.uf.edex.plugin.vaa/com.raytheon.uf.edex.plugin.vaa.ecl b/edexOsgi/com.raytheon.uf.edex.plugin.vaa/com.raytheon.uf.edex.plugin.vaa.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.uf.edex.plugin.vil/com.raytheon.uf.edex.plugin.vil.ecl b/edexOsgi/com.raytheon.uf.edex.plugin.vil/com.raytheon.uf.edex.plugin.vil.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.uf.edex.pointdata/com.raytheon.uf.edex.pointdata.ecl b/edexOsgi/com.raytheon.uf.edex.pointdata/com.raytheon.uf.edex.pointdata.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.uf.edex.purgesrv/com.raytheon.uf.edex.purgesrv.ecl b/edexOsgi/com.raytheon.uf.edex.purgesrv/com.raytheon.uf.edex.purgesrv.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.uf.edex.python.decoder/com.raytheon.uf.edex.python.decoder.ecl b/edexOsgi/com.raytheon.uf.edex.python.decoder/com.raytheon.uf.edex.python.decoder.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.uf.edex.site/com.raytheon.uf.edex.site.ecl b/edexOsgi/com.raytheon.uf.edex.site/com.raytheon.uf.edex.site.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.uf.edex.textdbsrv/com.raytheon.uf.edex.textdbsrv.ecl b/edexOsgi/com.raytheon.uf.edex.textdbsrv/com.raytheon.uf.edex.textdbsrv.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.uf.edex.topo/com.raytheon.uf.edex.topo.ecl b/edexOsgi/com.raytheon.uf.edex.topo/com.raytheon.uf.edex.topo.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.uf.tools.cli/com.raytheon.uf.tools.cli.ecl b/edexOsgi/com.raytheon.uf.tools.cli/com.raytheon.uf.tools.cli.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.uf.tools.gfesuite.servicebackup/com.raytheon.uf.tools.gfesuite.servicebackup.ecl b/edexOsgi/com.raytheon.uf.tools.gfesuite.servicebackup/com.raytheon.uf.tools.gfesuite.servicebackup.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/com.raytheon.uf.tools.gfesuite.servicebackup/svcBackup/ServiceBackup/scripts/export_configuration b/edexOsgi/com.raytheon.uf.tools.gfesuite.servicebackup/svcBackup/ServiceBackup/scripts/export_configuration index 23836108b7..e011a11baf 100755 --- a/edexOsgi/com.raytheon.uf.tools.gfesuite.servicebackup/svcBackup/ServiceBackup/scripts/export_configuration +++ b/edexOsgi/com.raytheon.uf.tools.gfesuite.servicebackup/svcBackup/ServiceBackup/scripts/export_configuration @@ -70,12 +70,16 @@ log_msg Copying edex site configuration for site ${CAPS_SITE} to temporary direc cp -r ${LOCALIZATION_PATH}/edex_static/site/${CAPS_SITE}/config/gfe $edexDest/site log_msg 50 -log_msg Copying cave site configuration for site ${CAPS_SITE} to temporary directory... -cp -r ${LOCALIZATION_PATH}/cave_static/site/${CAPS_SITE}/gfe $caveDest/site +log_msg Copying edex smartinit for site ${CAPS_SITE} to temporary directory... +cp -r ${LOCALIZATION_PATH}/edex_static/site/${CAPS_SITE}/smartinit $edexDest/site log_msg 60 +log_msg Copying cave site configuration for site ${CAPS_SITE} to temporary directory... +cp -r ${LOCALIZATION_PATH}/cave_static/site/${CAPS_SITE}/gfe $caveDest/site +log_msg 70 + # Tar up everything. -log_msg 65 +log_msg 75 log_msg Tarring and zipping configuration to file GFEconfig.${SITE}.tar.gz tar cf - GFEconfig|gzip -9 - > GFEconfig.${SITE}.tar.gz if [ $? -ne 0 ] @@ -88,12 +92,12 @@ fi log_msg Cleaning up temporary files rm -fR GFEconfig -log_msg 75 +log_msg 85 log_msg Preparing compressed file for exporting to central server... log_msg Compressing to file svc_bkup_${SITE}.tar tar cf svc_bkup_${SITE}.tar *.gz siteID.txt -log_msg 85 +log_msg 95 #check for failure of the tar file if [ $? -ne 0 ] @@ -113,7 +117,7 @@ rm siteID.txt log_msg Sending the tar file to the central server... -log_msg 90 +log_msg 100 # Check to see if ${SVCBU_WMO_HEADER} is assigned a value. If so, call msg_send with -i. # Otherwise, don't call it with -i @@ -143,5 +147,5 @@ log_msg Successfully sent message. MESSAGE ID: $msgSendOutput #echo ${SVCBU_HOME}/* | xargs rm -rf rm -f ${LOCK_DIR}/${SITE}exportConfig log_msg Configuration data has been exported! -log_msg 100 +log_msg 110 exit 0 diff --git a/edexOsgi/com.raytheon.uf.tools.gfesuite.servicebackup/svcBackup/ServiceBackup/scripts/proc_receive_config b/edexOsgi/com.raytheon.uf.tools.gfesuite.servicebackup/svcBackup/ServiceBackup/scripts/proc_receive_config index ab02d11677..5dee535a17 100644 --- a/edexOsgi/com.raytheon.uf.tools.gfesuite.servicebackup/svcBackup/ServiceBackup/scripts/proc_receive_config +++ b/edexOsgi/com.raytheon.uf.tools.gfesuite.servicebackup/svcBackup/ServiceBackup/scripts/proc_receive_config @@ -99,6 +99,7 @@ log_msg "Copying files into position..." log_msg "Checking if localization directories exist for ${SITE_CAPS}" edex_site_dest=${LOCALIZATION_PATH}/edex_static/site/${SITE_CAPS}/config +edex_site_si_dest=${LOCALIZATION_PATH}/edex_static/site/${SITE_CAPS} common_site_dest=${LOCALIZATION_PATH}/common_static/site/${SITE_CAPS} cave_site_dest=${LOCALIZATION_PATH}/cave_static/site/${SITE_CAPS} @@ -129,8 +130,10 @@ cp -r GFEconfig/common_static/site/gfe ${common_site_dest} log_msg 70 cp -r GFEconfig/edex_static/site/gfe ${edex_site_dest} log_msg 80 -cp -r GFEconfig/cave_static/site/gfe ${cave_site_dest} +cp -r GFEconfig/edex_static/site/smartinit ${edex_site_si_dest} log_msg 90 +cp -r GFEconfig/cave_static/site/gfe ${cave_site_dest} +log_msg 100 log_msg "Files successfully copied!" log_msg "Changing ownership of received configuration" @@ -147,7 +150,7 @@ else fi -log_msg 95 +log_msg 105 #Change the MHS ID of the received configuration backup_config=${LOCALIZATION_PATH}/edex_static/site/${my_site_caps}/config/gfe/siteConfig.py @@ -167,6 +170,6 @@ cd ${SVCBU_HOME} rm -rf * rm -f ${LOCK_DIR}/importConfiguration -log_msg 100 +log_msg 110 touch ${LOCK_DIR}/${SITE}svcbuMode -log_msg "Configuration Import Complete!" \ No newline at end of file +log_msg "Configuration Import Complete!" diff --git a/edexOsgi/com.raytheon.uf.tools.gfesuite/com.raytheon.uf.tools.gfesuite.ecl b/edexOsgi/com.raytheon.uf.tools.gfesuite/com.raytheon.uf.tools.gfesuite.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/meteolib.jni.linux32/meteolib.jni.linux32.ecl b/edexOsgi/meteolib.jni.linux32/meteolib.jni.linux32.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edexOsgi/meteolib.jni.linux64/libmeteoLib.so b/edexOsgi/meteolib.jni.linux64/libmeteoLib.so index 7165f661843de939d7db2690d85b5198f39d08e2..8cec4f96826c83c68e1143ff33369cde7e3fea3a 100644 GIT binary patch literal 1462465 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 z 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¬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 OT6wOduJ_0S57U3DY@1*J delta 103873 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 - - - Microsoft.Deployment.Compression.Cab - - - -

- Disposes of resources allocated by the cabinet engine. - - If true, the method has been called directly or indirectly by a user's code, - so managed and unmanaged resources will be disposed. If false, the method has been called by the - runtime from inside the finalizer, and only unmanaged resources will be disposed. - - - - Disposes of resources allocated by the cabinet engine. - - If true, the method has been called directly or indirectly by a user's code, - so managed and unmanaged resources will be disposed. If false, the method has been called by the - runtime from inside the finalizer, and only unmanaged resources will be disposed. - - - - Engine capable of packing and unpacking archives in the cabinet format. - - - - - Creates a new instance of the cabinet engine. - - - - - Disposes of resources allocated by the cabinet engine. - - If true, the method has been called directly - or indirectly by a user's code, so managed and unmanaged resources - will be disposed. If false, the method has been called by the runtime - from inside the finalizer, and only unmanaged resources will be - disposed. - - - - Creates a cabinet or chain of cabinets. - - A context interface to handle opening - and closing of cabinet and file streams. - The paths of the files in the archive (not - external file paths). - The maximum number of bytes for one - cabinet before the contents are chained to the next cabinet, or zero - for unlimited cabinet size. - The cabinet could not be - created. - - The stream context implementation may provide a mapping from the - file paths within the cabinet to the external file paths. - Smaller folder sizes can make it more efficient to extract - individual files out of large cabinet packages. - - - - - Checks whether a Stream begins with a header that indicates - it is a valid cabinet file. - - Stream for reading the cabinet file. - True if the stream is a valid cabinet file - (with no offset); false otherwise. - - - - Gets information about files in a cabinet or cabinet chain. - - A context interface to handle opening - and closing of cabinet and file streams. - A predicate that can determine - which files to process, optional. - Information about files in the cabinet stream. - The cabinet provided - by the stream context is not valid. - - The predicate takes an internal file - path and returns true to include the file or false to exclude it. - - - - - Extracts files from a cabinet or cabinet chain. - - A context interface to handle opening - and closing of cabinet and file streams. - An optional predicate that can determine - which files to process. - The cabinet provided - by the stream context is not valid. - - The predicate takes an internal file - path and returns true to include the file or false to exclude it. - - - - - Exception class for cabinet operations. - - - - - Creates a new CabException with a specified error message and a reference to the - inner exception that is the cause of this exception. - - The message that describes the error. - The exception that is the cause of the current exception. If the - innerException parameter is not a null reference (Nothing in Visual Basic), the current exception - is raised in a catch block that handles the inner exception. - - - - Creates a new CabException with a specified error message. - - The message that describes the error. - - - - Creates a new CabException. - - - - - Initializes a new instance of the CabException class with serialized data. - - The SerializationInfo that holds the serialized object data about the exception being thrown. - The StreamingContext that contains contextual information about the source or destination. - - - - Sets the SerializationInfo with information about the exception. - - The SerializationInfo that holds the serialized object data about the exception being thrown. - The StreamingContext that contains contextual information about the source or destination. - - - - Gets the FCI or FDI cabinet engine error number. - - A cabinet engine error number, or 0 if the exception was - not related to a cabinet engine error number. - - - - Gets the Win32 error code. - - A Win32 error code, or 0 if the exception was - not related to a Win32 error. - - - - Disposes of resources allocated by the cabinet engine. - - If true, the method has been called directly or indirectly by a user's code, - so managed and unmanaged resources will be disposed. If false, the method has been called by the - runtime from inside the finalizer, and only unmanaged resources will be disposed. - - - - Object representing a compressed file within a cabinet package; provides operations for getting - the file properties and extracting the file. - - - - - Creates a new CabinetFileInfo object representing a file within a cabinet in a specified path. - - An object representing the cabinet containing the file. - The path to the file within the cabinet. Usually, this is a simple file - name, but if the cabinet contains a directory structure this may include the directory. - - - - Creates a new CabinetFileInfo object with all parameters specified, - used internally when reading the metadata out of a cab. - - The internal path and name of the file in the cab. - The folder number containing the file. - The cabinet number where the file starts. - The stored attributes of the file. - The stored last write time of the file. - The uncompressed size of the file. - - - - Initializes a new instance of the CabinetFileInfo class with serialized data. - - The SerializationInfo that holds the serialized object data about the exception being thrown. - The StreamingContext that contains contextual information about the source or destination. - - - - Sets the SerializationInfo with information about the archive. - - The SerializationInfo that holds the serialized object data. - The StreamingContext that contains contextual information - about the source or destination. - - - - Refreshes the information in this object with new data retrieved - from an archive. - - Fresh instance for the same file just - read from the archive. - - This implementation refreshes the . - - - - - Gets or sets the cabinet that contains this file. - - - The CabinetInfo instance that retrieved this file information -- this - may be null if the CabinetFileInfo object was returned directly from a - stream. - - - - - Gets the full path of the cabinet that contains this file. - - The full path of the cabinet that contains this file. - - - - Gets the number of the folder containing this file. - - The number of the cabinet folder containing this file. - A single folder or the first folder of a cabinet - (or chain of cabinets) is numbered 0. - - - - Object representing a cabinet file on disk; provides access to - file-based operations on the cabinet file. - - - Generally, the methods on this class are much easier to use than the - stream-based interfaces provided by the class. - - - - - Creates a new CabinetInfo object representing a cabinet file in a specified path. - - The path to the cabinet file. When creating a cabinet file, this file does not - necessarily exist yet. - - - - Initializes a new instance of the CabinetInfo class with serialized data. - - The SerializationInfo that holds the serialized object data about the exception being thrown. - The StreamingContext that contains contextual information about the source or destination. - - - - Creates a compression engine that does the low-level work for - this object. - - A new instance. - - Each instance will be d - immediately after use. - - - - - Gets information about the files contained in the archive. - - A list of objects, each - containing information about a file in the archive. - - - - Gets information about the certain files contained in the archive file. - - The search string, such as - "*.txt". - A list of objects, each containing - information about a file in the archive. - - - - Generic class for managing allocations of integer handles - for objects of a certain type. - - The type of objects the handles refer to. - - - - Auto-resizing list of objects for which handles have been allocated. - Each handle is just an index into this list. When a handle is freed, - the list item at that index is set to null. - - - - - Creates a new HandleManager instance. - - - - - Allocates a new handle for an object. - - Object that the handle will refer to. - New handle that can be later used to retrieve the object. - - - - Frees a handle that was previously allocated. Afterward the handle - will be invalid and the object it referred to can no longer retrieved. - - Handle to be freed. - - - - Gets the object of a handle, or null if the handle is invalid. - - The integer handle previously allocated - for the desired object. - The object for which the handle was allocated. - - - - Native DllImport methods and related structures and constants used for - cabinet creation and extraction via cabinet.dll. - - - - - A direct import of constants, enums, structures, delegates, and functions from fci.h. - Refer to comments in fci.h for documentation. - - - - - Error codes that can be returned by FCI. - - - - - FCI compression algorithm types and parameters. - - - - - Reason for FCI status callback. - - - - - Cabinet information structure used for FCI initialization and GetNextCabinet callback. - - - - - Ensures that the FCI handle is safely released. - - - - - Creates a new unintialized handle. The handle will be initialized - when it is marshalled back from native code. - - - - - Releases the handle by calling FDIDestroy(). - - True if the release succeeded. - - - - Checks if the handle is invalid. An FCI handle is invalid when it is zero. - - - - - A direct import of constants, enums, structures, delegates, and functions from fdi.h. - Refer to comments in fdi.h for documentation. - - - - - Error codes that can be returned by FDI. - - - - - Type of notification message for the FDI Notify callback. - - - - - Cabinet information structure filled in by FDI IsCabinet. - - - - - Cabinet notification details passed to the FDI Notify callback. - - - - - Ensures that the FDI handle is safely released. - - - - - Creates a new unintialized handle. The handle will be initialized - when it is marshalled back from native code. - - - - - Releases the handle by calling FDIDestroy(). - - True if the release succeeded. - - - - Checks if the handle is invalid. An FDI handle is invalid when it is zero. - - - - - Error info structure for FCI and FDI. - - Before being passed to FCI or FDI, this structure is - pinned in memory via a GCHandle. The pinning is necessary - to be able to read the results, since the ERF structure doesn't - get marshalled back out after an error. - - - - Clears the error information. - - - - - Gets or sets the cabinet error code. - - - - - Gets or sets the Win32 error code. - - - - - GCHandle doesn't like the bool type, so use an int underneath. - - - - + + + + Microsoft.Deployment.Compression.Cab + + + + + Disposes of resources allocated by the cabinet engine. + + If true, the method has been called directly or indirectly by a user's code, + so managed and unmanaged resources will be disposed. If false, the method has been called by the + runtime from inside the finalizer, and only unmanaged resources will be disposed. + + + + Disposes of resources allocated by the cabinet engine. + + If true, the method has been called directly or indirectly by a user's code, + so managed and unmanaged resources will be disposed. If false, the method has been called by the + runtime from inside the finalizer, and only unmanaged resources will be disposed. + + + + Engine capable of packing and unpacking archives in the cabinet format. + + + + + Creates a new instance of the cabinet engine. + + + + + Disposes of resources allocated by the cabinet engine. + + If true, the method has been called directly + or indirectly by a user's code, so managed and unmanaged resources + will be disposed. If false, the method has been called by the runtime + from inside the finalizer, and only unmanaged resources will be + disposed. + + + + Creates a cabinet or chain of cabinets. + + A context interface to handle opening + and closing of cabinet and file streams. + The paths of the files in the archive (not + external file paths). + The maximum number of bytes for one + cabinet before the contents are chained to the next cabinet, or zero + for unlimited cabinet size. + The cabinet could not be + created. + + The stream context implementation may provide a mapping from the + file paths within the cabinet to the external file paths. + Smaller folder sizes can make it more efficient to extract + individual files out of large cabinet packages. + + + + + Checks whether a Stream begins with a header that indicates + it is a valid cabinet file. + + Stream for reading the cabinet file. + True if the stream is a valid cabinet file + (with no offset); false otherwise. + + + + Gets information about files in a cabinet or cabinet chain. + + A context interface to handle opening + and closing of cabinet and file streams. + A predicate that can determine + which files to process, optional. + Information about files in the cabinet stream. + The cabinet provided + by the stream context is not valid. + + The predicate takes an internal file + path and returns true to include the file or false to exclude it. + + + + + Extracts files from a cabinet or cabinet chain. + + A context interface to handle opening + and closing of cabinet and file streams. + An optional predicate that can determine + which files to process. + The cabinet provided + by the stream context is not valid. + + The predicate takes an internal file + path and returns true to include the file or false to exclude it. + + + + + Exception class for cabinet operations. + + + + + Creates a new CabException with a specified error message and a reference to the + inner exception that is the cause of this exception. + + The message that describes the error. + The exception that is the cause of the current exception. If the + innerException parameter is not a null reference (Nothing in Visual Basic), the current exception + is raised in a catch block that handles the inner exception. + + + + Creates a new CabException with a specified error message. + + The message that describes the error. + + + + Creates a new CabException. + + + + + Initializes a new instance of the CabException class with serialized data. + + The SerializationInfo that holds the serialized object data about the exception being thrown. + The StreamingContext that contains contextual information about the source or destination. + + + + Sets the SerializationInfo with information about the exception. + + The SerializationInfo that holds the serialized object data about the exception being thrown. + The StreamingContext that contains contextual information about the source or destination. + + + + Gets the FCI or FDI cabinet engine error number. + + A cabinet engine error number, or 0 if the exception was + not related to a cabinet engine error number. + + + + Gets the Win32 error code. + + A Win32 error code, or 0 if the exception was + not related to a Win32 error. + + + + Disposes of resources allocated by the cabinet engine. + + If true, the method has been called directly or indirectly by a user's code, + so managed and unmanaged resources will be disposed. If false, the method has been called by the + runtime from inside the finalizer, and only unmanaged resources will be disposed. + + + + Object representing a compressed file within a cabinet package; provides operations for getting + the file properties and extracting the file. + + + + + Creates a new CabinetFileInfo object representing a file within a cabinet in a specified path. + + An object representing the cabinet containing the file. + The path to the file within the cabinet. Usually, this is a simple file + name, but if the cabinet contains a directory structure this may include the directory. + + + + Creates a new CabinetFileInfo object with all parameters specified, + used internally when reading the metadata out of a cab. + + The internal path and name of the file in the cab. + The folder number containing the file. + The cabinet number where the file starts. + The stored attributes of the file. + The stored last write time of the file. + The uncompressed size of the file. + + + + Initializes a new instance of the CabinetFileInfo class with serialized data. + + The SerializationInfo that holds the serialized object data about the exception being thrown. + The StreamingContext that contains contextual information about the source or destination. + + + + Sets the SerializationInfo with information about the archive. + + The SerializationInfo that holds the serialized object data. + The StreamingContext that contains contextual information + about the source or destination. + + + + Refreshes the information in this object with new data retrieved + from an archive. + + Fresh instance for the same file just + read from the archive. + + This implementation refreshes the . + + + + + Gets or sets the cabinet that contains this file. + + + The CabinetInfo instance that retrieved this file information -- this + may be null if the CabinetFileInfo object was returned directly from a + stream. + + + + + Gets the full path of the cabinet that contains this file. + + The full path of the cabinet that contains this file. + + + + Gets the number of the folder containing this file. + + The number of the cabinet folder containing this file. + A single folder or the first folder of a cabinet + (or chain of cabinets) is numbered 0. + + + + Object representing a cabinet file on disk; provides access to + file-based operations on the cabinet file. + + + Generally, the methods on this class are much easier to use than the + stream-based interfaces provided by the class. + + + + + Creates a new CabinetInfo object representing a cabinet file in a specified path. + + The path to the cabinet file. When creating a cabinet file, this file does not + necessarily exist yet. + + + + Initializes a new instance of the CabinetInfo class with serialized data. + + The SerializationInfo that holds the serialized object data about the exception being thrown. + The StreamingContext that contains contextual information about the source or destination. + + + + Creates a compression engine that does the low-level work for + this object. + + A new instance. + + Each instance will be d + immediately after use. + + + + + Gets information about the files contained in the archive. + + A list of objects, each + containing information about a file in the archive. + + + + Gets information about the certain files contained in the archive file. + + The search string, such as + "*.txt". + A list of objects, each containing + information about a file in the archive. + + + + Generic class for managing allocations of integer handles + for objects of a certain type. + + The type of objects the handles refer to. + + + + Auto-resizing list of objects for which handles have been allocated. + Each handle is just an index into this list. When a handle is freed, + the list item at that index is set to null. + + + + + Creates a new HandleManager instance. + + + + + Allocates a new handle for an object. + + Object that the handle will refer to. + New handle that can be later used to retrieve the object. + + + + Frees a handle that was previously allocated. Afterward the handle + will be invalid and the object it referred to can no longer retrieved. + + Handle to be freed. + + + + Gets the object of a handle, or null if the handle is invalid. + + The integer handle previously allocated + for the desired object. + The object for which the handle was allocated. + + + + Native DllImport methods and related structures and constants used for + cabinet creation and extraction via cabinet.dll. + + + + + A direct import of constants, enums, structures, delegates, and functions from fci.h. + Refer to comments in fci.h for documentation. + + + + + Error codes that can be returned by FCI. + + + + + FCI compression algorithm types and parameters. + + + + + Reason for FCI status callback. + + + + + Cabinet information structure used for FCI initialization and GetNextCabinet callback. + + + + + Ensures that the FCI handle is safely released. + + + + + Creates a new unintialized handle. The handle will be initialized + when it is marshalled back from native code. + + + + + Releases the handle by calling FDIDestroy(). + + True if the release succeeded. + + + + Checks if the handle is invalid. An FCI handle is invalid when it is zero. + + + + + A direct import of constants, enums, structures, delegates, and functions from fdi.h. + Refer to comments in fdi.h for documentation. + + + + + Error codes that can be returned by FDI. + + + + + Type of notification message for the FDI Notify callback. + + + + + Cabinet information structure filled in by FDI IsCabinet. + + + + + Cabinet notification details passed to the FDI Notify callback. + + + + + Ensures that the FDI handle is safely released. + + + + + Creates a new unintialized handle. The handle will be initialized + when it is marshalled back from native code. + + + + + Releases the handle by calling FDIDestroy(). + + True if the release succeeded. + + + + Checks if the handle is invalid. An FDI handle is invalid when it is zero. + + + + + Error info structure for FCI and FDI. + + Before being passed to FCI or FDI, this structure is + pinned in memory via a GCHandle. The pinning is necessary + to be able to read the results, since the ERF structure doesn't + get marshalled back out after an error. + + + + Clears the error information. + + + + + Gets or sets the cabinet error code. + + + + + Gets or sets the Win32 error code. + + + + + GCHandle doesn't like the bool type, so use an int underneath. + + + + diff --git a/msi/build/A2Staging/wix35-binaries/sdk/Microsoft.Deployment.Compression.Zip.xml b/msi/build/A2Staging/wix35-binaries/sdk/Microsoft.Deployment.Compression.Zip.xml index edbdf6ea8e..214d229562 100644 --- a/msi/build/A2Staging/wix35-binaries/sdk/Microsoft.Deployment.Compression.Zip.xml +++ b/msi/build/A2Staging/wix35-binaries/sdk/Microsoft.Deployment.Compression.Zip.xml @@ -1,514 +1,514 @@ - - - - Microsoft.Deployment.Compression.Zip - - - - - Used to trick a DeflateStream into reading from or writing to - a series of (chunked) streams instead of a single steream. - - - - - Wraps a source stream and calcaluates a CRC over all bytes that are read or written. - - - The CRC algorithm matches that used in the standard ZIP file format. - - - - - Creates a new CrcStream instance from a source stream. - - Underlying stream where bytes will be read from or written to. - - - - Sets the position within the source stream. - - A byte offset relative to the origin parameter. - A value of type SeekOrigin indicating - the reference point used to obtain the new position. - The new position within the source stream. - - Note the CRC is only calculated over bytes that are actually read or - written, so any bytes skipped by seeking will not contribute to the CRC. - - - - - Sets the length of the source stream. - - The desired length of the - stream in bytes. - - - - Reads a sequence of bytes from the source stream and advances - the position within the stream by the number of bytes read. - - An array of bytes. When this method returns, the buffer - contains the specified byte array with the values between offset and - (offset + count - 1) replaced by the bytes read from the current source. - The zero-based byte offset in buffer at which to begin - storing the data read from the current stream. - The maximum number of bytes to be read from the current stream. - The total number of bytes read into the buffer. This can be less - than the number of bytes requested if that many bytes are not currently available, - or zero (0) if the end of the stream has been reached. - - - - Writes a sequence of bytes to the source stream and advances the - current position within this stream by the number of bytes written. - - An array of bytes. This method copies count - bytes from buffer to the current stream. - The zero-based byte offset in buffer at which - to begin copying bytes to the current stream. - The number of bytes to be written to the - current stream. - - - - Flushes the source stream. - - - - - Closes the underlying stream. - - - - - Updates the CRC with a range of bytes that were read or written. - - - - - Computes a table that speeds up calculation of the CRC. - - - - - Reflects the ordering of certain number of bits. For exmample when reflecting - one byte, bit one is swapped with bit eight, bit two with bit seven, etc. - - - - - Gets the current CRC over all bytes that have been read or written - since this instance was created. - - - - - Gets the underlying stream that this stream reads from or writes to. - - - - - Gets a value indicating whether the source stream supports reading. - - true if the stream supports reading; otherwise, false. - - - - Gets a value indicating whether the source stream supports writing. - - true if the stream supports writing; otherwise, false. - - - - Gets a value indicating whether the source stream supports seeking. - - true if the stream supports seeking; otherwise, false. - - - - Gets the length of the source stream. - - - - - Gets or sets the position of the source stream. - - - - - Identifies the compression method or "algorithm" - used for a single file within a zip archive. - - - Proprietary zip implementations may define additional compression - methods outside of those included here. - - - - - The file is stored (no compression) - - - - - The file is Shrunk - - - - - The file is Reduced with compression factor 1 - - - - - The file is Reduced with compression factor 2 - - - - - The file is Reduced with compression factor 3 - - - - - The file is Reduced with compression factor 4 - - - - - The file is Imploded - - - - - The file is Deflated; - the most common and widely-compatible form of zip compression. - - - - - The file is Deflated using the enhanced Deflate64 method. - - - - - The file is compressed using the BZIP2 algorithm. - - - - - The file is compressed using the LZMA algorithm. - - - - - The file is compressed using the PPMd algorithm. - - - - - Exception class for zip operations. - - - - - Creates a new ZipException with a specified error message and a reference to the - inner exception that is the cause of this exception. - - The message that describes the error. - The exception that is the cause of the current exception. If the - innerException parameter is not a null reference (Nothing in Visual Basic), the current exception - is raised in a catch block that handles the inner exception. - - - - Creates a new ZipException with a specified error message. - - The message that describes the error. - - - - Creates a new ZipException. - - - - - Initializes a new instance of the ZipException class with serialized data. - - The SerializationInfo that holds the serialized object data about the exception being thrown. - The StreamingContext that contains contextual information about the source or destination. - - - - Sets the SerializationInfo with information about the exception. - - The SerializationInfo that holds the serialized object data about the exception being thrown. - The StreamingContext that contains contextual information about the source or destination. - - - - Engine capable of packing and unpacking archives in the zip format. - - - - - Registers a delegate that can create a warpper stream for - compressing or uncompressing the data of a source stream. - - Compression method being registered. - Indicates registration for ether - compress or decompress mode. - Delegate being registered. - - For compression, the delegate accepts a stream that writes to the archive - and returns a wrapper stream that compresses bytes as they are written. - For decompression, the delegate accepts a stream that reads from the archive - and returns a wrapper stream that decompresses bytes as they are read. - This wrapper stream model follows the design used by - System.IO.Compression.DeflateStream, and indeed that class is used - to implement the Deflate compression method by default. - To unregister a delegate, call this method again and pass - null for the delegate parameter. - - - When the ZipEngine class is initialized, the Deflate compression method - is automatically registered like this: - - ZipEngine.RegisterCompressionStreamCreator( - ZipCompressionMethod.Deflate, - CompressionMode.Compress, - delegate(Stream stream) { - return new DeflateStream(stream, CompressionMode.Compress, true); - }); - ZipEngine.RegisterCompressionStreamCreator( - ZipCompressionMethod.Deflate, - CompressionMode.Decompress, - delegate(Stream stream) { - return new DeflateStream(stream, CompressionMode.Decompress, true); - }); - - - - - Creates a new instance of the zip engine. - - - - - Checks whether a Stream begins with a header that indicates - it is a valid archive file. - - Stream for reading the archive file. - True if the stream is a valid zip archive - (with no offset); false otherwise. - - - - Gets the offset of an archive that is positioned 0 or more bytes - from the start of the Stream. - - A stream for reading the archive. - The offset in bytes of the archive, - or -1 if no archive is found in the Stream. - The archive must begin on a 4-byte boundary. - - - - Gets information about files in a zip archive or archive chain. - - A context interface to handle opening - and closing of archive and file streams. - A predicate that can determine - which files to process, optional. - Information about files in the archive stream. - The archive provided - by the stream context is not valid. - - The predicate takes an internal file - path and returns true to include the file or false to exclude it. - - - - - Reads all the file headers from the central directory in the main archive. - - - - - Locates and reads the end of central directory record near the - end of the archive. - - - - - Creates a zip archive or chain of zip archives. - - A context interface to handle opening - and closing of archive and file streams. - An array of file lists. Each list is - compressed into one stream in the archive. - The maximum number of bytes for one archive - before the contents are chained to the next archive, or zero for unlimited - archive size. - The archive could not be - created. - - The stream context implementation may provide a mapping from the file - paths within the archive to the external file paths. - - - - - Moves to the next archive in the sequence if necessary. - - - - - Adds one file to a zip archive in the process of being created. - - - - - Writes compressed bytes of one file to the archive, - keeping track of the CRC and number of bytes written. - - - - - Extracts files from a zip archive or archive chain. - - A context interface to handle opening - and closing of archive and file streams. - An optional predicate that can determine - which files to process. - The archive provided - by the stream context is not valid. - - The predicate takes an internal file - path and returns true to include the file or false to exclude it. - - - - - Unpacks a single file from an archive or archive chain. - - - - - Decompresses bytes for one file from an archive or archive chain, - checking the crc at the end. - - - - - Gets the comment from the last-examined archive, - or sets the comment to be added to any created archives. - - - - - Object representing a compressed file within a zip package; provides operations for getting - the file properties and extracting the file. - - - - - Creates a new ZipFileInfo object representing a file within a zip in a specified path. - - An object representing the zip archive containing the file. - The path to the file within the zip archive. Usually, this is a simple file - name, but if the zip archive contains a directory structure this may include the directory. - - - - Creates a new ZipFileInfo object with all parameters specified, - used internally when reading the metadata out of a zip archive. - - The internal path and name of the file in the zip archive. - The zip archive number where the file starts. - The stored attributes of the file. - The stored last write time of the file. - The uncompressed size of the file. - The compressed size of the file. - Compression algorithm used for this file. - - - - Initializes a new instance of the ZipFileInfo class with serialized data. - - The SerializationInfo that holds the serialized object data about the exception being thrown. - The StreamingContext that contains contextual information about the source or destination. - - - - Sets the SerializationInfo with information about the archive. - - The SerializationInfo that holds the serialized object data. - The StreamingContext that contains contextual information - about the source or destination. - - - - Gets the compressed size of the file in bytes. - - - - - Gets the method used to compress this file. - - - - - Object representing a zip file on disk; provides access to - file-based operations on the zip file. - - - Generally, the methods on this class are much easier to use than the - stream-based interfaces provided by the class. - - - - - Creates a new CabinetInfo object representing a zip file in a specified path. - - The path to the zip file. When creating a zip file, this file does not - necessarily exist yet. - - - - Initializes a new instance of the CabinetInfo class with serialized data. - - The SerializationInfo that holds the serialized object data about the exception being thrown. - The StreamingContext that contains contextual information about the source or destination. - - - - Creates a compression engine that does the low-level work for - this object. - - A new instance. - - Each instance will be d - immediately after use. - - - - - Gets information about the files contained in the archive. - - A list of objects, each - containing information about a file in the archive. - - - - Gets information about the certain files contained in the archive file. - - The search string, such as - "*.txt". - A list of objects, each containing - information about a file in the archive. - - - + + + + Microsoft.Deployment.Compression.Zip + + + + + Used to trick a DeflateStream into reading from or writing to + a series of (chunked) streams instead of a single steream. + + + + + Wraps a source stream and calcaluates a CRC over all bytes that are read or written. + + + The CRC algorithm matches that used in the standard ZIP file format. + + + + + Creates a new CrcStream instance from a source stream. + + Underlying stream where bytes will be read from or written to. + + + + Sets the position within the source stream. + + A byte offset relative to the origin parameter. + A value of type SeekOrigin indicating + the reference point used to obtain the new position. + The new position within the source stream. + + Note the CRC is only calculated over bytes that are actually read or + written, so any bytes skipped by seeking will not contribute to the CRC. + + + + + Sets the length of the source stream. + + The desired length of the + stream in bytes. + + + + Reads a sequence of bytes from the source stream and advances + the position within the stream by the number of bytes read. + + An array of bytes. When this method returns, the buffer + contains the specified byte array with the values between offset and + (offset + count - 1) replaced by the bytes read from the current source. + The zero-based byte offset in buffer at which to begin + storing the data read from the current stream. + The maximum number of bytes to be read from the current stream. + The total number of bytes read into the buffer. This can be less + than the number of bytes requested if that many bytes are not currently available, + or zero (0) if the end of the stream has been reached. + + + + Writes a sequence of bytes to the source stream and advances the + current position within this stream by the number of bytes written. + + An array of bytes. This method copies count + bytes from buffer to the current stream. + The zero-based byte offset in buffer at which + to begin copying bytes to the current stream. + The number of bytes to be written to the + current stream. + + + + Flushes the source stream. + + + + + Closes the underlying stream. + + + + + Updates the CRC with a range of bytes that were read or written. + + + + + Computes a table that speeds up calculation of the CRC. + + + + + Reflects the ordering of certain number of bits. For exmample when reflecting + one byte, bit one is swapped with bit eight, bit two with bit seven, etc. + + + + + Gets the current CRC over all bytes that have been read or written + since this instance was created. + + + + + Gets the underlying stream that this stream reads from or writes to. + + + + + Gets a value indicating whether the source stream supports reading. + + true if the stream supports reading; otherwise, false. + + + + Gets a value indicating whether the source stream supports writing. + + true if the stream supports writing; otherwise, false. + + + + Gets a value indicating whether the source stream supports seeking. + + true if the stream supports seeking; otherwise, false. + + + + Gets the length of the source stream. + + + + + Gets or sets the position of the source stream. + + + + + Identifies the compression method or "algorithm" + used for a single file within a zip archive. + + + Proprietary zip implementations may define additional compression + methods outside of those included here. + + + + + The file is stored (no compression) + + + + + The file is Shrunk + + + + + The file is Reduced with compression factor 1 + + + + + The file is Reduced with compression factor 2 + + + + + The file is Reduced with compression factor 3 + + + + + The file is Reduced with compression factor 4 + + + + + The file is Imploded + + + + + The file is Deflated; + the most common and widely-compatible form of zip compression. + + + + + The file is Deflated using the enhanced Deflate64 method. + + + + + The file is compressed using the BZIP2 algorithm. + + + + + The file is compressed using the LZMA algorithm. + + + + + The file is compressed using the PPMd algorithm. + + + + + Exception class for zip operations. + + + + + Creates a new ZipException with a specified error message and a reference to the + inner exception that is the cause of this exception. + + The message that describes the error. + The exception that is the cause of the current exception. If the + innerException parameter is not a null reference (Nothing in Visual Basic), the current exception + is raised in a catch block that handles the inner exception. + + + + Creates a new ZipException with a specified error message. + + The message that describes the error. + + + + Creates a new ZipException. + + + + + Initializes a new instance of the ZipException class with serialized data. + + The SerializationInfo that holds the serialized object data about the exception being thrown. + The StreamingContext that contains contextual information about the source or destination. + + + + Sets the SerializationInfo with information about the exception. + + The SerializationInfo that holds the serialized object data about the exception being thrown. + The StreamingContext that contains contextual information about the source or destination. + + + + Engine capable of packing and unpacking archives in the zip format. + + + + + Registers a delegate that can create a warpper stream for + compressing or uncompressing the data of a source stream. + + Compression method being registered. + Indicates registration for ether + compress or decompress mode. + Delegate being registered. + + For compression, the delegate accepts a stream that writes to the archive + and returns a wrapper stream that compresses bytes as they are written. + For decompression, the delegate accepts a stream that reads from the archive + and returns a wrapper stream that decompresses bytes as they are read. + This wrapper stream model follows the design used by + System.IO.Compression.DeflateStream, and indeed that class is used + to implement the Deflate compression method by default. + To unregister a delegate, call this method again and pass + null for the delegate parameter. + + + When the ZipEngine class is initialized, the Deflate compression method + is automatically registered like this: + + ZipEngine.RegisterCompressionStreamCreator( + ZipCompressionMethod.Deflate, + CompressionMode.Compress, + delegate(Stream stream) { + return new DeflateStream(stream, CompressionMode.Compress, true); + }); + ZipEngine.RegisterCompressionStreamCreator( + ZipCompressionMethod.Deflate, + CompressionMode.Decompress, + delegate(Stream stream) { + return new DeflateStream(stream, CompressionMode.Decompress, true); + }); + + + + + Creates a new instance of the zip engine. + + + + + Checks whether a Stream begins with a header that indicates + it is a valid archive file. + + Stream for reading the archive file. + True if the stream is a valid zip archive + (with no offset); false otherwise. + + + + Gets the offset of an archive that is positioned 0 or more bytes + from the start of the Stream. + + A stream for reading the archive. + The offset in bytes of the archive, + or -1 if no archive is found in the Stream. + The archive must begin on a 4-byte boundary. + + + + Gets information about files in a zip archive or archive chain. + + A context interface to handle opening + and closing of archive and file streams. + A predicate that can determine + which files to process, optional. + Information about files in the archive stream. + The archive provided + by the stream context is not valid. + + The predicate takes an internal file + path and returns true to include the file or false to exclude it. + + + + + Reads all the file headers from the central directory in the main archive. + + + + + Locates and reads the end of central directory record near the + end of the archive. + + + + + Creates a zip archive or chain of zip archives. + + A context interface to handle opening + and closing of archive and file streams. + An array of file lists. Each list is + compressed into one stream in the archive. + The maximum number of bytes for one archive + before the contents are chained to the next archive, or zero for unlimited + archive size. + The archive could not be + created. + + The stream context implementation may provide a mapping from the file + paths within the archive to the external file paths. + + + + + Moves to the next archive in the sequence if necessary. + + + + + Adds one file to a zip archive in the process of being created. + + + + + Writes compressed bytes of one file to the archive, + keeping track of the CRC and number of bytes written. + + + + + Extracts files from a zip archive or archive chain. + + A context interface to handle opening + and closing of archive and file streams. + An optional predicate that can determine + which files to process. + The archive provided + by the stream context is not valid. + + The predicate takes an internal file + path and returns true to include the file or false to exclude it. + + + + + Unpacks a single file from an archive or archive chain. + + + + + Decompresses bytes for one file from an archive or archive chain, + checking the crc at the end. + + + + + Gets the comment from the last-examined archive, + or sets the comment to be added to any created archives. + + + + + Object representing a compressed file within a zip package; provides operations for getting + the file properties and extracting the file. + + + + + Creates a new ZipFileInfo object representing a file within a zip in a specified path. + + An object representing the zip archive containing the file. + The path to the file within the zip archive. Usually, this is a simple file + name, but if the zip archive contains a directory structure this may include the directory. + + + + Creates a new ZipFileInfo object with all parameters specified, + used internally when reading the metadata out of a zip archive. + + The internal path and name of the file in the zip archive. + The zip archive number where the file starts. + The stored attributes of the file. + The stored last write time of the file. + The uncompressed size of the file. + The compressed size of the file. + Compression algorithm used for this file. + + + + Initializes a new instance of the ZipFileInfo class with serialized data. + + The SerializationInfo that holds the serialized object data about the exception being thrown. + The StreamingContext that contains contextual information about the source or destination. + + + + Sets the SerializationInfo with information about the archive. + + The SerializationInfo that holds the serialized object data. + The StreamingContext that contains contextual information + about the source or destination. + + + + Gets the compressed size of the file in bytes. + + + + + Gets the method used to compress this file. + + + + + Object representing a zip file on disk; provides access to + file-based operations on the zip file. + + + Generally, the methods on this class are much easier to use than the + stream-based interfaces provided by the class. + + + + + Creates a new CabinetInfo object representing a zip file in a specified path. + + The path to the zip file. When creating a zip file, this file does not + necessarily exist yet. + + + + Initializes a new instance of the CabinetInfo class with serialized data. + + The SerializationInfo that holds the serialized object data about the exception being thrown. + The StreamingContext that contains contextual information about the source or destination. + + + + Creates a compression engine that does the low-level work for + this object. + + A new instance. + + Each instance will be d + immediately after use. + + + + + Gets information about the files contained in the archive. + + A list of objects, each + containing information about a file in the archive. + + + + Gets information about the certain files contained in the archive file. + + The search string, such as + "*.txt". + A list of objects, each containing + information about a file in the archive. + + + diff --git a/msi/build/A2Staging/wix35-binaries/sdk/Microsoft.Deployment.Compression.xml b/msi/build/A2Staging/wix35-binaries/sdk/Microsoft.Deployment.Compression.xml index c91c899dff..259a9a58b3 100644 --- a/msi/build/A2Staging/wix35-binaries/sdk/Microsoft.Deployment.Compression.xml +++ b/msi/build/A2Staging/wix35-binaries/sdk/Microsoft.Deployment.Compression.xml @@ -1,1936 +1,1936 @@ - - - - Microsoft.Deployment.Compression - - - - - Base exception class for compression operations. Compression libraries should - derive subclass exceptions with more specific error information relevent to the - file format. - - - - - Creates a new ArchiveException with a specified error message and a reference to the - inner exception that is the cause of this exception. - - The message that describes the error. - The exception that is the cause of the current exception. If the - innerException parameter is not a null reference (Nothing in Visual Basic), the current exception - is raised in a catch block that handles the inner exception. - - - - Creates a new ArchiveException with a specified error message. - - The message that describes the error. - - - - Creates a new ArchiveException. - - - - - Initializes a new instance of the ArchiveException class with serialized data. - - The SerializationInfo that holds the serialized object data about the exception being thrown. - The StreamingContext that contains contextual information about the source or destination. - - - - Abstract object representing a compressed file within an archive; - provides operations for getting the file properties and unpacking - the file. - - - - - Creates a new ArchiveFileInfo object representing a file within - an archive in a specified path. - - An object representing the archive - containing the file. - The path to the file within the archive. - Usually, this is a simple file name, but if the archive contains - a directory structure this may include the directory. - - - - Creates a new ArchiveFileInfo object with all parameters specified; - used by subclasses when reading the metadata out of an archive. - - The internal path and name of the file in - the archive. - The archive number where the file - starts. - The stored attributes of the file. - The stored last write time of the - file. - The uncompressed size of the file. - - - - Initializes a new instance of the ArchiveFileInfo class with - serialized data. - - The SerializationInfo that holds the serialized - object data about the exception being thrown. - The StreamingContext that contains contextual - information about the source or destination. - - - - Sets the SerializationInfo with information about the archive. - - The SerializationInfo that holds the serialized - object data. - The StreamingContext that contains contextual - information about the source or destination. - - - - Gets the full path to the file. - - The same as - - - - Deletes the file. NOT SUPPORTED. - - Files cannot be deleted - from an existing archive. - - - - Refreshes the attributes and other cached information about the file, - by re-reading the information from the archive. - - - - - Extracts the file. - - The destination path where the file - will be extracted. - - - - Extracts the file, optionally overwriting any existing file. - - The destination path where the file - will be extracted. - If true, - will be overwritten if it exists. - is false - and exists. - - - - Opens the archive file for reading without actually extracting the - file to disk. - - - A stream for reading directly from the packed file. Like any stream - this should be closed/disposed as soon as it is no longer needed. - - - - - Opens the archive file reading text with UTF-8 encoding without - actually extracting the file to disk. - - - A reader for reading text directly from the packed file. Like any reader - this should be closed/disposed as soon as it is no longer needed. - - - To open an archived text file with different encoding, use the - method and pass the returned stream to one of - the constructor overloads. - - - - - Refreshes the information in this object with new data retrieved - from an archive. - - Fresh instance for the same file just - read from the archive. - - Subclasses may override this method to refresh sublcass fields. - However they should always call the base implementation first. - - - - - Gets the name of the file. - - The name of the file, not including any path. - - - - Gets the internal path of the file in the archive. - - The internal path of the file in the archive, not including - the file name. - - - - Gets the full path to the file. - - The full path to the file, including the full path to the - archive, the internal path in the archive, and the file name. - - For example, the path "C:\archive.cab\file.txt" refers to - a file "file.txt" inside the archive "archive.cab". - - - - - Gets or sets the archive that contains this file. - - - The ArchiveInfo instance that retrieved this file information -- this - may be null if the ArchiveFileInfo object was returned directly from - a stream. - - - - - Gets the full path of the archive that contains this file. - - The full path of the archive that contains this file. - - - - Gets the number of the archive where this file starts. - - The number of the archive where this file starts. - A single archive or the first archive in a chain is - numbered 0. - - - - Checks if the file exists within the archive. - - True if the file exists, false otherwise. - - - - Gets the uncompressed size of the file. - - The uncompressed size of the file in bytes. - - - - Gets the attributes of the file. - - The attributes of the file as stored in the archive. - - - - Gets the last modification time of the file. - - The last modification time of the file as stored in the - archive. - - - - Abstract object representing a compressed archive on disk; - provides access to file-based operations on the archive. - - - - - Creates a new ArchiveInfo object representing an archive in a - specified path. - - The path to the archive. When creating an archive, - this file does not necessarily exist yet. - - - - Initializes a new instance of the ArchiveInfo class with serialized data. - - The SerializationInfo that holds the serialized object - data about the exception being thrown. - The StreamingContext that contains contextual - information about the source or destination. - - - - Gets the full path of the archive. - - The full path of the archive. - - - - Deletes the archive. - - - - - Copies an existing archive to another location. - - The destination file path. - - - - Copies an existing archive to another location, optionally - overwriting the destination file. - - The destination file path. - If true, the destination file will be - overwritten if it exists. - - - - Moves an existing archive to another location. - - The destination file path. - - - - Checks if the archive contains a valid archive header. - - True if the file is a valid archive; false otherwise. - - - - Gets information about the files contained in the archive. - - A list of objects, each - containing information about a file in the archive. - - - - Gets information about the certain files contained in the archive file. - - The search string, such as - "*.txt". - A list of objects, each containing - information about a file in the archive. - - - - Extracts all files from an archive to a destination directory. - - Directory where the files are to be - extracted. - - - - Extracts all files from an archive to a destination directory, - optionally extracting only newer files. - - Directory where the files are to be - extracted. - Handler for receiving progress - information; this may be null if progress is not desired. - - - - Extracts a single file from the archive. - - The name of the file in the archive. Also - includes the internal path of the file, if any. File name matching - is case-insensitive. - The path where the file is to be - extracted on disk. - If already exists, - it will be overwritten. - - - - Extracts multiple files from the archive. - - The names of the files in the archive. - Each name includes the internal path of the file, if any. File name - matching is case-insensitive. - This parameter may be null, but if - specified it is the root directory for any relative paths in - . - The paths where the files are to be - extracted on disk. If this parameter is null, the files will be - extracted with the names from the archive. - - If any extracted files already exist on disk, they will be overwritten. -

The and - parameters cannot both be null.

-
-
- - - Extracts multiple files from the archive, optionally extracting - only newer files. - - The names of the files in the archive. - Each name includes the internal path of the file, if any. File name - matching is case-insensitive. - This parameter may be null, but if - specified it is the root directory for any relative paths in - . - The paths where the files are to be - extracted on disk. If this parameter is null, the files will be - extracted with the names from the archive. - Handler for receiving progress information; - this may be null if progress is not desired. - - If any extracted files already exist on disk, they will be overwritten. -

The and - parameters cannot both be null.

-
-
- - - Extracts multiple files from the archive. - - A mapping from internal file paths to - external file paths. Case-senstivity when matching internal paths - depends on the IDictionary implementation. - This parameter may be null, but if - specified it is the root directory for any relative external paths - in . - - If any extracted files already exist on disk, they will be overwritten. - - - - - Extracts multiple files from the archive. - - A mapping from internal file paths to - external file paths. Case-senstivity when matching internal - paths depends on the IDictionary implementation. - This parameter may be null, but if - specified it is the root directory for any relative external - paths in . - Handler for receiving progress - information; this may be null if progress is not desired. - - If any extracted files already exist on disk, they will be overwritten. - - - - - Opens a file inside the archive for reading without actually - extracting the file to disk. - - The name of the file in the archive. Also - includes the internal path of the file, if any. File name matching - is case-insensitive. - - A stream for reading directly from the packed file. Like any stream - this should be closed/disposed as soon as it is no longer needed. - - - - - Opens a file inside the archive for reading text with UTF-8 encoding - without actually extracting the file to disk. - - The name of the file in the archive. Also - includes the internal path of the file, if any. File name matching - is case-insensitive. - - A reader for reading text directly from the packed file. Like any reader - this should be closed/disposed as soon as it is no longer needed. - - - To open an archived text file with different encoding, use the - method and pass the returned stream to one of - the constructor overloads. - - - - - Compresses all files in a directory into the archive. - Does not include subdirectories. - - The directory containing the - files to be included. - - Uses maximum compression level. - - - - - Compresses all files in a directory into the archive, optionally - including subdirectories. - - This parameter may be null, but - if specified it is the root directory - for any relative paths in . - If true, recursively include - files in subdirectories. - The compression level used when creating - the archive. - Handler for receiving progress information; - this may be null if progress is not desired. - - The files are stored in the archive using their relative file paths in - the directory tree, if supported by the archive file format. - - - - - Compresses files into the archive, specifying the names used to - store the files in the archive. - - This parameter may be null, but - if specified it is the root directory - for any relative paths in . - The list of files to be included in - the archive. - The names of the files as they are stored - in the archive. Each name - includes the internal path of the file, if any. This parameter may - be null, in which case the files are stored in the archive with their - source file names and no path information. - - Uses maximum compression level. -

Duplicate items in the array will cause - an .

-
-
- - - Compresses files into the archive, specifying the names used to - store the files in the archive. - - This parameter may be null, but if - specified it is the root directory - for any relative paths in . - The list of files to be included in - the archive. - The names of the files as they are stored in - the archive. Each name includes the internal path of the file, if any. - This parameter may be null, in which case the files are stored in the - archive with their source file names and no path information. - The compression level used when creating the - archive. - Handler for receiving progress information; - this may be null if progress is not desired. - - Duplicate items in the array will cause - an . - - - - - Compresses files into the archive, specifying the names used - to store the files in the archive. - - This parameter may be null, but if - specified it is the root directory - for any relative paths in . - A mapping from internal file paths to - external file paths. - - Uses maximum compression level. - - - - - Compresses files into the archive, specifying the names used to - store the files in the archive. - - This parameter may be null, but if - specified it is the root directory - for any relative paths in . - A mapping from internal file paths to - external file paths. - The compression level used when creating - the archive. - Handler for receiving progress information; - this may be null if progress is not desired. - - - - Given a directory, gets the relative paths of all files in the - directory, optionally including all subdirectories. - - The directory to search. - True to include subdirectories - in the search. - A list of file paths relative to the directory. - - - - Retrieves information about one file from this archive. - - Path of the file in the archive. - File information, or null if the file was not found - in the archive. - - - - Creates a compression engine that does the low-level work for - this object. - - A new compression engine instance that matches the specific - subclass of archive. - - Each instance will be d - immediately after use. - - - - - Creates a case-insensitive dictionary mapping from one list of - strings to the other. - - List of keys. - List of values that are mapped 1-to-1 to - the keys. - A filled dictionary of the strings. - - - - Recursive-descent helper function for - GetRelativeFilePathsInDirectoryTree. - - The root directory of the search. - The relative directory to be - processed now. - True to descend into - subdirectories. - List of files found so far. - - - - Uses a CompressionEngine to get ArchiveFileInfo objects from this - archive, and then associates them with this ArchiveInfo instance. - - Optional predicate that can determine - which files to process. - A list of objects, each - containing information about a file in the archive. - - - - Gets the directory that contains the archive. - - A DirectoryInfo object representing the parent directory of the - archive. - - - - Gets the full path of the directory that contains the archive. - - The full path of the directory that contains the archive. - - - - Gets the size of the archive. - - The size of the archive in bytes. - - - - Gets the file name of the archive. - - The file name of the archive, not including any path. - - - - Checks if the archive exists. - - True if the archive exists; else false. - - - - Contains the data reported in an archive progress event. - - - - - Creates a new ArchiveProgressEventArgs object from specified event parameters. - - type of status message - name of the file being processed - number of the current file being processed - total number of files to be processed - number of bytes processed so far when compressing or extracting a file - total number of bytes in the current file - name of the current Archive - current Archive number, when processing a chained set of Archives - total number of Archives in a chained set - number of compressed bytes processed so far during an extraction - total number of compressed bytes to be processed during an extraction - number of uncompressed file bytes processed so far - total number of uncompressed file bytes to be processed - - - - Gets the type of status message. - - A value indicating what type of progress event occurred. - - The handler may choose to ignore some types of progress events. - For example, if the handler will only list each file as it is - compressed/extracted, it can ignore events that - are not of type . - - - - - Gets the name of the file being processed. (The name of the file within the Archive; not the external - file path.) Also includes the internal path of the file, if any. Valid for - , , - and messages. - - The name of the file currently being processed, or null if processing - is currently at the stream or archive level. - - - - Gets the number of the current file being processed. The first file is number 0, and the last file - is -1. Valid for , - , and messages. - - The number of the file currently being processed, or the most recent - file processed if processing is currently at the stream or archive level. - - - - Gets the total number of files to be processed. Valid for all message types. - - The total number of files to be processed that are known so far. - - - - Gets the number of bytes processed so far when compressing or extracting a file. Valid for - , , - and messages. - - The number of uncompressed bytes processed so far for the current file, - or 0 if processing is currently at the stream or archive level. - - - - Gets the total number of bytes in the current file. Valid for , - , and messages. - - The uncompressed size of the current file being processed, - or 0 if processing is currently at the stream or archive level. - - - - Gets the name of the current archive. Not necessarily the name of the archive on disk. - Valid for all message types. - - The name of the current archive, or an empty string if no name was specified. - - - - Gets the current archive number, when processing a chained set of archives. Valid for all message types. - - The number of the current archive. - The first archive is number 0, and the last archive is - -1. - - - - Gets the total number of known archives in a chained set. Valid for all message types. - - The total number of known archives in a chained set. - - When using the compression option to auto-split into multiple archives based on data size, - this value will not be accurate until the end. - - - - - Gets the number of compressed bytes processed so far during extraction - of the current archive. Valid for all extraction messages. - - The number of compressed bytes processed so far during extraction - of the current archive. - - - - Gets the total number of compressed bytes to be processed during extraction - of the current archive. Valid for all extraction messages. - - The total number of compressed bytes to be processed during extraction - of the current archive. - - - - Gets the number of uncompressed bytes processed so far among all files. Valid for all message types. - - The number of uncompressed file bytes processed so far among all files. - - When compared to , this can be used as a measure of overall progress. - - - - - Gets the total number of uncompressed file bytes to be processed. Valid for all message types. - - The total number of uncompressed bytes to be processed among all files. - - - - The type of progress event. - - -

PACKING EXAMPLE: The following sequence of events might be received when - extracting a simple archive file with 2 files.

- - Message TypeDescription - StartArchive Begin extracting archive - StartFile Begin extracting first file - PartialFile Extracting first file - PartialFile Extracting first file - FinishFile Finished extracting first file - StartFile Begin extracting second file - PartialFile Extracting second file - FinishFile Finished extracting second file - FinishArchiveFinished extracting archive - -

-

UNPACKING EXAMPLE: Packing 3 files into 2 archive chunks, where the second file is - continued to the second archive chunk.

- - Message TypeDescription - StartFile Begin compressing first file - FinishFile Finished compressing first file - StartFile Begin compressing second file - PartialFile Compressing second file - PartialFile Compressing second file - FinishFile Finished compressing second file - StartArchive Begin writing first archive - PartialArchiveWriting first archive - FinishArchive Finished writing first archive - StartFile Begin compressing third file - PartialFile Compressing third file - FinishFile Finished compressing third file - StartArchive Begin writing second archive - PartialArchiveWriting second archive - FinishArchive Finished writing second archive - -
-
- - Status message before beginning the packing or unpacking an individual file. - - - Status message (possibly reported multiple times) during the process of packing or unpacking a file. - - - Status message after completion of the packing or unpacking an individual file. - - - Status message before beginning the packing or unpacking an archive. - - - Status message (possibly reported multiple times) during the process of packing or unpacking an archiv. - - - Status message after completion of the packing or unpacking of an archive. - - - - Provides a basic implementation of the archive pack and unpack stream context - interfaces, based on a list of archive files, a default directory, and an - optional mapping from internal to external file paths. - - - This class can also handle creating or extracting chained archive packages. - - - - - This interface provides the methods necessary for the - to open and close streams for archives - and files. The implementor of this interface can use any kind of logic - to determine what kind of streams to open and where. - - - - - Gets the name of the archive with a specified number. - - The 0-based index of the archive - within the chain. - The name of the requested archive. May be an empty string - for non-chained archives, but may never be null. - The archive name is the name stored within the archive, used for - identification of the archive especially among archive chains. That - name is often, but not necessarily the same as the filename of the - archive package. - - - - Opens a stream for writing an archive package. - - The 0-based index of the archive within - the chain. - The name of the archive that was returned - by . - True if the stream should be truncated when - opened (if it already exists); false if an existing stream is being - re-opened for writing additional data. - Instance of the compression engine - doing the operations. - A writable Stream where the compressed archive bytes will be - written, or null to cancel the archive creation. - - If this method returns null, the archive engine will throw a - FileNotFoundException. - - - - - Closes a stream where an archive package was written. - - The 0-based index of the archive within - the chain. - The name of the archive that was previously - returned by - . - A stream that was previously returned by - and is now ready to be closed. - - If there is another archive package in the chain, then after this stream - is closed a new stream will be opened. - - - - - Opens a stream to read a file that is to be included in an archive. - - The path of the file within the archive. This is often, - but not necessarily, the same as the relative path of the file outside - the archive. - Returned attributes of the opened file, to be - stored in the archive. - Returned last-modified time of the opened file, - to be stored in the archive. - A readable Stream where the file bytes will be read from before - they are compressed, or null to skip inclusion of the file and continue to - the next file. - - - - Closes a stream that has been used to read a file. - - The path of the file within the archive; the same as - the path provided - when the stream was opened. - A stream that was previously returned by - and is now ready to be closed. - - - - Gets extended parameter information specific to the compression - format being used. - - Name of the option being requested. - Parameters for the option; for per-file options, - the first parameter is typically the internal file path. - Option value, or null to use the default behavior. - - This method provides a way to set uncommon options during packaging, or a - way to handle aspects of compression formats not supported by the base library. - For example, this may be used by the zip compression library to - specify different compression methods/levels on a per-file basis. - The available option names, parameters, and expected return values - should be documented by each compression library. - - - - - This interface provides the methods necessary for the to open - and close streams for archives and files. The implementor of this interface can use any - kind of logic to determine what kind of streams to open and where - - - - - Opens the archive stream for reading. - - The zero-based index of the archive to open. - The name of the archive being opened. - Instance of the compression engine doing the operations. - A stream from which archive bytes are read, or null to cancel extraction - of the archive. - - When the first archive in a chain is opened, the name is not yet known, so the - provided value will be an empty string. When opening further archives, the - provided value is the next-archive name stored in the previous archive. This - name is often, but not necessarily, the same as the filename of the archive - package to be opened. - If this method returns null, the archive engine will throw a - FileNotFoundException. - - - - - Closes a stream where an archive package was read. - - The archive number of the stream to close. - The name of the archive being closed. - The stream that was previously returned by - and is now ready to be closed. - - - - Opens a stream for writing extracted file bytes. - - The path of the file within the archive. This is often, but - not necessarily, the same as the relative path of the file outside the archive. - The uncompressed size of the file to be extracted. - The last write time of the file to be extracted. - A stream where extracted file bytes are to be written, or null to skip - extraction of the file and continue to the next file. - - The implementor may use the path, size and date information to dynamically - decide whether or not the file should be extracted. - - - - - Closes a stream where an extracted file was written. - - The path of the file within the archive. - The stream that was previously returned by - and is now ready to be closed. - The attributes of the extracted file. - The last write time of the file. - - The implementor may wish to apply the attributes and date to the newly-extracted file. - - - - - Creates a new ArchiveFileStreamContext with a archive file and - no default directory or file mapping. - - The path to a archive file that will be - created or extracted. - - - - Creates a new ArchiveFileStreamContext with a archive file, default - directory and mapping from internal to external file paths. - - The path to a archive file that will be - created or extracted. - The default root directory where files will be - located, optional. - A mapping from internal file paths to external file - paths, optional. - - If the mapping is not null and a file is not included in the mapping, - the file will be skipped. - If the external path in the mapping is a simple file name or - relative file path, it will be concatenated onto the default directory, - if one was specified. - For more about how the default directory and files mapping are - used, see and - . - - - - - Creates a new ArchiveFileStreamContext with a list of archive files, - a default directory and a mapping from internal to external file paths. - - A list of paths to archive files that will be - created or extracted. - The default root directory where files will be - located, optional. - A mapping from internal file paths to external file - paths, optional. - - When creating chained archives, the list - should include at least enough archives to handle the entire set of - input files, based on the maximum archive size that is passed to the - .. - If the mapping is not null and a file is not included in the mapping, - the file will be skipped. - If the external path in the mapping is a simple file name or - relative file path, it will be concatenated onto the default directory, - if one was specified. - For more about how the default directory and files mapping are used, - see and - . - - - - - Gets the name of the archive with a specified number. - - The 0-based index of the archive within - the chain. - The name of the requested archive. May be an empty string - for non-chained archives, but may never be null. - This method returns the file name of the archive from the - list with the specified index, or an empty - string if the archive number is outside the bounds of the list. The - file name should not include any directory path. - - - - Opens a stream for writing an archive. - - The 0-based index of the archive within - the chain. - The name of the archive that was returned - by . - True if the stream should be truncated when - opened (if it already exists); false if an existing stream is being - re-opened for writing additional data. - Instance of the compression engine - doing the operations. - A writable Stream where the compressed archive bytes will be - written, or null to cancel the archive creation. - - This method opens the file from the list - with the specified index. If the archive number is outside the bounds - of the list, this method returns null. - If the flag is set, this method - will seek to the start of any existing archive in the file, or to the - end of the file if the existing file is not an archive. - - - - - Closes a stream where an archive package was written. - - The 0-based index of the archive within - the chain. - The name of the archive that was previously - returned by . - A stream that was previously returned by - and is now ready to be closed. - - - - Opens a stream to read a file that is to be included in an archive. - - The path of the file within the archive. - The returned attributes of the opened file, - to be stored in the archive. - The returned last-modified time of the - opened file, to be stored in the archive. - A readable Stream where the file bytes will be read from - before they are compressed, or null to skip inclusion of the file and - continue to the next file. - - This method opens a file using the following logic: - - If the and the mapping - are both null, the path is treated as relative to the current directory, - and that file is opened. - If the is not null but the - mapping is null, the path is treated as relative to that directory, and - that file is opened. - If the is null but the - mapping is not null, the path parameter is used as a key into the mapping, - and the resulting value is the file path that is opened, relative to the - current directory (or it may be an absolute path). If no mapping exists, - the file is skipped. - If both the and the - mapping are specified, the path parameter is used as a key into the - mapping, and the resulting value is the file path that is opened, relative - to the specified directory (or it may be an absolute path). If no mapping - exists, the file is skipped. - - - - - - Closes a stream that has been used to read a file. - - The path of the file within the archive; the same as - the path provided when the stream was opened. - A stream that was previously returned by - and is now ready to be closed. - - - - Gets extended parameter information specific to the compression format - being used. - - Name of the option being requested. - Parameters for the option; for per-file options, - the first parameter is typically the internal file path. - Option value, or null to use the default behavior. - - This implementation does not handle any options. Subclasses may override - this method to allow for non-default behavior. - - - - - Opens the archive stream for reading. - - The zero-based index of the archive to - open. - The name of the archive being opened. - Instance of the compression engine - doing the operations. - A stream from which archive bytes are read, or null to cancel - extraction of the archive. - - This method opens the file from the list with - the specified index. If the archive number is outside the bounds of the - list, this method returns null. - If the flag is set, this method will - seek to the start of any existing archive in the file, or to the end of - the file if the existing file is not an archive. - - - - - Closes a stream where an archive was read. - - The archive number of the stream - to close. - The name of the archive being closed. - The stream that was previously returned by - and is now ready to be closed. - - - - Opens a stream for writing extracted file bytes. - - The path of the file within the archive. - The uncompressed size of the file to be - extracted. - The last write time of the file to be - extracted. - A stream where extracted file bytes are to be written, or null - to skip extraction of the file and continue to the next file. - - This method opens a file using the following logic: - - If the and the mapping - are both null, the path is treated as relative to the current directory, - and that file is opened. - If the is not null but the - mapping is null, the path is treated as relative to that directory, and - that file is opened. - If the is null but the - mapping is not null, the path parameter is used as a key into the mapping, - and the resulting value is the file path that is opened, relative to the - current directory (or it may be an absolute path). If no mapping exists, - the file is skipped. - If both the and the - mapping are specified, the path parameter is used as a key into the - mapping, and the resulting value is the file path that is opened, - relative to the specified directory (or it may be an absolute path). - If no mapping exists, the file is skipped. - - If the flag is set, the file - is skipped if a file currently exists in the same path with an equal - or newer write time. - - - - - Closes a stream where an extracted file was written. - - The path of the file within the archive. - The stream that was previously returned by - and is now ready to be closed. - The attributes of the extracted file. - The last write time of the file. - - After closing the extracted file stream, this method applies the date - and attributes to that file. - - - - - Translates an internal file path to an external file path using the - and the mapping, according to - rules documented in and - . - - The path of the file with the archive. - The external path of the file, or null if there is no - valid translation. - - - - Gets or sets the list of archive files that are created or extracted. - - The list of archive files that are created or extracted. - - - - Gets or sets the default root directory where files are located. - - The default root directory where files are located. - - For details about how the default directory is used, - see and . - - - - - Gets or sets the mapping from internal file paths to external file paths. - - A mapping from internal file paths to external file paths. - - For details about how the files mapping is used, - see and . - - - - - Gets or sets a flag that can prevent extracted files from overwriting - newer files that already exist. - - True to prevent overwriting newer files that already exist - during extraction; false to always extract from the archive regardless - of existing files. - - - - Gets or sets a flag that enables creating or extracting an archive - at an offset within an existing file. (This is typically used to open - archive-based self-extracting packages.) - - True to search an existing package file for an archive offset - or the end of the file;/ false to always create or open a plain - archive file. - - - - Stream context used to extract a single file from an archive into a memory stream. - - - - - Creates a new BasicExtractStreamContext that reads from the specified archive stream. - - Archive stream to read from. - - - - Opens the archive stream for reading. Returns a DuplicateStream instance, - so the stream may be virtually opened multiple times. - - The archive number to open (ignored; 0 is assumed). - The name of the archive being opened. - Instance of the compression engine doing the operations. - A stream from which archive bytes are read. - - - - Does *not* close the stream. The archive stream should be managed by - the code that invokes the archive extraction. - - The archive number of the stream to close. - The name of the archive being closed. - The stream being closed. - - - - Opens a stream for writing extracted file bytes. The returned stream is a MemoryStream - instance, so the file is extracted straight into memory. - - Path of the file within the archive. - The uncompressed size of the file to be extracted. - The last write time of the file. - A stream where extracted file bytes are to be written. - - - - Does *not* close the file stream. The file stream is saved in memory so it can - be read later. - - Path of the file within the archive. - The file stream to be closed. - The attributes of the extracted file. - The last write time of the file. - - - - Gets the stream for the extracted file, or null if no file was extracted. - - - - - Base class for an engine capable of packing and unpacking a particular - compressed file format. - - - - - Creates a new instance of the compression engine base class. - - - - - Disposes the compression engine. - - - - - Disposes of resources allocated by the compression engine. - - - - - Creates an archive. - - A context interface to handle opening - and closing of archive and file streams. - The paths of the files in the archive - (not external file paths). - The archive could not be - created. - - The stream context implementation may provide a mapping from the - file paths within the archive to the external file paths. - - - - - Creates an archive or chain of archives. - - A context interface to handle opening - and closing of archive and file streams. - The paths of the files in the archive (not - external file paths). - The maximum number of bytes for one - archive before the contents are chained to the next archive, or zero - for unlimited archive size. - The archive could not be - created. - - The stream context implementation may provide a mapping from the file - paths within the archive to the external file paths. - - - - - Checks whether a Stream begins with a header that indicates - it is a valid archive. - - Stream for reading the archive file. - True if the stream is a valid archive - (with no offset); false otherwise. - - - - Gets the offset of an archive that is positioned 0 or more bytes - from the start of the Stream. - - A stream for reading the archive. - The offset in bytes of the archive, - or -1 if no archive is found in the Stream. - The archive must begin on a 4-byte boundary. - - - - Gets information about all files in an archive stream. - - A stream for reading the archive. - Information about all files in the archive stream. - The stream is not a valid - archive. - - - - Gets information about files in an archive or archive chain. - - A context interface to handle opening - and closing of archive and file streams. - A predicate that can determine - which files to process, optional. - Information about files in the archive stream. - The archive provided - by the stream context is not valid. - - The predicate takes an internal file - path and returns true to include the file or false to exclude it. - - - - - Gets the list of files in an archive Stream. - - A stream for reading the archive. - A list of the paths of all files contained in the - archive. - The stream is not a valid - archive. - - - - Gets the list of files in an archive or archive chain. - - A context interface to handle opening - and closing of archive and file streams. - A predicate that can determine - which files to process, optional. - An array containing the names of all files contained in - the archive or archive chain. - The archive provided - by the stream context is not valid. - - The predicate takes an internal file - path and returns true to include the file or false to exclude it. - - - - - Reads a single file from an archive stream. - - A stream for reading the archive. - The path of the file within the archive - (not the external file path). - A stream for reading the extracted file, or null - if the file does not exist in the archive. - The stream is not a valid - archive. - The entire extracted file is cached in memory, so this - method requires enough free memory to hold the file. - - - - Extracts files from an archive or archive chain. - - A context interface to handle opening - and closing of archive and file streams. - An optional predicate that can determine - which files to process. - The archive provided - by the stream context is not valid. - - The predicate takes an internal file - path and returns true to include the file or false to exclude it. - - - - - Called by sublcasses to distribute a packing or unpacking progress - event to listeners. - - Event details. - - - - Disposes of resources allocated by the compression engine. - - If true, the method has been called - directly or indirectly by a user's code, so managed and unmanaged - resources will be disposed. If false, the method has been called by - the runtime from inside the finalizer, and only unmanaged resources - will be disposed. - - - - Compresion utility function for converting old-style - date and time values to a DateTime structure. - - - - - Compresion utility function for converting a DateTime structure - to old-style date and time values. - - - - - Occurs when the compression engine reports progress in packing - or unpacking an archive. - - - - - - Gets or sets a flag indicating whether temporary files are created - and used during compression. - - True if temporary files are used; false if compression is done - entirely in-memory. - The value of this property is true by default. Using temporary - files can greatly reduce the memory requirement of compression, - especially when compressing large archives. However, setting this property - to false may yield slightly better performance when creating small - archives. Or it may be necessary if the process does not have sufficient - privileges to create temporary files. - - - - Compression level to use when compressing files. - - A compression level ranging from minimum to maximum compression, - or no compression. - - - - Specifies the compression level ranging from minimum compresion to - maximum compression, or no compression at all. - - - Although only four values are enumerated, any integral value between - and can also be used. - - - - Do not compress files, only store. - - - Minimum compression; fastest. - - - A compromize between speed and compression efficiency. - - - Maximum compression; slowest. - - - - Wraps a source stream and carries additional items that are disposed when the stream is closed. - - - - - Creates a new a cargo stream. - - source of the stream - List of additional items that are disposed when the stream is closed. - The order of the list is the order in which the items are disposed. - - - - Flushes the source stream. - - - - - Sets the length of the source stream. - - The desired length of the stream in bytes. - - - - Closes the source stream and also closes the additional objects that are carried. - - - - - Reads from the source stream. - - An array of bytes. When this method returns, the buffer - contains the specified byte array with the values between offset and - (offset + count - 1) replaced by the bytes read from the source. - The zero-based byte offset in buffer at which to begin - storing the data read from the stream. - The maximum number of bytes to be read from the stream. - The total number of bytes read into the buffer. This can be less - than the number of bytes requested if that many bytes are not currently available, - or zero (0) if the end of the stream has been reached. - - - - Writes to the source stream. - - An array of bytes. This method copies count - bytes from buffer to the stream. - The zero-based byte offset in buffer at which - to begin copying bytes to the stream. - The number of bytes to be written to the stream. - - - - Changes the position of the source stream. - - A byte offset relative to the origin parameter. - A value of type SeekOrigin indicating the reference - point used to obtain the new position. - The new position within the stream. - - - - Gets the source stream of the cargo stream. - - - - - Gets the list of additional items that are disposed when the stream is closed. - The order of the list is the order in which the items are disposed. The contents can be modified any time. - - - - - Gets a value indicating whether the source stream supports reading. - - true if the stream supports reading; otherwise, false. - - - - Gets a value indicating whether the source stream supports writing. - - true if the stream supports writing; otherwise, false. - - - - Gets a value indicating whether the source stream supports seeking. - - true if the stream supports seeking; otherwise, false. - - - - Gets the length of the source stream. - - - - - Gets or sets the position of the source stream. - - - - - Duplicates a source stream by maintaining a separate position. - - - WARNING: duplicate streams are not thread-safe with respect to each other or the original stream. - If multiple threads use duplicate copies of the same stream, they must synchronize for any operations. - - - - - Creates a new duplicate of a stream. - - source of the duplicate - - - - Retrieves the original stream from a possible duplicate stream. - - Possible duplicate stream. - If the stream is a DuplicateStream, returns - the duplicate's source; otherwise returns the same stream. - - - - Flushes the source stream. - - - - - Sets the length of the source stream. - - The desired length of the stream in bytes. - - - - Closes the underlying stream, effectively closing ALL duplicates. - - - - - Reads from the source stream while maintaining a separate position - and not impacting the source stream's position. - - An array of bytes. When this method returns, the buffer - contains the specified byte array with the values between offset and - (offset + count - 1) replaced by the bytes read from the current source. - The zero-based byte offset in buffer at which to begin - storing the data read from the current stream. - The maximum number of bytes to be read from the current stream. - The total number of bytes read into the buffer. This can be less - than the number of bytes requested if that many bytes are not currently available, - or zero (0) if the end of the stream has been reached. - - - - Writes to the source stream while maintaining a separate position - and not impacting the source stream's position. - - An array of bytes. This method copies count - bytes from buffer to the current stream. - The zero-based byte offset in buffer at which - to begin copying bytes to the current stream. - The number of bytes to be written to the - current stream. - - - - Changes the position of this stream without impacting the - source stream's position. - - A byte offset relative to the origin parameter. - A value of type SeekOrigin indicating the reference - point used to obtain the new position. - The new position within the current stream. - - - - Gets the original stream that was used to create the duplicate. - - - - - Gets a value indicating whether the source stream supports reading. - - true if the stream supports reading; otherwise, false. - - - - Gets a value indicating whether the source stream supports writing. - - true if the stream supports writing; otherwise, false. - - - - Gets a value indicating whether the source stream supports seeking. - - true if the stream supports seeking; otherwise, false. - - - - Gets the length of the source stream. - - - - - Gets or sets the position of the current stream, - ignoring the position of the source stream. - - - - - Wraps a source stream and offsets all read/write/seek calls by a given value. - - - This class is used to trick archive an packing or unpacking process - into reading or writing at an offset into a file, primarily for - self-extracting packages. - - - - - Creates a new OffsetStream instance from a source stream - and using a specified offset. - - Underlying stream for which all calls will be offset. - Positive or negative number of bytes to offset. - - - - Reads a sequence of bytes from the source stream and advances - the position within the stream by the number of bytes read. - - An array of bytes. When this method returns, the buffer - contains the specified byte array with the values between offset and - (offset + count - 1) replaced by the bytes read from the current source. - The zero-based byte offset in buffer at which to begin - storing the data read from the current stream. - The maximum number of bytes to be read from the current stream. - The total number of bytes read into the buffer. This can be less - than the number of bytes requested if that many bytes are not currently available, - or zero (0) if the end of the stream has been reached. - - - - Writes a sequence of bytes to the source stream and advances the - current position within this stream by the number of bytes written. - - An array of bytes. This method copies count - bytes from buffer to the current stream. - The zero-based byte offset in buffer at which - to begin copying bytes to the current stream. - The number of bytes to be written to the - current stream. - - - - Reads a byte from the stream and advances the position within the - source stream by one byte, or returns -1 if at the end of the stream. - - The unsigned byte cast to an Int32, or -1 if at the - end of the stream. - - - - Writes a byte to the current position in the source stream and - advances the position within the stream by one byte. - - The byte to write to the stream. - - - - Flushes the source stream. - - - - - Sets the position within the current stream, which is - equal to the position within the source stream minus the offset. - - A byte offset relative to the origin parameter. - A value of type SeekOrigin indicating - the reference point used to obtain the new position. - The new position within the current stream. - - - - Sets the effective length of the stream, which is equal to - the length of the source stream minus the offset. - - The desired length of the - current stream in bytes. - - - - Closes the underlying stream. - - - - - Gets the underlying stream that this OffsetStream calls into. - - - - - Gets the number of bytes to offset all calls before - redirecting to the underlying stream. - - - - - Gets a value indicating whether the source stream supports reading. - - true if the stream supports reading; otherwise, false. - - - - Gets a value indicating whether the source stream supports writing. - - true if the stream supports writing; otherwise, false. - - - - Gets a value indicating whether the source stream supports seeking. - - true if the stream supports seeking; otherwise, false. - - - - Gets the effective length of the stream, which is equal to - the length of the source stream minus the offset. - - - - - Gets or sets the effective position of the stream, which - is equal to the position of the source stream minus the offset. - - -
-
+ + + + Microsoft.Deployment.Compression + + + + + Base exception class for compression operations. Compression libraries should + derive subclass exceptions with more specific error information relevent to the + file format. + + + + + Creates a new ArchiveException with a specified error message and a reference to the + inner exception that is the cause of this exception. + + The message that describes the error. + The exception that is the cause of the current exception. If the + innerException parameter is not a null reference (Nothing in Visual Basic), the current exception + is raised in a catch block that handles the inner exception. + + + + Creates a new ArchiveException with a specified error message. + + The message that describes the error. + + + + Creates a new ArchiveException. + + + + + Initializes a new instance of the ArchiveException class with serialized data. + + The SerializationInfo that holds the serialized object data about the exception being thrown. + The StreamingContext that contains contextual information about the source or destination. + + + + Abstract object representing a compressed file within an archive; + provides operations for getting the file properties and unpacking + the file. + + + + + Creates a new ArchiveFileInfo object representing a file within + an archive in a specified path. + + An object representing the archive + containing the file. + The path to the file within the archive. + Usually, this is a simple file name, but if the archive contains + a directory structure this may include the directory. + + + + Creates a new ArchiveFileInfo object with all parameters specified; + used by subclasses when reading the metadata out of an archive. + + The internal path and name of the file in + the archive. + The archive number where the file + starts. + The stored attributes of the file. + The stored last write time of the + file. + The uncompressed size of the file. + + + + Initializes a new instance of the ArchiveFileInfo class with + serialized data. + + The SerializationInfo that holds the serialized + object data about the exception being thrown. + The StreamingContext that contains contextual + information about the source or destination. + + + + Sets the SerializationInfo with information about the archive. + + The SerializationInfo that holds the serialized + object data. + The StreamingContext that contains contextual + information about the source or destination. + + + + Gets the full path to the file. + + The same as + + + + Deletes the file. NOT SUPPORTED. + + Files cannot be deleted + from an existing archive. + + + + Refreshes the attributes and other cached information about the file, + by re-reading the information from the archive. + + + + + Extracts the file. + + The destination path where the file + will be extracted. + + + + Extracts the file, optionally overwriting any existing file. + + The destination path where the file + will be extracted. + If true, + will be overwritten if it exists. + is false + and exists. + + + + Opens the archive file for reading without actually extracting the + file to disk. + + + A stream for reading directly from the packed file. Like any stream + this should be closed/disposed as soon as it is no longer needed. + + + + + Opens the archive file reading text with UTF-8 encoding without + actually extracting the file to disk. + + + A reader for reading text directly from the packed file. Like any reader + this should be closed/disposed as soon as it is no longer needed. + + + To open an archived text file with different encoding, use the + method and pass the returned stream to one of + the constructor overloads. + + + + + Refreshes the information in this object with new data retrieved + from an archive. + + Fresh instance for the same file just + read from the archive. + + Subclasses may override this method to refresh sublcass fields. + However they should always call the base implementation first. + + + + + Gets the name of the file. + + The name of the file, not including any path. + + + + Gets the internal path of the file in the archive. + + The internal path of the file in the archive, not including + the file name. + + + + Gets the full path to the file. + + The full path to the file, including the full path to the + archive, the internal path in the archive, and the file name. + + For example, the path "C:\archive.cab\file.txt" refers to + a file "file.txt" inside the archive "archive.cab". + + + + + Gets or sets the archive that contains this file. + + + The ArchiveInfo instance that retrieved this file information -- this + may be null if the ArchiveFileInfo object was returned directly from + a stream. + + + + + Gets the full path of the archive that contains this file. + + The full path of the archive that contains this file. + + + + Gets the number of the archive where this file starts. + + The number of the archive where this file starts. + A single archive or the first archive in a chain is + numbered 0. + + + + Checks if the file exists within the archive. + + True if the file exists, false otherwise. + + + + Gets the uncompressed size of the file. + + The uncompressed size of the file in bytes. + + + + Gets the attributes of the file. + + The attributes of the file as stored in the archive. + + + + Gets the last modification time of the file. + + The last modification time of the file as stored in the + archive. + + + + Abstract object representing a compressed archive on disk; + provides access to file-based operations on the archive. + + + + + Creates a new ArchiveInfo object representing an archive in a + specified path. + + The path to the archive. When creating an archive, + this file does not necessarily exist yet. + + + + Initializes a new instance of the ArchiveInfo class with serialized data. + + The SerializationInfo that holds the serialized object + data about the exception being thrown. + The StreamingContext that contains contextual + information about the source or destination. + + + + Gets the full path of the archive. + + The full path of the archive. + + + + Deletes the archive. + + + + + Copies an existing archive to another location. + + The destination file path. + + + + Copies an existing archive to another location, optionally + overwriting the destination file. + + The destination file path. + If true, the destination file will be + overwritten if it exists. + + + + Moves an existing archive to another location. + + The destination file path. + + + + Checks if the archive contains a valid archive header. + + True if the file is a valid archive; false otherwise. + + + + Gets information about the files contained in the archive. + + A list of objects, each + containing information about a file in the archive. + + + + Gets information about the certain files contained in the archive file. + + The search string, such as + "*.txt". + A list of objects, each containing + information about a file in the archive. + + + + Extracts all files from an archive to a destination directory. + + Directory where the files are to be + extracted. + + + + Extracts all files from an archive to a destination directory, + optionally extracting only newer files. + + Directory where the files are to be + extracted. + Handler for receiving progress + information; this may be null if progress is not desired. + + + + Extracts a single file from the archive. + + The name of the file in the archive. Also + includes the internal path of the file, if any. File name matching + is case-insensitive. + The path where the file is to be + extracted on disk. + If already exists, + it will be overwritten. + + + + Extracts multiple files from the archive. + + The names of the files in the archive. + Each name includes the internal path of the file, if any. File name + matching is case-insensitive. + This parameter may be null, but if + specified it is the root directory for any relative paths in + . + The paths where the files are to be + extracted on disk. If this parameter is null, the files will be + extracted with the names from the archive. + + If any extracted files already exist on disk, they will be overwritten. +

The and + parameters cannot both be null.

+
+
+ + + Extracts multiple files from the archive, optionally extracting + only newer files. + + The names of the files in the archive. + Each name includes the internal path of the file, if any. File name + matching is case-insensitive. + This parameter may be null, but if + specified it is the root directory for any relative paths in + . + The paths where the files are to be + extracted on disk. If this parameter is null, the files will be + extracted with the names from the archive. + Handler for receiving progress information; + this may be null if progress is not desired. + + If any extracted files already exist on disk, they will be overwritten. +

The and + parameters cannot both be null.

+
+
+ + + Extracts multiple files from the archive. + + A mapping from internal file paths to + external file paths. Case-senstivity when matching internal paths + depends on the IDictionary implementation. + This parameter may be null, but if + specified it is the root directory for any relative external paths + in . + + If any extracted files already exist on disk, they will be overwritten. + + + + + Extracts multiple files from the archive. + + A mapping from internal file paths to + external file paths. Case-senstivity when matching internal + paths depends on the IDictionary implementation. + This parameter may be null, but if + specified it is the root directory for any relative external + paths in . + Handler for receiving progress + information; this may be null if progress is not desired. + + If any extracted files already exist on disk, they will be overwritten. + + + + + Opens a file inside the archive for reading without actually + extracting the file to disk. + + The name of the file in the archive. Also + includes the internal path of the file, if any. File name matching + is case-insensitive. + + A stream for reading directly from the packed file. Like any stream + this should be closed/disposed as soon as it is no longer needed. + + + + + Opens a file inside the archive for reading text with UTF-8 encoding + without actually extracting the file to disk. + + The name of the file in the archive. Also + includes the internal path of the file, if any. File name matching + is case-insensitive. + + A reader for reading text directly from the packed file. Like any reader + this should be closed/disposed as soon as it is no longer needed. + + + To open an archived text file with different encoding, use the + method and pass the returned stream to one of + the constructor overloads. + + + + + Compresses all files in a directory into the archive. + Does not include subdirectories. + + The directory containing the + files to be included. + + Uses maximum compression level. + + + + + Compresses all files in a directory into the archive, optionally + including subdirectories. + + This parameter may be null, but + if specified it is the root directory + for any relative paths in . + If true, recursively include + files in subdirectories. + The compression level used when creating + the archive. + Handler for receiving progress information; + this may be null if progress is not desired. + + The files are stored in the archive using their relative file paths in + the directory tree, if supported by the archive file format. + + + + + Compresses files into the archive, specifying the names used to + store the files in the archive. + + This parameter may be null, but + if specified it is the root directory + for any relative paths in . + The list of files to be included in + the archive. + The names of the files as they are stored + in the archive. Each name + includes the internal path of the file, if any. This parameter may + be null, in which case the files are stored in the archive with their + source file names and no path information. + + Uses maximum compression level. +

Duplicate items in the array will cause + an .

+
+
+ + + Compresses files into the archive, specifying the names used to + store the files in the archive. + + This parameter may be null, but if + specified it is the root directory + for any relative paths in . + The list of files to be included in + the archive. + The names of the files as they are stored in + the archive. Each name includes the internal path of the file, if any. + This parameter may be null, in which case the files are stored in the + archive with their source file names and no path information. + The compression level used when creating the + archive. + Handler for receiving progress information; + this may be null if progress is not desired. + + Duplicate items in the array will cause + an . + + + + + Compresses files into the archive, specifying the names used + to store the files in the archive. + + This parameter may be null, but if + specified it is the root directory + for any relative paths in . + A mapping from internal file paths to + external file paths. + + Uses maximum compression level. + + + + + Compresses files into the archive, specifying the names used to + store the files in the archive. + + This parameter may be null, but if + specified it is the root directory + for any relative paths in . + A mapping from internal file paths to + external file paths. + The compression level used when creating + the archive. + Handler for receiving progress information; + this may be null if progress is not desired. + + + + Given a directory, gets the relative paths of all files in the + directory, optionally including all subdirectories. + + The directory to search. + True to include subdirectories + in the search. + A list of file paths relative to the directory. + + + + Retrieves information about one file from this archive. + + Path of the file in the archive. + File information, or null if the file was not found + in the archive. + + + + Creates a compression engine that does the low-level work for + this object. + + A new compression engine instance that matches the specific + subclass of archive. + + Each instance will be d + immediately after use. + + + + + Creates a case-insensitive dictionary mapping from one list of + strings to the other. + + List of keys. + List of values that are mapped 1-to-1 to + the keys. + A filled dictionary of the strings. + + + + Recursive-descent helper function for + GetRelativeFilePathsInDirectoryTree. + + The root directory of the search. + The relative directory to be + processed now. + True to descend into + subdirectories. + List of files found so far. + + + + Uses a CompressionEngine to get ArchiveFileInfo objects from this + archive, and then associates them with this ArchiveInfo instance. + + Optional predicate that can determine + which files to process. + A list of objects, each + containing information about a file in the archive. + + + + Gets the directory that contains the archive. + + A DirectoryInfo object representing the parent directory of the + archive. + + + + Gets the full path of the directory that contains the archive. + + The full path of the directory that contains the archive. + + + + Gets the size of the archive. + + The size of the archive in bytes. + + + + Gets the file name of the archive. + + The file name of the archive, not including any path. + + + + Checks if the archive exists. + + True if the archive exists; else false. + + + + Contains the data reported in an archive progress event. + + + + + Creates a new ArchiveProgressEventArgs object from specified event parameters. + + type of status message + name of the file being processed + number of the current file being processed + total number of files to be processed + number of bytes processed so far when compressing or extracting a file + total number of bytes in the current file + name of the current Archive + current Archive number, when processing a chained set of Archives + total number of Archives in a chained set + number of compressed bytes processed so far during an extraction + total number of compressed bytes to be processed during an extraction + number of uncompressed file bytes processed so far + total number of uncompressed file bytes to be processed + + + + Gets the type of status message. + + A value indicating what type of progress event occurred. + + The handler may choose to ignore some types of progress events. + For example, if the handler will only list each file as it is + compressed/extracted, it can ignore events that + are not of type . + + + + + Gets the name of the file being processed. (The name of the file within the Archive; not the external + file path.) Also includes the internal path of the file, if any. Valid for + , , + and messages. + + The name of the file currently being processed, or null if processing + is currently at the stream or archive level. + + + + Gets the number of the current file being processed. The first file is number 0, and the last file + is -1. Valid for , + , and messages. + + The number of the file currently being processed, or the most recent + file processed if processing is currently at the stream or archive level. + + + + Gets the total number of files to be processed. Valid for all message types. + + The total number of files to be processed that are known so far. + + + + Gets the number of bytes processed so far when compressing or extracting a file. Valid for + , , + and messages. + + The number of uncompressed bytes processed so far for the current file, + or 0 if processing is currently at the stream or archive level. + + + + Gets the total number of bytes in the current file. Valid for , + , and messages. + + The uncompressed size of the current file being processed, + or 0 if processing is currently at the stream or archive level. + + + + Gets the name of the current archive. Not necessarily the name of the archive on disk. + Valid for all message types. + + The name of the current archive, or an empty string if no name was specified. + + + + Gets the current archive number, when processing a chained set of archives. Valid for all message types. + + The number of the current archive. + The first archive is number 0, and the last archive is + -1. + + + + Gets the total number of known archives in a chained set. Valid for all message types. + + The total number of known archives in a chained set. + + When using the compression option to auto-split into multiple archives based on data size, + this value will not be accurate until the end. + + + + + Gets the number of compressed bytes processed so far during extraction + of the current archive. Valid for all extraction messages. + + The number of compressed bytes processed so far during extraction + of the current archive. + + + + Gets the total number of compressed bytes to be processed during extraction + of the current archive. Valid for all extraction messages. + + The total number of compressed bytes to be processed during extraction + of the current archive. + + + + Gets the number of uncompressed bytes processed so far among all files. Valid for all message types. + + The number of uncompressed file bytes processed so far among all files. + + When compared to , this can be used as a measure of overall progress. + + + + + Gets the total number of uncompressed file bytes to be processed. Valid for all message types. + + The total number of uncompressed bytes to be processed among all files. + + + + The type of progress event. + + +

PACKING EXAMPLE: The following sequence of events might be received when + extracting a simple archive file with 2 files.

+ + Message TypeDescription + StartArchive Begin extracting archive + StartFile Begin extracting first file + PartialFile Extracting first file + PartialFile Extracting first file + FinishFile Finished extracting first file + StartFile Begin extracting second file + PartialFile Extracting second file + FinishFile Finished extracting second file + FinishArchiveFinished extracting archive + +

+

UNPACKING EXAMPLE: Packing 3 files into 2 archive chunks, where the second file is + continued to the second archive chunk.

+ + Message TypeDescription + StartFile Begin compressing first file + FinishFile Finished compressing first file + StartFile Begin compressing second file + PartialFile Compressing second file + PartialFile Compressing second file + FinishFile Finished compressing second file + StartArchive Begin writing first archive + PartialArchiveWriting first archive + FinishArchive Finished writing first archive + StartFile Begin compressing third file + PartialFile Compressing third file + FinishFile Finished compressing third file + StartArchive Begin writing second archive + PartialArchiveWriting second archive + FinishArchive Finished writing second archive + +
+
+ + Status message before beginning the packing or unpacking an individual file. + + + Status message (possibly reported multiple times) during the process of packing or unpacking a file. + + + Status message after completion of the packing or unpacking an individual file. + + + Status message before beginning the packing or unpacking an archive. + + + Status message (possibly reported multiple times) during the process of packing or unpacking an archiv. + + + Status message after completion of the packing or unpacking of an archive. + + + + Provides a basic implementation of the archive pack and unpack stream context + interfaces, based on a list of archive files, a default directory, and an + optional mapping from internal to external file paths. + + + This class can also handle creating or extracting chained archive packages. + + + + + This interface provides the methods necessary for the + to open and close streams for archives + and files. The implementor of this interface can use any kind of logic + to determine what kind of streams to open and where. + + + + + Gets the name of the archive with a specified number. + + The 0-based index of the archive + within the chain. + The name of the requested archive. May be an empty string + for non-chained archives, but may never be null. + The archive name is the name stored within the archive, used for + identification of the archive especially among archive chains. That + name is often, but not necessarily the same as the filename of the + archive package. + + + + Opens a stream for writing an archive package. + + The 0-based index of the archive within + the chain. + The name of the archive that was returned + by . + True if the stream should be truncated when + opened (if it already exists); false if an existing stream is being + re-opened for writing additional data. + Instance of the compression engine + doing the operations. + A writable Stream where the compressed archive bytes will be + written, or null to cancel the archive creation. + + If this method returns null, the archive engine will throw a + FileNotFoundException. + + + + + Closes a stream where an archive package was written. + + The 0-based index of the archive within + the chain. + The name of the archive that was previously + returned by + . + A stream that was previously returned by + and is now ready to be closed. + + If there is another archive package in the chain, then after this stream + is closed a new stream will be opened. + + + + + Opens a stream to read a file that is to be included in an archive. + + The path of the file within the archive. This is often, + but not necessarily, the same as the relative path of the file outside + the archive. + Returned attributes of the opened file, to be + stored in the archive. + Returned last-modified time of the opened file, + to be stored in the archive. + A readable Stream where the file bytes will be read from before + they are compressed, or null to skip inclusion of the file and continue to + the next file. + + + + Closes a stream that has been used to read a file. + + The path of the file within the archive; the same as + the path provided + when the stream was opened. + A stream that was previously returned by + and is now ready to be closed. + + + + Gets extended parameter information specific to the compression + format being used. + + Name of the option being requested. + Parameters for the option; for per-file options, + the first parameter is typically the internal file path. + Option value, or null to use the default behavior. + + This method provides a way to set uncommon options during packaging, or a + way to handle aspects of compression formats not supported by the base library. + For example, this may be used by the zip compression library to + specify different compression methods/levels on a per-file basis. + The available option names, parameters, and expected return values + should be documented by each compression library. + + + + + This interface provides the methods necessary for the to open + and close streams for archives and files. The implementor of this interface can use any + kind of logic to determine what kind of streams to open and where + + + + + Opens the archive stream for reading. + + The zero-based index of the archive to open. + The name of the archive being opened. + Instance of the compression engine doing the operations. + A stream from which archive bytes are read, or null to cancel extraction + of the archive. + + When the first archive in a chain is opened, the name is not yet known, so the + provided value will be an empty string. When opening further archives, the + provided value is the next-archive name stored in the previous archive. This + name is often, but not necessarily, the same as the filename of the archive + package to be opened. + If this method returns null, the archive engine will throw a + FileNotFoundException. + + + + + Closes a stream where an archive package was read. + + The archive number of the stream to close. + The name of the archive being closed. + The stream that was previously returned by + and is now ready to be closed. + + + + Opens a stream for writing extracted file bytes. + + The path of the file within the archive. This is often, but + not necessarily, the same as the relative path of the file outside the archive. + The uncompressed size of the file to be extracted. + The last write time of the file to be extracted. + A stream where extracted file bytes are to be written, or null to skip + extraction of the file and continue to the next file. + + The implementor may use the path, size and date information to dynamically + decide whether or not the file should be extracted. + + + + + Closes a stream where an extracted file was written. + + The path of the file within the archive. + The stream that was previously returned by + and is now ready to be closed. + The attributes of the extracted file. + The last write time of the file. + + The implementor may wish to apply the attributes and date to the newly-extracted file. + + + + + Creates a new ArchiveFileStreamContext with a archive file and + no default directory or file mapping. + + The path to a archive file that will be + created or extracted. + + + + Creates a new ArchiveFileStreamContext with a archive file, default + directory and mapping from internal to external file paths. + + The path to a archive file that will be + created or extracted. + The default root directory where files will be + located, optional. + A mapping from internal file paths to external file + paths, optional. + + If the mapping is not null and a file is not included in the mapping, + the file will be skipped. + If the external path in the mapping is a simple file name or + relative file path, it will be concatenated onto the default directory, + if one was specified. + For more about how the default directory and files mapping are + used, see and + . + + + + + Creates a new ArchiveFileStreamContext with a list of archive files, + a default directory and a mapping from internal to external file paths. + + A list of paths to archive files that will be + created or extracted. + The default root directory where files will be + located, optional. + A mapping from internal file paths to external file + paths, optional. + + When creating chained archives, the list + should include at least enough archives to handle the entire set of + input files, based on the maximum archive size that is passed to the + .. + If the mapping is not null and a file is not included in the mapping, + the file will be skipped. + If the external path in the mapping is a simple file name or + relative file path, it will be concatenated onto the default directory, + if one was specified. + For more about how the default directory and files mapping are used, + see and + . + + + + + Gets the name of the archive with a specified number. + + The 0-based index of the archive within + the chain. + The name of the requested archive. May be an empty string + for non-chained archives, but may never be null. + This method returns the file name of the archive from the + list with the specified index, or an empty + string if the archive number is outside the bounds of the list. The + file name should not include any directory path. + + + + Opens a stream for writing an archive. + + The 0-based index of the archive within + the chain. + The name of the archive that was returned + by . + True if the stream should be truncated when + opened (if it already exists); false if an existing stream is being + re-opened for writing additional data. + Instance of the compression engine + doing the operations. + A writable Stream where the compressed archive bytes will be + written, or null to cancel the archive creation. + + This method opens the file from the list + with the specified index. If the archive number is outside the bounds + of the list, this method returns null. + If the flag is set, this method + will seek to the start of any existing archive in the file, or to the + end of the file if the existing file is not an archive. + + + + + Closes a stream where an archive package was written. + + The 0-based index of the archive within + the chain. + The name of the archive that was previously + returned by . + A stream that was previously returned by + and is now ready to be closed. + + + + Opens a stream to read a file that is to be included in an archive. + + The path of the file within the archive. + The returned attributes of the opened file, + to be stored in the archive. + The returned last-modified time of the + opened file, to be stored in the archive. + A readable Stream where the file bytes will be read from + before they are compressed, or null to skip inclusion of the file and + continue to the next file. + + This method opens a file using the following logic: + + If the and the mapping + are both null, the path is treated as relative to the current directory, + and that file is opened. + If the is not null but the + mapping is null, the path is treated as relative to that directory, and + that file is opened. + If the is null but the + mapping is not null, the path parameter is used as a key into the mapping, + and the resulting value is the file path that is opened, relative to the + current directory (or it may be an absolute path). If no mapping exists, + the file is skipped. + If both the and the + mapping are specified, the path parameter is used as a key into the + mapping, and the resulting value is the file path that is opened, relative + to the specified directory (or it may be an absolute path). If no mapping + exists, the file is skipped. + + + + + + Closes a stream that has been used to read a file. + + The path of the file within the archive; the same as + the path provided when the stream was opened. + A stream that was previously returned by + and is now ready to be closed. + + + + Gets extended parameter information specific to the compression format + being used. + + Name of the option being requested. + Parameters for the option; for per-file options, + the first parameter is typically the internal file path. + Option value, or null to use the default behavior. + + This implementation does not handle any options. Subclasses may override + this method to allow for non-default behavior. + + + + + Opens the archive stream for reading. + + The zero-based index of the archive to + open. + The name of the archive being opened. + Instance of the compression engine + doing the operations. + A stream from which archive bytes are read, or null to cancel + extraction of the archive. + + This method opens the file from the list with + the specified index. If the archive number is outside the bounds of the + list, this method returns null. + If the flag is set, this method will + seek to the start of any existing archive in the file, or to the end of + the file if the existing file is not an archive. + + + + + Closes a stream where an archive was read. + + The archive number of the stream + to close. + The name of the archive being closed. + The stream that was previously returned by + and is now ready to be closed. + + + + Opens a stream for writing extracted file bytes. + + The path of the file within the archive. + The uncompressed size of the file to be + extracted. + The last write time of the file to be + extracted. + A stream where extracted file bytes are to be written, or null + to skip extraction of the file and continue to the next file. + + This method opens a file using the following logic: + + If the and the mapping + are both null, the path is treated as relative to the current directory, + and that file is opened. + If the is not null but the + mapping is null, the path is treated as relative to that directory, and + that file is opened. + If the is null but the + mapping is not null, the path parameter is used as a key into the mapping, + and the resulting value is the file path that is opened, relative to the + current directory (or it may be an absolute path). If no mapping exists, + the file is skipped. + If both the and the + mapping are specified, the path parameter is used as a key into the + mapping, and the resulting value is the file path that is opened, + relative to the specified directory (or it may be an absolute path). + If no mapping exists, the file is skipped. + + If the flag is set, the file + is skipped if a file currently exists in the same path with an equal + or newer write time. + + + + + Closes a stream where an extracted file was written. + + The path of the file within the archive. + The stream that was previously returned by + and is now ready to be closed. + The attributes of the extracted file. + The last write time of the file. + + After closing the extracted file stream, this method applies the date + and attributes to that file. + + + + + Translates an internal file path to an external file path using the + and the mapping, according to + rules documented in and + . + + The path of the file with the archive. + The external path of the file, or null if there is no + valid translation. + + + + Gets or sets the list of archive files that are created or extracted. + + The list of archive files that are created or extracted. + + + + Gets or sets the default root directory where files are located. + + The default root directory where files are located. + + For details about how the default directory is used, + see and . + + + + + Gets or sets the mapping from internal file paths to external file paths. + + A mapping from internal file paths to external file paths. + + For details about how the files mapping is used, + see and . + + + + + Gets or sets a flag that can prevent extracted files from overwriting + newer files that already exist. + + True to prevent overwriting newer files that already exist + during extraction; false to always extract from the archive regardless + of existing files. + + + + Gets or sets a flag that enables creating or extracting an archive + at an offset within an existing file. (This is typically used to open + archive-based self-extracting packages.) + + True to search an existing package file for an archive offset + or the end of the file;/ false to always create or open a plain + archive file. + + + + Stream context used to extract a single file from an archive into a memory stream. + + + + + Creates a new BasicExtractStreamContext that reads from the specified archive stream. + + Archive stream to read from. + + + + Opens the archive stream for reading. Returns a DuplicateStream instance, + so the stream may be virtually opened multiple times. + + The archive number to open (ignored; 0 is assumed). + The name of the archive being opened. + Instance of the compression engine doing the operations. + A stream from which archive bytes are read. + + + + Does *not* close the stream. The archive stream should be managed by + the code that invokes the archive extraction. + + The archive number of the stream to close. + The name of the archive being closed. + The stream being closed. + + + + Opens a stream for writing extracted file bytes. The returned stream is a MemoryStream + instance, so the file is extracted straight into memory. + + Path of the file within the archive. + The uncompressed size of the file to be extracted. + The last write time of the file. + A stream where extracted file bytes are to be written. + + + + Does *not* close the file stream. The file stream is saved in memory so it can + be read later. + + Path of the file within the archive. + The file stream to be closed. + The attributes of the extracted file. + The last write time of the file. + + + + Gets the stream for the extracted file, or null if no file was extracted. + + + + + Base class for an engine capable of packing and unpacking a particular + compressed file format. + + + + + Creates a new instance of the compression engine base class. + + + + + Disposes the compression engine. + + + + + Disposes of resources allocated by the compression engine. + + + + + Creates an archive. + + A context interface to handle opening + and closing of archive and file streams. + The paths of the files in the archive + (not external file paths). + The archive could not be + created. + + The stream context implementation may provide a mapping from the + file paths within the archive to the external file paths. + + + + + Creates an archive or chain of archives. + + A context interface to handle opening + and closing of archive and file streams. + The paths of the files in the archive (not + external file paths). + The maximum number of bytes for one + archive before the contents are chained to the next archive, or zero + for unlimited archive size. + The archive could not be + created. + + The stream context implementation may provide a mapping from the file + paths within the archive to the external file paths. + + + + + Checks whether a Stream begins with a header that indicates + it is a valid archive. + + Stream for reading the archive file. + True if the stream is a valid archive + (with no offset); false otherwise. + + + + Gets the offset of an archive that is positioned 0 or more bytes + from the start of the Stream. + + A stream for reading the archive. + The offset in bytes of the archive, + or -1 if no archive is found in the Stream. + The archive must begin on a 4-byte boundary. + + + + Gets information about all files in an archive stream. + + A stream for reading the archive. + Information about all files in the archive stream. + The stream is not a valid + archive. + + + + Gets information about files in an archive or archive chain. + + A context interface to handle opening + and closing of archive and file streams. + A predicate that can determine + which files to process, optional. + Information about files in the archive stream. + The archive provided + by the stream context is not valid. + + The predicate takes an internal file + path and returns true to include the file or false to exclude it. + + + + + Gets the list of files in an archive Stream. + + A stream for reading the archive. + A list of the paths of all files contained in the + archive. + The stream is not a valid + archive. + + + + Gets the list of files in an archive or archive chain. + + A context interface to handle opening + and closing of archive and file streams. + A predicate that can determine + which files to process, optional. + An array containing the names of all files contained in + the archive or archive chain. + The archive provided + by the stream context is not valid. + + The predicate takes an internal file + path and returns true to include the file or false to exclude it. + + + + + Reads a single file from an archive stream. + + A stream for reading the archive. + The path of the file within the archive + (not the external file path). + A stream for reading the extracted file, or null + if the file does not exist in the archive. + The stream is not a valid + archive. + The entire extracted file is cached in memory, so this + method requires enough free memory to hold the file. + + + + Extracts files from an archive or archive chain. + + A context interface to handle opening + and closing of archive and file streams. + An optional predicate that can determine + which files to process. + The archive provided + by the stream context is not valid. + + The predicate takes an internal file + path and returns true to include the file or false to exclude it. + + + + + Called by sublcasses to distribute a packing or unpacking progress + event to listeners. + + Event details. + + + + Disposes of resources allocated by the compression engine. + + If true, the method has been called + directly or indirectly by a user's code, so managed and unmanaged + resources will be disposed. If false, the method has been called by + the runtime from inside the finalizer, and only unmanaged resources + will be disposed. + + + + Compresion utility function for converting old-style + date and time values to a DateTime structure. + + + + + Compresion utility function for converting a DateTime structure + to old-style date and time values. + + + + + Occurs when the compression engine reports progress in packing + or unpacking an archive. + + + + + + Gets or sets a flag indicating whether temporary files are created + and used during compression. + + True if temporary files are used; false if compression is done + entirely in-memory. + The value of this property is true by default. Using temporary + files can greatly reduce the memory requirement of compression, + especially when compressing large archives. However, setting this property + to false may yield slightly better performance when creating small + archives. Or it may be necessary if the process does not have sufficient + privileges to create temporary files. + + + + Compression level to use when compressing files. + + A compression level ranging from minimum to maximum compression, + or no compression. + + + + Specifies the compression level ranging from minimum compresion to + maximum compression, or no compression at all. + + + Although only four values are enumerated, any integral value between + and can also be used. + + + + Do not compress files, only store. + + + Minimum compression; fastest. + + + A compromize between speed and compression efficiency. + + + Maximum compression; slowest. + + + + Wraps a source stream and carries additional items that are disposed when the stream is closed. + + + + + Creates a new a cargo stream. + + source of the stream + List of additional items that are disposed when the stream is closed. + The order of the list is the order in which the items are disposed. + + + + Flushes the source stream. + + + + + Sets the length of the source stream. + + The desired length of the stream in bytes. + + + + Closes the source stream and also closes the additional objects that are carried. + + + + + Reads from the source stream. + + An array of bytes. When this method returns, the buffer + contains the specified byte array with the values between offset and + (offset + count - 1) replaced by the bytes read from the source. + The zero-based byte offset in buffer at which to begin + storing the data read from the stream. + The maximum number of bytes to be read from the stream. + The total number of bytes read into the buffer. This can be less + than the number of bytes requested if that many bytes are not currently available, + or zero (0) if the end of the stream has been reached. + + + + Writes to the source stream. + + An array of bytes. This method copies count + bytes from buffer to the stream. + The zero-based byte offset in buffer at which + to begin copying bytes to the stream. + The number of bytes to be written to the stream. + + + + Changes the position of the source stream. + + A byte offset relative to the origin parameter. + A value of type SeekOrigin indicating the reference + point used to obtain the new position. + The new position within the stream. + + + + Gets the source stream of the cargo stream. + + + + + Gets the list of additional items that are disposed when the stream is closed. + The order of the list is the order in which the items are disposed. The contents can be modified any time. + + + + + Gets a value indicating whether the source stream supports reading. + + true if the stream supports reading; otherwise, false. + + + + Gets a value indicating whether the source stream supports writing. + + true if the stream supports writing; otherwise, false. + + + + Gets a value indicating whether the source stream supports seeking. + + true if the stream supports seeking; otherwise, false. + + + + Gets the length of the source stream. + + + + + Gets or sets the position of the source stream. + + + + + Duplicates a source stream by maintaining a separate position. + + + WARNING: duplicate streams are not thread-safe with respect to each other or the original stream. + If multiple threads use duplicate copies of the same stream, they must synchronize for any operations. + + + + + Creates a new duplicate of a stream. + + source of the duplicate + + + + Retrieves the original stream from a possible duplicate stream. + + Possible duplicate stream. + If the stream is a DuplicateStream, returns + the duplicate's source; otherwise returns the same stream. + + + + Flushes the source stream. + + + + + Sets the length of the source stream. + + The desired length of the stream in bytes. + + + + Closes the underlying stream, effectively closing ALL duplicates. + + + + + Reads from the source stream while maintaining a separate position + and not impacting the source stream's position. + + An array of bytes. When this method returns, the buffer + contains the specified byte array with the values between offset and + (offset + count - 1) replaced by the bytes read from the current source. + The zero-based byte offset in buffer at which to begin + storing the data read from the current stream. + The maximum number of bytes to be read from the current stream. + The total number of bytes read into the buffer. This can be less + than the number of bytes requested if that many bytes are not currently available, + or zero (0) if the end of the stream has been reached. + + + + Writes to the source stream while maintaining a separate position + and not impacting the source stream's position. + + An array of bytes. This method copies count + bytes from buffer to the current stream. + The zero-based byte offset in buffer at which + to begin copying bytes to the current stream. + The number of bytes to be written to the + current stream. + + + + Changes the position of this stream without impacting the + source stream's position. + + A byte offset relative to the origin parameter. + A value of type SeekOrigin indicating the reference + point used to obtain the new position. + The new position within the current stream. + + + + Gets the original stream that was used to create the duplicate. + + + + + Gets a value indicating whether the source stream supports reading. + + true if the stream supports reading; otherwise, false. + + + + Gets a value indicating whether the source stream supports writing. + + true if the stream supports writing; otherwise, false. + + + + Gets a value indicating whether the source stream supports seeking. + + true if the stream supports seeking; otherwise, false. + + + + Gets the length of the source stream. + + + + + Gets or sets the position of the current stream, + ignoring the position of the source stream. + + + + + Wraps a source stream and offsets all read/write/seek calls by a given value. + + + This class is used to trick archive an packing or unpacking process + into reading or writing at an offset into a file, primarily for + self-extracting packages. + + + + + Creates a new OffsetStream instance from a source stream + and using a specified offset. + + Underlying stream for which all calls will be offset. + Positive or negative number of bytes to offset. + + + + Reads a sequence of bytes from the source stream and advances + the position within the stream by the number of bytes read. + + An array of bytes. When this method returns, the buffer + contains the specified byte array with the values between offset and + (offset + count - 1) replaced by the bytes read from the current source. + The zero-based byte offset in buffer at which to begin + storing the data read from the current stream. + The maximum number of bytes to be read from the current stream. + The total number of bytes read into the buffer. This can be less + than the number of bytes requested if that many bytes are not currently available, + or zero (0) if the end of the stream has been reached. + + + + Writes a sequence of bytes to the source stream and advances the + current position within this stream by the number of bytes written. + + An array of bytes. This method copies count + bytes from buffer to the current stream. + The zero-based byte offset in buffer at which + to begin copying bytes to the current stream. + The number of bytes to be written to the + current stream. + + + + Reads a byte from the stream and advances the position within the + source stream by one byte, or returns -1 if at the end of the stream. + + The unsigned byte cast to an Int32, or -1 if at the + end of the stream. + + + + Writes a byte to the current position in the source stream and + advances the position within the stream by one byte. + + The byte to write to the stream. + + + + Flushes the source stream. + + + + + Sets the position within the current stream, which is + equal to the position within the source stream minus the offset. + + A byte offset relative to the origin parameter. + A value of type SeekOrigin indicating + the reference point used to obtain the new position. + The new position within the current stream. + + + + Sets the effective length of the stream, which is equal to + the length of the source stream minus the offset. + + The desired length of the + current stream in bytes. + + + + Closes the underlying stream. + + + + + Gets the underlying stream that this OffsetStream calls into. + + + + + Gets the number of bytes to offset all calls before + redirecting to the underlying stream. + + + + + Gets a value indicating whether the source stream supports reading. + + true if the stream supports reading; otherwise, false. + + + + Gets a value indicating whether the source stream supports writing. + + true if the stream supports writing; otherwise, false. + + + + Gets a value indicating whether the source stream supports seeking. + + true if the stream supports seeking; otherwise, false. + + + + Gets the effective length of the stream, which is equal to + the length of the source stream minus the offset. + + + + + Gets or sets the effective position of the stream, which + is equal to the position of the source stream minus the offset. + + +
+
diff --git a/msi/build/A2Staging/wix35-binaries/sdk/Microsoft.Deployment.Resources.xml b/msi/build/A2Staging/wix35-binaries/sdk/Microsoft.Deployment.Resources.xml index 2059d5d4ab..3d4b628ce1 100644 --- a/msi/build/A2Staging/wix35-binaries/sdk/Microsoft.Deployment.Resources.xml +++ b/msi/build/A2Staging/wix35-binaries/sdk/Microsoft.Deployment.Resources.xml @@ -1,443 +1,443 @@ - - - - Microsoft.Deployment.Resources - - - - - Represents a Win32 resource which can be loaded from and saved to a PE file. - - - - - Creates a new Resource object without any data. The data can be later loaded from a file. - - Type of the resource; may be one of the ResourceType constants or a user-defined type. - Name of the resource. For a numeric resource identifier, prefix the decimal number with a "#". - Locale of the resource - - - - Creates a new Resource object with data. The data can be later saved to a file. - - Type of the resource; may be one of the ResourceType constants or a user-defined type. - Name of the resource. For a numeric resource identifier, prefix the decimal number with a "#". - Locale of the resource - Raw resource data - - - - Loads the resource data from a file. The file is searched for a resource with matching type, name, and locale. - - Win32 PE file containing the resource - - - - Saves the resource to a file. Any existing resource data with matching type, name, and locale is overwritten. - - Win32 PE file to contain the resource - - - - Tests if type, name, and locale of this Resource object match another Resource object. - - Resource object to be compared - True if the objects represent the same resource; false otherwise. - - - - Gets a hash code for this Resource object. - - Hash code generated from the resource type, name, and locale. - - - - Gets or sets the type of the resource. This may be one of the ResourceType constants - or a user-defined type name. - - - - - Gets or sets the name of the resource. For a numeric resource identifier, the decimal number is prefixed with a "#". - - - - - Gets or sets the locale of the resource. - - - - - Gets or sets the raw data of the resource. - - - - - Allows reading and editing of resource data in a Win32 PE file. - - - To use this class: - Create a new ResourceCollection - Locate resources for the collection by calling one of the methods - Load data of one or more s from a file by calling the method of the - Resource class, or load them all at once (more efficient) with the method of the ResourceCollection. - Read and/or edit data of the individual Resource objects using the methods on that class. - Save data of one or more s to a file by calling the method of the - Resource class, or save them all at once (more efficient) with the method of the ResourceCollection. - - - - - - Creates a new, empty ResourceCollection. - - - - - Locates all resources in a file, including all resource types and languages. For each located resource, - a instance (or subclass) is added to the collection. - - The file to be searched for resources. - resources could not be read from the file - - - - Locates all resources in a file of a given type, including all languages. For each located resource, - a instance (or subclass) is added to the collection. - - The file to be searched for resources. - The type of resource to search for; may be one of the ResourceType constants or a user-defined type. - resources could not be read from the file - - - - Locates all resources in a file of a given type and language. For each located resource, - a instance (or subclass) is added to the collection. - - The file to be searched for resources. - The type of resource to search for; may be one of the ResourceType constants or a user-defined type. - The name of the resource to search for. - resources could not be read from the file - - - - For all resources in the collection, loads their data from a resource file. - - The file from which resources are loaded. - - - - For all resources in the collection, saves their data to a resource file. - - The file to which resources are saved. - - - - Adds a new item to the collection. - - The Resource to add. - - - - Removes an item to the collection. - - The Resource to remove. - - - - Gets the index of an item in the collection. - - The Resource to search for. - The index of the item, or -1 if not found. - - - - Inserts a item into the collection. - - The insertion index. - The Resource to insert. - - - - Tests if the collection contains an item. - - The Resource to search for. - true if the item is found; false otherwise - - - - Copies the collection into an array. - - The array to copy into. - The starting index in the destination array. - - - - Removes all resources from the collection. - - - - - Gets an enumerator over all resources in the collection. - - - - - - Gets or sets the element at the specified index. - - - - - Gets the number of resources in the collection. - - - - - Represents either a standard integer resource type or a custom resource type name. - - - - - Creates a new resource type from a string resource name. - - String resource name, - or an integer resource type prefixed by a #. - - - - Creates a new integer resource type. - - Integer value of a well-known resource type. - - - - Gets a string representation of the resource type. - - The custom resource name, or the name of a well-known resource type. - - - - Tests whether one resource type equals another object. - - Other object. - True if equal, else false. - - - - Tests whether one resource type equals another. - - Other resource type. - True if equal, else false. - - - - Gets a hash code suitable for using the resource type as a dictionary key. - - Hash code based on the resource type string. - - - - Implicitly converts a string to a ResourceType. - - String resource type to convert. - ResourceType object. - - - - Explicitly converts a ResourceType to a string. - - ResourceType object to convert. - The resource type string. - - Unlike , this conversion does not return - the common name of well-known integer resource types. Therefore, - the returned string is suitable for passing directly to Win32 - resource APIs that accept resource type strings. - - - - - Gets a flag indicating whether the resource type is an integer type. - - - - - Gets the integer value of the resource type, or -1 if the resource type is not an integer. - - - - - Identifies build types of a versioned file. - - - - - Identifies the type of a versioned file. - - - - - Identifies the sub-type of a versioned file. - - - - - A subclass of Resource which provides specific methods for manipulating the resource data. - - - The resource is of type (RT_VERSION). - - - - - Creates a new VersionResource object without any data. The data can be later loaded from a file. - - Name of the resource. For a numeric resource identifier, prefix the decimal number with a "#". - Locale of the resource - - - - Creates a new VersionResource object with data. The data can be later saved to a file. - - Name of the resource. For a numeric resource identifier, prefix the decimal number with a "#". - Locale of the resource - Raw resource data - - - - Adds a new version string table for a locale. - - Locale of the table - The new string table, or the existing table if the locale already existed. - - - - Removes a version string table for a locale. - - Locale of the table - - - - Checks if a version string table exists for a given locale. - - Locale to search for - True if a string table was found for the locale; false otherwise. - - - - Removes all string tables from the version resource. - - - - - Copies the version string tables to an array, starting at a particular array index. - - The one-dimensional Array that is the destination of the elements copied - from the collection. The Array must have zero-based indexing. - The zero-based index in array at which copying begins. - - - - Gets an enumerator that can iterate over the version string tables in the collection. - - An enumerator that returns objects. - - - - Gets an enumerator that can iterate over the version string tables in the collection. - - An enumerator that returns objects. - - - - Gets or sets the raw data of the resource. The data is in the format of the VS_VERSIONINFO structure. - - - - - Gets or sets the binary locale-independent file version of the version resource. - - - - - Gets or sets the binary locale-independent product version of the version resource. - - - - - Gets or sets a bitmask that specifies the build types of the file. - - - - - Gets or sets the general type of the file. - - - - - Gets or sets the specific type of the file. - - - - - Gets or sets the binary creation date and time. - - - - - Gets the string table for a specific locale, or null if there is no table for that locale. - - - - - - - Gets the number string tables in the version resource. - - - - - Represents a string table of a file version resource. - - - - - Removes all strings from the string table. - - - - - Gets an enumeration over all strings in the table. - - Enumeration of string name and value pairs - - - - Gets the locale (LCID) of the string table. - - - - - Gets or sets a string value. - - Name of the string. - - - - Gets a collection of all the names of the strings in the table. - - - - - Gets a collection of all the values in the table. - - - - - Gets the number of strings in the table. - - - - + + + + Microsoft.Deployment.Resources + + + + + Represents a Win32 resource which can be loaded from and saved to a PE file. + + + + + Creates a new Resource object without any data. The data can be later loaded from a file. + + Type of the resource; may be one of the ResourceType constants or a user-defined type. + Name of the resource. For a numeric resource identifier, prefix the decimal number with a "#". + Locale of the resource + + + + Creates a new Resource object with data. The data can be later saved to a file. + + Type of the resource; may be one of the ResourceType constants or a user-defined type. + Name of the resource. For a numeric resource identifier, prefix the decimal number with a "#". + Locale of the resource + Raw resource data + + + + Loads the resource data from a file. The file is searched for a resource with matching type, name, and locale. + + Win32 PE file containing the resource + + + + Saves the resource to a file. Any existing resource data with matching type, name, and locale is overwritten. + + Win32 PE file to contain the resource + + + + Tests if type, name, and locale of this Resource object match another Resource object. + + Resource object to be compared + True if the objects represent the same resource; false otherwise. + + + + Gets a hash code for this Resource object. + + Hash code generated from the resource type, name, and locale. + + + + Gets or sets the type of the resource. This may be one of the ResourceType constants + or a user-defined type name. + + + + + Gets or sets the name of the resource. For a numeric resource identifier, the decimal number is prefixed with a "#". + + + + + Gets or sets the locale of the resource. + + + + + Gets or sets the raw data of the resource. + + + + + Allows reading and editing of resource data in a Win32 PE file. + + + To use this class: + Create a new ResourceCollection + Locate resources for the collection by calling one of the methods + Load data of one or more s from a file by calling the method of the + Resource class, or load them all at once (more efficient) with the method of the ResourceCollection. + Read and/or edit data of the individual Resource objects using the methods on that class. + Save data of one or more s to a file by calling the method of the + Resource class, or save them all at once (more efficient) with the method of the ResourceCollection. + + + + + + Creates a new, empty ResourceCollection. + + + + + Locates all resources in a file, including all resource types and languages. For each located resource, + a instance (or subclass) is added to the collection. + + The file to be searched for resources. + resources could not be read from the file + + + + Locates all resources in a file of a given type, including all languages. For each located resource, + a instance (or subclass) is added to the collection. + + The file to be searched for resources. + The type of resource to search for; may be one of the ResourceType constants or a user-defined type. + resources could not be read from the file + + + + Locates all resources in a file of a given type and language. For each located resource, + a instance (or subclass) is added to the collection. + + The file to be searched for resources. + The type of resource to search for; may be one of the ResourceType constants or a user-defined type. + The name of the resource to search for. + resources could not be read from the file + + + + For all resources in the collection, loads their data from a resource file. + + The file from which resources are loaded. + + + + For all resources in the collection, saves their data to a resource file. + + The file to which resources are saved. + + + + Adds a new item to the collection. + + The Resource to add. + + + + Removes an item to the collection. + + The Resource to remove. + + + + Gets the index of an item in the collection. + + The Resource to search for. + The index of the item, or -1 if not found. + + + + Inserts a item into the collection. + + The insertion index. + The Resource to insert. + + + + Tests if the collection contains an item. + + The Resource to search for. + true if the item is found; false otherwise + + + + Copies the collection into an array. + + The array to copy into. + The starting index in the destination array. + + + + Removes all resources from the collection. + + + + + Gets an enumerator over all resources in the collection. + + + + + + Gets or sets the element at the specified index. + + + + + Gets the number of resources in the collection. + + + + + Represents either a standard integer resource type or a custom resource type name. + + + + + Creates a new resource type from a string resource name. + + String resource name, + or an integer resource type prefixed by a #. + + + + Creates a new integer resource type. + + Integer value of a well-known resource type. + + + + Gets a string representation of the resource type. + + The custom resource name, or the name of a well-known resource type. + + + + Tests whether one resource type equals another object. + + Other object. + True if equal, else false. + + + + Tests whether one resource type equals another. + + Other resource type. + True if equal, else false. + + + + Gets a hash code suitable for using the resource type as a dictionary key. + + Hash code based on the resource type string. + + + + Implicitly converts a string to a ResourceType. + + String resource type to convert. + ResourceType object. + + + + Explicitly converts a ResourceType to a string. + + ResourceType object to convert. + The resource type string. + + Unlike , this conversion does not return + the common name of well-known integer resource types. Therefore, + the returned string is suitable for passing directly to Win32 + resource APIs that accept resource type strings. + + + + + Gets a flag indicating whether the resource type is an integer type. + + + + + Gets the integer value of the resource type, or -1 if the resource type is not an integer. + + + + + Identifies build types of a versioned file. + + + + + Identifies the type of a versioned file. + + + + + Identifies the sub-type of a versioned file. + + + + + A subclass of Resource which provides specific methods for manipulating the resource data. + + + The resource is of type (RT_VERSION). + + + + + Creates a new VersionResource object without any data. The data can be later loaded from a file. + + Name of the resource. For a numeric resource identifier, prefix the decimal number with a "#". + Locale of the resource + + + + Creates a new VersionResource object with data. The data can be later saved to a file. + + Name of the resource. For a numeric resource identifier, prefix the decimal number with a "#". + Locale of the resource + Raw resource data + + + + Adds a new version string table for a locale. + + Locale of the table + The new string table, or the existing table if the locale already existed. + + + + Removes a version string table for a locale. + + Locale of the table + + + + Checks if a version string table exists for a given locale. + + Locale to search for + True if a string table was found for the locale; false otherwise. + + + + Removes all string tables from the version resource. + + + + + Copies the version string tables to an array, starting at a particular array index. + + The one-dimensional Array that is the destination of the elements copied + from the collection. The Array must have zero-based indexing. + The zero-based index in array at which copying begins. + + + + Gets an enumerator that can iterate over the version string tables in the collection. + + An enumerator that returns objects. + + + + Gets an enumerator that can iterate over the version string tables in the collection. + + An enumerator that returns objects. + + + + Gets or sets the raw data of the resource. The data is in the format of the VS_VERSIONINFO structure. + + + + + Gets or sets the binary locale-independent file version of the version resource. + + + + + Gets or sets the binary locale-independent product version of the version resource. + + + + + Gets or sets a bitmask that specifies the build types of the file. + + + + + Gets or sets the general type of the file. + + + + + Gets or sets the specific type of the file. + + + + + Gets or sets the binary creation date and time. + + + + + Gets the string table for a specific locale, or null if there is no table for that locale. + + + + + + + Gets the number string tables in the version resource. + + + + + Represents a string table of a file version resource. + + + + + Removes all strings from the string table. + + + + + Gets an enumeration over all strings in the table. + + Enumeration of string name and value pairs + + + + Gets the locale (LCID) of the string table. + + + + + Gets or sets a string value. + + Name of the string. + + + + Gets a collection of all the names of the strings in the table. + + + + + Gets a collection of all the values in the table. + + + + + Gets the number of strings in the table. + + + + diff --git a/msi/build/A2Staging/wix35-binaries/sdk/Microsoft.Deployment.WindowsInstaller.Linq.xml b/msi/build/A2Staging/wix35-binaries/sdk/Microsoft.Deployment.WindowsInstaller.Linq.xml index c297f89279..428fb760ac 100644 --- a/msi/build/A2Staging/wix35-binaries/sdk/Microsoft.Deployment.WindowsInstaller.Linq.xml +++ b/msi/build/A2Staging/wix35-binaries/sdk/Microsoft.Deployment.WindowsInstaller.Linq.xml @@ -1,434 +1,434 @@ - - - - Microsoft.Deployment.WindowsInstaller.Linq - - - - - Apply to a subclass of QRecord to indicate the name of - the table the record type is to be used with. - - - If this attribute is not used on a record type, the default - table name will be derived from the record type name. (An - optional underscore suffix is stripped.) - - - - - Creates a new DatabaseTableAttribute for the specified table. - - name of the table associated with the record type - - - - Gets or sets the table associated with the record type. - - - - - Apply to a property on a subclass of QRecord to indicate - the name of the column the property is to be associated with. - - - If this attribute is not used on a property, the default - column name will be the same as the property name. - - - - - Creates a new DatabaseColumnAttribute which maps a - record property to a column. - - name of the column associated with the property - - - - Gets or sets the column associated with the record property. - - - - - Generic record entity for queryable databases, - and base for strongly-typed entity subclasses. - - - Several predefined specialized subclasses are provided for common - standard tables. Subclasses for additional standard tables - or custom tables are not necessary, but they are easy to create - and make the coding experience much nicer. - When creating subclasses, the following attributes may be - useful: , - - - - - - Do not call. Use QTable.NewRecord() instead. - - - Subclasses must also provide a public parameterless constructor. - QRecord constructors are only public due to implementation - reasons (to satisfy the new() constraint on the QTable generic - class). They are not intended to be called by user code other than - a subclass constructor. If the constructor is invoked directly, - the record instance will not be properly initialized (associated - with a database table) and calls to methods on the instance - will throw a NullReferenceException. - - - - - - Used by subclasses to get a field as an integer. - - zero-based column index of the field - - - - Used by subclasses to get a field as a nullable integer. - - zero-based column index of the field - - - - Dumps all record fields to a string. - - - - - Update multiple fields in the record (and the database). - - column names of fields to update - new values for each field being updated - - - - Update multiple fields in the record (and the database). - - column indexes of fields to update - new values for each field being updated - - The record (primary keys) must already exist in the table. - Updating primary key fields is not yet implemented; use Delete() - and Insert() instead. - - - - - Inserts the record in the database. - - - The record (primary keys) may not already exist in the table. - Use to get a new - record. Prmary keys and all required fields - must be filled in before insertion. - - - - - Inserts the record into the table. - - true if the record is temporarily - inserted, to be visible only as long as the database is open - - The record (primary keys) may not already exist in the table. - Use to get a new - record. Prmary keys and all required fields - must be filled in before insertion. - - - - - Deletes the record from the table if it exists. - - - - - Not yet implemented. - - - - - Not yet implemented. - - - - - Not yet implemented. - - - - - Not yet implemented. - - - - - Not yet implemented. - - - - - Not yet implemented. - - - - - Not yet implemented. - - - - - Gets the number of fields in the record. - - - - - Gets or sets a record field. - - column name of the field - - Setting a field value will automatically update the database. - - - - - Gets or sets a record field. - - zero-based column index of the field - - Setting a field value will automatically update the database. - - - - - Allows any Database instance to be converted into a queryable database. - - - - - Converts any Database instance into a queryable database. - - - Queryable database instance that operates on the same - MSI handle. - - This extension method is meant for convenient on-the-fly conversion. - If the existing database instance already happens to be a QDatabase, - then it is returned unchanged. Otherwise since the new database - carries the same MSI handle, only one of the instances needs to be - closed, not both. - - - - - Queryable MSI database - extends the base Database class with - LINQ query functionality along with predefined entity types - for common tables. - - - - - Opens an existing database in read-only mode. - - Path to the database file. - the database could not be created/opened - - Because this constructor initiates database access, it cannot be used with a - running installation. - The Database object should be d after use. - The finalizer will close the handle if it is still open, however due to the nondeterministic - nature of finalization it is best that the handle be closed manually as soon as it is no - longer needed, as leaving lots of unused handles open can degrade performance. - - - - - Opens an existing database with another database as output. - - Path to the database to be read. - Open mode for the database - Database object representing the created or opened database - the database could not be created/opened - - When a database is opened as the output of another database, the summary information stream - of the output database is actually a read-only mirror of the original database and thus cannot - be changed. Additionally, it is not persisted with the database. To create or modify the - summary information for the output database it must be closed and re-opened. - The returned Database object should be d after use. - The finalizer will close the handle if it is still open, however due to the nondeterministic - nature of finalization it is best that the handle be closed manually as soon as it is no - longer needed, as leaving lots of unused handles open can degrade performance. - - - - - Opens an existing database or creates a new one. - - Path to the database file. If an empty string - is supplied, a temporary database is created that is not persisted. - Open mode for the database - the database could not be created/opened - - To make and save changes to a database first open the database in transaction, - create or, or direct mode. After making the changes, always call the Commit method - before closing the database handle. The Commit method flushes all buffers. - Always call the Commit method on a database that has been opened in direct - mode before closing the database. Failure to do this may corrupt the database. - Because this constructor initiates database access, it cannot be used with a - running installation. - The Database object should be d after use. - The finalizer will close the handle if it is still open, however due to the nondeterministic - nature of finalization it is best that the handle be closed manually as soon as it is no - longer needed, as leaving lots of unused handles open can degrade performance. - - - - - Creates a new database from an MSI handle. - - Native MSI database handle. - True if the handle should be closed - when the database object is disposed - Path of the database file, if known - Mode the handle was originally opened in - - - - Gets or sets a log where all MSI SQL queries are written. - - - The log can be useful for debugging, or simply to watch the LINQ magic in action. - - - - - Gets a queryable table from the datbaase. - - name of the table - - - Queryable standard table with predefined specialized record type. - - - Queryable standard table with predefined specialized record type. - - - Queryable standard table with predefined specialized record type. - - - Queryable standard table with predefined specialized record type. - - - Queryable standard table with predefined specialized record type. - - - Queryable standard table with predefined specialized record type. - - - Queryable standard table with predefined specialized record type. - - - Queryable standard table with predefined specialized record type. - - - Queryable standard table with predefined specialized record type. - - - Queryable standard table with predefined specialized record type. - - - Queryable standard table with predefined specialized record type. - - - Queryable standard table with predefined specialized record type. - - - Queryable standard table with predefined specialized record type. - - - Queryable standard table with predefined specialized record type. - - - Queryable standard table with predefined specialized record type. - - - Queryable standard table with predefined specialized record type. - - - - Represents one table in a LINQ-queryable Database. - - type that represents one record in the table - - This class is the primary gateway to all LINQ to MSI query functionality. - The TRecord generic parameter may be the general - class, or a specialized subclass of QRecord. - - - - - Infers the name of the table this instance will be - associated with. - - table name - - The table name is retrieved from a DatabaseTableAttribute - on the record type if it exists; otherwise the name is - derived from the name of the record type itself. - (An optional underscore suffix on the record type name is dropped.) - - - - - Creates a new QTable, inferring the table name - from the name of the record type parameter. - - database that contains the table - - - - Creates a new QTable with an explicit table name. - - database that contains the table - name of the table - - - - Enumerates over all records in the table. - - - - - - Creates a new record that can be inserted into this table. - - a record with all fields initialized to null - - Primary keys and required fields must be filled in with - non-null values before the record can be inserted. - The record is tied to this table in this database; - it cannot be inserted into another table or database. - - - - - Gets schema information about the table. - - - - - Gets the database this table is associated with. - - - - - Implements the LINQ to MSI query functionality. - - the result type of the current query -- - either some kind of QRecord, or some projection of record data - - - + + + + Microsoft.Deployment.WindowsInstaller.Linq + + + + + Apply to a subclass of QRecord to indicate the name of + the table the record type is to be used with. + + + If this attribute is not used on a record type, the default + table name will be derived from the record type name. (An + optional underscore suffix is stripped.) + + + + + Creates a new DatabaseTableAttribute for the specified table. + + name of the table associated with the record type + + + + Gets or sets the table associated with the record type. + + + + + Apply to a property on a subclass of QRecord to indicate + the name of the column the property is to be associated with. + + + If this attribute is not used on a property, the default + column name will be the same as the property name. + + + + + Creates a new DatabaseColumnAttribute which maps a + record property to a column. + + name of the column associated with the property + + + + Gets or sets the column associated with the record property. + + + + + Generic record entity for queryable databases, + and base for strongly-typed entity subclasses. + + + Several predefined specialized subclasses are provided for common + standard tables. Subclasses for additional standard tables + or custom tables are not necessary, but they are easy to create + and make the coding experience much nicer. + When creating subclasses, the following attributes may be + useful: , + + + + + + Do not call. Use QTable.NewRecord() instead. + + + Subclasses must also provide a public parameterless constructor. + QRecord constructors are only public due to implementation + reasons (to satisfy the new() constraint on the QTable generic + class). They are not intended to be called by user code other than + a subclass constructor. If the constructor is invoked directly, + the record instance will not be properly initialized (associated + with a database table) and calls to methods on the instance + will throw a NullReferenceException. + + + + + + Used by subclasses to get a field as an integer. + + zero-based column index of the field + + + + Used by subclasses to get a field as a nullable integer. + + zero-based column index of the field + + + + Dumps all record fields to a string. + + + + + Update multiple fields in the record (and the database). + + column names of fields to update + new values for each field being updated + + + + Update multiple fields in the record (and the database). + + column indexes of fields to update + new values for each field being updated + + The record (primary keys) must already exist in the table. + Updating primary key fields is not yet implemented; use Delete() + and Insert() instead. + + + + + Inserts the record in the database. + + + The record (primary keys) may not already exist in the table. + Use to get a new + record. Prmary keys and all required fields + must be filled in before insertion. + + + + + Inserts the record into the table. + + true if the record is temporarily + inserted, to be visible only as long as the database is open + + The record (primary keys) may not already exist in the table. + Use to get a new + record. Prmary keys and all required fields + must be filled in before insertion. + + + + + Deletes the record from the table if it exists. + + + + + Not yet implemented. + + + + + Not yet implemented. + + + + + Not yet implemented. + + + + + Not yet implemented. + + + + + Not yet implemented. + + + + + Not yet implemented. + + + + + Not yet implemented. + + + + + Gets the number of fields in the record. + + + + + Gets or sets a record field. + + column name of the field + + Setting a field value will automatically update the database. + + + + + Gets or sets a record field. + + zero-based column index of the field + + Setting a field value will automatically update the database. + + + + + Allows any Database instance to be converted into a queryable database. + + + + + Converts any Database instance into a queryable database. + + + Queryable database instance that operates on the same + MSI handle. + + This extension method is meant for convenient on-the-fly conversion. + If the existing database instance already happens to be a QDatabase, + then it is returned unchanged. Otherwise since the new database + carries the same MSI handle, only one of the instances needs to be + closed, not both. + + + + + Queryable MSI database - extends the base Database class with + LINQ query functionality along with predefined entity types + for common tables. + + + + + Opens an existing database in read-only mode. + + Path to the database file. + the database could not be created/opened + + Because this constructor initiates database access, it cannot be used with a + running installation. + The Database object should be d after use. + The finalizer will close the handle if it is still open, however due to the nondeterministic + nature of finalization it is best that the handle be closed manually as soon as it is no + longer needed, as leaving lots of unused handles open can degrade performance. + + + + + Opens an existing database with another database as output. + + Path to the database to be read. + Open mode for the database + Database object representing the created or opened database + the database could not be created/opened + + When a database is opened as the output of another database, the summary information stream + of the output database is actually a read-only mirror of the original database and thus cannot + be changed. Additionally, it is not persisted with the database. To create or modify the + summary information for the output database it must be closed and re-opened. + The returned Database object should be d after use. + The finalizer will close the handle if it is still open, however due to the nondeterministic + nature of finalization it is best that the handle be closed manually as soon as it is no + longer needed, as leaving lots of unused handles open can degrade performance. + + + + + Opens an existing database or creates a new one. + + Path to the database file. If an empty string + is supplied, a temporary database is created that is not persisted. + Open mode for the database + the database could not be created/opened + + To make and save changes to a database first open the database in transaction, + create or, or direct mode. After making the changes, always call the Commit method + before closing the database handle. The Commit method flushes all buffers. + Always call the Commit method on a database that has been opened in direct + mode before closing the database. Failure to do this may corrupt the database. + Because this constructor initiates database access, it cannot be used with a + running installation. + The Database object should be d after use. + The finalizer will close the handle if it is still open, however due to the nondeterministic + nature of finalization it is best that the handle be closed manually as soon as it is no + longer needed, as leaving lots of unused handles open can degrade performance. + + + + + Creates a new database from an MSI handle. + + Native MSI database handle. + True if the handle should be closed + when the database object is disposed + Path of the database file, if known + Mode the handle was originally opened in + + + + Gets or sets a log where all MSI SQL queries are written. + + + The log can be useful for debugging, or simply to watch the LINQ magic in action. + + + + + Gets a queryable table from the datbaase. + + name of the table + + + Queryable standard table with predefined specialized record type. + + + Queryable standard table with predefined specialized record type. + + + Queryable standard table with predefined specialized record type. + + + Queryable standard table with predefined specialized record type. + + + Queryable standard table with predefined specialized record type. + + + Queryable standard table with predefined specialized record type. + + + Queryable standard table with predefined specialized record type. + + + Queryable standard table with predefined specialized record type. + + + Queryable standard table with predefined specialized record type. + + + Queryable standard table with predefined specialized record type. + + + Queryable standard table with predefined specialized record type. + + + Queryable standard table with predefined specialized record type. + + + Queryable standard table with predefined specialized record type. + + + Queryable standard table with predefined specialized record type. + + + Queryable standard table with predefined specialized record type. + + + Queryable standard table with predefined specialized record type. + + + + Represents one table in a LINQ-queryable Database. + + type that represents one record in the table + + This class is the primary gateway to all LINQ to MSI query functionality. + The TRecord generic parameter may be the general + class, or a specialized subclass of QRecord. + + + + + Infers the name of the table this instance will be + associated with. + + table name + + The table name is retrieved from a DatabaseTableAttribute + on the record type if it exists; otherwise the name is + derived from the name of the record type itself. + (An optional underscore suffix on the record type name is dropped.) + + + + + Creates a new QTable, inferring the table name + from the name of the record type parameter. + + database that contains the table + + + + Creates a new QTable with an explicit table name. + + database that contains the table + name of the table + + + + Enumerates over all records in the table. + + + + + + Creates a new record that can be inserted into this table. + + a record with all fields initialized to null + + Primary keys and required fields must be filled in with + non-null values before the record can be inserted. + The record is tied to this table in this database; + it cannot be inserted into another table or database. + + + + + Gets schema information about the table. + + + + + Gets the database this table is associated with. + + + + + Implements the LINQ to MSI query functionality. + + the result type of the current query -- + either some kind of QRecord, or some projection of record data + + + diff --git a/msi/build/A2Staging/wix35-binaries/sdk/Microsoft.Deployment.WindowsInstaller.Package.xml b/msi/build/A2Staging/wix35-binaries/sdk/Microsoft.Deployment.WindowsInstaller.Package.xml index 1450ade6ed..f42c60b698 100644 --- a/msi/build/A2Staging/wix35-binaries/sdk/Microsoft.Deployment.WindowsInstaller.Package.xml +++ b/msi/build/A2Staging/wix35-binaries/sdk/Microsoft.Deployment.WindowsInstaller.Package.xml @@ -1,679 +1,679 @@ - - - - Microsoft.Deployment.WindowsInstaller.Package - - - - - Handles status messages generated when operations are performed on an - or . - - - installPackage.Message += new InstallPackageMessageHandler(Console.WriteLine); - - - - - Provides access to powerful build, maintenance, and analysis operations on an - installation package (.MSI or .MSM). - - - - - Creates a new InstallPackage object. The file source directory and working - directory are the same as the location as the package file. - - Path to the install package to be created or opened - Open mode for the database - - - - Creates a new InstallPackage object, specifying an alternate file source - directory and/or working directory. - - Path to the install package to be created or opened - Open mode for the database - Location to obtain source files and cabinets when extracting - or updating files in the working directory. This is often the location of an original - copy of the package that is not meant to be modified. If this parameter is null, it - defaults to the directory of . - Location where files will be extracted to/updated from. Also - the location where a temporary folder is created during some operations. If this - parameter is null, it defaults to the directory of . - If the source location is different than the working directory, then - no files will be modified at the source location. - - - - - Sends a message to the event-handler. - - Message string, containing 0 or more format items - Items to be formatted - - - - Gets the list of file keys that have the specified long file name. - - File name to search for (case-insensitive) - Array of file keys, or a 0-length array if none are found - - - - Gets the list of file keys whose long file names match a specified - regular-expression search pattern. - - Regular expression search pattern - Array of file keys, or a 0-length array if none are found - - - - Extracts all files to the . The files are extracted - to the relative directory matching their . - - If any files have the uncompressed attribute, they will be copied - from the . - - - - Extracts a specified list of files to the . The files - are extracted to the relative directory matching their . - - List of file key strings to extract - If any files have the uncompressed attribute, they will be copied - from the . - - - - Updates the install package with new files from the . The - files must be in the relative directory matching their . - This method re-compresses and packages the files if necessary, and also updates the - following data: File.FileSize, File.Version, File.Language, MsiFileHash.HashPart* - - - The cabinet compression level used during re-cabbing can be configured with the - property. - - - - - Updates the install package with new files from the . The - files must be in the relative directory matching their . - This method re-compresses and packages the files if necessary, and also updates the - following data: File.FileSize, File.Version, File.Language, MsiFileHash.HashPart?. - - List of file key strings to update - - This method does not change the media structure of the package, so it may require extracting - and re-compressing a large cabinet just to update one file. -

The cabinet compression level used during re-cabbing can be configured with the - property.

-
-
- - - Consolidates a package by combining and re-compressing all files into a single - internal or external cabinet. - - - If an installation package was built from many merge modules, this - method can somewhat decrease package size, complexity, and installation time. -

This method will also convert a package with all or mostly uncompressed - files into a package where all files are compressed.

-

If the package contains any not-yet-applied binary file patches (for - example, a package generated by a call to ) then - this method will apply the patches before compressing the updated files.

-

This method edits the database summary information and the File, Media - and Patch tables as necessary to maintain a valid installation package.

-

The cabinet compression level used during re-cabbing can be configured with the - property.

-
-
- - - Rebuilds the cached directory structure information accessed by the - and properties. This - should be done after modifying the File, Component, or Directory - tables, or else the cached information may no longer be accurate. - - - - - Applies a patch package to the database, resulting in an installation package that - has the patch built-in. - - The patch package to be applied - Optional name of the specific transform to apply. - This parameter is usually left null, which causes the patch to be searched for - a transform that is valid to apply to this database. - - If the patch contains any binary file patches, they will not immediately be applied - to the target files, though they will at installation time. -

After calling this method you can use to apply - the file patches immediately and also discard any outdated files from the package.

-
-
- - - Handle this event to receive status messages when operations are performed - on the install package. - - - installPackage.Message += new InstallPackageMessageHandler(Console.WriteLine); - - - - - Gets or sets the location to obtain source files and cabinets when - extracting or updating files in the working directory. This is often - the location of an original copy of the package that is not meant - to be modified. - - - - - Gets or sets the location where files will be extracted to/updated from. Also - the location where a temporary folder is created during some operations. - - - - - Gets a mapping from Directory keys to source/target paths. - - - If the Directory table is modified, this mapping - will be outdated until you call . - - - - - Gets a mapping from File keys to source/target paths. - - - If the File, Component, or Directory tables are modified, this mapping - may be outdated until you call . - - - - - Gets or sets the compression level used by - and . - - - If the Directory table is modified, this mapping will be outdated - until you close and reopen the install package. - - - - - Accessor for getting and setting properties of the InstallPackage database. - - - - - Accessor for getting and setting properties of the database. - - - - - Gets or sets a property in the database. When getting a property - that does not exist in the database, an empty string is returned. - To remove a property from the database, set it to an empty string. - - - This has the same results as direct SQL queries on the Property table; it's only - meant to be a more convenient way of access. - - - - - Represents the installation path of a file or directory from an installer product database. - - - - - Creates a new InstallPath, specifying a filename. - - The name of the file or directory. Not a full path. - - - - Creates a new InstallPath, parsing out either the short or long filename. - - The name of the file or directory, in short|long syntax for a filename - or targetshort|targetlong:sourceshort|sourcelong syntax for a directory. - true to parse the short part of the combined filename; false to parse the long part - - - - Gets the full source path. - - - - - - Gets the path of the parent directory. - - - - - Gets the set of child paths if this InstallPath object represents a a directory. - - - - - Gets or sets the source name of the InstallPath. - - - - - Gets or sets the target name of the install path. - - - - - Gets the full source path. - - - - - Gets the full target path. - - - - - Represents a collection of InstallPaths that are the child paths of the same parent directory. - - - - - Adds a new child path to the collection. - - The InstallPath to add. - - - - Removes a child path to the collection. - - The InstallPath to remove. - - - - Gets the index of a child path in the collection. - - The InstallPath to search for. - The index of the item, or -1 if not found. - - - - Inserts a child path into the collection. - - The insertion index. - The InstallPath to insert. - - - - Tests if the collection contains a child path. - - The InstallPath to search for. - true if the item is found; false otherwise - - - - Copies the collection into an array. - - The array to copy into. - The starting index in the destination array. - - - - Removes an item from the collection. - - The index of the item to remove. - - - - Removes all items from the collection. - - - - - Gets an enumerator over all items in the collection. - - An enumerator for the collection. - - - - Gets or sets the element at the specified index. - - - - - Gets the number of items in the collection. - - - - - Represents a mapping of install paths for all directories, components, or files in - an installation database. - - - - - Builds a mapping from File keys to installation paths. - - Installation database. - Component mapping returned by . - true to use short file names; false to use long names - An InstallPathMap with the described mapping. - - - - Builds a mapping from Component keys to installation paths. - - Installation database. - Directory mapping returned by - . - An InstallPathMap with the described mapping. - - - - Builds a mapping from Directory keys to installation paths. - - Installation database. - true to use short directory names; false to use long names - An InstallPathMap with the described mapping. - - - - Builds a mapping of Directory keys to directory paths, specifying root directories - for the source and target paths. - - Database containing the Directory table. - true to use short directory names; false to use long names - The root directory path of all source paths, or null to leave them relative. - The root directory path of all source paths, or null to leave them relative. - An InstallPathMap with the described mapping. - - - - Creates a new empty InstallPathMap. - - - - - Sets an install path for a direcotry, component, or file key. - - Depending on the type of InstallPathMap, this is the primary key from the - either the Directory, Component, or File table. - The install path of the key item. - - Changing an install path does not modify the Database used to generate this InstallPathMap. - - - - - Removes an install path from the map. - - Depending on the type of InstallPathMap, this is the primary key from the - either the Directory, Component, or File table. - true if the item was removed, false if it did not exist - - Changing an install path does not modify the Database used to generate this InstallPathMap. - - - - - Tests whether a direcotry, component, or file key exists in the map. - - Depending on the type of InstallPathMap, this is the primary key from the - either the Directory, Component, or File table. - true if the key is found; false otherwise - - - - Attempts to get a value from the dictionary. - - The key to lookup. - Receives the value, or null if they key was not found. - True if the value was found, else false. - - - - Removes all entries from the dictionary. - - - - - Gets an enumerator over all entries in the dictionary. - - An enumerator for the dictionary. - - - - Gets a mapping from keys to source paths. - - - - - Gets a mapping from keys to target paths. - - - - - Gets or sets an install path for a direcotry, component, or file key. - - Depending on the type of InstallPathMap, this is the primary key from the - either the Directory, Component, or File table. - - Changing an install path does not modify the Database used to generate this InstallPathMap. - - - - - Gets the collection of keys in the InstallPathMap. Depending on the type of InstallPathMap, - they are all directory, component, or file key strings. - - - - - Gets the collection of InstallPath values in the InstallPathMap. - - - - - Gets the number of entries in the dictionary. - - - - - Provides access to convenient properties and operations on a patch package (.MSP). - - - - - Creates a new patch package object; opening the patch database in read-only mode. - - Path to the patch package (.MSP) - The PatchPackage object only opens the patch database in read-only mode, because - transforms (sub-storages) cannot be read if the database is open in read-write mode. - - - - Sends a message to the event-handler. - - Message string, containing 0 or more format items - Items to be formatted - - - - Gets the list of patch codes that are replaced by this patch package. - - Array of replaced patch codes (GUIDs) - - The list of replaced patch codes is stored in the RevisionNumber field of the patch summary information. - - - - - Gets the list of product codes of products targeted by this patch package. - - Array of product codes (GUIDs) - - The list of target product codes is stored in the Template field of the patch summary information. - - - - - Gets the names of the transforms included in the patch package. - - Array of transform names - - The returned list does not include the "patch special transforms" that are prefixed with "#" -

The list of transform names is stored in the LastSavedBy field of the patch summary information.

-
-
- - - Gets the names of the transforms included in the patch package. - - Specifies whether to include the - "patch special transforms" that are prefixed with "#" - Array of transform names - - The list of transform names is stored in the LastSavedBy field of the patch summary information. - - - - - Gets information about the transforms included in the patch package. - - Array containing information about each transform - - The returned info does not include the "patch special transforms" that are prefixed with "#" - - - - - Gets information about the transforms included in the patch package. - - Specifies whether to include the - "patch special transforms" that are prefixed with "#" - Array containing information about each transform - - - - Gets information about a transforms included in the patch package. - - Name of the transform to extract; this may optionally be a - special transform prefixed by "#" - Information about the transform - - - - Analyzes the transforms included in the patch package to find the ones that - are applicable to an install package. - - The install package to validate the transforms against - Array of valid transform names - - The returned list does not include the "patch special transforms" that - are prefixed with "#" If a transform is valid, then its corresponding - special transform is assumed to be valid as well. - - - - - Extracts a transform (.MST) from a patch package. - - Name of the transform to extract; this may optionally be a - special transform prefixed by "#" - Location where the transform will be extracted - - - - Handle this event to receive status messages when operations are performed on the patch package. - - - patchPackage.Message += new InstallPackageMessageHandler(Console.WriteLine); - - - - - Gets the patch code (GUID) of the patch package. - - - The patch code is stored in the RevisionNumber field of the patch summary information. - - - - - Contains properties of a transform package (.MST). - - - - - Reads transform information from a transform package. - - Path to a transform package (.MST file). - - - - Reads transform information from the summary information of a transform package. - - Filename of the transform (optional). - Handle to the summary information of a transform package (.MST file). - - - - Returns the name of the transform. - - - - - Gets the filename of the transform. - - - - - Gets the target product code of the transform. - - - - - Gets the target product version of the transform. - - - - - Gets the upgrade product code of the transform. - - - - - Gets the upgrade product version of the transform. - - - - - Gets the upgrade code of the transform. - - - - - Gets the target platform of the transform. - - - - - Gets the target language of the transform, or 0 if the transform is language-neutral. - - - - - Gets the validation flags specified when the transform was generated. - - -
-
+ + + + Microsoft.Deployment.WindowsInstaller.Package + + + + + Handles status messages generated when operations are performed on an + or . + + + installPackage.Message += new InstallPackageMessageHandler(Console.WriteLine); + + + + + Provides access to powerful build, maintenance, and analysis operations on an + installation package (.MSI or .MSM). + + + + + Creates a new InstallPackage object. The file source directory and working + directory are the same as the location as the package file. + + Path to the install package to be created or opened + Open mode for the database + + + + Creates a new InstallPackage object, specifying an alternate file source + directory and/or working directory. + + Path to the install package to be created or opened + Open mode for the database + Location to obtain source files and cabinets when extracting + or updating files in the working directory. This is often the location of an original + copy of the package that is not meant to be modified. If this parameter is null, it + defaults to the directory of . + Location where files will be extracted to/updated from. Also + the location where a temporary folder is created during some operations. If this + parameter is null, it defaults to the directory of . + If the source location is different than the working directory, then + no files will be modified at the source location. + + + + + Sends a message to the event-handler. + + Message string, containing 0 or more format items + Items to be formatted + + + + Gets the list of file keys that have the specified long file name. + + File name to search for (case-insensitive) + Array of file keys, or a 0-length array if none are found + + + + Gets the list of file keys whose long file names match a specified + regular-expression search pattern. + + Regular expression search pattern + Array of file keys, or a 0-length array if none are found + + + + Extracts all files to the . The files are extracted + to the relative directory matching their . + + If any files have the uncompressed attribute, they will be copied + from the . + + + + Extracts a specified list of files to the . The files + are extracted to the relative directory matching their . + + List of file key strings to extract + If any files have the uncompressed attribute, they will be copied + from the . + + + + Updates the install package with new files from the . The + files must be in the relative directory matching their . + This method re-compresses and packages the files if necessary, and also updates the + following data: File.FileSize, File.Version, File.Language, MsiFileHash.HashPart* + + + The cabinet compression level used during re-cabbing can be configured with the + property. + + + + + Updates the install package with new files from the . The + files must be in the relative directory matching their . + This method re-compresses and packages the files if necessary, and also updates the + following data: File.FileSize, File.Version, File.Language, MsiFileHash.HashPart?. + + List of file key strings to update + + This method does not change the media structure of the package, so it may require extracting + and re-compressing a large cabinet just to update one file. +

The cabinet compression level used during re-cabbing can be configured with the + property.

+
+
+ + + Consolidates a package by combining and re-compressing all files into a single + internal or external cabinet. + + + If an installation package was built from many merge modules, this + method can somewhat decrease package size, complexity, and installation time. +

This method will also convert a package with all or mostly uncompressed + files into a package where all files are compressed.

+

If the package contains any not-yet-applied binary file patches (for + example, a package generated by a call to ) then + this method will apply the patches before compressing the updated files.

+

This method edits the database summary information and the File, Media + and Patch tables as necessary to maintain a valid installation package.

+

The cabinet compression level used during re-cabbing can be configured with the + property.

+
+
+ + + Rebuilds the cached directory structure information accessed by the + and properties. This + should be done after modifying the File, Component, or Directory + tables, or else the cached information may no longer be accurate. + + + + + Applies a patch package to the database, resulting in an installation package that + has the patch built-in. + + The patch package to be applied + Optional name of the specific transform to apply. + This parameter is usually left null, which causes the patch to be searched for + a transform that is valid to apply to this database. + + If the patch contains any binary file patches, they will not immediately be applied + to the target files, though they will at installation time. +

After calling this method you can use to apply + the file patches immediately and also discard any outdated files from the package.

+
+
+ + + Handle this event to receive status messages when operations are performed + on the install package. + + + installPackage.Message += new InstallPackageMessageHandler(Console.WriteLine); + + + + + Gets or sets the location to obtain source files and cabinets when + extracting or updating files in the working directory. This is often + the location of an original copy of the package that is not meant + to be modified. + + + + + Gets or sets the location where files will be extracted to/updated from. Also + the location where a temporary folder is created during some operations. + + + + + Gets a mapping from Directory keys to source/target paths. + + + If the Directory table is modified, this mapping + will be outdated until you call . + + + + + Gets a mapping from File keys to source/target paths. + + + If the File, Component, or Directory tables are modified, this mapping + may be outdated until you call . + + + + + Gets or sets the compression level used by + and . + + + If the Directory table is modified, this mapping will be outdated + until you close and reopen the install package. + + + + + Accessor for getting and setting properties of the InstallPackage database. + + + + + Accessor for getting and setting properties of the database. + + + + + Gets or sets a property in the database. When getting a property + that does not exist in the database, an empty string is returned. + To remove a property from the database, set it to an empty string. + + + This has the same results as direct SQL queries on the Property table; it's only + meant to be a more convenient way of access. + + + + + Represents the installation path of a file or directory from an installer product database. + + + + + Creates a new InstallPath, specifying a filename. + + The name of the file or directory. Not a full path. + + + + Creates a new InstallPath, parsing out either the short or long filename. + + The name of the file or directory, in short|long syntax for a filename + or targetshort|targetlong:sourceshort|sourcelong syntax for a directory. + true to parse the short part of the combined filename; false to parse the long part + + + + Gets the full source path. + + + + + + Gets the path of the parent directory. + + + + + Gets the set of child paths if this InstallPath object represents a a directory. + + + + + Gets or sets the source name of the InstallPath. + + + + + Gets or sets the target name of the install path. + + + + + Gets the full source path. + + + + + Gets the full target path. + + + + + Represents a collection of InstallPaths that are the child paths of the same parent directory. + + + + + Adds a new child path to the collection. + + The InstallPath to add. + + + + Removes a child path to the collection. + + The InstallPath to remove. + + + + Gets the index of a child path in the collection. + + The InstallPath to search for. + The index of the item, or -1 if not found. + + + + Inserts a child path into the collection. + + The insertion index. + The InstallPath to insert. + + + + Tests if the collection contains a child path. + + The InstallPath to search for. + true if the item is found; false otherwise + + + + Copies the collection into an array. + + The array to copy into. + The starting index in the destination array. + + + + Removes an item from the collection. + + The index of the item to remove. + + + + Removes all items from the collection. + + + + + Gets an enumerator over all items in the collection. + + An enumerator for the collection. + + + + Gets or sets the element at the specified index. + + + + + Gets the number of items in the collection. + + + + + Represents a mapping of install paths for all directories, components, or files in + an installation database. + + + + + Builds a mapping from File keys to installation paths. + + Installation database. + Component mapping returned by . + true to use short file names; false to use long names + An InstallPathMap with the described mapping. + + + + Builds a mapping from Component keys to installation paths. + + Installation database. + Directory mapping returned by + . + An InstallPathMap with the described mapping. + + + + Builds a mapping from Directory keys to installation paths. + + Installation database. + true to use short directory names; false to use long names + An InstallPathMap with the described mapping. + + + + Builds a mapping of Directory keys to directory paths, specifying root directories + for the source and target paths. + + Database containing the Directory table. + true to use short directory names; false to use long names + The root directory path of all source paths, or null to leave them relative. + The root directory path of all source paths, or null to leave them relative. + An InstallPathMap with the described mapping. + + + + Creates a new empty InstallPathMap. + + + + + Sets an install path for a direcotry, component, or file key. + + Depending on the type of InstallPathMap, this is the primary key from the + either the Directory, Component, or File table. + The install path of the key item. + + Changing an install path does not modify the Database used to generate this InstallPathMap. + + + + + Removes an install path from the map. + + Depending on the type of InstallPathMap, this is the primary key from the + either the Directory, Component, or File table. + true if the item was removed, false if it did not exist + + Changing an install path does not modify the Database used to generate this InstallPathMap. + + + + + Tests whether a direcotry, component, or file key exists in the map. + + Depending on the type of InstallPathMap, this is the primary key from the + either the Directory, Component, or File table. + true if the key is found; false otherwise + + + + Attempts to get a value from the dictionary. + + The key to lookup. + Receives the value, or null if they key was not found. + True if the value was found, else false. + + + + Removes all entries from the dictionary. + + + + + Gets an enumerator over all entries in the dictionary. + + An enumerator for the dictionary. + + + + Gets a mapping from keys to source paths. + + + + + Gets a mapping from keys to target paths. + + + + + Gets or sets an install path for a direcotry, component, or file key. + + Depending on the type of InstallPathMap, this is the primary key from the + either the Directory, Component, or File table. + + Changing an install path does not modify the Database used to generate this InstallPathMap. + + + + + Gets the collection of keys in the InstallPathMap. Depending on the type of InstallPathMap, + they are all directory, component, or file key strings. + + + + + Gets the collection of InstallPath values in the InstallPathMap. + + + + + Gets the number of entries in the dictionary. + + + + + Provides access to convenient properties and operations on a patch package (.MSP). + + + + + Creates a new patch package object; opening the patch database in read-only mode. + + Path to the patch package (.MSP) + The PatchPackage object only opens the patch database in read-only mode, because + transforms (sub-storages) cannot be read if the database is open in read-write mode. + + + + Sends a message to the event-handler. + + Message string, containing 0 or more format items + Items to be formatted + + + + Gets the list of patch codes that are replaced by this patch package. + + Array of replaced patch codes (GUIDs) + + The list of replaced patch codes is stored in the RevisionNumber field of the patch summary information. + + + + + Gets the list of product codes of products targeted by this patch package. + + Array of product codes (GUIDs) + + The list of target product codes is stored in the Template field of the patch summary information. + + + + + Gets the names of the transforms included in the patch package. + + Array of transform names + + The returned list does not include the "patch special transforms" that are prefixed with "#" +

The list of transform names is stored in the LastSavedBy field of the patch summary information.

+
+
+ + + Gets the names of the transforms included in the patch package. + + Specifies whether to include the + "patch special transforms" that are prefixed with "#" + Array of transform names + + The list of transform names is stored in the LastSavedBy field of the patch summary information. + + + + + Gets information about the transforms included in the patch package. + + Array containing information about each transform + + The returned info does not include the "patch special transforms" that are prefixed with "#" + + + + + Gets information about the transforms included in the patch package. + + Specifies whether to include the + "patch special transforms" that are prefixed with "#" + Array containing information about each transform + + + + Gets information about a transforms included in the patch package. + + Name of the transform to extract; this may optionally be a + special transform prefixed by "#" + Information about the transform + + + + Analyzes the transforms included in the patch package to find the ones that + are applicable to an install package. + + The install package to validate the transforms against + Array of valid transform names + + The returned list does not include the "patch special transforms" that + are prefixed with "#" If a transform is valid, then its corresponding + special transform is assumed to be valid as well. + + + + + Extracts a transform (.MST) from a patch package. + + Name of the transform to extract; this may optionally be a + special transform prefixed by "#" + Location where the transform will be extracted + + + + Handle this event to receive status messages when operations are performed on the patch package. + + + patchPackage.Message += new InstallPackageMessageHandler(Console.WriteLine); + + + + + Gets the patch code (GUID) of the patch package. + + + The patch code is stored in the RevisionNumber field of the patch summary information. + + + + + Contains properties of a transform package (.MST). + + + + + Reads transform information from a transform package. + + Path to a transform package (.MST file). + + + + Reads transform information from the summary information of a transform package. + + Filename of the transform (optional). + Handle to the summary information of a transform package (.MST file). + + + + Returns the name of the transform. + + + + + Gets the filename of the transform. + + + + + Gets the target product code of the transform. + + + + + Gets the target product version of the transform. + + + + + Gets the upgrade product code of the transform. + + + + + Gets the upgrade product version of the transform. + + + + + Gets the upgrade code of the transform. + + + + + Gets the target platform of the transform. + + + + + Gets the target language of the transform, or 0 if the transform is language-neutral. + + + + + Gets the validation flags specified when the transform was generated. + + +
+
diff --git a/msi/build/A2Staging/wix35-binaries/sdk/Microsoft.Deployment.WindowsInstaller.xml b/msi/build/A2Staging/wix35-binaries/sdk/Microsoft.Deployment.WindowsInstaller.xml index 9b6d52c6c2..c7ed5b6eb0 100644 --- a/msi/build/A2Staging/wix35-binaries/sdk/Microsoft.Deployment.WindowsInstaller.xml +++ b/msi/build/A2Staging/wix35-binaries/sdk/Microsoft.Deployment.WindowsInstaller.xml @@ -1,7334 +1,7334 @@ - - - - Microsoft.Deployment.WindowsInstaller - - - - - Collection of column information related to a or - . - - - - - Creates a new ColumnCollection based on a specified list of columns. - - columns to be added to the new collection - - - - Creates a new ColumnCollection that is associated with a database table. - - view that contains the columns - - - - Not supported because the collection is read-only. - - information about the column being added - the collection is read-only - - - - Not supported because the collection is read-only. - - the collection is read-only - - - - Checks if a column with a given name exists in the collection. - - case-sensitive name of the column to look for - true if the column exists in the collection, false otherwise - - - - Checks if a column with a given name exists in the collection. - - column to look for, with case-sensitive name - true if the column exists in the collection, false otherwise - - - - Gets the index of a column within the collection. - - case-sensitive name of the column to look for - 0-based index of the column, or -1 if not found - - - - Copies the columns from this collection into an array. - - destination array to be filed - offset into the destination array where copying begins - - - - Not supported because the collection is read-only. - - column to remove - true if the column was removed, false if it was not found - the collection is read-only - - - - Gets an enumerator over the columns in the collection. - - An enumerator of ColumnInfo objects. - - - - Gets an enumerator over the columns in the collection. - - An enumerator of ColumnInfo objects. - - - - Creates ColumnInfo objects for the associated view. - - dynamically-generated list of columns - - - - Gets a list of column names or column-definition-strings for the - associated view. - - the view to that defines the columns - true to return types (column definition strings), - false to return names - list of column names or types - - - - Gets the number of columns in the collection. - - number of columns in the collection - - - - Gets a boolean value indicating whether the collection is read-only. - A ColumnCollection is read-only if it is associated with a - or a read-only . - - read-only status of the collection - - - - Gets information about a specific column in the collection. - - 1-based index into the column collection - is less - than 1 or greater than the number of columns in the collection - - - - Gets information about a specific column in the collection. - - case-sensitive name of a column collection - does - not exist in the collection - - - - Gets a string suitable for printing all the values of a record containing these columns. - - - - - Available values for the Attributes column of the Component table. - - - - - Local only - Component cannot be run from source. - -

- Set this value for all components belonging to a feature to prevent the feature from being run-from-network or - run-from-source. Note that if a feature has no components, the feature always shows run-from-source and - run-from-my-computer as valid options. -

-
- - - Component can only be run from source. - -

- Set this bit for all components belonging to a feature to prevent the feature from being run-from-my-computer. - Note that if a feature has no components, the feature always shows run-from-source and run-from-my-computer - as valid options. -

-
- - - Component can run locally or from source. - - - - - If this bit is set, the value in the KeyPath column is used as a key into the Registry table. - -

- If the Value field of the corresponding record in the Registry table is null, the Name field in that record - must not contain "+", "-", or "*". For more information, see the description of the Name field in Registry - table. -

Setting this bit is recommended for registry entries written to the HKCU hive. This ensures the installer - writes the necessary HKCU registry entries when there are multiple users on the same machine.

-

-
- - - If this bit is set, the installer increments the reference count in the shared DLL registry of the component's - key file. If this bit is not set, the installer increments the reference count only if the reference count - already exists. - - - - - If this bit is set, the installer does not remove the component during an uninstall. The installer registers - an extra system client for the component in the Windows Installer registry settings. - - - - - If this bit is set, the value in the KeyPath column is a key into the ODBCDataSource table. - - - - - If this bit is set, the installer reevaluates the value of the statement in the Condition column upon a reinstall. - If the value was previously False and has changed to true, the installer installs the component. If the value - was previously true and has changed to false, the installer removes the component even if the component has - other products as clients. - - - - - If this bit is set, the installer does not install or reinstall the component if a key path file or a key path - registry entry for the component already exists. The application does register itself as a client of the component. - -

- Use this flag only for components that are being registered by the Registry table. Do not use this flag for - components registered by the AppId, Class, Extension, ProgId, MIME, and Verb tables. -

-
- - - Set this bit to mark this as a 64-bit component. This attribute facilitates the installation of packages that - include both 32-bit and 64-bit components. If this bit is not set, the component is registered as a 32-bit component. - -

- If this is a 64-bit component replacing a 32-bit component, set this bit and assign a new GUID in the - ComponentId column. -

-
- - - Set this bit to disable registry reflection on all existing and new registry keys affected by this component. - -

- If this bit is set, the Windows Installer calls the RegDisableReflectionKey on each key being accessed by the component. - This bit is available with Windows Installer version 4.0 and is ignored on 32-bit systems. -

-
- - - [MSI 4.5] Set this bit for a component in a patch package to prevent leaving orphan components on the computer. - -

- If a subsequent patch is installed, marked with the SupersedeEarlier flag in its MsiPatchSequence - table to supersede the first patch, Windows Installer 4.5 can unregister and uninstall components marked with the - UninstallOnSupersedence value. If the component is not marked with this bit, installation of a superseding patch can leave - behind an unused component on the computer. -

-
- - - [MSI 4.5] If a component is marked with this attribute value in at least one package installed on the system, - the installer treats the component as marked in all packages. If a package that shares the marked component - is uninstalled, Windows Installer 4.5 can continue to share the highest version of the component on the system, - even if that highest version was installed by the package that is being uninstalled. - - - - - Defines flags for the Attributes column of the Control table. - - - - If this bit is set, the control is visible on the dialog box. - - - specifies if the given control is enabled or disabled. Most controls appear gray when disabled. - - - If this bit is set, the control is displayed with a sunken, three dimensional look. - - - The Indirect control attribute specifies whether the value displayed or changed by this control is referenced indirectly. - - - If this bit is set on a control, the associated property specified in the Property column of the Control table is an integer. - - - If this bit is set the text in the control is displayed in a right-to-left reading order. - - - If this style bit is set, text in the control is aligned to the right. - - - If this bit is set, the scroll bar is located on the left side of the control, otherwise it is on the right. - - - This is a combination of the RightToLeftReadingOrder, RightAligned, and LeftScroll attributes. - - - If this bit is set on a text control, the control is displayed transparently with the background showing through the control where there are no characters. - - - If this bit is set on a text control, the occurrence of the character "&" in a text string is displayed as itself. - - - If this bit is set the text in the control is displayed on a single line. - - - If this bit is set for a text control, the control will automatically attempt to format the displayed text as a number representing a count of bytes. - - - If this bit is set, fonts are created using the user's default UI code page. Otherwise it is created using the database code page. - - - If this bit is set on an Edit control, the installer creates a multiple line edit control with a vertical scroll bar. - - - This attribute creates an edit control for entering passwords. The control displays each character as an asterisk (*) as they are typed into the control. - - - If this bit is set on a ProgressBar control, the bar is drawn as a series of small rectangles in Microsoft Windows 95-style. Otherwise it is drawn as a single continuous rectangle. - - - If this bit is set, the control shows removable volumes. - - - If this bit is set, the control shows fixed internal hard drives. - - - If this bit is set, the control shows remote volumes. - - - If this bit is set, the control shows CD-ROM volumes. - - - If this bit is set, the control shows RAM disk volumes. - - - If this bit is set, the control shows floppy volumes. - - - Specifies whether or not the rollback backup files are included in the costs displayed by the VolumeCostList control. - - - If this bit is set, the items listed in the control are displayed in a specified order. Otherwise, items are displayed in alphabetical order. - - - If this bit is set on a combo box, the edit field is replaced by a static text field. This prevents a user from entering a new value and requires the user to choose only one of the predefined values. - - - If this bit is set on a check box or a radio button group, the button is drawn with the appearance of a push button, but its logic stays the same. - - - If this bit is set, the text in the control is replaced by a bitmap image. The Text column in the Control table is a foreign key into the Binary table. - - - If this bit is set, text is replaced by an icon image and the Text column in the Control table is a foreign key into the Binary table. - - - If this bit is set, the picture is cropped or centered in the control without changing its shape or size. - - - Specifies which size of the icon image to load. If none of the bits are set, the first image is loaded. - - - Specifies which size of the icon image to load. If none of the bits are set, the first image is loaded. - - - Specifies which size of the icon image to load. If none of the bits are set, the first image is loaded. - - - If this bit is set, and the installation is not yet running with elevated privileges, the control is created with a UAC icon. - - - If this bit is set, the RadioButtonGroup has text and a border displayed around it. - - - - Defines flags for the Type column of the CustomAction table. - - - - Unspecified custom action type. - - - Target = entry point name - - - Target = command line args - - - Target = text string to be formatted and set into property - - - Target = entry point name, null if none to call - - - Target = entry point name, null if none to call - - - Target = property list for nested engine initialization - - - Source = File.File, file part of installation - - - Source = Directory.Directory, folder containing existing file - - - Source = Property.Property, full path to executable - - - Ignore action return status, continue running - - - Run asynchronously - - - Skip if UI sequence already run - - - Skip if UI sequence already run in same process - - - Run on client only if UI already run on client - - - Queue for execution within script - - - In conjunction with InScript: queue in Rollback script - - - In conjunction with InScript: run Commit ops from script on success - - - No impersonation, run in system context - - - Impersonate for per-machine installs on TS machines - - - Script requires 64bit process - - - Don't record the contents of the Target field in the log file - - - The custom action runs only when a patch is being uninstalled - - - - Defines flags for the Attributes column of the Dialog table. - - - - If this bit is set, the dialog is originally created as visible, otherwise it is hidden. - - - If this bit is set, the dialog box is modal, other dialogs of the same application cannot be put on top of it, and the dialog keeps the control while it is running. - - - If this bit is set, the dialog box can be minimized. This bit is ignored for modal dialog boxes, which cannot be minimized. - - - If this style bit is set, the dialog box will stop all other applications and no other applications can take the focus. - - - If this bit is set, the other dialogs stay alive when this dialog box is created. - - - If this bit is set, the dialog box periodically calls the installer. If the property changes, it notifies the controls on the dialog. - - - If this bit is set, the pictures on the dialog box are created with the custom palette (one per dialog received from the first control created). - - - If this style bit is set the text in the dialog box is displayed in right-to-left-reading order. - - - If this style bit is set, the text is aligned on the right side of the dialog box. - - - If this style bit is set, the scroll bar is located on the left side of the dialog box. - - - This is a combination of the RightToLeftReadingOrder, RightAligned, and the LeftScroll dialog style bits. - - - If this bit is set, the dialog box is an error dialog. - - - - Available values for the Attributes column of the Feature table. - - - - - Favor local - Components of this feature that are not marked for installation from source are installed locally. - -

- A component shared by two or more features, some of which are set to FavorLocal and some to FavorSource, - is installed locally. Components marked in the Component - table are always run from the source CD/server. The bits FavorLocal and FavorSource work with features not - listed by the ADVERTISE property. -

-
- - - Components of this feature not marked for local installation are installed to run from the source - CD-ROM or server. - -

- A component shared by two or more features, some of which are set to FavorLocal and some to FavorSource, - is installed to run locally. Components marked (local-only) in the - Component table are always installed locally. The bits FavorLocal and FavorSource work with features - not listed by the ADVERTISE property. -

-
- - - Set this attribute and the state of the feature is the same as the state of the feature's parent. - You cannot use this option if the feature is located at the root of a feature tree. - -

- Omit this attribute and the feature state is determined according to DisallowAdvertise and - FavorLocal and FavorSource. -

To guarantee that the child feature's state always follows the state of its parent, even when the - child and parent are initially set to absent in the SelectionTree control, you must include both - FollowParent and UIDisallowAbsent in the attributes of the child feature.

-

Note that if you set FollowParent without setting UIDisallowAbsent, the installer cannot force - the child feature out of the absent state. In this case, the child feature matches the parent's - installation state only if the child is set to something other than absent.

-

Set FollowParent and UIDisallowAbsent to ensure a child feature follows the state of the parent feature.

-

-
- - - Set this attribute and the feature state is Advertise. - -

- If the feature is listed by the ADDDEFAULT property this bit is ignored and the feature state is determined - according to FavorLocal and FavorSource. -

Omit this attribute and the feature state is determined according to DisallowAdvertise and FavorLocal - and FavorSource.

-

-
- - - Set this attribute to prevent the feature from being advertised. - -

- Note that this bit works only with features that are listed by the ADVERTISE property. -

Set this attribute and if the listed feature is not a parent or child, the feature is installed according to - FavorLocal and FavorSource.

-

Set this attribute for the parent of a listed feature and the parent is installed.

-

Set this attribute for the child of a listed feature and the state of the child is Absent.

-

Omit this attribute and if the listed feature is not a parent or child, the feature state is Advertise.

-

Omit this attribute and if the listed feature is a parent or child, the state of both features is Advertise.

-

-
- - - Set this attribute and the user interface does not display an option to change the feature state - to Absent. Setting this attribute forces the feature to the installation state, whether or not the - feature is visible in the UI. - -

- Omit this attribute and the user interface displays an option to change the feature state to Absent. -

Set FollowParent and UIDisallowAbsent to ensure a child feature follows the state of the parent feature.

-

Setting this attribute not only affects the UI, but also forces the feature to the install state whether - the feature is visible in the UI or not.

-

-
- - - Set this attribute and advertising is disabled for the feature if the operating system shell does not - support Windows Installer descriptors. - - - - - Available values for the Attributes column of the File table. - - - - No attributes. - - - Read-only. - - - Hidden. - - - System. - - - The file is vital for the proper operation of the component to which it belongs. - - - The file contains a valid checksum. A checksum is required to repair a file that has become corrupted. - - - This bit must only be added by a patch and if the file is being added by the patch. - - - - The file's source type is uncompressed. If set, ignore the WordCount summary information property. If neither - Noncompressed nor Compressed are set, the compression state of the file is specified by the WordCount summary - information property. Do not set both Noncompressed and Compressed. - - - - - The file's source type is compressed. If set, ignore the WordCount summary information property. If neither - Noncompressed or Compressed are set, the compression state of the file is specified by the WordCount summary - information property. Do not set both Noncompressed and Compressed. - - - - - Defines values for the Action column of the IniFile and RemoveIniFile tables. - - - - Creates or updates a .ini entry. - - - Creates a .ini entry only if the entry does not already exist. - - - Deletes .ini entry. - - - Creates a new entry or appends a new comma-separated value to an existing entry. - - - Deletes a tag from a .ini entry. - - - - Defines values for the Type column of the CompLocator, IniLocator, and RegLocator tables. - - - - Key path is a directory. - - - Key path is a file name. - - - Key path is a registry value. - - - Set this bit to have the installer search the 64-bit portion of the registry. - - - - Defines values for the Root column of the Registry, RemoveRegistry, and RegLocator tables. - - - - HKEY_CURRENT_USER for a per-user installation, - or HKEY_LOCAL_MACHINE for a per-machine installation. - - - HKEY_CLASSES_ROOT - - - HKEY_CURRENT_USER - - - HKEY_LOCAL_MACHINE - - - HKEY_USERS - - - - Defines values for the InstallMode column of the RemoveFile table. - - - - Never remove. - - - Remove when the associated component is being installed (install state = local or source). - - - Remove when the associated component is being removed (install state = absent). - - - - Defines values for the ServiceType, StartType, and ErrorControl columns of the ServiceInstall table. - - - - No flags. - - - A Win32 service that runs its own process. - - - A Win32 service that shares a process. - - - A Win32 service that interacts with the desktop. - This value cannot be used alone and must be added to either - or . - - - Service starts during startup of the system. - - - Service starts when the service control manager calls the StartService function. - - - Specifies a service that can no longer be started. - - - Logs the error, displays a message box and continues the startup operation. - - - Logs the error if it is possible and the system is restarted with the last configuration - known to be good. If the last-known-good configuration is being started, the startup operation fails. - - - When combined with other error flags, specifies that the overall install should fail if - the service cannot be installed into the system. - - - - Defines values for the Event column of the ServiceControl table. - - - - No control events. - - - During an install, starts the service during the StartServices action. - - - During an install, stops the service during the StopServices action. - - - During an install, deletes the service during the DeleteServices action. - - - During an uninstall, starts the service during the StartServices action. - - - During an uninstall, stops the service during the StopServices action. - - - During an uninstall, deletes the service during the DeleteServices action. - - - - Defines values for the StyleBits column of the TextStyle table. - - - - Bold - - - Italic - - - Underline - - - Strike out - - - - Defines values for the Attributes column of the Upgrade table. - - - - Migrates feature states by enabling the logic in the MigrateFeatureStates action. - - - Detects products and applications but does not remove. - - - Continues installation upon failure to remove a product or application. - - - Detects the range of versions including the value in VersionMin. - - - Dectects the range of versions including the value in VersionMax. - - - Detects all languages, excluding the languages listed in the Language column. - - - - Defines a single column of a table in an installer database. - - Once created, a ColumnInfo object is immutable. - - - - Creates a new ColumnInfo object from a column definition. - - name of the column - column definition string - - - - - Creates a new ColumnInfo object from a list of parameters. - - name of the column - type of the column; must be one of the following: - Int16, Int32, String, or Stream - the maximum number of characters for String columns; - ignored for other column types - true if the column is required to have a non-null value - - - - Creates a new ColumnInfo object from a list of parameters. - - name of the column - type of the column; must be one of the following: - Int16, Int32, String, or Stream - the maximum number of characters for String columns; - ignored for other column types - true if the column is required to have a non-null value - true to if the column is only in-memory and - not persisted with the database - for String columns, indicates the column - is localizable; ignored for other column types - - - - Gets the name of the column. - - Name of the column. - - - - Gets the name of the column. - - name of the column - - - - Gets the type of the column as a System.Type. This is one of the following: Int16, Int32, String, or Stream - - type of the column - - - - Gets the type of the column as an integer that can be cast to a System.Data.DbType. This is one of the following: Int16, Int32, String, or Binary - - equivalent DbType of the column as an integer - - - - Gets the size of the column. - - The size of integer columns this is either 2 or 4. For string columns this is the maximum - recommended length of the string, or 0 for unlimited length. For stream columns, 0 is returned. - - - - Gets a value indicating whether the column must be non-null when inserting a record. - - required status of the column - - - - Gets a value indicating whether the column is temporary. Temporary columns are not persisted - when the database is saved to disk. - - temporary status of the column - - - - Gets a value indicating whether the column is a string column that is localizable. - - localizable status of the column - - - - Gets an SQL fragment that can be used to create this column within a CREATE TABLE statement. - - SQL fragment to be used for creating the column -

- Examples: - - LONG - SHORT TEMPORARY - CHAR(0) LOCALIZABLE - CHAR(72) NOT NULL LOCALIZABLE - OBJECT - -

-
- - - Gets a short string defining the type and size of the column. - - - The definition string consists - of a single letter representing the data type followed by the width of the column (in characters - when applicable, bytes otherwise). A width of zero designates an unbounded width (for example, - long text fields and streams). An uppercase letter indicates that null values are allowed in - the column. - -

- - s? - String, variable length (?=1-255) - s0 - String, variable length - i2 - Short integer - i4 - Long integer - v0 - Binary Stream - g? - Temporary string (?=0-255) - j? - Temporary integer (?=0,1,2,4) - l? - Localizable string, variable length (?=1-255) - l0 - Localizable string, variable length - -

-
- - - Accessor for information about components within the context of an installation session. - - - - - Checks if the collection contains a component. - - name of the component - true if the component is in the collection, else false - - - - Copies the features into an array. - - array that receives the features - offset into the array - - - - Enumerates the components in the collection. - - an enumerator over all features in the collection - - - - Gets information about a component within the context of an installation session. - - name of the component - component object - - - - Gets the number of components defined for the product. - - - - - Provides access to information about a component within the context of an installation session. - - - - - Gets disk space per drive required to install a component. - - Requested component state - A list of InstallCost structures, specifying the cost for each drive for the component -
- - - - Gets the name of the component (primary key in the Component table). - - - - - Gets the current install state of the designated Component. - - the Session handle is invalid - an unknown Component was requested -

- Win32 MSI API: - MsiGetComponentState -

-
- - - Gets or sets the action state of the designated Component. - - the Session handle is invalid - an unknown Component was requested - the user exited the installation -

- Win32 MSI APIs: - MsiGetComponentState, - MsiSetComponentState -

-
- - - Represents an instance of a registered component. - - - - - Subclasses of this abstract class represent an instance - of a registered feature or component. - - - - - Gets the product that this item is a part of. - - - - - Gets the current installation state of the item. - - - - - Creates a new ComponentInstallation, automatically detecting the - product that the component is a part of. - - component GUID -

- Win32 MSI API: - MsiGetProductCode -

-
- - - Creates a new ComponentInstallation for a component installed by a - specific product. - - component GUID - ProductCode GUID - - - - Gets the set of installed components for all products. - - The installer configuration data is corrupt -

- Win32 MSI API: - MsiEnumComponents -

-
- - - Gets the component code (GUID) of the component. - - - - - Gets all client products of a specified component. - - enumeration over all client products of the component - The installer configuration data is corrupt -

- Because clients are not ordered, any new component has an arbitrary index. - This means that the property may return clients in any order. -

- Win32 MSI API: - MsiEnumClients -

-
- - - Gets the installed state of a component. - - the installed state of the component, or InstallState.Unknown - if this component is not part of a product -

- Win32 MSI API: - MsiGetComponentPath -

-
- - - Gets the full path to an installed component. If the key path for the component is a - registry key then the registry key is returned. - - The file or registry keypath to the component, or null if the component is not available. - An unknown product or component was specified - The installer configuration data is corrupt -

- If the component is a registry key, the registry roots are represented numerically. - For example, a registry path of "HKEY_CURRENT_USER\SOFTWARE\Microsoft" would be returned - as "01:\SOFTWARE\Microsoft". The registry roots returned are defined as follows: - HKEY_CLASSES_ROOT=00, HKEY_CURRENT_USER=01, HKEY_LOCAL_MACHINE=02, HKEY_USERS=03, - HKEY_PERFORMANCE_DATA=04 -

- Win32 MSI APIs: - MsiGetComponentPath, - MsiLocateComponent -

-
- - - Gets the set of registered qualifiers for the component. - - Enumeration of the qulifiers for the component. - The installer configuration data is corrupt -

- Because qualifiers are not ordered, any new qualifier has an arbitrary index, - meaning the function can return qualifiers in any order. -

- Win32 MSI API: - MsiEnumComponentQualifiers -

-
- - - Holds data about a component qualifier. - -

- Win32 MSI API: - MsiEnumComponentQualifiers -

-
- - - Gets the qualifier code. - - - - - Gets the qualifier data. - - - - - Marks a method as a custom action entry point. - -

- A custom action method must be defined as public and static, - take a single object as a parameter, - and return an enumeration value. -

-
- - - Name of the custom action entrypoint, or null if the same as the method name. - - - - - Marks a method as a custom action entry point. - - - - - Marks a method as a custom action entry point. - - Name of the function to be exported, - defaults to the name of this method - - - - Gets or sets the name of the custom action entrypoint. A null - value defaults to the name of the method. - - name of the custom action entrypoint, or null if none was specified - - - - Contains a collection of key-value pairs suitable for passing between - immediate and deferred/rollback/commit custom actions. - - - Call the method to get a string - suitable for storing in a property and reconstructing the custom action data later. - - - - - - - "CustomActionData" literal property name. - - - - - Creates a new empty custom action data object. - - - - - Reconstructs a custom action data object from data that was previously - persisted in a string. - - Previous output from . - - - - Adds a key and value to the data collection. - - Case-sensitive data key. - Data value (may be null). - the key does not consist solely of letters, - numbers, and the period, underscore, and space characters. - - - - Adds a value to the data collection, using XML serialization to persist the object as a string. - - Case-sensitive data key. - Data value (may be null). - the key does not consist solely of letters, - numbers, and the period, underscore, and space characters. - The value type does not support XML serialization. - The value could not be serialized. - - - - Gets a value from the data collection, using XML serialization to load the object from a string. - - Case-sensitive data key. - The value could not be deserialized. - - - - Determines whether the data contains an item with the specified key. - - Case-sensitive data key. - true if the data contains an item with the key; otherwise, false - - - - Removes the item with the specified key from the data. - - Case-sensitive data key. - true if the item was successfully removed from the data; - false if an item with the specified key was not found - - - - Gets the value with the specified key. - - Case-sensitive data key. - Value associated with the specified key, or - null if an item with the specified key was not found - true if the data contains an item with the specified key; otherwise, false. - - - - Adds an item with key and value to the data collection. - - Case-sensitive data key, with a data value that may be null. - the key does not consist solely of letters, - numbers, and the period, underscore, and space characters. - - - - Removes all items from the data. - - - - - Determines whether the data contains a specified item. - - The data item to locate. - true if the data contains the item; otherwise, false - - - - Copies the data to an array, starting at a particular array index. - - Destination array. - Index in the array at which copying begins. - - - - Removes an item from the data. - - The item to remove. - true if the item was successfully removed from the data; - false if the item was not found - - - - Returns an enumerator that iterates through the collection. - - An enumerator that can be used to iterate through the collection. - - - - Returns an enumerator that iterates through the collection. - - An enumerator that can be used to iterate through the collection. - - - - Gets a string representation of the data suitable for persisting in a property. - - Data string in the form "Key1=Value1;Key2=Value2" - - - - Ensures that a key contains valid characters. - - key to be validated - the key does not consist solely of letters, - numbers, and the period, underscore, and space characters. - - - - Serializes a value into an XML string. - - Type of the value. - Value to be serialized. - Serialized value data as a string. - - - - Deserializes a value from an XML string. - - Expected type of the value. - Serialized value data. - Deserialized value object. - - - - Escapes a value string by doubling any data-separator (semicolon) characters. - - - Escaped value string - - - - Unescapes a value string by undoubling any doubled data-separator (semicolon) characters. - - - Unescaped value string - - - - Loads key-value pairs from a string into the data collection. - - key-value pair list of the form returned by - - - - Gets a collection object containing all the keys of the data. - - - - - Gets a collection containing all the values of the data. - - - - - Gets or sets a data value with a specified key. - - Case-sensitive data key. - the key does not consist solely of letters, - numbers, and the period, underscore, and space characters. - - - - Gets the number of items in the data. - - - - - Gets a value indicating whether the data is read-only. - - - - - Managed-code portion of the custom action proxy. - - - - - Invokes a managed custom action method. - - Integer handle to the installer session. - Name of the custom action entrypoint. This must - either map to an entrypoint definition in the customActions - config section, or be an explicit entrypoint of the form: - "AssemblyName!Namespace.Class.Method" - Pointer to a delegate used to - make remote API calls, if this custom action is running out-of-proc. - The value returned by the custom action method, - or ERROR_INSTALL_FAILURE if the custom action could not be invoked. - - - - Checks the "MMsiBreak" environment variable for any matching custom action names. - - List of names to search for in the environment - variable string. - True if a match was found, else false. - - - - Locates and parses an entrypoint mapping in CustomAction.config. - - Installer session handle, just used for logging. - Custom action entrypoint name: the key value - in an item in the customActions section of the config file. - Returned display name of the assembly from - the entrypoint mapping. - Returned class name of the entrypoint mapping. - Returned method name of the entrypoint mapping. - True if the entrypoint was found, false if not or if some error - occurred. - - - - Uses reflection to load the assembly and class and find the method. - - Installer session handle, just used for logging. - Display name of the assembly containing the - custom action method. - Fully-qualified name of the class containing the - custom action method. - Name of the custom action method. - The method, or null if not found. - - - - Checks if a method has the right return and paramater types - for a custom action, and that it is marked by a CustomActionAttribute. - - Method to be checked. - True if the method is a valid custom action, else false. - - - - Accesses a Windows Installer database. - -

- The method must be called before the Database is closed to write out all - persistent changes. If the Commit method is not called, the installer performs an implicit - rollback upon object destruction. -

- The client can use the following procedure for data access: - Obtain a Database object using one of the Database constructors. - Initiate a query using a SQL string by calling the - method of the Database. - Set query parameters in a and execute the database - query by calling the method of the . This - produces a result that can be fetched or updated. - Call the method of the View repeatedly to return - Records. - Update database rows of a Record object obtained by the Fetch method using - one of the methods of the View. - Release the query and any unfetched records by calling the - method of the View. - Persist any database updates by calling the Commit method of the Database. - - -

-
- - - Base class for Windows Installer handle types (Database, View, Record, SummaryInfo). - -

- These classes implement the interface, because they - hold unmanaged resources (MSI handles) that should be properly disposed - when no longer needed. -

-
- - - Constructs a handle object from a native integer handle. - - Native integer handle. - true to close the handle when this object is disposed or finalized - - - - Closes the handle. After closing a handle, further method calls may throw an . - -

- The finalizer of this class will NOT close the handle if it is still open, - because finalization can run on a separate thread from the application, - resulting in potential problems if handles are closed from that thread. - It is best that the handle be closed manually as soon as it is no longer needed, - as leaving lots of unused handles open can degrade performance. -

- Win32 MSI API: - MsiCloseHandle -

- -
- - - Closes the handle. After closing a handle, further method calls may throw an . - -

- The finalizer of this class will NOT close the handle if it is still open, - because finalization can run on a separate thread from the application, - resulting in potential problems if handles are closed from that thread. - It is best that the handle be closed manually as soon as it is no longer needed, - as leaving lots of unused handles open can degrade performance. -

- This method is merely an alias for the method. -

- Win32 MSI API: - MsiCloseHandle -

-
- - - Tests whether this handle object is equal to another handle object. Two handle objects are equal - if their types are the same and their native integer handles are the same. - - The handle object to compare with the current handle object. - true if the specified handle object is equal to the current handle object; otherwise false - - - - Gets a hash value for the handle object. - - A hash code for the handle object. -

- The hash code is derived from the native integer handle. -

-
- - - Closes the handle. After closing a handle, further method calls may throw an . - - If true, the method has been called directly or indirectly by a user's code, - so managed and unmanaged resources will be disposed. If false, the method has been called by the - runtime from inside the finalizer, and only unmanaged resources will be disposed. - - - - Gets the native integer handle. - - - - - Checks if the handle is closed. When closed, method calls on the handle object may throw an . - - - - - Gets an object that can be used internally for safe syncronization. - - - - - Opens an existing database in read-only mode. - - Path to the database file. - the database could not be created/opened -

- Because this constructor initiates database access, it cannot be used with a - running installation. -

- The Database object should be d after use. - It is best that the handle be closed manually as soon as it is no longer - needed, as leaving lots of unused handles open can degrade performance. -

- Win32 MSI API: - MsiOpenDatabase -

-
- - - Opens an existing database with another database as output. - - Path to the database to be read. - Open mode for the database - Database object representing the created or opened database - the database could not be created/opened -

- When a database is opened as the output of another database, the summary information stream - of the output database is actually a read-only mirror of the original database and thus cannot - be changed. Additionally, it is not persisted with the database. To create or modify the - summary information for the output database it must be closed and re-opened. -

- The Database object should be d after use. - It is best that the handle be closed manually as soon as it is no longer - needed, as leaving lots of unused handles open can degrade performance. -

- The database is opened in mode, and will be - automatically commited when it is closed. -

- Win32 MSI API: - MsiOpenDatabase -

-
- - - Opens an existing database or creates a new one. - - Path to the database file. If an empty string - is supplied, a temporary database is created that is not persisted. - Open mode for the database - the database could not be created/opened -

- Because this constructor initiates database access, it cannot be used with a - running installation. -

- The database object should be d after use. - The finalizer will close the handle if it is still open, however due to the nondeterministic - nature of finalization it is best that the handle be closed manually as soon as it is no - longer needed, as leaving lots of unused handles open can degrade performance. -

- A database opened in or - mode will be automatically commited when it is - closed. However a database opened in or - mode must have the method - called before it is closed, otherwise no changes will be persisted. -

- Win32 MSI API: - MsiOpenDatabase -

-
- - - Creates a new database from an MSI handle. - - Native MSI database handle. - True if the handle should be closed - when the database object is disposed - Path of the database file, if known - Mode the handle was originally opened in - - - - Creates a new Database object from an integer database handle. - -

- This method is only provided for interop purposes. A Database object - should normally be obtained from or - a public Database constructor. -

- Integer database handle - true to close the handle when this object is disposed -
- - - Schedules a file or directory for deletion after the database handle is closed. - - File or directory path to be deleted. All files and subdirectories - under a directory are deleted. -

- Once an item is scheduled, it cannot be unscheduled. -

- The items cannot be deleted if the Database object is auto-disposed by the - garbage collector; the handle must be explicitly closed. -

- Files which are read-only or otherwise locked cannot be deleted, - but they will not cause an exception to be thrown. -

-
- - - Merges another database with this database. - - The database to be merged into this database - Optional name of table to contain the names of the tables containing - merge conflicts, the number of conflicting rows within the table, and a reference to the table - with the merge conflict. - merge failed due to a schema difference or data conflict - the Database handle is invalid -

- Merge does not copy over embedded cabinet files or embedded transforms from the - reference database into the target database. Embedded data streams that are listed in the - Binary table or Icon table are copied from the reference database to the target database. - Storage embedded in the reference database are not copied to the target database. -

- The Merge method merges the data of two databases. These databases must have the same - codepage. The merge fails if any tables or rows in the databases conflict. A conflict exists - if the data in any row in the first database differs from the data in the corresponding row - of the second database. Corresponding rows are in the same table of both databases and have - the same primary key in both databases. The tables of non-conflicting databases must have - the same number of primary keys, same number of columns, same column types, same column names, - and the same data in rows with identical primary keys. Temporary columns however don't matter - in the column count and corresponding tables can have a different number of temporary columns - without creating conflict as long as the persistent columns match. -

- If the number, type, or name of columns in corresponding tables are different, the - schema of the two databases are incompatible and the installer will stop processing tables - and the merge fails. The installer checks that the two databases have the same schema before - checking for row merge conflicts. If the schemas are incompatible, the databases have be - modified. -

- If the data in particular rows differ, this is a row merge conflict, the merge fails - and creates a new table with the specified name. The first column of this table is the name - of the table having the conflict. The second column gives the number of rows in the table - having the conflict. -

- Win32 MSI API: - MsiDatabaseMerge -

-
- - - Merges another database with this database. - - The database to be merged into this database - merge failed due to a schema difference or data conflict - the Database handle is invalid -

- MsiDatabaseMerge does not copy over embedded cabinet files or embedded transforms from - the reference database into the target database. Embedded data streams that are listed in - the Binary table or Icon table are copied from the reference database to the target database. - Storage embedded in the reference database are not copied to the target database. -

- The Merge method merges the data of two databases. These databases must have the same - codepage. The merge fails if any tables or rows in the databases conflict. A conflict exists - if the data in any row in the first database differs from the data in the corresponding row - of the second database. Corresponding rows are in the same table of both databases and have - the same primary key in both databases. The tables of non-conflicting databases must have - the same number of primary keys, same number of columns, same column types, same column names, - and the same data in rows with identical primary keys. Temporary columns however don't matter - in the column count and corresponding tables can have a different number of temporary columns - without creating conflict as long as the persistent columns match. -

- If the number, type, or name of columns in corresponding tables are different, the - schema of the two databases are incompatible and the installer will stop processing tables - and the merge fails. The installer checks that the two databases have the same schema before - checking for row merge conflicts. If the schemas are incompatible, the databases have be - modified. -

- Win32 MSI API: - MsiDatabaseMerge -

-
- - - Checks whether a table exists and is persistent in the database. - - The table to the checked - true if the table exists and is persistent in the database; false otherwise - the table is unknown - the Database handle is invalid -

- To check whether a table exists regardless of persistence, - use . -

- Win32 MSI API: - MsiDatabaseIsTablePersistent -

-
- - - Checks whether a table contains a persistent column with a given name. - - The table to the checked - The name of the column to be checked - true if the column exists in the table; false if the column is temporary or does not exist. - the View could not be executed - the Database handle is invalid -

- To check whether a column exists regardless of persistence, - use . -

-
- - - Gets the count of all rows in the table. - - Name of the table whose rows are to be counted - The count of all rows in the table - the View could not be executed - the Database handle is invalid - - - - Gets the count of all rows in the table that satisfy a given condition. - - Name of the table whose rows are to be counted - Conditional expression, such as could be placed on the end of a SQL WHERE clause - The count of all rows in the table satisfying the condition - the SQL WHERE syntax is invalid - the View could not be executed - the Database handle is invalid - - - - Finalizes the persistent form of the database. All persistent data is written - to the writeable database, and no temporary columns or rows are written. - - the Database handle is invalid -

- For a database open in mode, this method has no effect. -

- For a database open in or - mode, it is not necessary to call this method because the database will be automatically committed - when it is closed. However this method may be called at any time to persist the current state of tables - loaded into memory. -

- For a database open in or - mode, no changes will be persisted until this method is called. If the database object is closed without - calling this method, the database file remains unmodified. -

- Win32 MSI API: - MsiDatabaseCommit -

-
- - - Copies the structure and data from a specified table to a text archive file. - - Name of the table to be exported - Path to the file to be created - the file path is invalid - the Database handle is invalid -

- Win32 MSI API: - MsiDatabaseExport -

-
- - - Imports a database table from a text archive file, dropping any existing table. - - Path to the file to be imported. - The table name is specified within the file. - the file path is invalid - the Database handle is invalid -

- Win32 MSI API: - MsiDatabaseImport -

-
- - - Exports all database tables, streams, and summary information to archive files. - - Path to the directory where archive files will be created - the directory path is invalid - the Database handle is invalid -

- The directory will be created if it does not already exist. -

- Win32 MSI API: - MsiDatabaseExport -

-
- - - Imports all database tables, streams, and summary information from archive files. - - Path to the directory from which archive files will be imported - the directory path is invalid - the Database handle is invalid -

- Win32 MSI API: - MsiDatabaseImport -

-
- - - Creates a new record object with the requested number of fields. - - Required number of fields, which may be 0. - The maximum number of fields in a record is limited to 65535. - A new record object that can be used with the database. -

- This method is equivalent to directly calling the - constructor in all cases outside of a custom action context. When in a - custom action session, this method allows creation of a record that can - work with a database other than the session database. -

- The Record object should be d after use. - It is best that the handle be closed manually as soon as it is no longer - needed, as leaving lots of unused handles open can degrade performance. -

- Win32 MSI API: - MsiCreateRecord -

-
- - - Returns the file path of this database, or the handle value if a file path was not specified. - - - - - Closes the database handle. After closing a handle, further method calls may throw . - - If true, the method has been called directly or - indirectly by a user's code, so managed and unmanaged resources will be - disposed. If false, only unmanaged resources will be disposed. - - - - Gets a View object representing the query specified by a SQL string. - - SQL query string, which may contain format items - Zero or more objects to format - A View object representing the query specified by a SQL string - the SQL syntax is invalid - the Database handle is invalid -

- The parameter is formatted using . -

- The View object should be d after use. - It is best that the handle be closed manually as soon as it is no longer - needed, as leaving lots of unused handles open can degrade performance. -

- Win32 MSI API: - MsiDatabaseOpenView -

-
- - - Executes the query specified by a SQL string. The query may not be a SELECT statement. - - SQL query string, which may contain format items - Zero or more objects to format - the SQL syntax is invalid - the View could not be executed - the Database handle is invalid -

- The parameter is formatted using - . -

- Win32 MSI APIs: - MsiDatabaseOpenView, - MsiViewExecute -

-
- - - Executes the query specified by a SQL string. The query may not be a SELECT statement. - - SQL query string - Optional Record object containing the values that replace - the parameter tokens (?) in the SQL query. - the SQL syntax is invalid - the View could not be executed - the Database handle is invalid -

- Win32 MSI APIs: - MsiDatabaseOpenView, - MsiViewExecute -

-
- - - Executes the specified SQL SELECT query and returns all results. - - SQL query string, which may contain format items - Zero or more objects to format - All results combined into an array - the SQL syntax is invalid - the View could not be executed - the Database handle is invalid -

- The parameter is formatted using - . -

- Multiple rows columns will be collapsed into a single one-dimensional list. -

- Win32 MSI APIs: - MsiDatabaseOpenView, - MsiViewExecute, - MsiViewFetch -

-
- - - Executes the specified SQL SELECT query and returns all results. - - SQL SELECT query string - Optional Record object containing the values that replace - the parameter tokens (?) in the SQL query. - All results combined into an array - the SQL syntax is invalid - the View could not be executed - the Database handle is invalid -

- Multiple rows columns will be collapsed into a single one-dimensional list. -

- Win32 MSI APIs: - MsiDatabaseOpenView, - MsiViewExecute, - MsiViewFetch -

-
- - - Executes the specified SQL SELECT query and returns all results as integers. - - SQL query string, which may contain format items - Zero or more objects to format - All results combined into an array - the SQL syntax is invalid - the View could not be executed - the Database handle is invalid -

- The parameter is formatted using - . -

- Multiple rows columns will be collapsed into a single one-dimensional list. -

- Win32 MSI APIs: - MsiDatabaseOpenView, - MsiViewExecute, - MsiViewFetch -

-
- - - Executes the specified SQL SELECT query and returns all results as integers. - - SQL SELECT query string - Optional Record object containing the values that replace - the parameter tokens (?) in the SQL query. - All results combined into an array - the SQL syntax is invalid - the View could not be executed - the Database handle is invalid -

- Multiple rows columns will be collapsed into a single one-dimensional list. -

- Win32 MSI APIs: - MsiDatabaseOpenView, - MsiViewExecute, - MsiViewFetch -

-
- - - Executes the specified SQL SELECT query and returns all results as strings. - - SQL query string, which may contain format items - Zero or more objects to format - All results combined into an array - the SQL syntax is invalid - the View could not be executed - the Database handle is invalid -

- The parameter is formatted using - . -

- Multiple rows columns will be collapsed into a single on-dimensional list. -

- Win32 MSI APIs: - MsiDatabaseOpenView, - MsiViewExecute, - MsiViewFetch -

-
- - - Executes the specified SQL SELECT query and returns all results as strings. - - SQL SELECT query string - Optional Record object containing the values that replace - the parameter tokens (?) in the SQL query. - All results combined into an array - the SQL syntax is invalid - the View could not be executed - the Database handle is invalid -

- Multiple rows columns will be collapsed into a single on-dimensional list. -

- Win32 MSI APIs: - MsiDatabaseOpenView, - MsiViewExecute, - MsiViewFetch -

-
- - - Executes the specified SQL SELECT query and returns a single result. - - SQL query string, which may contain format items - Zero or more objects to format - First field of the first result - the SQL syntax is invalid - the View could not be executed - or the query returned 0 results - the Database handle is invalid -

- The parameter is formatted using - . -

- Win32 MSI APIs: - MsiDatabaseOpenView, - MsiViewExecute, - MsiViewFetch -

-
- - - Executes the specified SQL SELECT query and returns a single result. - - SQL SELECT query string - Optional Record object containing the values that replace - the parameter tokens (?) in the SQL query. - First field of the first result - the SQL syntax is invalid - the View could not be executed - or the query returned 0 results - the Database handle is invalid -

- Win32 MSI APIs: - MsiDatabaseOpenView, - MsiViewExecute, - MsiViewFetch -

-
- - - Creates a transform that, when applied to the object database, results in the reference database. - - Database that does not include the changes - Name of the generated transform file, or null to only - check whether or not the two database are identical - true if a transform is generated, or false if a transform is not generated - because there are no differences between the two databases. - the transform could not be generated - a Database handle is invalid -

- A transform can add non-primary key columns to the end of a table. A transform cannot - be created that adds primary key columns to a table. A transform cannot be created that - changes the order, names, or definitions of columns. -

- If the transform is to be applied during an installation you must use the - method to populate the - summary information stream. -

- Win32 MSI API: - MsiDatabaseGenerateTransform -

-
- - - Creates and populates the summary information stream of an existing transform file, and - fills in the properties with the base and reference ProductCode and ProductVersion. - - Database that does not include the changes - Name of the generated transform file - Error conditions that should be suppressed - when the transform is applied - Defines which properties should be validated - to verify that this transform can be applied to a database. - the transform summary info could not be - generated - a Database handle is invalid -

- Win32 MSI API: - MsiCreateTransformSummaryInfo -

-
- - - Apply a transform to the database, recording the changes in the "_TransformView" table. - - Path to the transform file - the transform could not be applied - the Database handle is invalid -

- Win32 MSI API: - MsiDatabaseApplyTransform -

-
- - - Apply a transform to the database, suppressing any error conditions - specified by the transform's summary information. - - Path to the transform file - the transform could not be applied - the Database handle is invalid -

- Win32 MSI API: - MsiDatabaseApplyTransform -

-
- - - Apply a transform to the database, specifying error conditions to suppress. - - Path to the transform file - Error conditions that are to be suppressed - the transform could not be applied - the Database handle is invalid -

- Win32 MSI API: - MsiDatabaseApplyTransform -

-
- - - Checks whether a transform is valid for this Database, according to its validation data and flags. - - Path to the transform file - true if the transform can be validly applied to this Database; false otherwise - the transform could not be applied - the Database handle is invalid - - - - Checks whether a transform is valid for this Database, according to its SummaryInfo data. - - SummaryInfo data of a transform file - true if the transform can be validly applied to this Database; false otherwise - error processing summary info - the Database or SummaryInfo handle is invalid - - - - Gets the file path the Database was originally opened from, or null if not known. - - - - - Gets the open mode for the database. - - - - - Gets a boolean value indicating whether this database was opened in read-only mode. - -

- Win32 MSI API: - MsiGetDatabaseState -

-
- - - Gets the collection of tables in the Database. - - - - - Gets or sets the code page of the Database. - - error exporting/importing the codepage data - the Database handle is invalid -

- Getting or setting the code page is a slow operation because it involves an export or import - of the codepage data to/from a temporary file. -

-
- - - Gets the SummaryInfo object for this database that can be used to examine and modify properties - to the summary information stream. - - the Database handle is invalid -

- The object returned from this property does not need to be explicitly persisted or closed. - Any modifications will be automatically saved when the database is committed. -

- Win32 MSI API: - MsiGetSummaryInformation -

-
- - - Managed-code portion of the embedded UI proxy. - - - - - Initializes managed embedded UI by loading the UI class and invoking its Initialize method. - - Integer handle to the installer session. - Name of the class that implements the embedded UI. This must - be of the form: "AssemblyName!Namespace.Class" - On entry, contains the current UI level for the installation. After this - method returns, the installer resets the UI level to the returned value of this parameter. - 0 if the embedded UI was successfully loaded and initialized, - ERROR_INSTALL_USEREXIT if the user canceled the installation during initialization, - or ERROR_INSTALL_FAILURE if the embedded UI could not be initialized. - - Due to interop limitations, the successful resulting UILevel is actually returned - as the high-word of the return value instead of via a ref parameter. - - - - - Passes a progress message to the UI class. - - Installer message type and message box options. - Handle to a record containing message data. - Return value returned by the UI class. - - - - Passes a shutdown message to the UI class. - - - - - Instantiates a UI class from a given assembly and class name. - - Installer session, for logging. - Name of the class that implements the embedded UI. This must - be of the form: "AssemblyName!Namespace.Class" - Interface on the UI class for handling UI messages. - - - - Specifies a return status value for custom actions. - - - - Action completed successfully. - - - Skip remaining actions, not an error. - - - User terminated prematurely. - - - Unrecoverable error or unhandled exception occurred. - - - Action not executed. - - - - Specifies the open mode for a . - - - - Open a database read-only, no persistent changes. - - - Open a database read/write in transaction mode. - - - Open a database direct read/write without transaction. - - - Create a new database, transact mode read/write. - - - Create a new database, direct mode read/write. - - - - Log modes available for - and . - - - - Disable logging. - - - Log out of memory or fatal exit information. - - - Log error messages. - - - Log warning messages. - - - Log user requests. - - - Log status messages that are not displayed. - - - Log request to determine a valid source location. - - - Log insufficient disk space error. - - - Log the start of installation actions. - - - Log the data record for installation actions. - - - Log parameters for user-interface initialization. - - - Log the property values at termination. - - - - Sends large amounts of information to log file not generally useful to users. - May be used for support. - - - - - Log extra debugging information. - - - - - Log only on error. - - - - - Log progress bar information. This message includes information on units so far and total number - of units. See for an explanation of the message format. This message - is only sent to an external user interface and is not logged. - - - - - If this is not a quiet installation, then the basic UI has been initialized. If this is a full - UI installation, the Full UI is not yet initialized. This message is only sent to an external - user interface and is not logged. - - - - - If a full UI is being used, the full UI has ended. If this is not a quiet installation, the basic - UI has not yet ended. This message is only sent to an external user interface and is not logged. - - - - - Sent prior to display of the Full UI dialog. This message is only sent to an external user - interface and is not logged. - - - - - List of files in use that need to be replaced. - - - - - [MSI 4.0] List of apps that the user can request Restart Manager to shut down and restart. - - - - - Type of message to be processed by , - , or . - - - - Premature termination, possibly fatal OOM. - - - Formatted error message. - - - Formatted warning message. - - - User request message. - - - Informative message for log. - - - List of files in use that need to be replaced. - - - Request to determine a valid source location. - - - Insufficient disk space message. - - - Start of action: action name & description. - - - Formatted data associated with individual action item. - - - Progress gauge info: units so far, total. - - - Product info for dialog: language Id, dialog caption. - - - Sent prior to UI initialization, no string data. - - - Sent after UI termination, no string data. - - - Sent prior to display or authored dialog or wizard. - - - [MSI 4.0] List of apps that the user can request Restart Manager to shut down and restart. - - - [MSI 4.5] Sent prior to install of a product. - - - [MSI 4.5] Sent after install of a product. - - - - Specifies the install mode for or . - - - - Provide the component only if the feature's installation state is . - - - Only check that the component is registered, without verifying that the key file of the component exists. - - - Provide the component only if the feature exists. - - - Provide the component and perform any installation necessary to provide the component. - - - - Specifies the run mode for . - - - - The administrative mode is installing, or the product is installing. - - - The advertisements are installing or the product is installing or updating. - - - An existing installation is being modified or there is a new installation. - - - Rollback is enabled. - - - The log file is active. It was enabled prior to the installation session. - - - Execute operations are spooling or they are in the determination phase. - - - A reboot is necessary after a successful installation (settable). - - - A reboot is necessary to continue the installation (settable). - - - Files from cabinets and Media table files are installing. - - - The source LongFileNames is suppressed through the PID_MSISOURCE summary property. - - - The target LongFileNames is suppressed through the SHORTFILENAMES property. - - - The operating system is Windows 95, Windows 98, or Windows ME. - - - The operating system supports demand installation. - - - A custom action called from install script execution. - - - A custom action called from rollback execution script. - - - A custom action called from commit execution script. - - - - Installed state of a Component or Feature. - - - - The component is disabled. - - - The installation configuration data is corrupt. - - - The installation is suspended or in progress. - - - Component is set to run from source, but source is unavailable. - - - The buffer overflow is returned. - - - An invalid parameter was passed to the function. - - - An unrecognized product or feature name was passed to the function. - - - The component is broken. - - - The feature is advertised. - - - The component is being removed. In action state and not settable. - - - The component is not installed, or action state is absent but clients remain. - - - The component is installed on the local drive. - - - The component will run from the source, CD, or network. - - - The component will be installed in the default location: local or source. - - - - Specifies the type of installation for . - - - - Searches system for products to patch. - - - Indicates a administrative installation. - - - Indicates a particular instance. - - - - Level of the installation user interface, specified with - . - - - - Does not change UI level. - - - Uses Default UI level. - - - Silent installation. - - - Simple progress and error handling. - - - Authored UI, wizard dialogs suppressed. - - - Authored UI with wizards, progress, and errors. - - - - When combined with the value, the installer does not display - the cancel button in the progress dialog. - - - - - When combined with the value, the installer displays progress - dialog boxes but does not display any modal dialog boxes or error dialog boxes. - - - - - When combined with another value, the installer displays a modal dialog - box at the end of a successful installation or if there has been an error. - No dialog box is displayed if the user cancels. - - - - - Forces display of the source resolution dialog even if the UI is otherwise silent. - - - - - Specifies a return status value for message handlers. These values are returned by - , , and . - - - - An error was found in the message handler. - - - No action was taken. - - - IDOK - - - IDCANCEL - - - IDABORT - - - IDRETRY - - - IDIGNORE - - - IDYES - - - IDNO - - - - Specifies constants defining which buttons to display for a message. This can be cast to - the MessageBoxButtons enum in System.Windows.Forms and System.Windows. - - - - - The message contains an OK button. - - - - - The message contains OK and Cancel buttons. - - - - - The message contains Abort, Retry, and Ignore buttons. - - - - - The message contains Yes, No, and Cancel buttons. - - - - - The message contains Yes and No buttons. - - - - - The message contains Retry and Cancel buttons. - - - - - Specifies constants defining which information to display. This can be cast to - the MessageBoxIcon enum in System.Windows.Forms and System.Windows. - - - - - The message contain no symbols. - - - - - The message contains a symbol consisting of white X in a circle with a red background. - - - - - The message contains a symbol consisting of a white X in a circle with a red background. - - - - - The message contains a symbol consisting of white X in a circle with a red background. - - - - - The message contains a symbol consisting of a question mark in a circle. - - - - - The message contains a symbol consisting of an exclamation point in a triangle with a yellow background. - - - - - The message contains a symbol consisting of an exclamation point in a triangle with a yellow background. - - - - - The message contains a symbol consisting of a lowercase letter i in a circle. - - - - - The message contains a symbol consisting of a lowercase letter i in a circle. - - - - - Specifies constants defining the default button on a message. This can be cast to - the MessageBoxDefaultButton enum in System.Windows.Forms and System.Windows. - - - - - The first button on the message is the default button. - - - - - The second button on the message is the default button. - - - - - The third button on the message is the default button. - - - - - Specifies the different patch states for . - - - - Invalid value. - - - Patches applied to a product. - - - Patches that are superseded by other patches. - - - Patches that are obsolesced by other patches. - - - Patches that are registered to a product but not applied. - - - All valid patch states. - - - - Specifies the reinstall mode for or . - - - - Reinstall only if file is missing. - - - Reinstall if file is missing, or older version. - - - Reinstall if file is missing, or equal or older version. - - - Reinstall if file is missing, or not exact version. - - - Checksum executables, reinstall if missing or corrupt. - - - Reinstall all files, regardless of version. - - - Insure required machine reg entries. - - - Insure required user reg entries. - - - Validate shortcuts items. - - - Use re-cache source install package. - - - - Attributes for methods. - - - - No attributes. - - - Request that the Windows Installer not shutdown the embedded UI until the transaction is complete. - - - Request that the Windows Installer transfer the embedded UI from the original installation. - - - - Transform error conditions available for or - . - - - - No error conditions. - - - Adding a row that already exists. - - - Deleting a row that doesn't exist. - - - Adding a table that already exists. - - - Deleting a table that doesn't exist. - - - Updating a row that doesn't exist. - - - Transform and database code pages do not match and neither code page is neutral. - - - Create the temporary _TransformView table when applying the transform. - - - - Transform validation flags available for . - - - - Validate no properties. - - - Default language must match base database. - - - Product must match base database. - - - Check major version only. - - - Check major and minor versions only. - - - Check major, minor, and update versions. - - - Installed version < base version. - - - Installed version <= base version. - - - Installed version = base version. - - - Installed version >= base version. - - - Installed version > base version. - - - UpgradeCode must match base database. - - - - Specifies the installation context for s, - es, and - - - - - Not installed. - - - User managed install context. - - - User non-managed context. - - - Per-machine context. - - - All contexts, or all valid values. - - - All user-managed contexts. - - - - Defines the type of error encountered by the , , - or methods of the class. - - - - No error. - - - The new record duplicates primary keys of the existing record in a table. - - - There are no null values allowed, or the column is about to be deleted but is referenced by another row. - - - The corresponding record in a foreign table was not found. - - - The data is greater than the maximum value allowed. - - - The data is less than the minimum value allowed. - - - The data is not a member of the values permitted in the set. - - - An invalid version string was supplied. - - - The case was invalid. The case must be all uppercase or all lowercase. - - - An invalid GUID was supplied. - - - An invalid wildcard file name was supplied, or the use of wildcards was invalid. - - - An invalid identifier was supplied. - - - Invalid language IDs were supplied. - - - An invalid file name was supplied. - - - An invalid path was supplied. - - - An invalid conditional statement was supplied. - - - An invalid format string was supplied. - - - An invalid template string was supplied. - - - An invalid string was supplied in the DefaultDir column of the Directory table. - - - An invalid registry path string was supplied. - - - An invalid string was supplied in the CustomSource column of the CustomAction table. - - - An invalid property string was supplied. - - - The _Validation table is missing a reference to a column. - - - The category column of the _Validation table for the column is invalid. - - - The table in the Keytable column of the _Validation table was not found or loaded. - - - The value in the MaxValue column of the _Validation table is less than the value in the MinValue column. - - - An invalid cabinet name was supplied. - - - An invalid shortcut target name was supplied. - - - The string is too long for the length specified by the column definition. - - - An invalid localization attribute was supplied. (Primary keys cannot be localized.) - - - - Specifies the modify mode for . - - - - - Refreshes the information in the supplied record without changing the position - in the result set and without affecting subsequent fetch operations. - - - - Refreshes the data in a Record. - - - Inserts a Record into the view. - - - Updates the View with new data from the Record. - - - Updates or inserts a Record into the View. - - - Updates or deletes and inserts a Record into the View. - - - Inserts or validates a record. - - - Deletes a Record from the View. - - - Inserts a Record into the View. The inserted data is not persistent. - - - Validates a record. - - - Validates a new record. - - - Validates fields of a fetched or new record. Can validate one or more fields of an incomplete record. - - - Validates a record that will be deleted later. - - - - Base class for Windows Installer exceptions. - - - - - Creates a new InstallerException with a specified error message and a reference to the - inner exception that is the cause of this exception. - - The message that describes the error. - The exception that is the cause of the current exception. If the - innerException parameter is not a null reference (Nothing in Visual Basic), the current exception - is raised in a catch block that handles the inner exception. - - - - Creates a new InstallerException with a specified error message. - - The message that describes the error. - - - - Creates a new InstallerException. - - - - - Initializes a new instance of the InstallerException class with serialized data. - - The SerializationInfo that holds the serialized object data about the exception being thrown. - The StreamingContext that contains contextual information about the source or destination. - - - - Sets the SerializationInfo with information about the exception. - - The SerializationInfo that holds the serialized object data about the exception being thrown. - The StreamingContext that contains contextual information about the source or destination. - - - - Gets extended information about the error, or null if no further information - is available. - - A Record object. Field 1 of the Record contains the installer - message code. Other fields contain data specific to the particular error. -

- If the record is passed to , it is formatted - by looking up the string in the current database. If there is no installation - session, the formatted error message may be obtained by a query on the Error table using - the error code, followed by a call to . - Alternatively, the standard MSI message can by retrieved by calling the - method. -

- The following methods and properties may report extended error data: - - (constructor) - . - . - . - . - . - . - . - . - . - . - . - . - . - . - . - . - . - . - . - . - . - . - . - . - . - . - . - . - . - . - (constructor) - . - . - . - . - . - . - . - . - . - -

- The Record object should be d after use. - It is best that the handle be closed manually as soon as it is no longer - needed, as leaving lots of unused handles open can degrade performance. -

- Win32 MSI API: - MsiGetLastErrorRecord -

-
- - - Gets the system error code that resulted in this exception, or 0 if not applicable. - - - - - Gets a message that describes the exception. This message may contain detailed - formatted error data if it was available. - - - - - User Canceled the installation. - - - - - Creates a new InstallCanceledException with a specified error message and a reference to the - inner exception that is the cause of this exception. - - The message that describes the error. - The exception that is the cause of the current exception. If the - innerException parameter is not a null reference (Nothing in Visual Basic), the current exception - is raised in a catch block that handles the inner exception. - - - - Creates a new InstallCanceledException with a specified error message. - - The message that describes the error. - - - - Creates a new InstallCanceledException. - - - - - Initializes a new instance of the InstallCanceledException class with serialized data. - - The SerializationInfo that holds the serialized object data about the exception being thrown. - The StreamingContext that contains contextual information about the source or destination. - - - - A bad SQL query string was passed to or . - - - - - Creates a new BadQuerySyntaxException with a specified error message and a reference to the - inner exception that is the cause of this exception. - - The message that describes the error. - The exception that is the cause of the current exception. If the - innerException parameter is not a null reference (Nothing in Visual Basic), the current exception - is raised in a catch block that handles the inner exception. - - - - Creates a new BadQuerySyntaxException with a specified error message. - - The message that describes the error. - - - - Creates a new BadQuerySyntaxException. - - - - - Initializes a new instance of the BadQuerySyntaxException class with serialized data. - - The SerializationInfo that holds the serialized object data about the exception being thrown. - The StreamingContext that contains contextual information about the source or destination. - - - - A method was called on an invalid installer handle. The handle may have been already closed. - - - - - Creates a new InvalidHandleException with a specified error message and a reference to the - inner exception that is the cause of this exception. - - The message that describes the error. - The exception that is the cause of the current exception. If the - innerException parameter is not a null reference (Nothing in Visual Basic), the current exception - is raised in a catch block that handles the inner exception. - - - - Creates a new InvalidHandleException with a specified error message. - - The message that describes the error. - - - - Creates a new InvalidHandleException. - - - - - Initializes a new instance of the InvalidHandleException class with serialized data. - - The SerializationInfo that holds the serialized object data about the exception being thrown. - The StreamingContext that contains contextual information about the source or destination. - - - - A failure occurred when executing . The exception may contain - details about the merge conflict. - - - - - Creates a new MergeException with a specified error message and a reference to the - inner exception that is the cause of this exception. - - The message that describes the error. - The exception that is the cause of the current exception. If the - innerException parameter is not a null reference (Nothing in Visual Basic), the current exception - is raised in a catch block that handles the inner exception. - - - - Creates a new MergeException with a specified error message. - - The message that describes the error. - - - - Creates a new MergeException. - - - - - Initializes a new instance of the MergeException class with serialized data. - - The SerializationInfo that holds the serialized object data about the exception being thrown. - The StreamingContext that contains contextual information about the source or destination. - - - - Sets the SerializationInfo with information about the exception. - - The SerializationInfo that holds the serialized object data about the exception being thrown. - The StreamingContext that contains contextual information about the source or destination. - - - - Gets the number of merge conflicts in each table, corresponding to the tables returned by - . - - - - - Gets the list of tables containing merge conflicts. - - - - - Gets a message that describes the merge conflits. - - - - - Defines a callback function that the installer calls for progress notification and error messages. - - - - - [MSI 3.1] Defines a callback function that the installer calls for record-based progress notification and error messages. - - - - - Provides static methods for installing and configuring products and patches. - - - - - Enables an external user-interface handler. This external UI handler is called before the - normal internal user-interface handler. The external UI handler has the option to suppress - the internal UI by returning a non-zero value to indicate that it has handled the messages. - - A callback delegate that handles the UI messages - Specifies which messages to handle using the external message handler. - If the external handler returns a non-zero result, then that message will not be sent to the UI, - instead the message will be logged if logging has been enabled. - The previously set external handler, or null if there was no previously set handler -

- To restore the previous UI handler, a second call is made to SetExternalUI using the - ExternalUIHandler returned by the first call to SetExternalUI and specifying - as the message filter. -

- The external user interface handler does not have full control over the external user - interface unless is called with the uiLevel parameter set to - . If SetInternalUI is not called, the internal user - interface level defaults to . As a result, any message not - handled by the external user interface handler is handled by Windows Installer. The initial - "Preparing to install..." dialog always appears even if the external user interface - handler handles all messages. -

- SetExternalUI should only be called from a bootstrapping application. You cannot call - it from a custom action -

- Win32 MSI API: - MsiSetExternalUI -

-
- - - [MSI 3.1] Enables a record-based external user-interface handler. This external UI handler is called - before the normal internal user-interface handler. The external UI handler has the option to suppress - the internal UI by returning a non-zero value to indicate that it has handled the messages. - - A callback delegate that handles the UI messages - Specifies which messages to handle using the external message handler. - If the external handler returns a non-zero result, then that message will not be sent to the UI, - instead the message will be logged if logging has been enabled. - The previously set external handler, or null if there was no previously set handler -

- To restore the previous UI handler, a second call is made to SetExternalUI using the - ExternalUIHandler returned by the first call to SetExternalUI and specifying - as the message filter. -

- The external user interface handler does not have full control over the external user - interface unless is called with the uiLevel parameter set to - . If SetInternalUI is not called, the internal user - interface level defaults to . As a result, any message not - handled by the external user interface handler is handled by Windows Installer. The initial - "Preparing to install..." dialog always appears even if the external user interface - handler handles all messages. -

- SetExternalUI should only be called from a bootstrapping application. You cannot call - it from a custom action -

- Win32 MSI API: - MsiSetExternalUIRecord -

-
- - - Enables the installer's internal user interface. Then this user interface is used - for all subsequent calls to user-interface-generating installer functions in this process. - - Specifies the level of complexity of the user interface - Handle to a window, which becomes the owner of any user interface created. - A pointer to the previous owner of the user interface is returned. - The previous user interface level -

- Win32 MSI API: - MsiSetInternalUI -

-
- - - Enables the installer's internal user interface. Then this user interface is used - for all subsequent calls to user-interface-generating installer functions in this process. - The owner of the user interface does not change. - - Specifies the level of complexity of the user interface - The previous user interface level -

- Win32 MSI API: - MsiSetInternalUI -

-
- - - Enables logging of the selected message type for all subsequent install sessions in - the current process space. - - One or more mode flags specifying the type of messages to log - Full path to the log file. A null path disables logging, - in which case the logModes paraneter is ignored. - an invalid log mode was specified - This method takes effect on any new installation processes. Calling this - method from within a custom action will not start logging for that installation. - - - - Enables logging of the selected message type for all subsequent install sessions in - the current process space. - - One or more mode flags specifying the type of messages to log - Full path to the log file. A null path disables logging, - in which case the logModes paraneter is ignored. - If true, the log lines will be appended to any existing file content. - If false, the log file will be truncated if it exists. The default is false. - If true, the log will be flushed after every line. - If false, the log will be flushed every 20 lines. The default is true. - an invalid log mode was specified -

- This method takes effect on any new installation processes. Calling this - method from within a custom action will not start logging for that installation. -

- Win32 MSI API: - MsiEnableLog -

-
- - - increments the usage count for a particular feature and returns the installation state for - that feature. This method should be used to indicate an application's intent to use a feature. - - The product code of the product. - The feature to be used. - Must have the value . - The installed state of the feature. -

- The UseFeature method should only be used on features known to be published. The application - should determine the status of the feature by calling either the FeatureState method or - Features method. -

- Win32 MSI APIs: - MsiUseFeature, - MsiUseFeatureEx -

-
- - - Opens an installer package for use with functions that access the product database and install engine, - returning an Session object. - - Path to the package - Specifies whether or not the create a Session object that ignores the - computer state and that is incapable of changing the current computer state. A value of false yields - the normal behavior. A value of true creates a "safe" Session object that cannot change of the current - machine state. - A Session object allowing access to the product database and install engine - The product could not be opened - The installer configuration data is corrupt -

- Note that only one Session object can be opened by a single process. OpenPackage cannot be used in a - custom action because the active installation is the only session allowed. -

- A "safe" Session object ignores the current computer state when opening the package and prevents - changes to the current computer state. -

- The Session object should be d after use. - It is best that the handle be closed manually as soon as it is no longer - needed, as leaving lots of unused handles open can degrade performance. -

- Win32 MSI APIs: - MsiOpenPackage, - MsiOpenPackageEx -

-
- - - Opens an installer package for use with functions that access the product database and install engine, - returning an Session object. - - Database used to create the session - Specifies whether or not the create a Session object that ignores the - computer state and that is incapable of changing the current computer state. A value of false yields - the normal behavior. A value of true creates a "safe" Session object that cannot change of the current - machine state. - A Session object allowing access to the product database and install engine - The product could not be opened - The installer configuration data is corrupt -

- Note that only one Session object can be opened by a single process. OpenPackage cannot be used in a - custom action because the active installation is the only session allowed. -

- A "safe" Session object ignores the current computer state when opening the package and prevents - changes to the current computer state. -

- The Session object should be d after use. - It is best that the handle be closed manually as soon as it is no longer - needed, as leaving lots of unused handles open can degrade performance. -

- Win32 MSI APIs: - MsiOpenPackage, - MsiOpenPackageEx -

-
- - - Opens an installer package for an installed product using the product code. - - Product code of the installed product - A Session object allowing access to the product database and install engine, - or null if the specified product is not installed. - An unknown product was requested - The product could not be opened - The installer configuration data is corrupt -

- Note that only one Session object can be opened by a single process. OpenProduct cannot be - used in a custom action because the active installation is the only session allowed. -

- The Session object should be d after use. - It is best that the handle be closed manually as soon as it is no longer - needed, as leaving lots of unused handles open can degrade performance. -

- Win32 MSI API: - MsiOpenProduct -

-
- - - Gets the full component path, performing any necessary installation. This method prompts for source if - necessary and increments the usage count for the feature. - - Product code for the product that contains the feature with the necessary component - Feature ID of the feature with the necessary component - Component code of the necessary component - Installation mode; this can also include bits from - Path to the component -

- Win32 MSI API: - MsiProvideComponent -

-
- - - Gets the full component path for a qualified component that is published by a product and - performs any necessary installation. This method prompts for source if necessary and increments - the usage count for the feature. - - Specifies the component ID for the requested component. This may not be the - GUID for the component itself but rather a server that provides the correct functionality, as in the - ComponentId column of the PublishComponent table. - Specifies a qualifier into a list of advertising components (from PublishComponent Table). - Installation mode; this can also include bits from - Optional; specifies the product to match that has published the qualified component. - Path to the component -

- Win32 MSI APIs: - MsiProvideQualifiedComponent - MsiProvideQualifiedComponentEx -

-
- - - Gets the full path to a Windows Installer component containing an assembly. This method prompts for a source and - increments the usage count for the feature. - - Assembly name - Set to null for global assemblies. For private assemblies, set to the full path of the - application configuration file (.cfg file) or executable file (.exe) of the application to which the assembly - has been made private. - Installation mode; this can also include bits from - True if this is a Win32 assembly, false if it is a .NET assembly - Path to the assembly -

- Win32 MSI API: - MsiProvideAssembly -

-
- - - Installs files that are unexpectedly missing. - - Product code for the product that owns the component to be installed - Component to be installed - Specifies the way the component should be installed. - the user exited the installation -

- Win32 MSI API: - MsiInstallMissingComponent -

-
- - - Installs files that are unexpectedly missing. - - Product code for the product that owns the file to be installed - File to be installed - the user exited the installation -

- Win32 MSI API: - MsiInstallMissingFile -

-
- - - Reinstalls a feature. - - Product code for the product containing the feature to be reinstalled - Feature to be reinstalled - Reinstall modes - the user exited the installation -

- Win32 MSI API: - MsiReinstallFeature -

-
- - - Reinstalls a product. - - Product code for the product to be reinstalled - Reinstall modes - the user exited the installation -

- Win32 MSI API: - MsiReinstallProduct -

-
- - - Opens an installer package and initializes an install session. - - path to the patch package - command line property settings - There was an error installing the product -

- To completely remove a product, set REMOVE=ALL in . -

- This method displays the user interface with the current settings and - log mode. You can change user interface settings with the - and functions. You can set the log mode with the - function. -

- The and properties should be - tested after calling this method. -

- Win32 MSI API: - MsiInstallProduct -

-
- - - Installs or uninstalls a product. - - Product code of the product to be configured. - Specifies the default installation configuration of the - product. The parameter is ignored and all features - are installed if the parameter is set to any other - value than . This parameter must be either 0 - (install using authored feature levels), 65535 (install all features), or a value - between 0 and 65535 to install a subset of available features. - Specifies the installation state for the product. - Specifies the command line property settings. This should - be a list of the format Property=Setting Property=Setting. - There was an error configuring the product -

- This method displays the user interface with the current settings and - log mode. You can change user interface settings with the - and functions. You can set the log mode with the - function. -

- The and properties should be - tested after calling this method. -

- Win32 MSI APIs: - MsiConfigureProduct, - MsiConfigureProductEx -

-
- - - Configures the installed state for a product feature. - - Product code of the product to be configured. - Specifies the feature ID for the feature to be configured. - Specifies the installation state for the feature. - There was an error configuring the feature -

- The and properties should be - tested after calling this method. -

- Win32 MSI API: - MsiConfigureFeature -

-
- - - For each product listed by the patch package as eligible to receive the patch, ApplyPatch invokes - an installation and sets the PATCH property to the path of the patch package. - - path to the patch package - optional command line property settings - There was an error applying the patch -

- The and properties should be - tested after calling this method. -

- Win32 MSI API: - MsiApplyPatch -

-
- - - For each product listed by the patch package as eligible to receive the patch, ApplyPatch invokes - an installation and sets the PATCH property to the path of the patch package. - - path to the patch package - path to the product to be patched, if installType - is set to - type of installation to patch - optional command line property settings - There was an error applying the patch -

- The and properties should be - tested after calling this method. -

- Win32 MSI API: - MsiApplyPatch -

-
- - - Removes one or more patches from a single product. To remove a patch from - multiple products, RemovePatches must be called for each product. - - List of patches to remove. Each patch can be specified by the GUID - of the patch or the full path to the patch package. - The ProductCode (GUID) of the product from which the patches - are removed. This parameter cannot be null. - optional command line property settings - There was an error removing the patches -

- The and properties should be - tested after calling this method. -

- Win32 MSI API: - MsiRemovePatches -

-
- - - Determines which patches apply to a specified product MSI and in what sequence. - - Full path to an MSI file that is the target product - for the set of patches. - An array of strings specifying the patches to be checked. Each item - may be the path to an MSP file, the path an XML file, or just an XML blob. - Callback to be invoked for each inapplicable patch, reporting the - reason the patch is not applicable. This value may be left null if that information is not - desired. - An array of selected patch strings from , indicating - the set of applicable patches. The items are re-ordered to be in the best sequence. -

- If an item in is a file path but does not end in .MSP or .XML, - it is assumed to be an MSP file. -

- As this overload uses InstallContext.None, it does not consider the current state of - the system. -

- Win32 MSI API: - MsiDetermineApplicablePatches -

-
- - - Determines which patches apply to a specified product and in what sequence. If - the product is installed, this method accounts for patches that have already been applied to - the product and accounts for obsolete and superceded patches. - - The product that is the target for the set of patches. This may be - either a ProductCode (GUID) of a product that is currently installed, or the path to a an - MSI file. - An array of strings specifying the patches to be checked. Each item - may be the path to an MSP file, the path an XML file, or just an XML blob. - Callback to be invoked for each inapplicable patch, reporting the - reason the patch is not applicable. This value may be left null if that information is not - desired. - Specifies a security identifier (SID) of a user. This parameter restricts - the context of enumeration for this user account. This parameter cannot be the special SID - strings s-1-1-0 (everyone) or s-1-5-18 (local system). If is set to - or , then - must be null. For the current user context, - can be null and can be set to - or . - Restricts the enumeration to per-user-unmanaged, per-user-managed, - or per-machine context, or (if referring to an MSI) to no system context at all. This - parameter can be , , - , or . - An array of selected patch strings from , indicating - the set of applicable patches. The items are re-ordered to be in the best sequence. -

- If an item in is a file path but does not end in .MSP or .XML, - it is assumed to be an MSP file. -

- Passing an InstallContext of None only analyzes the MSI file; it does not consider the - current state of the system. You cannot use InstallContext.None with a ProductCode GUID. -

- Win32 MSI APIs: - MsiDetermineApplicablePatches - MsiDeterminePatchSequence -

-
- - - Applies one or more patches to products that are eligible to receive the patch. - For each product listed by the patch package as eligible to receive the patch, ApplyPatch invokes - an installation and sets the PATCH property to the path of the patch package. - - The set of patch packages to be applied. - Each item is the full path to an MSP file. - Provides the ProductCode of the product being patched. If this parameter - is null, the patches are applied to all products that are eligible to receive these patches. - optional command line property settings -

- Win32 MSI API: - MsiApplyMultiplePatches -

-
- - - Extracts information from a patch that can be used to determine whether the patch - applies on a target system. The method returns an XML string that can be provided to - - instead of the full patch file. - - Full path to the patch being queried. - XML string containing patch data. -

- Win32 MSI API: - MsiExtractPatchXMLData -

-
- - - [MSI 3.1] Migrates a user's application configuration data to a new SID. - - Previous user SID that data is to be migrated from - New user SID that data is to be migrated to -

- Win32 MSI API: - MsiNotifySidChange -

-
- - - Advertises a product to the local computer. - - Path to the package of the product being advertised - True if the product is user-assigned; false if it is machine-assigned. - Semi-colon delimited list of transforms to be applied. This parameter may be null. - The language to use if the source supports multiple languages - the specified package file does not exist - -

- Win32 MSI APIs: - MsiAdvertiseProduct, - MsiAdvertiseProductEx -

-
- - - Generates an advertise script. The method enables the installer to write to a - script the registry and shortcut information used to assign or publish a product. - - Path to the package of the product being advertised - path to script file to be created with the advertise information - Semi-colon delimited list of transforms to be applied. This parameter may be null. - The language to use if the source supports multiple languages - the specified package file does not exist - -

- Win32 MSI APIs: - MsiAdvertiseProduct, - MsiAdvertiseProductEx -

-
- - - Generates an advertise script. The method enables the installer to write to a - script the registry and shortcut information used to assign or publish a product. - - Path to the package of the product being advertised - path to script file to be created with the advertise information - Semi-colon delimited list of transforms to be applied. This parameter may be null. - The language to use if the source supports multiple languages - Targeted processor architecture. - True to install multiple instances through product code changing transform. - Advertises a new instance of the product. Requires that the parameter - includes the instance transform that changes the product code. - -

- Win32 MSI APIs: - MsiAdvertiseProduct, - MsiAdvertiseProductEx -

-
- - - Copies an advertise script file to the local computer. - - Path to a script file generated by - - Flags controlling advertisement - True if specified items are to be removed instead of being created -

- The process calling this function must be running under the LocalSystem account. To advertise an - application for per-user installation to a targeted user, the thread that calls this function must - impersonate the targeted user. If the thread calling this function is not impersonating a targeted - user, the application is advertised to all users for installation with elevated privileges. -

-
- - - Processes an advertise script file into the specified locations. - - Path to a script file generated by - - An optional path to a folder in which advertised icon files and transform - files are located. If this parameter is null, no icon or transform files are written. - True if shortcuts should be created - True if specified items are to be removed instead of created -

- The process calling this function must be running under the LocalSystem account. To advertise an - application for per-user installation to a targeted user, the thread that calls this function must - impersonate the targeted user. If the thread calling this function is not impersonating a targeted - user, the application is advertised to all users for installation with elevated privileges. -

- Win32 MSI API: - MsiProcessAdvertiseScript -

-
- - - Gets product information for an installer script file. - - Path to a script file generated by - - ProductInstallation stub with advertise-related properties filled in. - An invalid product property was requested -

- Only the following properties will be filled in in the returned object:

    -
  • -
  • -
  • -
  • -
  • -
Other properties will be null. -

- Win32 MSI API: - MsiGetProductInfoFromScript -

-
- - - Gets a Windows Installer error message in the system default language. - - The error number. - The message string, or null if the error message is not found. -

- The returned string may have tokens such as [2] and [3] that are meant to be substituted - with context-specific values. -

- Error numbers greater than 2000 refer to MSI "internal" errors, and are always - returned in English. -

-
- - - Gets a Windows Installer error message in a specified language. - - The error number. - The locale for the message. - The message string, or null if the error message or locale is not found. -

- The returned string may have tokens such as [2] and [3] that are meant to be substituted - with context-specific values. -

- Error numbers greater than 2000 refer to MSI "internal" errors, and are always - returned in English. -

-
- - - Gets a formatted Windows Installer error message in the system default language. - - Error record containing the error number in the first field, and - error-specific parameters in the other fields. - The message string, or null if the error message is not found. -

- Error numbers greater than 2000 refer to MSI "internal" errors, and are always - returned in English. -

-
- - - Gets a formatted Windows Installer error message in a specified language. - - Error record containing the error number in the first field, and - error-specific parameters in the other fields. - The locale for the message. - The message string, or null if the error message or locale is not found. -

- Error numbers greater than 2000 refer to MSI "internal" errors, and are always - returned in English. -

-
- - - Gets the version string of the path specified using the format that the installer - expects to find it in in the database. - - Path to the file - Version string in the "#.#.#.#" format, or an empty string if the file - does not contain version information - the file does not exist or could not be read -

- Win32 MSI API: - MsiGetFileVersion -

-
- - - Gets the language string of the path specified using the format that the installer - expects to find them in in the database. - - Path to the file - Language string in the form of a decimal language ID, or an empty string if the file - does not contain a language ID - the file does not exist or could not be read -

- Win32 MSI API: - MsiGetFileVersion -

-
- - - Gets a 128-bit hash of the specified file. - - Path to the file - Integer array of length 4 which receives the - four 32-bit parts of the hash value. - the file does not exist or - could not be read -

- Win32 MSI API: - MsiGetFileHash -

-
- - - Examines a shortcut and returns its product, feature name, and component if available. - - Full path to a shortcut - ShortcutTarget structure containing target product code, feature, and component code -

- Win32 MSI API: - MsiGetShortcutTarget -

-
- - - Verifies that the given file is an installation package. - - Path to the package - True if the file is an installation package; false otherwise. - the specified package file does not exist - the package file could not be opened -

- Win32 MSI API: - MsiVerifyPackage -

-
- - - [MSI 4.0] Gets the list of files that can be updated by one or more patches. - - ProductCode (GUID) of the product which is - the target of the patches - list of file paths of one or more patches to be - analyzed - List of absolute paths of files that can be updated when the - patches are applied on this system. -

- Win32 MSI API: - MsiGetPatchFileList -

-
- - - Indicates whether a system reboot is required after running an installation or configuration operation. - - - - - Indicates whether a system reboot has been initiated after running an installation or configuration operation. - - - - - Gets the current version of the installer. - - - - - Accessor for information about features within the context of an installation session. - - - - - Checks if the collection contains a feature. - - name of the feature - true if the feature is in the collection, else false - - - - Copies the features into an array. - - array that receives the features - offset into the array - - - - Enumerates the features in the collection. - - an enumerator over all features in the collection - - - - Gets information about a feature within the context of an installation session. - - name of the feature - feature object - - - - Gets the number of features defined for the product. - - - - - Provides access to information about a feature within the context of an installation session. - - - - - Calculates the disk space required by the feature and its selected children and parent features. - - If true, the parent features are included in the cost. - If true, the child features are included in the cost. - Specifies the installation state. - The disk space requirement in bytes. -

- Win32 MSI API: - MsiGetFeatureCost -

-
- - - Gets the name of the feature (primary key in the Feature table). - - - - - Gets the current install state of the feature. - - the Session handle is invalid - an unknown feature was requested -

- Win32 MSI API: - MsiGetFeatureState -

-
- - - Gets or sets the action state of the feature. - - the Session handle is invalid - an unknown feature was requested -

- When changing the feature action, the action state of all the Components linked to the changed - Feature records are also updated appropriately, based on the new feature Select state. - All Features can be configured at once by specifying the keyword ALL instead of a specific feature name. -

- Win32 MSI APIs: - MsiGetFeatureState, - MsiSetFeatureState -

-
- - - Gets a list of valid installation states for the feature. - - the Session handle is invalid - an unknown feature was requested -

- Win32 MSI API: - MsiGetFeatureValidStates -

-
- - - Gets or sets the attributes of the feature. - - the Session handle is invalid - an unknown feature was requested -

- Win32 MSI APIs: - MsiGetFeatureInfo, - MsiSetFeatureAttributes -

- Since the lpAttributes paramter of - MsiGetFeatureInfo - does not contain an equivalent flag for , this flag will - not be retrieved. -

- Since the dwAttributes parameter of - MsiSetFeatureAttributes - does not contain an equivalent flag for , the presence - of this flag will be ignored. -

-
- - - Gets the title of the feature. - - the Session handle is invalid - an unknown feature was requested -

- Win32 MSI API: - MsiGetFeatureInfo -

-
- - - Gets the description of the feature. - - the Session handle is invalid - an unknown feature was requested -

- Win32 MSI API: - MsiGetFeatureInfo -

-
- - - Represents an instance of a feature of an installed product. - - - - - Creates a new FeatureInstallation instance for a feature of a product. - - feature name - ProductCode GUID - - - - Gets the name of the feature. - - - - - Gets the installed state of the feature. - -

- Win32 MSI API: - MsiQueryFeatureState -

-
- - - Gets the parent of the feature, or null if the feature has no parent (it is a root feature). - - - Invocation of this property may be slightly costly for products with many features, - because it involves an enumeration of all the features in the product. - - - - - Gets the usage metrics for the feature. - -

- If no usage metrics are recorded, the value is 0. -

- Win32 MSI API: - MsiGetFeatureUsage -

-
- - - Holds data about the usage of a feature. - - - - - Gets count of the number of times the feature has been used. - - - - - Gets the date the feature was last used. - - - - - [MSI 4.5] Interface for an embedded external user interface for an installation. - - - Classes which implement this interface must have a public constructor that takes no parameters. - - - - - Initializes the embedded UI. - - Handle to the installer which can be used to get and set properties. - The handle is only valid for the duration of this method call. - Path to the directory that contains all the files from the MsiEmbeddedUI table. - On entry, contains the current UI level for the installation. After this - method returns, the installer resets the UI level to the returned value of this parameter. - True if the embedded UI was successfully initialized; false if the installation - should continue without the embedded UI. - The installation was canceled by the user. - The embedded UI failed to initialize and - causes the installation to fail. -

- Win32 MSI API: - InitializeEmbeddedUI -

-
- - - Processes information and progress messages sent to the user interface. - - Message type. - Record that contains message data. - Message buttons. - Message box icon. - Message box default button. - Result of processing the message. -

- Win32 MSI API: - EmbeddedUIHandler -

-
- - - Shuts down the embedded UI at the end of the installation. - - - If the installation was canceled during initialization, this method will not be called. - If the installation was canceled or failed at any later point, this method will be called at the end. -

- Win32 MSI API: - ShutdownEmbeddedUI -

-
- - - Subclasses of this abstract class represent a unique instance of a - registered product or patch installation. - - - - - Gets the user security identifier (SID) under which this product or patch - installation is available. - - - - - Gets the user context of this product or patch installation. - - - - - Gets the source list of this product or patch installation. - - - - - Gets a value indicating whether this product or patch is installed on the current system. - - - - - Gets a property about the product or patch installation. - - Name of the property being retrieved. - - - - - Represents a per-drive disk space cost for an installation. - - - - - Creates a new InstallCost object. - - name of the drive this cost data applies to - installation cost on this drive, as a number of bytes - temporary disk space required on this drive, as a number of bytes - - - - The name of the drive this cost data applies to. - - - - - The installation cost on this drive, as a number of bytes. - - - - - The temporary disk space required on this drive, as a number of bytes. - -

- This temporary space requirement is space needed only for the duration - of the installation, over the final footprint on disk. -

-
- - - Receives an exception from - - indicating the reason a particular patch is not applicable to a product. - - MSP file path, XML file path, or XML blob that was passed to - - exception indicating the reason the patch is not applicable -

- If is an or subclass, then - its and - properties will indicate a more specific reason the patch was not applicable. -

- The could also be a FileNotFoundException if the - patch string was a file path. -

-
- - - [MSI 4.5] Handle to a multi-session install transaction. - -

- Win32 MSI APIs: - MsiBeginTransaction - MsiJoinTransaction - MsiEndTransaction -

-
- - - [MSI 4.5] Begins transaction processing of a multi-package installation. - - Name of the multi-package installation. - Select optional behavior when beginning the transaction. - The transaction could not be initialized. -

- Win32 MSI API: - MsiBeginTransaction -

-
- - - Internal constructor. - - - The second parameter is an array in order to receive multiple values from the initialization method. - - - - - Creates a new Transaction object from an integer handle. - - Integer transaction handle - true to close the handle when this object is disposed - - - - Makes the current process the owner of the multi-package installation transaction. - - Select optional behavior when joining the transaction. - The transaction handle is not valid. - The transaction could not be joined. -

- Win32 MSI API: - MsiJoinTransaction -

-
- - - Ends the install transaction and commits all changes to the system belonging to the transaction. - - The transaction could not be committed. -

- Runs any Commit Custom Actions and commits to the system any changes to Win32 or common language - runtime assemblies. Deletes the rollback script, and after using this option, the transaction's - changes can no longer be undone with a Rollback Installation. -

- This method can only be called by the current owner of the transaction. -

- Win32 MSI API: - MsiEndTransaction -

-
- - - Ends the install transaction and undoes changes to the system belonging to the transaction. - - The transaction could not be rolled back. -

- This method can only be called by the current owner of the transaction. -

- Win32 MSI API: - MsiEndTransaction -

-
- - - Gets the name of the transaction. - - - - - Notifies listeners when the process that owns the transaction changed. - - - - - Represents a media disk source of a product or a patch. - - - - - Creates a new media disk. - - - - - - - - Gets or sets the disk id of the media disk. - - - - - Gets or sets the volume label of the media disk. - - - - - Gets or sets the disk prompt of the media disk. - - - - - The Patch object represents a unique instance of a patch that has been - registered or applied. - - - - - Enumerates patch installations based on certain criteria. - - PatchCode (GUID) of the patch to be enumerated. Only - instances of patches within the scope of the context specified by the - and parameters will be - enumerated. This parameter may be set to null to enumerate all patches in the specified - context. - ProductCode (GUID) product whose patches are to be - enumerated. If non-null, patch enumeration is restricted to instances of this product - within the specified context. If null, the patches for all products under the specified - context are enumerated. - Specifies a security identifier (SID) that restricts the context - of enumeration. A SID value other than s-1-1-0 is considered a user SID and restricts - enumeration to the current user or any user in the system. The special SID string - s-1-1-0 (Everyone) specifies enumeration across all users in the system. This parameter - can be set to null to restrict the enumeration scope to the current user. When - is set to the machine context only, - must be null. - Specifies the user context. - The of patches to return. -

- Win32 MSI APIs: - MsiEnumPatchesEx -

-
- - - Creates a new object for accessing information about a patch installation on the current system. - - Patch code (GUID) of the patch. - ProductCode (GUID) the patch has been applied to. - This parameter may be null for patches that are registered only and not yet - applied to any product. -

- All available user contexts will be queried. -

-
- - - Creates a new object for accessing information about a patch installation on the current system. - - Registered patch code (GUID) of the patch. - ProductCode (GUID) the patch has been applied to. - This parameter may be null for patches that are registered only and not yet - applied to any product. - The specific user, when working in a user context. This - parameter may be null to indicate the current user. The parameter must be null - when working in a machine context. - The user context. The calling process must have administrative - privileges to get information for a product installed for a user other than the - current user. -

- If the is null, the Patch object may - only be used to read and update the patch's SourceList information. -

-
- - - Enumerates all patch installations on the system. - - Enumeration of patch objects. -

- Win32 MSI API: - MsiEnumPatches -

-
- - - Gets the patch code (GUID) of the patch. - - - - - Gets the ProductCode (GUID) of the product. - - - - - Gets a value indicating whether this patch is currently installed. - - - - - Gets a value indicating whether this patch is marked as obsolte. - - - - - Gets a value indicating whether this patch is present but has been - superseded by a more recent installed patch. - - - - - Gets the installation state of this instance of the patch. - - An unknown patch was requested - The installer configuration data is corrupt - - - - Gets the cached patch file that the product uses. - - - - - Gets the set of patch transforms that the last patch - installation applied to the product. - -

- This value may not be available for per-user, non-managed applications - if the user is not logged on. -

-
- - - Gets the date and time when the patch is applied to the product. - - - - - True patch is marked as possible to uninstall from the product. - -

- Even if this property is true, the installer can still block the - uninstallation if this patch is required by another patch that - cannot be uninstalled. -

-
- - - Get the registered display name for the patch. - - - - - Gets the registered support information URL for the patch. - - - - - Gets information about a specific patch installation. - - The property being retrieved; see remarks for valid properties. - The property value, or an empty string if the property is not set for the patch. - An unknown patch or property was requested - The installer configuration data is corrupt -

- Win32 MSI APIs: - MsiGetPatchInfo, - MsiGetPatchInfoEx -

-
- - - Represents a unique instance of a product that - is either advertised, installed or unknown. - - - - - Gets the set of all products with a specified upgrade code. This method lists the - currently installed and advertised products that have the specified UpgradeCode - property in their Property table. - - Upgrade code of related products - Enumeration of product codes -

- Win32 MSI API: - MsiEnumRelatedProducts -

-
- - - Enumerates product installations based on certain criteria. - - ProductCode (GUID) of the product instances to be enumerated. Only - instances of products within the scope of the context specified by the - and parameters will be - enumerated. This parameter may be set to null to enumerate all products in the specified - context. - Specifies a security identifier (SID) that restricts the context - of enumeration. A SID value other than s-1-1-0 is considered a user SID and restricts - enumeration to the current user or any user in the system. The special SID string - s-1-1-0 (Everyone) specifies enumeration across all users in the system. This parameter - can be set to null to restrict the enumeration scope to the current user. When - is set to the machine context only, - must be null. - Specifies the user context. - An enumeration of product objects for enumerated product instances. -

- Win32 MSI API: - MsiEnumProductsEx -

-
- - - Creates a new object for accessing information about a product installation on the current system. - - ProductCode (GUID) of the product. -

- All available user contexts will be queried. -

-
- - - Creates a new object for accessing information about a product installation on the current system. - - ProductCode (GUID) of the product. - The specific user, when working in a user context. This - parameter may be null to indicate the current user. The parameter must be null - when working in a machine context. - The user context. The calling process must have administrative - privileges to get information for a product installed for a user other than the - current user. - - - - Gets the installed state for a product feature. - - The feature being queried; identifier from the - Feature table - Installation state of the feature for the product instance: either - , , - or . -

- Win32 MSI APIs: - MsiQueryFeatureState, - MsiQueryFeatureStateEx -

-
- - - Gets the installed state for a product component. - - The component being queried; GUID of the component - as found in the ComponentId column of the Component table. - Installation state of the component for the product instance: either - or . -

- Win32 MSI API: - MsiQueryComponentState -

-
- - - Obtains and stores the user information and product ID from an installation wizard. - -

- This method is typically called by an application during the first run of the application. The application - first gets the or . - If those properties are missing, the application calls CollectUserInfo. - CollectUserInfo opens the product's installation package and invokes a wizard sequence that collects - user information. Upon completion of the sequence, user information is registered. Since this API requires - an authored user interface, the user interface level should be set to full by calling - as . -

- The CollectUserInfo method invokes a FirstRun dialog from the product installation database. -

- Win32 MSI API: - MsiCollectUserInfo -

-
- - - Some products might write some invalid/nonstandard version strings to the registry. - This method tries to get the best data it can. - - Version string retrieved from the registry. - Version object, or null if the version string is completely invalid. - - - - Enumerates all product installations on the system. - - An enumeration of product objects. -

- Win32 MSI API: - MsiEnumProducts, -

-
- - - Gets the set of published features for the product. - - Enumeration of published features for the product. - The installer configuration data is corrupt -

- Because features are not ordered, any new feature has an arbitrary index, meaning - this property can return features in any order. -

- Win32 MSI API: - MsiEnumFeatures -

-
- - - Gets the ProductCode (GUID) of the product. - - - - - Gets a value indicating whether this product is installed on the current system. - - - - - Gets a value indicating whether this product is advertised on the current system. - - - - - Checks whether the product is installed with elevated privileges. An application is called - a "managed application" if elevated (system) privileges are used to install the application. - - True if the product is elevated; false otherwise -

- Note that this property does not take into account policies such as AlwaysInstallElevated, - but verifies that the local system owns the product's registry data. -

-
- - - Gets the source list of this product installation. - - - - - The support link. - - - - - The support telephone. - - - - - Date and time the product was installed. - - - - - The installed product name. - - - - - The installation location. - - - - - The installation source. - - - - - The local cached package. - - - - - The publisher. - - - - - URL about information. - - - - - The URL update information. - - - - - The product version. - - - - - The product identifier. - -

- For more information, see - ProductID -

-
- - - The company that is registered to use the product. - - - - - The owner who is registered to use the product. - - - - - Transforms. - - - - - Product language. - - - - - Human readable product name. - - - - - True if the product is advertised per-machine; - false if it is per-user or not advertised. - - - - - Identifier of the package that a product is installed from. - - - - - Version of the advertised product. - - - - - Primary icon for the package. - - - - - Name of the installation package for the advertised product. - - - - - True if the advertised product can be serviced by - non-administrators without elevation. - - - - - Gets information about an installation of a product. - - Name of the property being retrieved. - An unknown product or property was requested - The installer configuration data is corrupt -

- Win32 MSI APIs: - MsiGetProductInfo, - MsiGetProductInfoEx -

-
- - - The Record object is a container for holding and transferring a variable number of values. - Fields within the record are numerically indexed and can contain strings, integers, streams, - and null values. Record fields are indexed starting with 1. Field 0 is a special format field. - -

- Most methods on the Record class have overloads that allow using either a number - or a name to designate a field. However note that field names only exist when the - Record is directly returned from a query on a database. For other records, attempting - to access a field by name will result in an InvalidOperationException. -

-
- - - Creates a new record object with the requested number of fields. - - Required number of fields, which may be 0. - The maximum number of fields in a record is limited to 65535. -

- The Record object should be d after use. - It is best that the handle be closed manually as soon as it is no longer - needed, as leaving lots of unused handles open can degrade performance. -

- Win32 MSI API: - MsiCreateRecord -

-
- - - Creates a new record object, providing values for an arbitrary number of fields. - - The values of the record fields. The parameters should be of type Int16, Int32 or String -

- The Record object should be d after use. - It is best that the handle be closed manually as soon as it is no longer - needed, as leaving lots of unused handles open can degrade performance. -

- Win32 MSI API: - MsiCreateRecord -

-
- - - Creates a new Record object from an integer record handle. - -

- This method is only provided for interop purposes. A Record object - should normally be obtained by calling - other methods. -

The handle will be closed when this object is disposed or finalized.

-

- Integer record handle - true to close the handle when this object is disposed or finalized -
- - - Sets all fields in a record to null. - -

- Win32 MSI API: - MsiRecordClearData -

-
- - - Reports whether a record field is null. - - Specifies the field to check. - True if the field is null, false otherwise. - The field is less than 0 or greater than the - number of fields in the Record. -

- Win32 MSI API: - MsiRecordIsNull -

-
- - - Reports whether a record field is null. - - Specifies the field to check. - True if the field is null, false otherwise. - The field name does not match any - of the named fields in the Record. - - - - Gets the length of a record field. The count does not include the terminating null. - - The field is less than 0 or greater than the - number of fields in the Record. -

- The returned data size is 0 if the field is null, non-existent, - or an internal object pointer. The method also returns 0 if the handle is not a valid - Record handle. -

- If the data is in integer format, the property returns 2 or 4. -

- If the data is in string format, the property returns the character count - (not including the NULL terminator). -

- If the data is in stream format, the property returns the byte count. -

- Win32 MSI API: - MsiRecordDataSize -

-
- - - Gets the length of a record field. The count does not include the terminating null. - - Specifies the field to check. - The field name does not match any - of the named fields in the Record. -

The returned data size is 0 if the field is null, non-existent, - or an internal object pointer. The method also returns 0 if the handle is not a valid - Record handle. -

- If the data is in integer format, the property returns 2 or 4. -

- If the data is in string format, the property returns the character count - (not including the NULL terminator). -

- If the data is in stream format, the property returns the byte count. -

-
- - - Gets a field value as an integer. - - Specifies the field to retrieve. - Integer value of the field, or 0 if the field is null. - The field is less than 0 or greater than the - number of fields in the Record. -

- Win32 MSI API: - MsiRecordGetInteger -

- -
- - - Gets a field value as an integer. - - Specifies the field to retrieve. - Integer value of the field, or 0 if the field is null. - The field name does not match any - of the named fields in the Record. - - - - - Gets a field value as an integer. - - Specifies the field to retrieve. - Integer value of the field, or null if the field is null. - The field is less than 0 or greater than the - number of fields in the Record. -

- Win32 MSI API: - MsiRecordGetInteger -

- -
- - - Gets a field value as an integer. - - Specifies the field to retrieve. - Integer value of the field, or null if the field is null. - The field name does not match any - of the named fields in the Record. - - - - - Sets the value of a field to an integer. - - Specifies the field to set. - new value of the field - The field is less than 0 or greater than the - number of fields in the Record. -

- Win32 MSI API: - MsiRecordSetInteger -

- -
- - - Sets the value of a field to an integer. - - Specifies the field to set. - new value of the field - The field name does not match any - of the named fields in the Record. - - - - - Sets the value of a field to a nullable integer. - - Specifies the field to set. - new value of the field - The field is less than 0 or greater than the - number of fields in the Record. -

- Win32 MSI API: - MsiRecordSetInteger -

- -
- - - Sets the value of a field to a nullable integer. - - Specifies the field to set. - new value of the field - The field name does not match any - of the named fields in the Record. - - - - - Gets a field value as a string. - - Specifies the field to retrieve. - String value of the field, or an empty string if the field is null. - The field is less than 0 or greater than the - number of fields in the Record. -

- Win32 MSI API: - MsiRecordGetString -

-
- - - Gets a field value as a string. - - Specifies the field to retrieve. - String value of the field, or an empty string if the field is null. - The field name does not match any - of the named fields in the Record. - - - - Sets the value of a field to a string. - - Specifies the field to set. - new value of the field - The field is less than 0 or greater than the - number of fields in the Record. -

- Win32 MSI API: - MsiRecordSetString -

-
- - - Sets the value of a field to a string. - - Specifies the field to set. - new value of the field - The field name does not match any - of the named fields in the Record. - - - - Reads a record stream field into a file. - - Specifies the field of the Record to get. - Specifies the path to the file to contain the stream. - The field is less than 0 or greater than the - number of fields in the Record. - Attempt to extract a storage from a database open - in read-write mode, or from a database without an associated file path -

- This method is capable of directly extracting substorages. To do so, first select both the - `Name` and `Data` column of the `_Storages` table, then get the stream of the `Data` field. - However, substorages may only be extracted from a database that is open in read-only mode. -

- Win32 MSI API: - MsiRecordReadStream -

-
- - - Reads a record stream field into a file. - - Specifies the field of the Record to get. - Specifies the path to the file to contain the stream. - The field name does not match any - of the named fields in the Record. - Attempt to extract a storage from a database open - in read-write mode, or from a database without an associated file path -

- This method is capable of directly extracting substorages. To do so, first select both the - `Name` and `Data` column of the `_Storages` table, then get the stream of the `Data` field. - However, substorages may only be extracted from a database that is open in read-only mode. -

-
- - - Gets a record stream field. - - Specifies the field of the Record to get. - A Stream that reads the field data. - The field is less than 0 or greater than the - number of fields in the Record. -

- This method is not capable of reading substorages. To extract a substorage, - use . -

- Win32 MSI API: - MsiRecordReadStream -

-
- - - Gets a record stream field. - - Specifies the field of the Record to get. - A Stream that reads the field data. - The field name does not match any - of the named fields in the Record. -

- This method is not capable of reading substorages. To extract a substorage, - use . -

-
- - - Sets a record stream field from a file. Stream data cannot be inserted into temporary fields. - - Specifies the field of the Record to set. - Specifies the path to the file containing the stream. - The field is less than 0 or greater than the - number of fields in the Record. -

- The contents of the specified file are read into a stream object. The stream persists if - the Record is inserted into the Database and the Database is committed. -

- To reset the stream to its beginning you must pass in null for filePath. - Do not pass an empty string, "", to reset the stream. -

- Setting a stream with this method is more efficient than setting a field to a - FileStream object. -

- Win32 MSI API: - MsiRecordsetStream -

-
- - - Sets a record stream field from a file. Stream data cannot be inserted into temporary fields. - - Specifies the field name of the Record to set. - Specifies the path to the file containing the stream. - The field name does not match any - of the named fields in the Record. -

- The contents of the specified file are read into a stream object. The stream persists if - the Record is inserted into the Database and the Database is committed. - To reset the stream to its beginning you must pass in null for filePath. - Do not pass an empty string, "", to reset the stream. -

- Setting a stream with this method is more efficient than setting a field to a - FileStream object. -

-
- - - Sets a record stream field from a Stream object. Stream data cannot be inserted into temporary fields. - - Specifies the field of the Record to set. - Specifies the stream data. - The field is less than 0 or greater than the - number of fields in the Record. -

- The stream persists if the Record is inserted into the Database and the Database is committed. -

- Win32 MSI API: - MsiRecordsetStream -

-
- - - Sets a record stream field from a Stream object. Stream data cannot be inserted into temporary fields. - - Specifies the field name of the Record to set. - Specifies the stream data. - The field name does not match any - of the named fields in the Record. -

- The stream persists if the Record is inserted into the Database and the Database is committed. -

-
- - - Gets a formatted string representation of the Record. - - A formatted string representation of the Record. -

- If field 0 of the Record is set to a nonempty string, it is used to format the data in the Record. -

- Win32 MSI API: - MsiFormatRecord -

- - -
- - - Gets a formatted string representation of the Record, optionally using a Session to format properties. - - an optional Session instance that will be used to lookup any - properties in the Record's format string - A formatted string representation of the Record. -

- If field 0 of the Record is set to a nonempty string, it is used to format the data in the Record. -

- Win32 MSI API: - MsiFormatRecord -

- - -
- - - Gets a formatted string representation of the Record. - - String to be used to format the data in the Record, - instead of the Record's format string. - A formatted string representation of the Record. -

- Win32 MSI API: - MsiFormatRecord -

-
- - - Gets a formatted string representation of the Record, optionally using a Session to format properties. - - String to be used to format the data in the Record, - instead of the Record's format string. - an optional Session instance that will be used to lookup any - properties in the Record's format string - A formatted string representation of the Record. -

- Win32 MSI API: - MsiFormatRecord -

- - -
- - - IsFormatStringInvalid is set from several View methods that invalidate the FormatString - and used to determine behavior during Record.ToString(). - - - - - Gets the number of fields in a record. - -

- Win32 MSI API: - MsiRecordGetFieldCount -

-
- - - Gets or sets field 0 of the Record, which is the format string. - - - - - Gets or sets a record field value. - - Specifies the name of the field of the Record to get or set. - The name does not match any known field of the Record. -

- When getting a field, the type of the object returned depends on the type of the Record field. - The object will be one of: Int16, Int32, String, Stream, or null. -

- When setting a field, the type of the object provided will be converted to match the View - query that returned the record, or if Record was not returned from a view then the type of - the object provided will determine the type of the Record field. The object should be one of: - Int16, Int32, String, Stream, or null. -

-
- - - Gets or sets a record field value. - - Specifies the field of the Record to get or set. - The field is less than 0 or greater than the - number of fields in the Record. -

- Record fields are indexed starting with 1. Field 0 is a special format field. -

- When getting a field, the type of the object returned depends on the type of the Record field. - The object will be one of: Int16, Int32, String, Stream, or null. If the Record was returned - from a View, the type will match that of the field from the View query. Otherwise, the type - will match the type of the last value set for the field. -

- When setting a field, the type of the object provided will be converted to match the View - query that returned the Record, or if Record was not returned from a View then the type of - the object provided will determine the type of the Record field. The object should be one of: - Int16, Int32, String, Stream, or null. -

- The type-specific getters and setters are slightly more efficient than this property, since - they don't have to do the extra work to infer the value's type every time. -

- Win32 MSI APIs: - MsiRecordGetInteger, - MsiRecordGetString, - MsiRecordSetInteger, - MsiRecordSetString -

-
- - - Assigns ID numbers to the MSI APIs that are remotable. - -

- This enumeration MUST stay in sync with the - unmanaged equivalent in RemoteMsiSession.h! -

-
- - - Defines the signature of the native function - in SfxCA.dll that implements the remoting call. - - - - - Redirects native API calls to either the normal NativeMethods class - or to out-of-proc calls via the remoting channel. - - - - - Checks if the current process is using remoting to access the - MSI session and database APIs. - - - - - Sets a delegate that is used to make remote API calls. - -

- The implementation of this delegate is provided by the - custom action host DLL. -

-
- - - The Session object controls the installation process. It opens the - install database, which contains the installation tables and data. - -

- This object is associated with a standard set of action functions, - each performing particular operations on data from one or more tables. Additional - custom actions may be added for particular product installations. The basic engine - function is a sequencer that fetches sequential records from a designated sequence - table, evaluates any specified condition expression, and executes the designated - action. Actions not recognized by the engine are deferred to the UI handler object - for processing, usually dialog box sequences. -

- Note that only one Session object can be opened by a single process. -

-
- - - Creates a new Session object from an integer session handle. - - Integer session handle - true to close the handle when this object is disposed or finalized -

- This method is only provided for interop purposes. A Session object - should normally be obtained by calling - or . -

-
- - - Performs any enabled logging operations and defers execution to the UI handler - object associated with the engine. - - Type of message to be processed - Contains message-specific fields - A message-dependent return value - the Session or Record handle is invalid - an invalid message kind is specified - the user exited the installation - the message-handler failed for an unknown reason -

- Logging may be selectively enabled for the various message types. - See the method. -

- If record field 0 contains a formatting string, it is used to format the data in - the other fields. Else if the message is an error, warning, or user message, an attempt - is made to find a message template in the Error table for the current database using the - error number found in field 1 of the record for message types and return values. -

- The parameter may also include message-box flags from - the following enumerations: System.Windows.Forms.MessageBoxButtons, - System.Windows.Forms.MessageBoxDefaultButton, System.Windows.Forms.MessageBoxIcon. These - flags can be combined with the InstallMessage with a bitwise OR. -

- Note, this method never returns Cancel or Error values. Instead, appropriate - exceptions are thrown in those cases. -

- Win32 MSI API: - MsiProcessMessage -

-
- - - Writes a message to the log, if logging is enabled. - - The line to be written to the log -

- Win32 MSI API: - MsiProcessMessage -

-
- - - Writes a formatted message to the log, if logging is enabled. - - The line to be written to the log, containing 0 or more format specifiers - An array containing 0 or more objects to be formatted -

- Win32 MSI API: - MsiProcessMessage -

-
- - - Evaluates a logical expression containing symbols and values. - - conditional expression - The result of the condition evaluation - the Session handle is invalid - the condition is null or empty - the conditional expression is invalid -

- Win32 MSI API: - MsiEvaluateCondition -

-
- - - Evaluates a logical expression containing symbols and values, specifying a default - value to be returned in case the condition is empty. - - conditional expression - value to return if the condition is empty - The result of the condition evaluation - the Session handle is invalid - the conditional expression is invalid -

- Win32 MSI API: - MsiEvaluateCondition -

-
- - - Formats a string containing installer properties. - - A format string containing property tokens - A formatted string containing property data - the Record handle is invalid -

- Win32 MSI API: - MsiFormatRecord -

-
- - - Returns a formatted string from record data. - - Record object containing a template and data to be formatted. - The template string must be set in field 0 followed by any referenced data parameters. - A formatted string containing the record data - the Record handle is invalid -

- Win32 MSI API: - MsiFormatRecord -

-
- - - Returns a formatted string from record data using a specified format. - - Record object containing a template and data to be formatted - Format string to be used instead of field 0 of the Record - A formatted string containing the record data - the Record handle is invalid -

- Win32 MSI API: - MsiFormatRecord -

-
- - - Retrieves product properties (not session properties) from the product database. - - Value of the property, or an empty string if the property is not set. -

- Note this is not the correct method for getting ordinary session properties. For that, - see the indexer on the Session class. -

- Win32 MSI API: - MsiGetProductProperty -

-
- - - Checks to see if sufficient disk space is present for the current installation. - - True if there is sufficient disk space; false otherwise. -

- Win32 MSI API: - MsiVerifyDiskSpace -

-
- - - Gets the total disk space per drive required for the installation. - - A list of InstallCost structures, specifying the cost for each drive -

- Win32 MSI API: - MsiEnumComponentCosts -

-
- - - Gets the designated mode flag for the current install session. - - The type of mode to be checked. - The value of the designated mode flag. - the Session handle is invalid - an invalid mode flag was specified -

- Note that only the following run modes are available to read from - a deferred custom action: - - - - -

- Win32 MSI API: - MsiGetMode -

-
- - - Sets the designated mode flag for the current install session. - - The type of mode to be set. - The desired value of the mode. - the Session handle is invalid - an invalid mode flag was specified - the mode cannot not be set -

- Win32 MSI API: - MsiSetMode -

-
- - - Gets the full path to the designated folder on the source media or server image. - - the folder was not found in the Directory table - the Session handle is invalid -

- Win32 MSI API: - MsiGetSourcePath -

-
- - - Gets the full path to the designated folder on the installation target drive. - - the folder was not found in the Directory table - the Session handle is invalid -

- Win32 MSI API: - MsiGetTargetPath -

-
- - - Sets the full path to the designated folder on the installation target drive. - - the folder was not found in the Directory table - the Session handle is invalid -

- Setting the target path of a directory changes the path specification for the directory - in the in-memory Directory table. Also, the path specifications of all other path objects - in the table that are either subordinate or equivalent to the changed path are updated - to reflect the change. The properties for each affected path are also updated. -

- If an error occurs in this function, all updated paths and properties revert to - their previous values. Therefore, it is safe to treat errors returned by this function - as non-fatal. -

- Do not attempt to configure the target path if the components using those paths - are already installed for the current user or for a different user. Check the - ProductState property before setting the target path to determine if the product - containing this component is installed. -

- Win32 MSI API: - MsiSetTargetPath -

-
- - - Sets the install level for the current installation to a specified value and - recalculates the Select and Installed states for all features in the Feature - table. Also sets the Action state of each component in the Component table based - on the new level. - - New install level - the Session handle is invalid -

- The SetInstallLevel method sets the following: - The installation level for the current installation to a specified value - The Select and Installed states for all features in the Feature table - The Action state of each component in the Component table, based on the new level - - If 0 or a negative number is passed in the ilnstallLevel parameter, - the current installation level does not change, but all features are still - updated based on the current installation level. -

- Win32 MSI API: - MsiSetInstallLevel -

-
- - - Executes a built-in action, custom action, or user-interface wizard action. - - Name of the action to execute. Case-sensitive. - the Session handle is invalid - the user exited the installation -

- The DoAction method executes the action that corresponds to the name supplied. If the - name is not recognized by the installer as a built-in action or as a custom action in - the CustomAction table, the name is passed to the user-interface handler object, which - can invoke a function or a dialog box. If a null action name is supplied, the installer - uses the upper-case value of the ACTION property as the action to perform. If no property - value is defined, the default action is performed, defined as "INSTALL". -

- Actions that update the system, such as the InstallFiles and WriteRegistryValues - actions, cannot be run by calling MsiDoAction. The exception to this rule is if DoAction - is called from a custom action that is scheduled in the InstallExecuteSequence table - between the InstallInitialize and InstallFinalize actions. Actions that do not update the - system, such as AppSearch or CostInitialize, can be called. -

- Win32 MSI API: - MsiDoAction -

-
- - - Executes a built-in action, custom action, or user-interface wizard action. - - Name of the action to execute. Case-sensitive. - Optional data to be passed to a deferred custom action. - the Session handle is invalid - the user exited the installation -

- The DoAction method executes the action that corresponds to the name supplied. If the - name is not recognized by the installer as a built-in action or as a custom action in - the CustomAction table, the name is passed to the user-interface handler object, which - can invoke a function or a dialog box. If a null action name is supplied, the installer - uses the upper-case value of the ACTION property as the action to perform. If no property - value is defined, the default action is performed, defined as "INSTALL". -

- Actions that update the system, such as the InstallFiles and WriteRegistryValues - actions, cannot be run by calling MsiDoAction. The exception to this rule is if DoAction - is called from a custom action that is scheduled in the InstallExecuteSequence table - between the InstallInitialize and InstallFinalize actions. Actions that do not update the - system, such as AppSearch or CostInitialize, can be called. -

- If the called action is a deferred, rollback, or commit custom action, then the supplied - will be available via the - property of that custom action's session. -

- Win32 MSI API: - MsiDoAction -

-
- - - Executes an action sequence described in the specified table. - - Name of the table containing the action sequence. - the Session handle is invalid - the user exited the installation -

- This method queries the specified table, ordering the actions by the numbers in the Sequence column. - For each row retrieved, an action is executed, provided that any supplied condition expression does - not evaluate to FALSE. -

- An action sequence containing any actions that update the system, such as the InstallFiles and - WriteRegistryValues actions, cannot be run by calling DoActionSequence. The exception to this rule is if - DoActionSequence is called from a custom action that is scheduled in the InstallExecuteSequence table - between the InstallInitialize and InstallFinalize actions. Actions that do not update the system, such - as AppSearch or CostInitialize, can be called. -

- Win32 MSI API: - MsiSequence -

-
- - - Implements formatting for data. - - Type of format object to get. - The the current instance, if is the same type - as the current instance; otherwise, null. - - - - Closes the session handle. Also closes the active database handle, if it is open. - After closing a handle, further method calls may throw an . - - If true, the method has been called directly - or indirectly by a user's code, so managed and unmanaged resources will - be disposed. If false, only unmanaged resources will be disposed. - - - - Throws an exception if the custom action is not able to access immedate session details. - - - - - Gets the Database for the install session. - - the Session handle is invalid - the Database cannot be accessed -

- Normally there is no need to close this Database object. The same object can be - used throughout the lifetime of the Session, and it will be closed when the Session - is closed. -

- Win32 MSI API: - MsiGetActiveDatabase -

-
- - - Gets the numeric language ID used by the current install session. - -

- Win32 MSI API: - MsiGetLanguage -

-
- - - Gets or sets the string value of a named installer property, as maintained by the - Session object in the in-memory Property table, or, if it is prefixed with a percent - sign (%), the value of a system environment variable for the current process. - - the Session handle is invalid -

- Win32 MSI APIs: - MsiGetProperty, - MsiSetProperty -

-
- - - Gets an accessor for components in the current session. - - - - - Gets an accessor for features in the current session. - - - - - Gets custom action data for the session that was supplied by the caller. - - - - - - Gets the (short) list of properties that are available from non-immediate custom actions. - - - - - Holds information about the target of a shortcut file. - - - - - Tests whether two shortcut targets have the same product code, feature, and/or component code. - - The first shortcut target to compare. - The second shortcut target to compare. - True if all parts of the targets are the same, else false. - - - - Tests whether two shortcut targets have the same product code, feature, and/or component code. - - The first shortcut target to compare. - The second shortcut target to compare. - True if any parts of the targets are different, else false. - - - - Tests whether two shortcut targets have the same product code, feature, and/or component code. - - The shortcut target to compare to the current object. - True if is a shortcut target and all parts of the targets are the same, else false. - - - - Generates a hash code using all parts of the shortcut target. - - An integer suitable for hashing the shortcut target. - - - - Gets the target product code of the shortcut, or null if not available. - - - - - Gets the name of the target feature of the shortcut, or null if not available. - - - - - Gets the target component code of the shortcut, or null if not available. - - - - - A list of sources for an installed product or patch. - - - - - Adds a network or URL source to the source list of the installed product. - - Path to the source to be added. This parameter is - expected to contain only the path without the filename. -

- If this method is called with a new source, the installer adds the source - to the end of the source list. -

- If this method is called with a source already existing in the source - list, it has no effect. -

- Win32 MSI APIs: - MsiSourceListAddSource, - MsiSourceListAddSourceEx -

- -
- - - Adds or reorders a network or URL source for the product or patch. - - Path to the source to be added. This parameter is - expected to contain only the path without the filename. - Specifies the priority order in which the source - will be inserted -

- If this method is called with a new source and - is set to 0, the installer adds the source to the end of the source list. -

- If this method is called with a source already existing in the source - list and is set to 0, the installer retains the - source's existing index. -

- If the method is called with an existing source in the source list - and is set to a non-zero value, the source is - removed from its current location in the list and inserted at the position - specified by Index, before any source that already exists at that position. -

- If the method is called with a new source and Index is set to a - non-zero value, the source is inserted at the position specified by - , before any source that already exists at - that position. The index value for all sources in the list after the - index specified by Index are updated to ensure unique index values and - the pre-existing order is guaranteed to remain unchanged. -

- If is greater than the number of sources - in the list, the source is placed at the end of the list with an index - value one larger than any existing source. -

- Win32 MSI API: - MsiSourceListAddSourceEx -

-
- - - Clears sources of all types: network, url, and media. - -

- Win32 MSI API: - MsiSourceListClearAll -

-
- - - Removes all network sources from the list. URL sources are not affected. - -

- Win32 MSI API: - MsiSourceListClearAllEx -

-
- - - Removes all URL sources from the list. Network sources are not affected. - -

- Win32 MSI API: - MsiSourceListClearAllEx -

-
- - - Checks if the specified source exists in the list. - - case-insensitive source to look for - true if the source exists in the list, false otherwise - - - - Copies the network and URL sources from this list into an array. - - destination array to be filed - offset into the destination array where copying begins - - - - Removes a network or URL source. - -

- Win32 MSI API: - MsiSourceListClearSource -

-
- - - Enumerates the network and URL sources in the source list of the patch or product installation. - -

- Win32 MSI API: - MsiSourceListEnumSources -

-
- - - Forces the installer to search the source list for a valid - source the next time a source is required. For example, when the - installer performs an installation or reinstallation, or when it - requires the path for a component that is set to run from source. - -

- Win32 MSI APIs: - MsiSourceListForceResolution, - MsiSourceListForceResolutionEx -

-
- - - Gets the list of disks registered for the media source of - the patch or product installation. - - - - - Gets the number of network and URL sources in the list. - - - - - Gets a boolean value indicating whether the list is read-only. - A SourceList is never read-only. - - read-only status of the list - - - - Gets or sets the path relative to the root of the installation media. - - - - - Gets or sets the prompt template that is used when prompting the user - for installation media. - - - - - Gets or sets the most recently used source location for the product. - - - - - Gets or sets the name of the Windows Installer package or patch package - on the source. - - - - - Gets the type of the last-used source. - -

-

    -
  • "n" = network location
  • -
  • "u" = URL location
  • -
  • "m" = media location
  • -
  • (empty string) = no last used source
  • -
-

-
- - - Gets or sets source list information properties of a product or patch installation. - - The source list information property name. - An unknown product, patch, or property was requested -

- Win32 MSI API: - MsiSourceListGetInfo -

-
- - - A list of source media for an installed product or patch. - - - - - Adds or updates a disk of the media source for the product or patch. - -

- To change the disk prompt only, get the existing volume label from the - registry and provide it in this call along with the new disk prompt. - Passing a null or empty string for - registers an empty string as the volume label. -

To change the volume label only, get the existing disk prompt - that is registered and provide it when calling SourceListAddMediaDisk - along with the new volume label. Passing null or an empty string - registers an empty string as the disk prompt.

-

- Win32 MSI API: - MsiSourceListAddMediaDisk -

-
- - - Removes all source media from the list. - -

- Win32 MSI API: - MsiSourceListClearAllEx -

-
- - - Checks if the specified media disk id exists in the list. - - disk id of the media to look for - true if the media exists in the list, false otherwise - - - - Copies the source media info from this list into an array. - - destination array to be filed - offset into the destination array where copying begins - - - - Removes a specified disk from the set of registered disks. - - ID of the disk to remove -

- Win32 MSI API: - MsiSourceListClearMediaDisk -

-
- - - Enumerates the source media in the source list of the patch or product installation. - -

- Win32 MSI API: - MsiSourceListEnumMediaDisks -

-
- - - Gets the number of source media in the list. - - - - - Gets a boolean value indicating whether the list is read-only. - A SourceMediaList is never read-only. - - read-only status of the list - - - - Provides access to summary information of a Windows Installer database. - - - - - Gets a SummaryInfo object that can be used to examine, update, and add - properties to the summary information stream of a package or transform. - - Path to the package (database) or transform - True to reserve resources for writing summary information properties. - the package does not exist or could not be read - the package is an invalid format -

- The SummaryInfo object should be d after use. - It is best that the handle be closed manually as soon as it is no longer - needed, as leaving lots of unused handles open can degrade performance. -

- Win32 MSI API: - MsiGetSummaryInformation -

-
- - - Formats and writes the previously stored properties into the standard summary information stream. - - The stream cannot be successfully written. -

- This method may only be called once after all the property values have been set. Properties may - still be read after the stream is written. -

- Win32 MSI API: - MsiSummaryInfoPersist -

-
- - Gets or sets the Title summary information property. -

- The Title summary information property briefly describes the type of installer package. Phrases - such as "Installation Database" or "Transform" or "Patch" may be used for this property. -

- Win32 MSI APIs: - MsiSummaryInfoGetProperty, - MsiSummaryInfoSetProperty -

-
- - Gets or sets the Subject summary information property. -

- The Subject summary information property conveys to a file browser the product that can be installed using - the logic and data in this installer database. For example, the value of the summary property for - Microsoft Office 97 would be "Microsoft Office 97 Professional". This value is typically set from the - installer property ProductName. -

- Win32 MSI APIs: - MsiSummaryInfoGetProperty, - MsiSummaryInfoSetProperty -

-
- - Gets or sets the Author summary information property. -

- The Author summary information property conveys to a file browser the manufacturer of the installation - database. This value is typically set from the installer property Manufacturer. -

- Win32 MSI APIs: - MsiSummaryInfoGetProperty, - MsiSummaryInfoSetProperty -

-
- - Gets or sets the Keywords summary information property. -

- The Keywords summary information property is used by file browsers to hold keywords that permit the - database file to be found in a keyword search. The set of keywords typically includes "Installer" as - well as product-specific keywords, and may be localized. -

- Win32 MSI APIs: - MsiSummaryInfoGetProperty, - MsiSummaryInfoSetProperty -

-
- - Gets or sets the Comments summary information property. -

- The Comments summary information property conveys the general purpose of the installer database. By convention, - the value for this summary property is set to the following: -

- "This installer database contains the logic and data required to install <product name>." -

- where <product name> is the name of the product being installed. In general the value for this summary - property only changes in the product name, nothing else. -

- Win32 MSI APIs: - MsiSummaryInfoGetProperty, - MsiSummaryInfoSetProperty -

-
- - Gets or sets the Template summary information property. -

- The Template summary information propery indicates the platform and language versions supported by the database. -

- The syntax of the Template Summary property information is: - [platform property][,platform property][,...];[language id][,language id][,...] -

- For example, the following are all valid values for the Template Summary property: - - Intel;1033 - Intel64;1033 - ;1033 - ; - Intel ;1033,2046 - Intel64;1033,2046 - Intel;0 - -

- If this is a 64-bit Windows Installer, enter Intel64 in the Template summary information property. Note that an - installation package cannot have both the Intel and Intel64 properties set. -

- If the current platform does not match one of the platforms specified then the installer will not process the - package. Not specifying a platform implies that the package is platform-independent. -

- Entering 0 in the language ID field of the Template summary information property, or leaving this field empty, - indicates that the package is language neutral. -

- There are variations of this property depending on whether it is in a source installer database or a transform. -

- Source Installer Database - Only one language can be specified in a source installer database. Merge Modules are - the only packages that may have multiple languages. For more information, see Multiple Language Merge Modules. -

- Transform - In a transform file, only one language may be specified. The specified platform and language determine - whether a transform can be applied to a particular database. The platform property and the language property can - be left blank if no transform restriction relies on them to validate the transform. -

- This summary property is REQUIRED. -

- Win32 MSI APIs: - MsiSummaryInfoGetProperty, - MsiSummaryInfoSetProperty -

-
- - Gets or sets the LastSavedBy summary information property. -

- The installer sets the Last Saved By summary information property to the value of the LogonUser property during - an administrative installation. The installer never uses this property and a user never needs to modify it. - Developers of a database editing tool may use this property to track the last person to modify the database. - This property should be left set to null in a final shipping database. -

- In a transform, this summary property contains the platform and language ID(s) that a database should have - after it has been transformed. The property specifies to what the Template should be set in the new database. -

- Win32 MSI APIs: - MsiSummaryInfoGetProperty, - MsiSummaryInfoSetProperty -

-
- - Gets or sets the RevisionNumber summary information property. -

- The Revision Number summary information property contains the package code for the installer package. The - package code is a unique identifier of the installer package. -

- The Revision Number summary information property of a patch package specifies the GUID patch code for - the patch. This is followed by a list of patch code GUIDs for obsolete patches that are removed when this - patch is applied. The patch codes are concatenated with no delimiters separating GUIDs in the list. -

- The Revision Number summary information property of a transform package lists the product code GUIDs - and version of the new and original products and the upgrade code GUID. The list is separated with - semicolons as follows. -

- Original-Product-Code Original-Product-Version ; New-Product Code New-Product-Version; Upgrade-Code -

- This summary property is REQUIRED. -

- Win32 MSI APIs: - MsiSummaryInfoGetProperty, - MsiSummaryInfoSetProperty -

-
- - Gets or sets the CreatingApp summary information property. -

- The CreatingApp summary information property conveys which application created the installer database. - In general the value for this summary property is the name of the software used to author this database. -

- Win32 MSI APIs: - MsiSummaryInfoGetProperty, - MsiSummaryInfoSetProperty -

-
- - Gets or sets the LastPrintTime summary information property. -

- The LastPrintTime summary information property can be set to the date and time during an administrative - installation to record when the administrative image was created. For non-administrative installations - this property is the same as the CreateTime summary information property. -

- Win32 MSI APIs: - MsiSummaryInfoGetProperty, - MsiSummaryInfoSetProperty -

-
- - Gets or sets the CreateTime summary information property. -

- The CreateTime summary information property conveys when the installer database was created. -

- Win32 MSI APIs: - MsiSummaryInfoGetProperty, - MsiSummaryInfoSetProperty -

-
- - Gets or sets the LastSaveTime summary information property. -

- The LastSaveTime summary information property conveys when the last time the installer database was - modified. Each time a user changes an installation the value for this summary property is updated to - the current system time/date at the time the installer database was saved. Initially the value for - this summary property is set to null to indicate that no changes have yet been made. -

- Win32 MSI APIs: - MsiSummaryInfoGetProperty, - MsiSummaryInfoSetProperty -

-
- - Gets or sets the CodePage summary information property. -

- The Codepage summary information property is the numeric value of the ANSI code page used for any - strings that are stored in the summary information. Note that this is not the same code page for - strings in the installation database. The Codepage summary information property is used to translate - the strings in the summary information into Unicode when calling the Unicode API functions. The - Codepage summary information property must be set before any string properties are set in the - summary information. -

- Win32 MSI APIs: - MsiSummaryInfoGetProperty, - MsiSummaryInfoSetProperty -

-
- - Gets or sets the PageCount summary information property. -

- For an installation package, the PageCount summary information property contains the minimum - installer version required. For Windows Installer version 1.0, this property must be set to the - integer 100. For 64-bit Windows Installer Packages, this property must be set to the integer 200. -

- For a transform package, the PageCount summary information property contains minimum installer - version required to process the transform. Set to the greater of the two PageCount summary information - property values belonging to the databases used to generate the transform. -

- The PageCount summary information property is set to null in patch packages. -

- This summary property is REQUIRED. -

- Win32 MSI APIs: - MsiSummaryInfoGetProperty, - MsiSummaryInfoSetProperty -

-
- - Gets or sets the WordCount summary information property. -

- The WordCount summary information property indicates the type of source file image. If this property is - not present, it defaults to 0. Note that this property is stored in place of the standard Count property. -

- This property is a bit field. New bits may be added in the future. At present the following bits are - available: - - Bit 0: 0 = long file names, 1 = short file names - Bit 1: 0 = source is uncompressed, 1 = source is compressed - Bit 2: 0 = source is original media, 1 = source is administrative installation - [MSI 4.0] Bit 3: 0 = elevated privileges can be required to install, 1 = elevated privileges are not required to install - -

- These are combined to give the WordCount summary information property one of the following values - indicating a type of source file image: - - 0 - Original source using long file names. Matches tree in Directory table. - 1 - Original source using short file names. Matches tree in Directory table. - 2 - Compressed source files using long file names. Matches cabinets and files in the Media table. - 3 - Compressed source files using short file names. Matches cabinets and files in the Media table. - 4 - Administrative image using long file names. Matches tree in Directory table. - 5 - Administrative image using short file names. Matches tree in Directory table. - -

- Note that if the package is marked as compressed (bit 1 is set), the installer only installs files - located at the root of the source. In this case, even files marked as uncompressed in the File table must - be located at the root to be installed. To specify a source image that has both a cabinet file (compressed - files) and uncompressed files that match the tree in the Directory table, mark the package as uncompressed - by leaving bit 1 unset (value=0) in the WordCount summary information property and set - (value=16384) in the Attributes column of the File table - for each file in the cabinet. -

- For a patch package, the WordCount summary information property specifies the patch engine that was used - to create the patch files. The default value is 1 and indicates that MSPATCH was used to create the patch - A value of "2" means that the patch is using smaller, optimized, files available only with Windows Installer - version 1.2 or later. A patch with a WordCount of "2" fails immediately if used with a Windows Installer - version earlier than 1.2. A patch with a WordCount of "3" fails immediately if used with a Windows Installer - version earlier than 2.0. -

- This summary property is REQUIRED. -

- Win32 MSI APIs: - MsiSummaryInfoGetProperty, - MsiSummaryInfoSetProperty -

-
- - Gets or sets the CharacterCount summary information property. -

- The CharacterCount summary information property is only used in transforms. This part of the summary - information stream is divided into two 16-bit words. The upper word contains the transform validation - flags. The lower word contains the transform error condition flags. -

- Win32 MSI APIs: - MsiSummaryInfoGetProperty, - MsiSummaryInfoSetProperty -

-
- - Gets or sets the Security summary information property. -

- The Security summary information property conveys whether the package should be opened as read-only. The database - editing tool should not modify a read-only enforced database and should issue a warning at attempts to modify a - read-only recommended database. The following values of this property are applicable to Windows Installer files: - - 0 - no restriction - 2 - read only recommended - 4 - read only enforced - -

- This property should be set to read-only recommended (2) for an installation database and to read-only - enforced (4) for a transform or patch. -

- Win32 MSI APIs: - MsiSummaryInfoGetProperty, - MsiSummaryInfoSetProperty -

-
- - - Contains information about all the tables in a Windows Installer database. - - - - - Adds a new table to the database. - - information about the table to be added - a table with the same name already exists in the database - - - - Removes all tables (and all data) from the database. - - - - - Checks if the database contains a table with the given name. - - case-sensitive name of the table to search for - True if the table exists, false otherwise. - - - - Copies the table information from this collection into an array. - - destination array to be filed - offset into the destination array where copying begins - - - - Removes a table from the database. - - case-sensitive name of the table to be removed - true if the table was removed, false if the table did not exist - - - - Enumerates the tables in the database. - - - - - Gets the number of tables in the database. - - - - - Gets a boolean value indicating whether the collection is read-only. - A TableCollection is read-only when the database is read-only. - - read-only status of the collection - - - - Gets information about a given table. - - case-sensitive name of the table - information about the requested table, or null if the table does not exist in the database - - - - Defines a table in an installation database. - - - - - Creates a table definition. - - Name of the table. - Columns in the table. - The primary keys of the table. - - - - Gets a string representation of the table. - - The name of the table. - - - - Gets the name of the table. - - - - - Gets information about the columns in this table. - -

- This property queries the database every time it is called, - to ensure the returned values are up-to-date. For best performance, - hold onto the returned collection if using it more than once. -

-
- - - Gets the names of the columns that are primary keys of the table. - - - - - Gets an SQL CREATE string that can be used to create the table. - - - - - Gets an SQL INSERT string that can be used insert a new record into the table. - -

- The values are expressed as question-mark tokens, to be supplied by the record. -

-
- - - Gets an SQL SELECT string that can be used to select all columns of the table. - -

- The columns are listed explicitly in the SELECT string, as opposed to using "SELECT *". -

-
- - - Contains specific information about an error encountered by the , - , or methods of the - class. - - - - - Gets the type of validation error encountered. - - - - - Gets the column containing the error, or null if the error applies to the whole row. - - - - - A View represents a result set obtained when processing a query using the - method of a - . Before any data can be transferred, - the query must be executed using the method, passing to - it all replaceable parameters designated within the SQL query string. - - - - - Executes a SQL View query and supplies any required parameters. The query uses the - question mark token to represent parameters as described in SQL Syntax. The values of - these parameters are passed in as the corresponding fields of a parameter record. - - Optional Record that supplies the parameters. This - Record contains values to replace the parameter tokens in the SQL query. - the View could not be executed - the View handle is invalid -

- Win32 MSI API: - MsiViewExecute -

-
- - - Executes a SQL View query. - - the View could not be executed - the View handle is invalid -

- Win32 MSI API: - MsiViewExecute -

-
- - - Fetches the next sequential record from the view, or null if there are no more records. - - the View is not in an active state - the View handle is invalid -

- The Record object should be d after use. - It is best that the handle be closed manually as soon as it is no longer - needed, as leaving lots of unused handles open can degrade performance. -

- Win32 MSI API: - MsiViewFetch -

-
- - - Updates a fetched Record. - - specifies the modify mode - the Record to modify - the modification failed, - or a validation was requested and the data did not pass - the View handle is invalid -

- You can update or delete a record immediately after inserting, or seeking provided you - have NOT modified the 0th field of the inserted or sought record. -

- To execute any SQL statement, a View must be created. However, a View that does not - create a result set, such as CREATE TABLE, or INSERT INTO, cannot be used with any of - the Modify methods to update tables though the view. -

- You cannot fetch a record containing binary data from one database and then use - that record to insert the data into another database. To move binary data from one database - to another, you should export the data to a file and then import it into the new database - using a query and the . This ensures that each database has - its own copy of the binary data. -

- Note that custom actions can only add, modify, or remove temporary rows, columns, - or tables from a database. Custom actions cannot modify persistent data in a database, - such as data that is a part of the database stored on disk. -

- Win32 MSI API: - MsiViewModify -

- - - - - - - - - - - - - -
- - - Refreshes the data in a Record. - - the Record to be refreshed - the refresh failed - the View handle is invalid -

- The Record must have been obtained by calling . Fails with - a deleted Record. Works only with read-write Records. -

- See for more remarks. -

- Win32 MSI API: - MsiViewModify -

-
- - - Inserts a Record into the view. - - the Record to be inserted - the insertion failed - the View handle is invalid -

- Fails if a row with the same primary keys exists. Fails with a read-only database. - This method cannot be used with a View containing joins. -

- See for more remarks. -

- Win32 MSI API: - MsiViewModify -

-
- - - Updates the View with new data from the Record. - - the new data - the update failed - the View handle is invalid -

- Only non-primary keys can be updated. The Record must have been obtained by calling - . Fails with a deleted Record. Works only with read-write Records. -

- See for more remarks. -

- Win32 MSI API: - MsiViewModify -

-
- - - Updates or inserts a Record into the View. - - the Record to be assigned - the assignment failed - the View handle is invalid -

- Updates record if the primary keys match an existing row and inserts if they do not match. - Fails with a read-only database. This method cannot be used with a View containing joins. -

- See for more remarks. -

- Win32 MSI API: - MsiViewModify -

-
- - - Updates or deletes and inserts a Record into the View. - - the Record to be replaced - the replacement failed - the View handle is invalid -

- The Record must have been obtained by calling . Updates record if the - primary keys are unchanged. Deletes old row and inserts new if primary keys have changed. - Fails with a read-only database. This method cannot be used with a View containing joins. -

- See for more remarks. -

- Win32 MSI API: - MsiViewModify -

-
- - - Deletes a Record from the View. - - the Record to be deleted - the deletion failed - the View handle is invalid -

- The Record must have been obtained by calling . Fails if the row has been - deleted. Works only with read-write records. This method cannot be used with a View containing joins. -

- See for more remarks. -

- Win32 MSI API: - MsiViewModify -

-
- - - Inserts a Record into the View. The inserted data is not persistent. - - the Record to be inserted - the insertion failed - the View handle is invalid -

- Fails if a row with the same primary key exists. Works only with read-write records. - This method cannot be used with a View containing joins. -

- See for more remarks. -

- Win32 MSI API: - MsiViewModify -

-
- - - Refreshes the information in the supplied record without changing the position - in the result set and without affecting subsequent fetch operations. - - the Record to be filled with the result of the seek - the seek failed - the View handle is invalid -

- After seeking, the Record may then be used for subsequent Update, Delete, and Refresh - operations. All primary key columns of the table must be in the query and the Record must - have at least as many fields as the query. Seek cannot be used with multi-table queries. - This method cannot be used with a View containing joins. -

- See for more remarks. -

- Win32 MSI API: - MsiViewModify -

-
- - - Inserts or validates a record. - - the Record to be merged - true if the record was inserted or validated, false if there is an existing - record with the same primary keys that is not identical - the merge failed (for a reason other than invalid data) - the View handle is invalid -

- Works only with read-write records. This method cannot be used with a - View containing joins. -

- See for more remarks. -

- Win32 MSI API: - MsiViewModify -

-
- - - Validates a record, returning information about any errors. - - the Record to be validated - null if the record was validated; if there is an existing record with - the same primary keys that has conflicting data then error information is returned - the validation failed (for a reason other than invalid data) - the View handle is invalid -

- The Record must have been obtained by calling . - Works with read-write and read-only records. This method cannot be used - with a View containing joins. -

- See for more remarks. -

- Win32 MSI APIs: - MsiViewModify, - MsiViewGetError -

-
- - - Validates a new record, returning information about any errors. - - the Record to be validated - null if the record was validated; if there is an existing - record with the same primary keys then error information is returned - the validation failed (for a reason other than invalid data) - the View handle is invalid -

- Checks for duplicate keys. The Record must have been obtained by - calling . Works with read-write and read-only records. - This method cannot be used with a View containing joins. -

- See for more remarks. -

- Win32 MSI APIs: - MsiViewModify, - MsiViewGetError -

-
- - - Validates fields of a fetched or new record, returning information about any errors. - Can validate one or more fields of an incomplete record. - - the Record to be validated - null if the record was validated; if there is an existing record with - the same primary keys that has conflicting data then error information is returned - the validation failed (for a reason other than invalid data) - the View handle is invalid -

- Works with read-write and read-only records. This method cannot be used with - a View containing joins. -

- See for more remarks. -

- Win32 MSI APIs: - MsiViewModify, - MsiViewGetError -

-
- - - Validates a record that will be deleted later, returning information about any errors. - - the Record to be validated - null if the record is safe to delete; if another row refers to - the primary keys of this row then error information is returned - the validation failed (for a reason other than invalid data) - the View handle is invalid -

- Validation does not check for the existence of the primary keys of this row in properties - or strings. Does not check if a column is a foreign key to multiple tables. Works with - read-write and read-only records. This method cannot be used with a View containing joins. -

- See for more remarks. -

- Win32 MSI APIs: - MsiViewModify, - MsiViewGetError -

-
- - - Enumerates over the Records retrieved by the View. - - An enumerator of Record objects. - The View was not d before attempting the enumeration. -

- Each Record object should be d after use. - It is best that the handle be closed manually as soon as it is no longer - needed, as leaving lots of unused handles open can degrade performance. - However, note that it is not necessary to complete the enumeration just - for the purpose of closing handles, because Records are fetched lazily - on each step of the enumeration. -

- Win32 MSI API: - MsiViewFetch -

-
- - - Gets the Database on which this View was opened. - - - - - Gets the SQL query string used to open this View. - - - - - Gets the set of tables that were included in the SQL query for this View. - - - - - Gets the set of columns that were included in the query for this View, - or null if this view is not a SELECT query. - - the View is not in an active state - the View handle is invalid -

- Win32 MSI API: - MsiViewGetColumnInfo -

-
- - + + + + Microsoft.Deployment.WindowsInstaller + + + + + Collection of column information related to a or + . + + + + + Creates a new ColumnCollection based on a specified list of columns. + + columns to be added to the new collection + + + + Creates a new ColumnCollection that is associated with a database table. + + view that contains the columns + + + + Not supported because the collection is read-only. + + information about the column being added + the collection is read-only + + + + Not supported because the collection is read-only. + + the collection is read-only + + + + Checks if a column with a given name exists in the collection. + + case-sensitive name of the column to look for + true if the column exists in the collection, false otherwise + + + + Checks if a column with a given name exists in the collection. + + column to look for, with case-sensitive name + true if the column exists in the collection, false otherwise + + + + Gets the index of a column within the collection. + + case-sensitive name of the column to look for + 0-based index of the column, or -1 if not found + + + + Copies the columns from this collection into an array. + + destination array to be filed + offset into the destination array where copying begins + + + + Not supported because the collection is read-only. + + column to remove + true if the column was removed, false if it was not found + the collection is read-only + + + + Gets an enumerator over the columns in the collection. + + An enumerator of ColumnInfo objects. + + + + Gets an enumerator over the columns in the collection. + + An enumerator of ColumnInfo objects. + + + + Creates ColumnInfo objects for the associated view. + + dynamically-generated list of columns + + + + Gets a list of column names or column-definition-strings for the + associated view. + + the view to that defines the columns + true to return types (column definition strings), + false to return names + list of column names or types + + + + Gets the number of columns in the collection. + + number of columns in the collection + + + + Gets a boolean value indicating whether the collection is read-only. + A ColumnCollection is read-only if it is associated with a + or a read-only . + + read-only status of the collection + + + + Gets information about a specific column in the collection. + + 1-based index into the column collection + is less + than 1 or greater than the number of columns in the collection + + + + Gets information about a specific column in the collection. + + case-sensitive name of a column collection + does + not exist in the collection + + + + Gets a string suitable for printing all the values of a record containing these columns. + + + + + Available values for the Attributes column of the Component table. + + + + + Local only - Component cannot be run from source. + +

+ Set this value for all components belonging to a feature to prevent the feature from being run-from-network or + run-from-source. Note that if a feature has no components, the feature always shows run-from-source and + run-from-my-computer as valid options. +

+
+ + + Component can only be run from source. + +

+ Set this bit for all components belonging to a feature to prevent the feature from being run-from-my-computer. + Note that if a feature has no components, the feature always shows run-from-source and run-from-my-computer + as valid options. +

+
+ + + Component can run locally or from source. + + + + + If this bit is set, the value in the KeyPath column is used as a key into the Registry table. + +

+ If the Value field of the corresponding record in the Registry table is null, the Name field in that record + must not contain "+", "-", or "*". For more information, see the description of the Name field in Registry + table. +

Setting this bit is recommended for registry entries written to the HKCU hive. This ensures the installer + writes the necessary HKCU registry entries when there are multiple users on the same machine.

+

+
+ + + If this bit is set, the installer increments the reference count in the shared DLL registry of the component's + key file. If this bit is not set, the installer increments the reference count only if the reference count + already exists. + + + + + If this bit is set, the installer does not remove the component during an uninstall. The installer registers + an extra system client for the component in the Windows Installer registry settings. + + + + + If this bit is set, the value in the KeyPath column is a key into the ODBCDataSource table. + + + + + If this bit is set, the installer reevaluates the value of the statement in the Condition column upon a reinstall. + If the value was previously False and has changed to true, the installer installs the component. If the value + was previously true and has changed to false, the installer removes the component even if the component has + other products as clients. + + + + + If this bit is set, the installer does not install or reinstall the component if a key path file or a key path + registry entry for the component already exists. The application does register itself as a client of the component. + +

+ Use this flag only for components that are being registered by the Registry table. Do not use this flag for + components registered by the AppId, Class, Extension, ProgId, MIME, and Verb tables. +

+
+ + + Set this bit to mark this as a 64-bit component. This attribute facilitates the installation of packages that + include both 32-bit and 64-bit components. If this bit is not set, the component is registered as a 32-bit component. + +

+ If this is a 64-bit component replacing a 32-bit component, set this bit and assign a new GUID in the + ComponentId column. +

+
+ + + Set this bit to disable registry reflection on all existing and new registry keys affected by this component. + +

+ If this bit is set, the Windows Installer calls the RegDisableReflectionKey on each key being accessed by the component. + This bit is available with Windows Installer version 4.0 and is ignored on 32-bit systems. +

+
+ + + [MSI 4.5] Set this bit for a component in a patch package to prevent leaving orphan components on the computer. + +

+ If a subsequent patch is installed, marked with the SupersedeEarlier flag in its MsiPatchSequence + table to supersede the first patch, Windows Installer 4.5 can unregister and uninstall components marked with the + UninstallOnSupersedence value. If the component is not marked with this bit, installation of a superseding patch can leave + behind an unused component on the computer. +

+
+ + + [MSI 4.5] If a component is marked with this attribute value in at least one package installed on the system, + the installer treats the component as marked in all packages. If a package that shares the marked component + is uninstalled, Windows Installer 4.5 can continue to share the highest version of the component on the system, + even if that highest version was installed by the package that is being uninstalled. + + + + + Defines flags for the Attributes column of the Control table. + + + + If this bit is set, the control is visible on the dialog box. + + + specifies if the given control is enabled or disabled. Most controls appear gray when disabled. + + + If this bit is set, the control is displayed with a sunken, three dimensional look. + + + The Indirect control attribute specifies whether the value displayed or changed by this control is referenced indirectly. + + + If this bit is set on a control, the associated property specified in the Property column of the Control table is an integer. + + + If this bit is set the text in the control is displayed in a right-to-left reading order. + + + If this style bit is set, text in the control is aligned to the right. + + + If this bit is set, the scroll bar is located on the left side of the control, otherwise it is on the right. + + + This is a combination of the RightToLeftReadingOrder, RightAligned, and LeftScroll attributes. + + + If this bit is set on a text control, the control is displayed transparently with the background showing through the control where there are no characters. + + + If this bit is set on a text control, the occurrence of the character "&" in a text string is displayed as itself. + + + If this bit is set the text in the control is displayed on a single line. + + + If this bit is set for a text control, the control will automatically attempt to format the displayed text as a number representing a count of bytes. + + + If this bit is set, fonts are created using the user's default UI code page. Otherwise it is created using the database code page. + + + If this bit is set on an Edit control, the installer creates a multiple line edit control with a vertical scroll bar. + + + This attribute creates an edit control for entering passwords. The control displays each character as an asterisk (*) as they are typed into the control. + + + If this bit is set on a ProgressBar control, the bar is drawn as a series of small rectangles in Microsoft Windows 95-style. Otherwise it is drawn as a single continuous rectangle. + + + If this bit is set, the control shows removable volumes. + + + If this bit is set, the control shows fixed internal hard drives. + + + If this bit is set, the control shows remote volumes. + + + If this bit is set, the control shows CD-ROM volumes. + + + If this bit is set, the control shows RAM disk volumes. + + + If this bit is set, the control shows floppy volumes. + + + Specifies whether or not the rollback backup files are included in the costs displayed by the VolumeCostList control. + + + If this bit is set, the items listed in the control are displayed in a specified order. Otherwise, items are displayed in alphabetical order. + + + If this bit is set on a combo box, the edit field is replaced by a static text field. This prevents a user from entering a new value and requires the user to choose only one of the predefined values. + + + If this bit is set on a check box or a radio button group, the button is drawn with the appearance of a push button, but its logic stays the same. + + + If this bit is set, the text in the control is replaced by a bitmap image. The Text column in the Control table is a foreign key into the Binary table. + + + If this bit is set, text is replaced by an icon image and the Text column in the Control table is a foreign key into the Binary table. + + + If this bit is set, the picture is cropped or centered in the control without changing its shape or size. + + + Specifies which size of the icon image to load. If none of the bits are set, the first image is loaded. + + + Specifies which size of the icon image to load. If none of the bits are set, the first image is loaded. + + + Specifies which size of the icon image to load. If none of the bits are set, the first image is loaded. + + + If this bit is set, and the installation is not yet running with elevated privileges, the control is created with a UAC icon. + + + If this bit is set, the RadioButtonGroup has text and a border displayed around it. + + + + Defines flags for the Type column of the CustomAction table. + + + + Unspecified custom action type. + + + Target = entry point name + + + Target = command line args + + + Target = text string to be formatted and set into property + + + Target = entry point name, null if none to call + + + Target = entry point name, null if none to call + + + Target = property list for nested engine initialization + + + Source = File.File, file part of installation + + + Source = Directory.Directory, folder containing existing file + + + Source = Property.Property, full path to executable + + + Ignore action return status, continue running + + + Run asynchronously + + + Skip if UI sequence already run + + + Skip if UI sequence already run in same process + + + Run on client only if UI already run on client + + + Queue for execution within script + + + In conjunction with InScript: queue in Rollback script + + + In conjunction with InScript: run Commit ops from script on success + + + No impersonation, run in system context + + + Impersonate for per-machine installs on TS machines + + + Script requires 64bit process + + + Don't record the contents of the Target field in the log file + + + The custom action runs only when a patch is being uninstalled + + + + Defines flags for the Attributes column of the Dialog table. + + + + If this bit is set, the dialog is originally created as visible, otherwise it is hidden. + + + If this bit is set, the dialog box is modal, other dialogs of the same application cannot be put on top of it, and the dialog keeps the control while it is running. + + + If this bit is set, the dialog box can be minimized. This bit is ignored for modal dialog boxes, which cannot be minimized. + + + If this style bit is set, the dialog box will stop all other applications and no other applications can take the focus. + + + If this bit is set, the other dialogs stay alive when this dialog box is created. + + + If this bit is set, the dialog box periodically calls the installer. If the property changes, it notifies the controls on the dialog. + + + If this bit is set, the pictures on the dialog box are created with the custom palette (one per dialog received from the first control created). + + + If this style bit is set the text in the dialog box is displayed in right-to-left-reading order. + + + If this style bit is set, the text is aligned on the right side of the dialog box. + + + If this style bit is set, the scroll bar is located on the left side of the dialog box. + + + This is a combination of the RightToLeftReadingOrder, RightAligned, and the LeftScroll dialog style bits. + + + If this bit is set, the dialog box is an error dialog. + + + + Available values for the Attributes column of the Feature table. + + + + + Favor local - Components of this feature that are not marked for installation from source are installed locally. + +

+ A component shared by two or more features, some of which are set to FavorLocal and some to FavorSource, + is installed locally. Components marked in the Component + table are always run from the source CD/server. The bits FavorLocal and FavorSource work with features not + listed by the ADVERTISE property. +

+
+ + + Components of this feature not marked for local installation are installed to run from the source + CD-ROM or server. + +

+ A component shared by two or more features, some of which are set to FavorLocal and some to FavorSource, + is installed to run locally. Components marked (local-only) in the + Component table are always installed locally. The bits FavorLocal and FavorSource work with features + not listed by the ADVERTISE property. +

+
+ + + Set this attribute and the state of the feature is the same as the state of the feature's parent. + You cannot use this option if the feature is located at the root of a feature tree. + +

+ Omit this attribute and the feature state is determined according to DisallowAdvertise and + FavorLocal and FavorSource. +

To guarantee that the child feature's state always follows the state of its parent, even when the + child and parent are initially set to absent in the SelectionTree control, you must include both + FollowParent and UIDisallowAbsent in the attributes of the child feature.

+

Note that if you set FollowParent without setting UIDisallowAbsent, the installer cannot force + the child feature out of the absent state. In this case, the child feature matches the parent's + installation state only if the child is set to something other than absent.

+

Set FollowParent and UIDisallowAbsent to ensure a child feature follows the state of the parent feature.

+

+
+ + + Set this attribute and the feature state is Advertise. + +

+ If the feature is listed by the ADDDEFAULT property this bit is ignored and the feature state is determined + according to FavorLocal and FavorSource. +

Omit this attribute and the feature state is determined according to DisallowAdvertise and FavorLocal + and FavorSource.

+

+
+ + + Set this attribute to prevent the feature from being advertised. + +

+ Note that this bit works only with features that are listed by the ADVERTISE property. +

Set this attribute and if the listed feature is not a parent or child, the feature is installed according to + FavorLocal and FavorSource.

+

Set this attribute for the parent of a listed feature and the parent is installed.

+

Set this attribute for the child of a listed feature and the state of the child is Absent.

+

Omit this attribute and if the listed feature is not a parent or child, the feature state is Advertise.

+

Omit this attribute and if the listed feature is a parent or child, the state of both features is Advertise.

+

+
+ + + Set this attribute and the user interface does not display an option to change the feature state + to Absent. Setting this attribute forces the feature to the installation state, whether or not the + feature is visible in the UI. + +

+ Omit this attribute and the user interface displays an option to change the feature state to Absent. +

Set FollowParent and UIDisallowAbsent to ensure a child feature follows the state of the parent feature.

+

Setting this attribute not only affects the UI, but also forces the feature to the install state whether + the feature is visible in the UI or not.

+

+
+ + + Set this attribute and advertising is disabled for the feature if the operating system shell does not + support Windows Installer descriptors. + + + + + Available values for the Attributes column of the File table. + + + + No attributes. + + + Read-only. + + + Hidden. + + + System. + + + The file is vital for the proper operation of the component to which it belongs. + + + The file contains a valid checksum. A checksum is required to repair a file that has become corrupted. + + + This bit must only be added by a patch and if the file is being added by the patch. + + + + The file's source type is uncompressed. If set, ignore the WordCount summary information property. If neither + Noncompressed nor Compressed are set, the compression state of the file is specified by the WordCount summary + information property. Do not set both Noncompressed and Compressed. + + + + + The file's source type is compressed. If set, ignore the WordCount summary information property. If neither + Noncompressed or Compressed are set, the compression state of the file is specified by the WordCount summary + information property. Do not set both Noncompressed and Compressed. + + + + + Defines values for the Action column of the IniFile and RemoveIniFile tables. + + + + Creates or updates a .ini entry. + + + Creates a .ini entry only if the entry does not already exist. + + + Deletes .ini entry. + + + Creates a new entry or appends a new comma-separated value to an existing entry. + + + Deletes a tag from a .ini entry. + + + + Defines values for the Type column of the CompLocator, IniLocator, and RegLocator tables. + + + + Key path is a directory. + + + Key path is a file name. + + + Key path is a registry value. + + + Set this bit to have the installer search the 64-bit portion of the registry. + + + + Defines values for the Root column of the Registry, RemoveRegistry, and RegLocator tables. + + + + HKEY_CURRENT_USER for a per-user installation, + or HKEY_LOCAL_MACHINE for a per-machine installation. + + + HKEY_CLASSES_ROOT + + + HKEY_CURRENT_USER + + + HKEY_LOCAL_MACHINE + + + HKEY_USERS + + + + Defines values for the InstallMode column of the RemoveFile table. + + + + Never remove. + + + Remove when the associated component is being installed (install state = local or source). + + + Remove when the associated component is being removed (install state = absent). + + + + Defines values for the ServiceType, StartType, and ErrorControl columns of the ServiceInstall table. + + + + No flags. + + + A Win32 service that runs its own process. + + + A Win32 service that shares a process. + + + A Win32 service that interacts with the desktop. + This value cannot be used alone and must be added to either + or . + + + Service starts during startup of the system. + + + Service starts when the service control manager calls the StartService function. + + + Specifies a service that can no longer be started. + + + Logs the error, displays a message box and continues the startup operation. + + + Logs the error if it is possible and the system is restarted with the last configuration + known to be good. If the last-known-good configuration is being started, the startup operation fails. + + + When combined with other error flags, specifies that the overall install should fail if + the service cannot be installed into the system. + + + + Defines values for the Event column of the ServiceControl table. + + + + No control events. + + + During an install, starts the service during the StartServices action. + + + During an install, stops the service during the StopServices action. + + + During an install, deletes the service during the DeleteServices action. + + + During an uninstall, starts the service during the StartServices action. + + + During an uninstall, stops the service during the StopServices action. + + + During an uninstall, deletes the service during the DeleteServices action. + + + + Defines values for the StyleBits column of the TextStyle table. + + + + Bold + + + Italic + + + Underline + + + Strike out + + + + Defines values for the Attributes column of the Upgrade table. + + + + Migrates feature states by enabling the logic in the MigrateFeatureStates action. + + + Detects products and applications but does not remove. + + + Continues installation upon failure to remove a product or application. + + + Detects the range of versions including the value in VersionMin. + + + Dectects the range of versions including the value in VersionMax. + + + Detects all languages, excluding the languages listed in the Language column. + + + + Defines a single column of a table in an installer database. + + Once created, a ColumnInfo object is immutable. + + + + Creates a new ColumnInfo object from a column definition. + + name of the column + column definition string + + + + + Creates a new ColumnInfo object from a list of parameters. + + name of the column + type of the column; must be one of the following: + Int16, Int32, String, or Stream + the maximum number of characters for String columns; + ignored for other column types + true if the column is required to have a non-null value + + + + Creates a new ColumnInfo object from a list of parameters. + + name of the column + type of the column; must be one of the following: + Int16, Int32, String, or Stream + the maximum number of characters for String columns; + ignored for other column types + true if the column is required to have a non-null value + true to if the column is only in-memory and + not persisted with the database + for String columns, indicates the column + is localizable; ignored for other column types + + + + Gets the name of the column. + + Name of the column. + + + + Gets the name of the column. + + name of the column + + + + Gets the type of the column as a System.Type. This is one of the following: Int16, Int32, String, or Stream + + type of the column + + + + Gets the type of the column as an integer that can be cast to a System.Data.DbType. This is one of the following: Int16, Int32, String, or Binary + + equivalent DbType of the column as an integer + + + + Gets the size of the column. + + The size of integer columns this is either 2 or 4. For string columns this is the maximum + recommended length of the string, or 0 for unlimited length. For stream columns, 0 is returned. + + + + Gets a value indicating whether the column must be non-null when inserting a record. + + required status of the column + + + + Gets a value indicating whether the column is temporary. Temporary columns are not persisted + when the database is saved to disk. + + temporary status of the column + + + + Gets a value indicating whether the column is a string column that is localizable. + + localizable status of the column + + + + Gets an SQL fragment that can be used to create this column within a CREATE TABLE statement. + + SQL fragment to be used for creating the column +

+ Examples: + + LONG + SHORT TEMPORARY + CHAR(0) LOCALIZABLE + CHAR(72) NOT NULL LOCALIZABLE + OBJECT + +

+
+ + + Gets a short string defining the type and size of the column. + + + The definition string consists + of a single letter representing the data type followed by the width of the column (in characters + when applicable, bytes otherwise). A width of zero designates an unbounded width (for example, + long text fields and streams). An uppercase letter indicates that null values are allowed in + the column. + +

+ + s? - String, variable length (?=1-255) + s0 - String, variable length + i2 - Short integer + i4 - Long integer + v0 - Binary Stream + g? - Temporary string (?=0-255) + j? - Temporary integer (?=0,1,2,4) + l? - Localizable string, variable length (?=1-255) + l0 - Localizable string, variable length + +

+
+ + + Accessor for information about components within the context of an installation session. + + + + + Checks if the collection contains a component. + + name of the component + true if the component is in the collection, else false + + + + Copies the features into an array. + + array that receives the features + offset into the array + + + + Enumerates the components in the collection. + + an enumerator over all features in the collection + + + + Gets information about a component within the context of an installation session. + + name of the component + component object + + + + Gets the number of components defined for the product. + + + + + Provides access to information about a component within the context of an installation session. + + + + + Gets disk space per drive required to install a component. + + Requested component state + A list of InstallCost structures, specifying the cost for each drive for the component +

+ Win32 MSI API: + MsiEnumComponentCosts +

+
+ + + Gets the name of the component (primary key in the Component table). + + + + + Gets the current install state of the designated Component. + + the Session handle is invalid + an unknown Component was requested +

+ Win32 MSI API: + MsiGetComponentState +

+
+ + + Gets or sets the action state of the designated Component. + + the Session handle is invalid + an unknown Component was requested + the user exited the installation +

+ Win32 MSI APIs: + MsiGetComponentState, + MsiSetComponentState +

+
+ + + Represents an instance of a registered component. + + + + + Subclasses of this abstract class represent an instance + of a registered feature or component. + + + + + Gets the product that this item is a part of. + + + + + Gets the current installation state of the item. + + + + + Creates a new ComponentInstallation, automatically detecting the + product that the component is a part of. + + component GUID +

+ Win32 MSI API: + MsiGetProductCode +

+
+ + + Creates a new ComponentInstallation for a component installed by a + specific product. + + component GUID + ProductCode GUID + + + + Gets the set of installed components for all products. + + The installer configuration data is corrupt +

+ Win32 MSI API: + MsiEnumComponents +

+
+ + + Gets the component code (GUID) of the component. + + + + + Gets all client products of a specified component. + + enumeration over all client products of the component + The installer configuration data is corrupt +

+ Because clients are not ordered, any new component has an arbitrary index. + This means that the property may return clients in any order. +

+ Win32 MSI API: + MsiEnumClients +

+
+ + + Gets the installed state of a component. + + the installed state of the component, or InstallState.Unknown + if this component is not part of a product +

+ Win32 MSI API: + MsiGetComponentPath +

+
+ + + Gets the full path to an installed component. If the key path for the component is a + registry key then the registry key is returned. + + The file or registry keypath to the component, or null if the component is not available. + An unknown product or component was specified + The installer configuration data is corrupt +

+ If the component is a registry key, the registry roots are represented numerically. + For example, a registry path of "HKEY_CURRENT_USER\SOFTWARE\Microsoft" would be returned + as "01:\SOFTWARE\Microsoft". The registry roots returned are defined as follows: + HKEY_CLASSES_ROOT=00, HKEY_CURRENT_USER=01, HKEY_LOCAL_MACHINE=02, HKEY_USERS=03, + HKEY_PERFORMANCE_DATA=04 +

+ Win32 MSI APIs: + MsiGetComponentPath, + MsiLocateComponent +

+
+ + + Gets the set of registered qualifiers for the component. + + Enumeration of the qulifiers for the component. + The installer configuration data is corrupt +

+ Because qualifiers are not ordered, any new qualifier has an arbitrary index, + meaning the function can return qualifiers in any order. +

+ Win32 MSI API: + MsiEnumComponentQualifiers +

+
+ + + Holds data about a component qualifier. + +

+ Win32 MSI API: + MsiEnumComponentQualifiers +

+
+ + + Gets the qualifier code. + + + + + Gets the qualifier data. + + + + + Marks a method as a custom action entry point. + +

+ A custom action method must be defined as public and static, + take a single object as a parameter, + and return an enumeration value. +

+
+ + + Name of the custom action entrypoint, or null if the same as the method name. + + + + + Marks a method as a custom action entry point. + + + + + Marks a method as a custom action entry point. + + Name of the function to be exported, + defaults to the name of this method + + + + Gets or sets the name of the custom action entrypoint. A null + value defaults to the name of the method. + + name of the custom action entrypoint, or null if none was specified + + + + Contains a collection of key-value pairs suitable for passing between + immediate and deferred/rollback/commit custom actions. + + + Call the method to get a string + suitable for storing in a property and reconstructing the custom action data later. + + + + + + + "CustomActionData" literal property name. + + + + + Creates a new empty custom action data object. + + + + + Reconstructs a custom action data object from data that was previously + persisted in a string. + + Previous output from . + + + + Adds a key and value to the data collection. + + Case-sensitive data key. + Data value (may be null). + the key does not consist solely of letters, + numbers, and the period, underscore, and space characters. + + + + Adds a value to the data collection, using XML serialization to persist the object as a string. + + Case-sensitive data key. + Data value (may be null). + the key does not consist solely of letters, + numbers, and the period, underscore, and space characters. + The value type does not support XML serialization. + The value could not be serialized. + + + + Gets a value from the data collection, using XML serialization to load the object from a string. + + Case-sensitive data key. + The value could not be deserialized. + + + + Determines whether the data contains an item with the specified key. + + Case-sensitive data key. + true if the data contains an item with the key; otherwise, false + + + + Removes the item with the specified key from the data. + + Case-sensitive data key. + true if the item was successfully removed from the data; + false if an item with the specified key was not found + + + + Gets the value with the specified key. + + Case-sensitive data key. + Value associated with the specified key, or + null if an item with the specified key was not found + true if the data contains an item with the specified key; otherwise, false. + + + + Adds an item with key and value to the data collection. + + Case-sensitive data key, with a data value that may be null. + the key does not consist solely of letters, + numbers, and the period, underscore, and space characters. + + + + Removes all items from the data. + + + + + Determines whether the data contains a specified item. + + The data item to locate. + true if the data contains the item; otherwise, false + + + + Copies the data to an array, starting at a particular array index. + + Destination array. + Index in the array at which copying begins. + + + + Removes an item from the data. + + The item to remove. + true if the item was successfully removed from the data; + false if the item was not found + + + + Returns an enumerator that iterates through the collection. + + An enumerator that can be used to iterate through the collection. + + + + Returns an enumerator that iterates through the collection. + + An enumerator that can be used to iterate through the collection. + + + + Gets a string representation of the data suitable for persisting in a property. + + Data string in the form "Key1=Value1;Key2=Value2" + + + + Ensures that a key contains valid characters. + + key to be validated + the key does not consist solely of letters, + numbers, and the period, underscore, and space characters. + + + + Serializes a value into an XML string. + + Type of the value. + Value to be serialized. + Serialized value data as a string. + + + + Deserializes a value from an XML string. + + Expected type of the value. + Serialized value data. + Deserialized value object. + + + + Escapes a value string by doubling any data-separator (semicolon) characters. + + + Escaped value string + + + + Unescapes a value string by undoubling any doubled data-separator (semicolon) characters. + + + Unescaped value string + + + + Loads key-value pairs from a string into the data collection. + + key-value pair list of the form returned by + + + + Gets a collection object containing all the keys of the data. + + + + + Gets a collection containing all the values of the data. + + + + + Gets or sets a data value with a specified key. + + Case-sensitive data key. + the key does not consist solely of letters, + numbers, and the period, underscore, and space characters. + + + + Gets the number of items in the data. + + + + + Gets a value indicating whether the data is read-only. + + + + + Managed-code portion of the custom action proxy. + + + + + Invokes a managed custom action method. + + Integer handle to the installer session. + Name of the custom action entrypoint. This must + either map to an entrypoint definition in the customActions + config section, or be an explicit entrypoint of the form: + "AssemblyName!Namespace.Class.Method" + Pointer to a delegate used to + make remote API calls, if this custom action is running out-of-proc. + The value returned by the custom action method, + or ERROR_INSTALL_FAILURE if the custom action could not be invoked. + + + + Checks the "MMsiBreak" environment variable for any matching custom action names. + + List of names to search for in the environment + variable string. + True if a match was found, else false. + + + + Locates and parses an entrypoint mapping in CustomAction.config. + + Installer session handle, just used for logging. + Custom action entrypoint name: the key value + in an item in the customActions section of the config file. + Returned display name of the assembly from + the entrypoint mapping. + Returned class name of the entrypoint mapping. + Returned method name of the entrypoint mapping. + True if the entrypoint was found, false if not or if some error + occurred. + + + + Uses reflection to load the assembly and class and find the method. + + Installer session handle, just used for logging. + Display name of the assembly containing the + custom action method. + Fully-qualified name of the class containing the + custom action method. + Name of the custom action method. + The method, or null if not found. + + + + Checks if a method has the right return and paramater types + for a custom action, and that it is marked by a CustomActionAttribute. + + Method to be checked. + True if the method is a valid custom action, else false. + + + + Accesses a Windows Installer database. + +

+ The method must be called before the Database is closed to write out all + persistent changes. If the Commit method is not called, the installer performs an implicit + rollback upon object destruction. +

+ The client can use the following procedure for data access: + Obtain a Database object using one of the Database constructors. + Initiate a query using a SQL string by calling the + method of the Database. + Set query parameters in a and execute the database + query by calling the method of the . This + produces a result that can be fetched or updated. + Call the method of the View repeatedly to return + Records. + Update database rows of a Record object obtained by the Fetch method using + one of the methods of the View. + Release the query and any unfetched records by calling the + method of the View. + Persist any database updates by calling the Commit method of the Database. + + +

+
+ + + Base class for Windows Installer handle types (Database, View, Record, SummaryInfo). + +

+ These classes implement the interface, because they + hold unmanaged resources (MSI handles) that should be properly disposed + when no longer needed. +

+
+ + + Constructs a handle object from a native integer handle. + + Native integer handle. + true to close the handle when this object is disposed or finalized + + + + Closes the handle. After closing a handle, further method calls may throw an . + +

+ The finalizer of this class will NOT close the handle if it is still open, + because finalization can run on a separate thread from the application, + resulting in potential problems if handles are closed from that thread. + It is best that the handle be closed manually as soon as it is no longer needed, + as leaving lots of unused handles open can degrade performance. +

+ Win32 MSI API: + MsiCloseHandle +

+ +
+ + + Closes the handle. After closing a handle, further method calls may throw an . + +

+ The finalizer of this class will NOT close the handle if it is still open, + because finalization can run on a separate thread from the application, + resulting in potential problems if handles are closed from that thread. + It is best that the handle be closed manually as soon as it is no longer needed, + as leaving lots of unused handles open can degrade performance. +

+ This method is merely an alias for the method. +

+ Win32 MSI API: + MsiCloseHandle +

+
+ + + Tests whether this handle object is equal to another handle object. Two handle objects are equal + if their types are the same and their native integer handles are the same. + + The handle object to compare with the current handle object. + true if the specified handle object is equal to the current handle object; otherwise false + + + + Gets a hash value for the handle object. + + A hash code for the handle object. +

+ The hash code is derived from the native integer handle. +

+
+ + + Closes the handle. After closing a handle, further method calls may throw an . + + If true, the method has been called directly or indirectly by a user's code, + so managed and unmanaged resources will be disposed. If false, the method has been called by the + runtime from inside the finalizer, and only unmanaged resources will be disposed. + + + + Gets the native integer handle. + + + + + Checks if the handle is closed. When closed, method calls on the handle object may throw an . + + + + + Gets an object that can be used internally for safe syncronization. + + + + + Opens an existing database in read-only mode. + + Path to the database file. + the database could not be created/opened +

+ Because this constructor initiates database access, it cannot be used with a + running installation. +

+ The Database object should be d after use. + It is best that the handle be closed manually as soon as it is no longer + needed, as leaving lots of unused handles open can degrade performance. +

+ Win32 MSI API: + MsiOpenDatabase +

+
+ + + Opens an existing database with another database as output. + + Path to the database to be read. + Open mode for the database + Database object representing the created or opened database + the database could not be created/opened +

+ When a database is opened as the output of another database, the summary information stream + of the output database is actually a read-only mirror of the original database and thus cannot + be changed. Additionally, it is not persisted with the database. To create or modify the + summary information for the output database it must be closed and re-opened. +

+ The Database object should be d after use. + It is best that the handle be closed manually as soon as it is no longer + needed, as leaving lots of unused handles open can degrade performance. +

+ The database is opened in mode, and will be + automatically commited when it is closed. +

+ Win32 MSI API: + MsiOpenDatabase +

+
+ + + Opens an existing database or creates a new one. + + Path to the database file. If an empty string + is supplied, a temporary database is created that is not persisted. + Open mode for the database + the database could not be created/opened +

+ Because this constructor initiates database access, it cannot be used with a + running installation. +

+ The database object should be d after use. + The finalizer will close the handle if it is still open, however due to the nondeterministic + nature of finalization it is best that the handle be closed manually as soon as it is no + longer needed, as leaving lots of unused handles open can degrade performance. +

+ A database opened in or + mode will be automatically commited when it is + closed. However a database opened in or + mode must have the method + called before it is closed, otherwise no changes will be persisted. +

+ Win32 MSI API: + MsiOpenDatabase +

+
+ + + Creates a new database from an MSI handle. + + Native MSI database handle. + True if the handle should be closed + when the database object is disposed + Path of the database file, if known + Mode the handle was originally opened in + + + + Creates a new Database object from an integer database handle. + +

+ This method is only provided for interop purposes. A Database object + should normally be obtained from or + a public Database constructor. +

+ Integer database handle + true to close the handle when this object is disposed +
+ + + Schedules a file or directory for deletion after the database handle is closed. + + File or directory path to be deleted. All files and subdirectories + under a directory are deleted. +

+ Once an item is scheduled, it cannot be unscheduled. +

+ The items cannot be deleted if the Database object is auto-disposed by the + garbage collector; the handle must be explicitly closed. +

+ Files which are read-only or otherwise locked cannot be deleted, + but they will not cause an exception to be thrown. +

+
+ + + Merges another database with this database. + + The database to be merged into this database + Optional name of table to contain the names of the tables containing + merge conflicts, the number of conflicting rows within the table, and a reference to the table + with the merge conflict. + merge failed due to a schema difference or data conflict + the Database handle is invalid +

+ Merge does not copy over embedded cabinet files or embedded transforms from the + reference database into the target database. Embedded data streams that are listed in the + Binary table or Icon table are copied from the reference database to the target database. + Storage embedded in the reference database are not copied to the target database. +

+ The Merge method merges the data of two databases. These databases must have the same + codepage. The merge fails if any tables or rows in the databases conflict. A conflict exists + if the data in any row in the first database differs from the data in the corresponding row + of the second database. Corresponding rows are in the same table of both databases and have + the same primary key in both databases. The tables of non-conflicting databases must have + the same number of primary keys, same number of columns, same column types, same column names, + and the same data in rows with identical primary keys. Temporary columns however don't matter + in the column count and corresponding tables can have a different number of temporary columns + without creating conflict as long as the persistent columns match. +

+ If the number, type, or name of columns in corresponding tables are different, the + schema of the two databases are incompatible and the installer will stop processing tables + and the merge fails. The installer checks that the two databases have the same schema before + checking for row merge conflicts. If the schemas are incompatible, the databases have be + modified. +

+ If the data in particular rows differ, this is a row merge conflict, the merge fails + and creates a new table with the specified name. The first column of this table is the name + of the table having the conflict. The second column gives the number of rows in the table + having the conflict. +

+ Win32 MSI API: + MsiDatabaseMerge +

+
+ + + Merges another database with this database. + + The database to be merged into this database + merge failed due to a schema difference or data conflict + the Database handle is invalid +

+ MsiDatabaseMerge does not copy over embedded cabinet files or embedded transforms from + the reference database into the target database. Embedded data streams that are listed in + the Binary table or Icon table are copied from the reference database to the target database. + Storage embedded in the reference database are not copied to the target database. +

+ The Merge method merges the data of two databases. These databases must have the same + codepage. The merge fails if any tables or rows in the databases conflict. A conflict exists + if the data in any row in the first database differs from the data in the corresponding row + of the second database. Corresponding rows are in the same table of both databases and have + the same primary key in both databases. The tables of non-conflicting databases must have + the same number of primary keys, same number of columns, same column types, same column names, + and the same data in rows with identical primary keys. Temporary columns however don't matter + in the column count and corresponding tables can have a different number of temporary columns + without creating conflict as long as the persistent columns match. +

+ If the number, type, or name of columns in corresponding tables are different, the + schema of the two databases are incompatible and the installer will stop processing tables + and the merge fails. The installer checks that the two databases have the same schema before + checking for row merge conflicts. If the schemas are incompatible, the databases have be + modified. +

+ Win32 MSI API: + MsiDatabaseMerge +

+
+ + + Checks whether a table exists and is persistent in the database. + + The table to the checked + true if the table exists and is persistent in the database; false otherwise + the table is unknown + the Database handle is invalid +

+ To check whether a table exists regardless of persistence, + use . +

+ Win32 MSI API: + MsiDatabaseIsTablePersistent +

+
+ + + Checks whether a table contains a persistent column with a given name. + + The table to the checked + The name of the column to be checked + true if the column exists in the table; false if the column is temporary or does not exist. + the View could not be executed + the Database handle is invalid +

+ To check whether a column exists regardless of persistence, + use . +

+
+ + + Gets the count of all rows in the table. + + Name of the table whose rows are to be counted + The count of all rows in the table + the View could not be executed + the Database handle is invalid + + + + Gets the count of all rows in the table that satisfy a given condition. + + Name of the table whose rows are to be counted + Conditional expression, such as could be placed on the end of a SQL WHERE clause + The count of all rows in the table satisfying the condition + the SQL WHERE syntax is invalid + the View could not be executed + the Database handle is invalid + + + + Finalizes the persistent form of the database. All persistent data is written + to the writeable database, and no temporary columns or rows are written. + + the Database handle is invalid +

+ For a database open in mode, this method has no effect. +

+ For a database open in or + mode, it is not necessary to call this method because the database will be automatically committed + when it is closed. However this method may be called at any time to persist the current state of tables + loaded into memory. +

+ For a database open in or + mode, no changes will be persisted until this method is called. If the database object is closed without + calling this method, the database file remains unmodified. +

+ Win32 MSI API: + MsiDatabaseCommit +

+
+ + + Copies the structure and data from a specified table to a text archive file. + + Name of the table to be exported + Path to the file to be created + the file path is invalid + the Database handle is invalid +

+ Win32 MSI API: + MsiDatabaseExport +

+
+ + + Imports a database table from a text archive file, dropping any existing table. + + Path to the file to be imported. + The table name is specified within the file. + the file path is invalid + the Database handle is invalid +

+ Win32 MSI API: + MsiDatabaseImport +

+
+ + + Exports all database tables, streams, and summary information to archive files. + + Path to the directory where archive files will be created + the directory path is invalid + the Database handle is invalid +

+ The directory will be created if it does not already exist. +

+ Win32 MSI API: + MsiDatabaseExport +

+
+ + + Imports all database tables, streams, and summary information from archive files. + + Path to the directory from which archive files will be imported + the directory path is invalid + the Database handle is invalid +

+ Win32 MSI API: + MsiDatabaseImport +

+
+ + + Creates a new record object with the requested number of fields. + + Required number of fields, which may be 0. + The maximum number of fields in a record is limited to 65535. + A new record object that can be used with the database. +

+ This method is equivalent to directly calling the + constructor in all cases outside of a custom action context. When in a + custom action session, this method allows creation of a record that can + work with a database other than the session database. +

+ The Record object should be d after use. + It is best that the handle be closed manually as soon as it is no longer + needed, as leaving lots of unused handles open can degrade performance. +

+ Win32 MSI API: + MsiCreateRecord +

+
+ + + Returns the file path of this database, or the handle value if a file path was not specified. + + + + + Closes the database handle. After closing a handle, further method calls may throw . + + If true, the method has been called directly or + indirectly by a user's code, so managed and unmanaged resources will be + disposed. If false, only unmanaged resources will be disposed. + + + + Gets a View object representing the query specified by a SQL string. + + SQL query string, which may contain format items + Zero or more objects to format + A View object representing the query specified by a SQL string + the SQL syntax is invalid + the Database handle is invalid +

+ The parameter is formatted using . +

+ The View object should be d after use. + It is best that the handle be closed manually as soon as it is no longer + needed, as leaving lots of unused handles open can degrade performance. +

+ Win32 MSI API: + MsiDatabaseOpenView +

+
+ + + Executes the query specified by a SQL string. The query may not be a SELECT statement. + + SQL query string, which may contain format items + Zero or more objects to format + the SQL syntax is invalid + the View could not be executed + the Database handle is invalid +

+ The parameter is formatted using + . +

+ Win32 MSI APIs: + MsiDatabaseOpenView, + MsiViewExecute +

+
+ + + Executes the query specified by a SQL string. The query may not be a SELECT statement. + + SQL query string + Optional Record object containing the values that replace + the parameter tokens (?) in the SQL query. + the SQL syntax is invalid + the View could not be executed + the Database handle is invalid +

+ Win32 MSI APIs: + MsiDatabaseOpenView, + MsiViewExecute +

+
+ + + Executes the specified SQL SELECT query and returns all results. + + SQL query string, which may contain format items + Zero or more objects to format + All results combined into an array + the SQL syntax is invalid + the View could not be executed + the Database handle is invalid +

+ The parameter is formatted using + . +

+ Multiple rows columns will be collapsed into a single one-dimensional list. +

+ Win32 MSI APIs: + MsiDatabaseOpenView, + MsiViewExecute, + MsiViewFetch +

+
+ + + Executes the specified SQL SELECT query and returns all results. + + SQL SELECT query string + Optional Record object containing the values that replace + the parameter tokens (?) in the SQL query. + All results combined into an array + the SQL syntax is invalid + the View could not be executed + the Database handle is invalid +

+ Multiple rows columns will be collapsed into a single one-dimensional list. +

+ Win32 MSI APIs: + MsiDatabaseOpenView, + MsiViewExecute, + MsiViewFetch +

+
+ + + Executes the specified SQL SELECT query and returns all results as integers. + + SQL query string, which may contain format items + Zero or more objects to format + All results combined into an array + the SQL syntax is invalid + the View could not be executed + the Database handle is invalid +

+ The parameter is formatted using + . +

+ Multiple rows columns will be collapsed into a single one-dimensional list. +

+ Win32 MSI APIs: + MsiDatabaseOpenView, + MsiViewExecute, + MsiViewFetch +

+
+ + + Executes the specified SQL SELECT query and returns all results as integers. + + SQL SELECT query string + Optional Record object containing the values that replace + the parameter tokens (?) in the SQL query. + All results combined into an array + the SQL syntax is invalid + the View could not be executed + the Database handle is invalid +

+ Multiple rows columns will be collapsed into a single one-dimensional list. +

+ Win32 MSI APIs: + MsiDatabaseOpenView, + MsiViewExecute, + MsiViewFetch +

+
+ + + Executes the specified SQL SELECT query and returns all results as strings. + + SQL query string, which may contain format items + Zero or more objects to format + All results combined into an array + the SQL syntax is invalid + the View could not be executed + the Database handle is invalid +

+ The parameter is formatted using + . +

+ Multiple rows columns will be collapsed into a single on-dimensional list. +

+ Win32 MSI APIs: + MsiDatabaseOpenView, + MsiViewExecute, + MsiViewFetch +

+
+ + + Executes the specified SQL SELECT query and returns all results as strings. + + SQL SELECT query string + Optional Record object containing the values that replace + the parameter tokens (?) in the SQL query. + All results combined into an array + the SQL syntax is invalid + the View could not be executed + the Database handle is invalid +

+ Multiple rows columns will be collapsed into a single on-dimensional list. +

+ Win32 MSI APIs: + MsiDatabaseOpenView, + MsiViewExecute, + MsiViewFetch +

+
+ + + Executes the specified SQL SELECT query and returns a single result. + + SQL query string, which may contain format items + Zero or more objects to format + First field of the first result + the SQL syntax is invalid + the View could not be executed + or the query returned 0 results + the Database handle is invalid +

+ The parameter is formatted using + . +

+ Win32 MSI APIs: + MsiDatabaseOpenView, + MsiViewExecute, + MsiViewFetch +

+
+ + + Executes the specified SQL SELECT query and returns a single result. + + SQL SELECT query string + Optional Record object containing the values that replace + the parameter tokens (?) in the SQL query. + First field of the first result + the SQL syntax is invalid + the View could not be executed + or the query returned 0 results + the Database handle is invalid +

+ Win32 MSI APIs: + MsiDatabaseOpenView, + MsiViewExecute, + MsiViewFetch +

+
+ + + Creates a transform that, when applied to the object database, results in the reference database. + + Database that does not include the changes + Name of the generated transform file, or null to only + check whether or not the two database are identical + true if a transform is generated, or false if a transform is not generated + because there are no differences between the two databases. + the transform could not be generated + a Database handle is invalid +

+ A transform can add non-primary key columns to the end of a table. A transform cannot + be created that adds primary key columns to a table. A transform cannot be created that + changes the order, names, or definitions of columns. +

+ If the transform is to be applied during an installation you must use the + method to populate the + summary information stream. +

+ Win32 MSI API: + MsiDatabaseGenerateTransform +

+
+ + + Creates and populates the summary information stream of an existing transform file, and + fills in the properties with the base and reference ProductCode and ProductVersion. + + Database that does not include the changes + Name of the generated transform file + Error conditions that should be suppressed + when the transform is applied + Defines which properties should be validated + to verify that this transform can be applied to a database. + the transform summary info could not be + generated + a Database handle is invalid +

+ Win32 MSI API: + MsiCreateTransformSummaryInfo +

+
+ + + Apply a transform to the database, recording the changes in the "_TransformView" table. + + Path to the transform file + the transform could not be applied + the Database handle is invalid +

+ Win32 MSI API: + MsiDatabaseApplyTransform +

+
+ + + Apply a transform to the database, suppressing any error conditions + specified by the transform's summary information. + + Path to the transform file + the transform could not be applied + the Database handle is invalid +

+ Win32 MSI API: + MsiDatabaseApplyTransform +

+
+ + + Apply a transform to the database, specifying error conditions to suppress. + + Path to the transform file + Error conditions that are to be suppressed + the transform could not be applied + the Database handle is invalid +

+ Win32 MSI API: + MsiDatabaseApplyTransform +

+
+ + + Checks whether a transform is valid for this Database, according to its validation data and flags. + + Path to the transform file + true if the transform can be validly applied to this Database; false otherwise + the transform could not be applied + the Database handle is invalid + + + + Checks whether a transform is valid for this Database, according to its SummaryInfo data. + + SummaryInfo data of a transform file + true if the transform can be validly applied to this Database; false otherwise + error processing summary info + the Database or SummaryInfo handle is invalid + + + + Gets the file path the Database was originally opened from, or null if not known. + + + + + Gets the open mode for the database. + + + + + Gets a boolean value indicating whether this database was opened in read-only mode. + +

+ Win32 MSI API: + MsiGetDatabaseState +

+
+ + + Gets the collection of tables in the Database. + + + + + Gets or sets the code page of the Database. + + error exporting/importing the codepage data + the Database handle is invalid +

+ Getting or setting the code page is a slow operation because it involves an export or import + of the codepage data to/from a temporary file. +

+
+ + + Gets the SummaryInfo object for this database that can be used to examine and modify properties + to the summary information stream. + + the Database handle is invalid +

+ The object returned from this property does not need to be explicitly persisted or closed. + Any modifications will be automatically saved when the database is committed. +

+ Win32 MSI API: + MsiGetSummaryInformation +

+
+ + + Managed-code portion of the embedded UI proxy. + + + + + Initializes managed embedded UI by loading the UI class and invoking its Initialize method. + + Integer handle to the installer session. + Name of the class that implements the embedded UI. This must + be of the form: "AssemblyName!Namespace.Class" + On entry, contains the current UI level for the installation. After this + method returns, the installer resets the UI level to the returned value of this parameter. + 0 if the embedded UI was successfully loaded and initialized, + ERROR_INSTALL_USEREXIT if the user canceled the installation during initialization, + or ERROR_INSTALL_FAILURE if the embedded UI could not be initialized. + + Due to interop limitations, the successful resulting UILevel is actually returned + as the high-word of the return value instead of via a ref parameter. + + + + + Passes a progress message to the UI class. + + Installer message type and message box options. + Handle to a record containing message data. + Return value returned by the UI class. + + + + Passes a shutdown message to the UI class. + + + + + Instantiates a UI class from a given assembly and class name. + + Installer session, for logging. + Name of the class that implements the embedded UI. This must + be of the form: "AssemblyName!Namespace.Class" + Interface on the UI class for handling UI messages. + + + + Specifies a return status value for custom actions. + + + + Action completed successfully. + + + Skip remaining actions, not an error. + + + User terminated prematurely. + + + Unrecoverable error or unhandled exception occurred. + + + Action not executed. + + + + Specifies the open mode for a . + + + + Open a database read-only, no persistent changes. + + + Open a database read/write in transaction mode. + + + Open a database direct read/write without transaction. + + + Create a new database, transact mode read/write. + + + Create a new database, direct mode read/write. + + + + Log modes available for + and . + + + + Disable logging. + + + Log out of memory or fatal exit information. + + + Log error messages. + + + Log warning messages. + + + Log user requests. + + + Log status messages that are not displayed. + + + Log request to determine a valid source location. + + + Log insufficient disk space error. + + + Log the start of installation actions. + + + Log the data record for installation actions. + + + Log parameters for user-interface initialization. + + + Log the property values at termination. + + + + Sends large amounts of information to log file not generally useful to users. + May be used for support. + + + + + Log extra debugging information. + + + + + Log only on error. + + + + + Log progress bar information. This message includes information on units so far and total number + of units. See for an explanation of the message format. This message + is only sent to an external user interface and is not logged. + + + + + If this is not a quiet installation, then the basic UI has been initialized. If this is a full + UI installation, the Full UI is not yet initialized. This message is only sent to an external + user interface and is not logged. + + + + + If a full UI is being used, the full UI has ended. If this is not a quiet installation, the basic + UI has not yet ended. This message is only sent to an external user interface and is not logged. + + + + + Sent prior to display of the Full UI dialog. This message is only sent to an external user + interface and is not logged. + + + + + List of files in use that need to be replaced. + + + + + [MSI 4.0] List of apps that the user can request Restart Manager to shut down and restart. + + + + + Type of message to be processed by , + , or . + + + + Premature termination, possibly fatal OOM. + + + Formatted error message. + + + Formatted warning message. + + + User request message. + + + Informative message for log. + + + List of files in use that need to be replaced. + + + Request to determine a valid source location. + + + Insufficient disk space message. + + + Start of action: action name & description. + + + Formatted data associated with individual action item. + + + Progress gauge info: units so far, total. + + + Product info for dialog: language Id, dialog caption. + + + Sent prior to UI initialization, no string data. + + + Sent after UI termination, no string data. + + + Sent prior to display or authored dialog or wizard. + + + [MSI 4.0] List of apps that the user can request Restart Manager to shut down and restart. + + + [MSI 4.5] Sent prior to install of a product. + + + [MSI 4.5] Sent after install of a product. + + + + Specifies the install mode for or . + + + + Provide the component only if the feature's installation state is . + + + Only check that the component is registered, without verifying that the key file of the component exists. + + + Provide the component only if the feature exists. + + + Provide the component and perform any installation necessary to provide the component. + + + + Specifies the run mode for . + + + + The administrative mode is installing, or the product is installing. + + + The advertisements are installing or the product is installing or updating. + + + An existing installation is being modified or there is a new installation. + + + Rollback is enabled. + + + The log file is active. It was enabled prior to the installation session. + + + Execute operations are spooling or they are in the determination phase. + + + A reboot is necessary after a successful installation (settable). + + + A reboot is necessary to continue the installation (settable). + + + Files from cabinets and Media table files are installing. + + + The source LongFileNames is suppressed through the PID_MSISOURCE summary property. + + + The target LongFileNames is suppressed through the SHORTFILENAMES property. + + + The operating system is Windows 95, Windows 98, or Windows ME. + + + The operating system supports demand installation. + + + A custom action called from install script execution. + + + A custom action called from rollback execution script. + + + A custom action called from commit execution script. + + + + Installed state of a Component or Feature. + + + + The component is disabled. + + + The installation configuration data is corrupt. + + + The installation is suspended or in progress. + + + Component is set to run from source, but source is unavailable. + + + The buffer overflow is returned. + + + An invalid parameter was passed to the function. + + + An unrecognized product or feature name was passed to the function. + + + The component is broken. + + + The feature is advertised. + + + The component is being removed. In action state and not settable. + + + The component is not installed, or action state is absent but clients remain. + + + The component is installed on the local drive. + + + The component will run from the source, CD, or network. + + + The component will be installed in the default location: local or source. + + + + Specifies the type of installation for . + + + + Searches system for products to patch. + + + Indicates a administrative installation. + + + Indicates a particular instance. + + + + Level of the installation user interface, specified with + . + + + + Does not change UI level. + + + Uses Default UI level. + + + Silent installation. + + + Simple progress and error handling. + + + Authored UI, wizard dialogs suppressed. + + + Authored UI with wizards, progress, and errors. + + + + When combined with the value, the installer does not display + the cancel button in the progress dialog. + + + + + When combined with the value, the installer displays progress + dialog boxes but does not display any modal dialog boxes or error dialog boxes. + + + + + When combined with another value, the installer displays a modal dialog + box at the end of a successful installation or if there has been an error. + No dialog box is displayed if the user cancels. + + + + + Forces display of the source resolution dialog even if the UI is otherwise silent. + + + + + Specifies a return status value for message handlers. These values are returned by + , , and . + + + + An error was found in the message handler. + + + No action was taken. + + + IDOK + + + IDCANCEL + + + IDABORT + + + IDRETRY + + + IDIGNORE + + + IDYES + + + IDNO + + + + Specifies constants defining which buttons to display for a message. This can be cast to + the MessageBoxButtons enum in System.Windows.Forms and System.Windows. + + + + + The message contains an OK button. + + + + + The message contains OK and Cancel buttons. + + + + + The message contains Abort, Retry, and Ignore buttons. + + + + + The message contains Yes, No, and Cancel buttons. + + + + + The message contains Yes and No buttons. + + + + + The message contains Retry and Cancel buttons. + + + + + Specifies constants defining which information to display. This can be cast to + the MessageBoxIcon enum in System.Windows.Forms and System.Windows. + + + + + The message contain no symbols. + + + + + The message contains a symbol consisting of white X in a circle with a red background. + + + + + The message contains a symbol consisting of a white X in a circle with a red background. + + + + + The message contains a symbol consisting of white X in a circle with a red background. + + + + + The message contains a symbol consisting of a question mark in a circle. + + + + + The message contains a symbol consisting of an exclamation point in a triangle with a yellow background. + + + + + The message contains a symbol consisting of an exclamation point in a triangle with a yellow background. + + + + + The message contains a symbol consisting of a lowercase letter i in a circle. + + + + + The message contains a symbol consisting of a lowercase letter i in a circle. + + + + + Specifies constants defining the default button on a message. This can be cast to + the MessageBoxDefaultButton enum in System.Windows.Forms and System.Windows. + + + + + The first button on the message is the default button. + + + + + The second button on the message is the default button. + + + + + The third button on the message is the default button. + + + + + Specifies the different patch states for . + + + + Invalid value. + + + Patches applied to a product. + + + Patches that are superseded by other patches. + + + Patches that are obsolesced by other patches. + + + Patches that are registered to a product but not applied. + + + All valid patch states. + + + + Specifies the reinstall mode for or . + + + + Reinstall only if file is missing. + + + Reinstall if file is missing, or older version. + + + Reinstall if file is missing, or equal or older version. + + + Reinstall if file is missing, or not exact version. + + + Checksum executables, reinstall if missing or corrupt. + + + Reinstall all files, regardless of version. + + + Insure required machine reg entries. + + + Insure required user reg entries. + + + Validate shortcuts items. + + + Use re-cache source install package. + + + + Attributes for methods. + + + + No attributes. + + + Request that the Windows Installer not shutdown the embedded UI until the transaction is complete. + + + Request that the Windows Installer transfer the embedded UI from the original installation. + + + + Transform error conditions available for or + . + + + + No error conditions. + + + Adding a row that already exists. + + + Deleting a row that doesn't exist. + + + Adding a table that already exists. + + + Deleting a table that doesn't exist. + + + Updating a row that doesn't exist. + + + Transform and database code pages do not match and neither code page is neutral. + + + Create the temporary _TransformView table when applying the transform. + + + + Transform validation flags available for . + + + + Validate no properties. + + + Default language must match base database. + + + Product must match base database. + + + Check major version only. + + + Check major and minor versions only. + + + Check major, minor, and update versions. + + + Installed version < base version. + + + Installed version <= base version. + + + Installed version = base version. + + + Installed version >= base version. + + + Installed version > base version. + + + UpgradeCode must match base database. + + + + Specifies the installation context for s, + es, and + + + + + Not installed. + + + User managed install context. + + + User non-managed context. + + + Per-machine context. + + + All contexts, or all valid values. + + + All user-managed contexts. + + + + Defines the type of error encountered by the , , + or methods of the class. + + + + No error. + + + The new record duplicates primary keys of the existing record in a table. + + + There are no null values allowed, or the column is about to be deleted but is referenced by another row. + + + The corresponding record in a foreign table was not found. + + + The data is greater than the maximum value allowed. + + + The data is less than the minimum value allowed. + + + The data is not a member of the values permitted in the set. + + + An invalid version string was supplied. + + + The case was invalid. The case must be all uppercase or all lowercase. + + + An invalid GUID was supplied. + + + An invalid wildcard file name was supplied, or the use of wildcards was invalid. + + + An invalid identifier was supplied. + + + Invalid language IDs were supplied. + + + An invalid file name was supplied. + + + An invalid path was supplied. + + + An invalid conditional statement was supplied. + + + An invalid format string was supplied. + + + An invalid template string was supplied. + + + An invalid string was supplied in the DefaultDir column of the Directory table. + + + An invalid registry path string was supplied. + + + An invalid string was supplied in the CustomSource column of the CustomAction table. + + + An invalid property string was supplied. + + + The _Validation table is missing a reference to a column. + + + The category column of the _Validation table for the column is invalid. + + + The table in the Keytable column of the _Validation table was not found or loaded. + + + The value in the MaxValue column of the _Validation table is less than the value in the MinValue column. + + + An invalid cabinet name was supplied. + + + An invalid shortcut target name was supplied. + + + The string is too long for the length specified by the column definition. + + + An invalid localization attribute was supplied. (Primary keys cannot be localized.) + + + + Specifies the modify mode for . + + + + + Refreshes the information in the supplied record without changing the position + in the result set and without affecting subsequent fetch operations. + + + + Refreshes the data in a Record. + + + Inserts a Record into the view. + + + Updates the View with new data from the Record. + + + Updates or inserts a Record into the View. + + + Updates or deletes and inserts a Record into the View. + + + Inserts or validates a record. + + + Deletes a Record from the View. + + + Inserts a Record into the View. The inserted data is not persistent. + + + Validates a record. + + + Validates a new record. + + + Validates fields of a fetched or new record. Can validate one or more fields of an incomplete record. + + + Validates a record that will be deleted later. + + + + Base class for Windows Installer exceptions. + + + + + Creates a new InstallerException with a specified error message and a reference to the + inner exception that is the cause of this exception. + + The message that describes the error. + The exception that is the cause of the current exception. If the + innerException parameter is not a null reference (Nothing in Visual Basic), the current exception + is raised in a catch block that handles the inner exception. + + + + Creates a new InstallerException with a specified error message. + + The message that describes the error. + + + + Creates a new InstallerException. + + + + + Initializes a new instance of the InstallerException class with serialized data. + + The SerializationInfo that holds the serialized object data about the exception being thrown. + The StreamingContext that contains contextual information about the source or destination. + + + + Sets the SerializationInfo with information about the exception. + + The SerializationInfo that holds the serialized object data about the exception being thrown. + The StreamingContext that contains contextual information about the source or destination. + + + + Gets extended information about the error, or null if no further information + is available. + + A Record object. Field 1 of the Record contains the installer + message code. Other fields contain data specific to the particular error. +

+ If the record is passed to , it is formatted + by looking up the string in the current database. If there is no installation + session, the formatted error message may be obtained by a query on the Error table using + the error code, followed by a call to . + Alternatively, the standard MSI message can by retrieved by calling the + method. +

+ The following methods and properties may report extended error data: + + (constructor) + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + (constructor) + . + . + . + . + . + . + . + . + . + +

+ The Record object should be d after use. + It is best that the handle be closed manually as soon as it is no longer + needed, as leaving lots of unused handles open can degrade performance. +

+ Win32 MSI API: + MsiGetLastErrorRecord +

+
+ + + Gets the system error code that resulted in this exception, or 0 if not applicable. + + + + + Gets a message that describes the exception. This message may contain detailed + formatted error data if it was available. + + + + + User Canceled the installation. + + + + + Creates a new InstallCanceledException with a specified error message and a reference to the + inner exception that is the cause of this exception. + + The message that describes the error. + The exception that is the cause of the current exception. If the + innerException parameter is not a null reference (Nothing in Visual Basic), the current exception + is raised in a catch block that handles the inner exception. + + + + Creates a new InstallCanceledException with a specified error message. + + The message that describes the error. + + + + Creates a new InstallCanceledException. + + + + + Initializes a new instance of the InstallCanceledException class with serialized data. + + The SerializationInfo that holds the serialized object data about the exception being thrown. + The StreamingContext that contains contextual information about the source or destination. + + + + A bad SQL query string was passed to or . + + + + + Creates a new BadQuerySyntaxException with a specified error message and a reference to the + inner exception that is the cause of this exception. + + The message that describes the error. + The exception that is the cause of the current exception. If the + innerException parameter is not a null reference (Nothing in Visual Basic), the current exception + is raised in a catch block that handles the inner exception. + + + + Creates a new BadQuerySyntaxException with a specified error message. + + The message that describes the error. + + + + Creates a new BadQuerySyntaxException. + + + + + Initializes a new instance of the BadQuerySyntaxException class with serialized data. + + The SerializationInfo that holds the serialized object data about the exception being thrown. + The StreamingContext that contains contextual information about the source or destination. + + + + A method was called on an invalid installer handle. The handle may have been already closed. + + + + + Creates a new InvalidHandleException with a specified error message and a reference to the + inner exception that is the cause of this exception. + + The message that describes the error. + The exception that is the cause of the current exception. If the + innerException parameter is not a null reference (Nothing in Visual Basic), the current exception + is raised in a catch block that handles the inner exception. + + + + Creates a new InvalidHandleException with a specified error message. + + The message that describes the error. + + + + Creates a new InvalidHandleException. + + + + + Initializes a new instance of the InvalidHandleException class with serialized data. + + The SerializationInfo that holds the serialized object data about the exception being thrown. + The StreamingContext that contains contextual information about the source or destination. + + + + A failure occurred when executing . The exception may contain + details about the merge conflict. + + + + + Creates a new MergeException with a specified error message and a reference to the + inner exception that is the cause of this exception. + + The message that describes the error. + The exception that is the cause of the current exception. If the + innerException parameter is not a null reference (Nothing in Visual Basic), the current exception + is raised in a catch block that handles the inner exception. + + + + Creates a new MergeException with a specified error message. + + The message that describes the error. + + + + Creates a new MergeException. + + + + + Initializes a new instance of the MergeException class with serialized data. + + The SerializationInfo that holds the serialized object data about the exception being thrown. + The StreamingContext that contains contextual information about the source or destination. + + + + Sets the SerializationInfo with information about the exception. + + The SerializationInfo that holds the serialized object data about the exception being thrown. + The StreamingContext that contains contextual information about the source or destination. + + + + Gets the number of merge conflicts in each table, corresponding to the tables returned by + . + + + + + Gets the list of tables containing merge conflicts. + + + + + Gets a message that describes the merge conflits. + + + + + Defines a callback function that the installer calls for progress notification and error messages. + + + + + [MSI 3.1] Defines a callback function that the installer calls for record-based progress notification and error messages. + + + + + Provides static methods for installing and configuring products and patches. + + + + + Enables an external user-interface handler. This external UI handler is called before the + normal internal user-interface handler. The external UI handler has the option to suppress + the internal UI by returning a non-zero value to indicate that it has handled the messages. + + A callback delegate that handles the UI messages + Specifies which messages to handle using the external message handler. + If the external handler returns a non-zero result, then that message will not be sent to the UI, + instead the message will be logged if logging has been enabled. + The previously set external handler, or null if there was no previously set handler +

+ To restore the previous UI handler, a second call is made to SetExternalUI using the + ExternalUIHandler returned by the first call to SetExternalUI and specifying + as the message filter. +

+ The external user interface handler does not have full control over the external user + interface unless is called with the uiLevel parameter set to + . If SetInternalUI is not called, the internal user + interface level defaults to . As a result, any message not + handled by the external user interface handler is handled by Windows Installer. The initial + "Preparing to install..." dialog always appears even if the external user interface + handler handles all messages. +

+ SetExternalUI should only be called from a bootstrapping application. You cannot call + it from a custom action +

+ Win32 MSI API: + MsiSetExternalUI +

+
+ + + [MSI 3.1] Enables a record-based external user-interface handler. This external UI handler is called + before the normal internal user-interface handler. The external UI handler has the option to suppress + the internal UI by returning a non-zero value to indicate that it has handled the messages. + + A callback delegate that handles the UI messages + Specifies which messages to handle using the external message handler. + If the external handler returns a non-zero result, then that message will not be sent to the UI, + instead the message will be logged if logging has been enabled. + The previously set external handler, or null if there was no previously set handler +

+ To restore the previous UI handler, a second call is made to SetExternalUI using the + ExternalUIHandler returned by the first call to SetExternalUI and specifying + as the message filter. +

+ The external user interface handler does not have full control over the external user + interface unless is called with the uiLevel parameter set to + . If SetInternalUI is not called, the internal user + interface level defaults to . As a result, any message not + handled by the external user interface handler is handled by Windows Installer. The initial + "Preparing to install..." dialog always appears even if the external user interface + handler handles all messages. +

+ SetExternalUI should only be called from a bootstrapping application. You cannot call + it from a custom action +

+ Win32 MSI API: + MsiSetExternalUIRecord +

+
+ + + Enables the installer's internal user interface. Then this user interface is used + for all subsequent calls to user-interface-generating installer functions in this process. + + Specifies the level of complexity of the user interface + Handle to a window, which becomes the owner of any user interface created. + A pointer to the previous owner of the user interface is returned. + The previous user interface level +

+ Win32 MSI API: + MsiSetInternalUI +

+
+ + + Enables the installer's internal user interface. Then this user interface is used + for all subsequent calls to user-interface-generating installer functions in this process. + The owner of the user interface does not change. + + Specifies the level of complexity of the user interface + The previous user interface level +

+ Win32 MSI API: + MsiSetInternalUI +

+
+ + + Enables logging of the selected message type for all subsequent install sessions in + the current process space. + + One or more mode flags specifying the type of messages to log + Full path to the log file. A null path disables logging, + in which case the logModes paraneter is ignored. + an invalid log mode was specified + This method takes effect on any new installation processes. Calling this + method from within a custom action will not start logging for that installation. + + + + Enables logging of the selected message type for all subsequent install sessions in + the current process space. + + One or more mode flags specifying the type of messages to log + Full path to the log file. A null path disables logging, + in which case the logModes paraneter is ignored. + If true, the log lines will be appended to any existing file content. + If false, the log file will be truncated if it exists. The default is false. + If true, the log will be flushed after every line. + If false, the log will be flushed every 20 lines. The default is true. + an invalid log mode was specified +

+ This method takes effect on any new installation processes. Calling this + method from within a custom action will not start logging for that installation. +

+ Win32 MSI API: + MsiEnableLog +

+
+ + + increments the usage count for a particular feature and returns the installation state for + that feature. This method should be used to indicate an application's intent to use a feature. + + The product code of the product. + The feature to be used. + Must have the value . + The installed state of the feature. +

+ The UseFeature method should only be used on features known to be published. The application + should determine the status of the feature by calling either the FeatureState method or + Features method. +

+ Win32 MSI APIs: + MsiUseFeature, + MsiUseFeatureEx +

+
+ + + Opens an installer package for use with functions that access the product database and install engine, + returning an Session object. + + Path to the package + Specifies whether or not the create a Session object that ignores the + computer state and that is incapable of changing the current computer state. A value of false yields + the normal behavior. A value of true creates a "safe" Session object that cannot change of the current + machine state. + A Session object allowing access to the product database and install engine + The product could not be opened + The installer configuration data is corrupt +

+ Note that only one Session object can be opened by a single process. OpenPackage cannot be used in a + custom action because the active installation is the only session allowed. +

+ A "safe" Session object ignores the current computer state when opening the package and prevents + changes to the current computer state. +

+ The Session object should be d after use. + It is best that the handle be closed manually as soon as it is no longer + needed, as leaving lots of unused handles open can degrade performance. +

+ Win32 MSI APIs: + MsiOpenPackage, + MsiOpenPackageEx +

+
+ + + Opens an installer package for use with functions that access the product database and install engine, + returning an Session object. + + Database used to create the session + Specifies whether or not the create a Session object that ignores the + computer state and that is incapable of changing the current computer state. A value of false yields + the normal behavior. A value of true creates a "safe" Session object that cannot change of the current + machine state. + A Session object allowing access to the product database and install engine + The product could not be opened + The installer configuration data is corrupt +

+ Note that only one Session object can be opened by a single process. OpenPackage cannot be used in a + custom action because the active installation is the only session allowed. +

+ A "safe" Session object ignores the current computer state when opening the package and prevents + changes to the current computer state. +

+ The Session object should be d after use. + It is best that the handle be closed manually as soon as it is no longer + needed, as leaving lots of unused handles open can degrade performance. +

+ Win32 MSI APIs: + MsiOpenPackage, + MsiOpenPackageEx +

+
+ + + Opens an installer package for an installed product using the product code. + + Product code of the installed product + A Session object allowing access to the product database and install engine, + or null if the specified product is not installed. + An unknown product was requested + The product could not be opened + The installer configuration data is corrupt +

+ Note that only one Session object can be opened by a single process. OpenProduct cannot be + used in a custom action because the active installation is the only session allowed. +

+ The Session object should be d after use. + It is best that the handle be closed manually as soon as it is no longer + needed, as leaving lots of unused handles open can degrade performance. +

+ Win32 MSI API: + MsiOpenProduct +

+
+ + + Gets the full component path, performing any necessary installation. This method prompts for source if + necessary and increments the usage count for the feature. + + Product code for the product that contains the feature with the necessary component + Feature ID of the feature with the necessary component + Component code of the necessary component + Installation mode; this can also include bits from + Path to the component +

+ Win32 MSI API: + MsiProvideComponent +

+
+ + + Gets the full component path for a qualified component that is published by a product and + performs any necessary installation. This method prompts for source if necessary and increments + the usage count for the feature. + + Specifies the component ID for the requested component. This may not be the + GUID for the component itself but rather a server that provides the correct functionality, as in the + ComponentId column of the PublishComponent table. + Specifies a qualifier into a list of advertising components (from PublishComponent Table). + Installation mode; this can also include bits from + Optional; specifies the product to match that has published the qualified component. + Path to the component +

+ Win32 MSI APIs: + MsiProvideQualifiedComponent + MsiProvideQualifiedComponentEx +

+
+ + + Gets the full path to a Windows Installer component containing an assembly. This method prompts for a source and + increments the usage count for the feature. + + Assembly name + Set to null for global assemblies. For private assemblies, set to the full path of the + application configuration file (.cfg file) or executable file (.exe) of the application to which the assembly + has been made private. + Installation mode; this can also include bits from + True if this is a Win32 assembly, false if it is a .NET assembly + Path to the assembly +

+ Win32 MSI API: + MsiProvideAssembly +

+
+ + + Installs files that are unexpectedly missing. + + Product code for the product that owns the component to be installed + Component to be installed + Specifies the way the component should be installed. + the user exited the installation +

+ Win32 MSI API: + MsiInstallMissingComponent +

+
+ + + Installs files that are unexpectedly missing. + + Product code for the product that owns the file to be installed + File to be installed + the user exited the installation +

+ Win32 MSI API: + MsiInstallMissingFile +

+
+ + + Reinstalls a feature. + + Product code for the product containing the feature to be reinstalled + Feature to be reinstalled + Reinstall modes + the user exited the installation +

+ Win32 MSI API: + MsiReinstallFeature +

+
+ + + Reinstalls a product. + + Product code for the product to be reinstalled + Reinstall modes + the user exited the installation +

+ Win32 MSI API: + MsiReinstallProduct +

+
+ + + Opens an installer package and initializes an install session. + + path to the patch package + command line property settings + There was an error installing the product +

+ To completely remove a product, set REMOVE=ALL in . +

+ This method displays the user interface with the current settings and + log mode. You can change user interface settings with the + and functions. You can set the log mode with the + function. +

+ The and properties should be + tested after calling this method. +

+ Win32 MSI API: + MsiInstallProduct +

+
+ + + Installs or uninstalls a product. + + Product code of the product to be configured. + Specifies the default installation configuration of the + product. The parameter is ignored and all features + are installed if the parameter is set to any other + value than . This parameter must be either 0 + (install using authored feature levels), 65535 (install all features), or a value + between 0 and 65535 to install a subset of available features. + Specifies the installation state for the product. + Specifies the command line property settings. This should + be a list of the format Property=Setting Property=Setting. + There was an error configuring the product +

+ This method displays the user interface with the current settings and + log mode. You can change user interface settings with the + and functions. You can set the log mode with the + function. +

+ The and properties should be + tested after calling this method. +

+ Win32 MSI APIs: + MsiConfigureProduct, + MsiConfigureProductEx +

+
+ + + Configures the installed state for a product feature. + + Product code of the product to be configured. + Specifies the feature ID for the feature to be configured. + Specifies the installation state for the feature. + There was an error configuring the feature +

+ The and properties should be + tested after calling this method. +

+ Win32 MSI API: + MsiConfigureFeature +

+
+ + + For each product listed by the patch package as eligible to receive the patch, ApplyPatch invokes + an installation and sets the PATCH property to the path of the patch package. + + path to the patch package + optional command line property settings + There was an error applying the patch +

+ The and properties should be + tested after calling this method. +

+ Win32 MSI API: + MsiApplyPatch +

+
+ + + For each product listed by the patch package as eligible to receive the patch, ApplyPatch invokes + an installation and sets the PATCH property to the path of the patch package. + + path to the patch package + path to the product to be patched, if installType + is set to + type of installation to patch + optional command line property settings + There was an error applying the patch +

+ The and properties should be + tested after calling this method. +

+ Win32 MSI API: + MsiApplyPatch +

+
+ + + Removes one or more patches from a single product. To remove a patch from + multiple products, RemovePatches must be called for each product. + + List of patches to remove. Each patch can be specified by the GUID + of the patch or the full path to the patch package. + The ProductCode (GUID) of the product from which the patches + are removed. This parameter cannot be null. + optional command line property settings + There was an error removing the patches +

+ The and properties should be + tested after calling this method. +

+ Win32 MSI API: + MsiRemovePatches +

+
+ + + Determines which patches apply to a specified product MSI and in what sequence. + + Full path to an MSI file that is the target product + for the set of patches. + An array of strings specifying the patches to be checked. Each item + may be the path to an MSP file, the path an XML file, or just an XML blob. + Callback to be invoked for each inapplicable patch, reporting the + reason the patch is not applicable. This value may be left null if that information is not + desired. + An array of selected patch strings from , indicating + the set of applicable patches. The items are re-ordered to be in the best sequence. +

+ If an item in is a file path but does not end in .MSP or .XML, + it is assumed to be an MSP file. +

+ As this overload uses InstallContext.None, it does not consider the current state of + the system. +

+ Win32 MSI API: + MsiDetermineApplicablePatches +

+
+ + + Determines which patches apply to a specified product and in what sequence. If + the product is installed, this method accounts for patches that have already been applied to + the product and accounts for obsolete and superceded patches. + + The product that is the target for the set of patches. This may be + either a ProductCode (GUID) of a product that is currently installed, or the path to a an + MSI file. + An array of strings specifying the patches to be checked. Each item + may be the path to an MSP file, the path an XML file, or just an XML blob. + Callback to be invoked for each inapplicable patch, reporting the + reason the patch is not applicable. This value may be left null if that information is not + desired. + Specifies a security identifier (SID) of a user. This parameter restricts + the context of enumeration for this user account. This parameter cannot be the special SID + strings s-1-1-0 (everyone) or s-1-5-18 (local system). If is set to + or , then + must be null. For the current user context, + can be null and can be set to + or . + Restricts the enumeration to per-user-unmanaged, per-user-managed, + or per-machine context, or (if referring to an MSI) to no system context at all. This + parameter can be , , + , or . + An array of selected patch strings from , indicating + the set of applicable patches. The items are re-ordered to be in the best sequence. +

+ If an item in is a file path but does not end in .MSP or .XML, + it is assumed to be an MSP file. +

+ Passing an InstallContext of None only analyzes the MSI file; it does not consider the + current state of the system. You cannot use InstallContext.None with a ProductCode GUID. +

+ Win32 MSI APIs: + MsiDetermineApplicablePatches + MsiDeterminePatchSequence +

+
+ + + Applies one or more patches to products that are eligible to receive the patch. + For each product listed by the patch package as eligible to receive the patch, ApplyPatch invokes + an installation and sets the PATCH property to the path of the patch package. + + The set of patch packages to be applied. + Each item is the full path to an MSP file. + Provides the ProductCode of the product being patched. If this parameter + is null, the patches are applied to all products that are eligible to receive these patches. + optional command line property settings +

+ Win32 MSI API: + MsiApplyMultiplePatches +

+
+ + + Extracts information from a patch that can be used to determine whether the patch + applies on a target system. The method returns an XML string that can be provided to + + instead of the full patch file. + + Full path to the patch being queried. + XML string containing patch data. +

+ Win32 MSI API: + MsiExtractPatchXMLData +

+
+ + + [MSI 3.1] Migrates a user's application configuration data to a new SID. + + Previous user SID that data is to be migrated from + New user SID that data is to be migrated to +

+ Win32 MSI API: + MsiNotifySidChange +

+
+ + + Advertises a product to the local computer. + + Path to the package of the product being advertised + True if the product is user-assigned; false if it is machine-assigned. + Semi-colon delimited list of transforms to be applied. This parameter may be null. + The language to use if the source supports multiple languages + the specified package file does not exist + +

+ Win32 MSI APIs: + MsiAdvertiseProduct, + MsiAdvertiseProductEx +

+
+ + + Generates an advertise script. The method enables the installer to write to a + script the registry and shortcut information used to assign or publish a product. + + Path to the package of the product being advertised + path to script file to be created with the advertise information + Semi-colon delimited list of transforms to be applied. This parameter may be null. + The language to use if the source supports multiple languages + the specified package file does not exist + +

+ Win32 MSI APIs: + MsiAdvertiseProduct, + MsiAdvertiseProductEx +

+
+ + + Generates an advertise script. The method enables the installer to write to a + script the registry and shortcut information used to assign or publish a product. + + Path to the package of the product being advertised + path to script file to be created with the advertise information + Semi-colon delimited list of transforms to be applied. This parameter may be null. + The language to use if the source supports multiple languages + Targeted processor architecture. + True to install multiple instances through product code changing transform. + Advertises a new instance of the product. Requires that the parameter + includes the instance transform that changes the product code. + +

+ Win32 MSI APIs: + MsiAdvertiseProduct, + MsiAdvertiseProductEx +

+
+ + + Copies an advertise script file to the local computer. + + Path to a script file generated by + + Flags controlling advertisement + True if specified items are to be removed instead of being created +

+ The process calling this function must be running under the LocalSystem account. To advertise an + application for per-user installation to a targeted user, the thread that calls this function must + impersonate the targeted user. If the thread calling this function is not impersonating a targeted + user, the application is advertised to all users for installation with elevated privileges. +

+
+ + + Processes an advertise script file into the specified locations. + + Path to a script file generated by + + An optional path to a folder in which advertised icon files and transform + files are located. If this parameter is null, no icon or transform files are written. + True if shortcuts should be created + True if specified items are to be removed instead of created +

+ The process calling this function must be running under the LocalSystem account. To advertise an + application for per-user installation to a targeted user, the thread that calls this function must + impersonate the targeted user. If the thread calling this function is not impersonating a targeted + user, the application is advertised to all users for installation with elevated privileges. +

+ Win32 MSI API: + MsiProcessAdvertiseScript +

+
+ + + Gets product information for an installer script file. + + Path to a script file generated by + + ProductInstallation stub with advertise-related properties filled in. + An invalid product property was requested +

+ Only the following properties will be filled in in the returned object:

    +
  • +
  • +
  • +
  • +
  • +
Other properties will be null. +

+ Win32 MSI API: + MsiGetProductInfoFromScript +

+
+ + + Gets a Windows Installer error message in the system default language. + + The error number. + The message string, or null if the error message is not found. +

+ The returned string may have tokens such as [2] and [3] that are meant to be substituted + with context-specific values. +

+ Error numbers greater than 2000 refer to MSI "internal" errors, and are always + returned in English. +

+
+ + + Gets a Windows Installer error message in a specified language. + + The error number. + The locale for the message. + The message string, or null if the error message or locale is not found. +

+ The returned string may have tokens such as [2] and [3] that are meant to be substituted + with context-specific values. +

+ Error numbers greater than 2000 refer to MSI "internal" errors, and are always + returned in English. +

+
+ + + Gets a formatted Windows Installer error message in the system default language. + + Error record containing the error number in the first field, and + error-specific parameters in the other fields. + The message string, or null if the error message is not found. +

+ Error numbers greater than 2000 refer to MSI "internal" errors, and are always + returned in English. +

+
+ + + Gets a formatted Windows Installer error message in a specified language. + + Error record containing the error number in the first field, and + error-specific parameters in the other fields. + The locale for the message. + The message string, or null if the error message or locale is not found. +

+ Error numbers greater than 2000 refer to MSI "internal" errors, and are always + returned in English. +

+
+ + + Gets the version string of the path specified using the format that the installer + expects to find it in in the database. + + Path to the file + Version string in the "#.#.#.#" format, or an empty string if the file + does not contain version information + the file does not exist or could not be read +

+ Win32 MSI API: + MsiGetFileVersion +

+
+ + + Gets the language string of the path specified using the format that the installer + expects to find them in in the database. + + Path to the file + Language string in the form of a decimal language ID, or an empty string if the file + does not contain a language ID + the file does not exist or could not be read +

+ Win32 MSI API: + MsiGetFileVersion +

+
+ + + Gets a 128-bit hash of the specified file. + + Path to the file + Integer array of length 4 which receives the + four 32-bit parts of the hash value. + the file does not exist or + could not be read +

+ Win32 MSI API: + MsiGetFileHash +

+
+ + + Examines a shortcut and returns its product, feature name, and component if available. + + Full path to a shortcut + ShortcutTarget structure containing target product code, feature, and component code +

+ Win32 MSI API: + MsiGetShortcutTarget +

+
+ + + Verifies that the given file is an installation package. + + Path to the package + True if the file is an installation package; false otherwise. + the specified package file does not exist + the package file could not be opened +

+ Win32 MSI API: + MsiVerifyPackage +

+
+ + + [MSI 4.0] Gets the list of files that can be updated by one or more patches. + + ProductCode (GUID) of the product which is + the target of the patches + list of file paths of one or more patches to be + analyzed + List of absolute paths of files that can be updated when the + patches are applied on this system. +

+ Win32 MSI API: + MsiGetPatchFileList +

+
+ + + Indicates whether a system reboot is required after running an installation or configuration operation. + + + + + Indicates whether a system reboot has been initiated after running an installation or configuration operation. + + + + + Gets the current version of the installer. + + + + + Accessor for information about features within the context of an installation session. + + + + + Checks if the collection contains a feature. + + name of the feature + true if the feature is in the collection, else false + + + + Copies the features into an array. + + array that receives the features + offset into the array + + + + Enumerates the features in the collection. + + an enumerator over all features in the collection + + + + Gets information about a feature within the context of an installation session. + + name of the feature + feature object + + + + Gets the number of features defined for the product. + + + + + Provides access to information about a feature within the context of an installation session. + + + + + Calculates the disk space required by the feature and its selected children and parent features. + + If true, the parent features are included in the cost. + If true, the child features are included in the cost. + Specifies the installation state. + The disk space requirement in bytes. +

+ Win32 MSI API: + MsiGetFeatureCost +

+
+ + + Gets the name of the feature (primary key in the Feature table). + + + + + Gets the current install state of the feature. + + the Session handle is invalid + an unknown feature was requested +

+ Win32 MSI API: + MsiGetFeatureState +

+
+ + + Gets or sets the action state of the feature. + + the Session handle is invalid + an unknown feature was requested +

+ When changing the feature action, the action state of all the Components linked to the changed + Feature records are also updated appropriately, based on the new feature Select state. + All Features can be configured at once by specifying the keyword ALL instead of a specific feature name. +

+ Win32 MSI APIs: + MsiGetFeatureState, + MsiSetFeatureState +

+
+ + + Gets a list of valid installation states for the feature. + + the Session handle is invalid + an unknown feature was requested +

+ Win32 MSI API: + MsiGetFeatureValidStates +

+
+ + + Gets or sets the attributes of the feature. + + the Session handle is invalid + an unknown feature was requested +

+ Win32 MSI APIs: + MsiGetFeatureInfo, + MsiSetFeatureAttributes +

+ Since the lpAttributes paramter of + MsiGetFeatureInfo + does not contain an equivalent flag for , this flag will + not be retrieved. +

+ Since the dwAttributes parameter of + MsiSetFeatureAttributes + does not contain an equivalent flag for , the presence + of this flag will be ignored. +

+
+ + + Gets the title of the feature. + + the Session handle is invalid + an unknown feature was requested +

+ Win32 MSI API: + MsiGetFeatureInfo +

+
+ + + Gets the description of the feature. + + the Session handle is invalid + an unknown feature was requested +

+ Win32 MSI API: + MsiGetFeatureInfo +

+
+ + + Represents an instance of a feature of an installed product. + + + + + Creates a new FeatureInstallation instance for a feature of a product. + + feature name + ProductCode GUID + + + + Gets the name of the feature. + + + + + Gets the installed state of the feature. + +

+ Win32 MSI API: + MsiQueryFeatureState +

+
+ + + Gets the parent of the feature, or null if the feature has no parent (it is a root feature). + + + Invocation of this property may be slightly costly for products with many features, + because it involves an enumeration of all the features in the product. + + + + + Gets the usage metrics for the feature. + +

+ If no usage metrics are recorded, the value is 0. +

+ Win32 MSI API: + MsiGetFeatureUsage +

+
+ + + Holds data about the usage of a feature. + + + + + Gets count of the number of times the feature has been used. + + + + + Gets the date the feature was last used. + + + + + [MSI 4.5] Interface for an embedded external user interface for an installation. + + + Classes which implement this interface must have a public constructor that takes no parameters. + + + + + Initializes the embedded UI. + + Handle to the installer which can be used to get and set properties. + The handle is only valid for the duration of this method call. + Path to the directory that contains all the files from the MsiEmbeddedUI table. + On entry, contains the current UI level for the installation. After this + method returns, the installer resets the UI level to the returned value of this parameter. + True if the embedded UI was successfully initialized; false if the installation + should continue without the embedded UI. + The installation was canceled by the user. + The embedded UI failed to initialize and + causes the installation to fail. +

+ Win32 MSI API: + InitializeEmbeddedUI +

+
+ + + Processes information and progress messages sent to the user interface. + + Message type. + Record that contains message data. + Message buttons. + Message box icon. + Message box default button. + Result of processing the message. +

+ Win32 MSI API: + EmbeddedUIHandler +

+
+ + + Shuts down the embedded UI at the end of the installation. + + + If the installation was canceled during initialization, this method will not be called. + If the installation was canceled or failed at any later point, this method will be called at the end. +

+ Win32 MSI API: + ShutdownEmbeddedUI +

+
+ + + Subclasses of this abstract class represent a unique instance of a + registered product or patch installation. + + + + + Gets the user security identifier (SID) under which this product or patch + installation is available. + + + + + Gets the user context of this product or patch installation. + + + + + Gets the source list of this product or patch installation. + + + + + Gets a value indicating whether this product or patch is installed on the current system. + + + + + Gets a property about the product or patch installation. + + Name of the property being retrieved. + + + + + Represents a per-drive disk space cost for an installation. + + + + + Creates a new InstallCost object. + + name of the drive this cost data applies to + installation cost on this drive, as a number of bytes + temporary disk space required on this drive, as a number of bytes + + + + The name of the drive this cost data applies to. + + + + + The installation cost on this drive, as a number of bytes. + + + + + The temporary disk space required on this drive, as a number of bytes. + +

+ This temporary space requirement is space needed only for the duration + of the installation, over the final footprint on disk. +

+
+ + + Receives an exception from + + indicating the reason a particular patch is not applicable to a product. + + MSP file path, XML file path, or XML blob that was passed to + + exception indicating the reason the patch is not applicable +

+ If is an or subclass, then + its and + properties will indicate a more specific reason the patch was not applicable. +

+ The could also be a FileNotFoundException if the + patch string was a file path. +

+
+ + + [MSI 4.5] Handle to a multi-session install transaction. + +

+ Win32 MSI APIs: + MsiBeginTransaction + MsiJoinTransaction + MsiEndTransaction +

+
+ + + [MSI 4.5] Begins transaction processing of a multi-package installation. + + Name of the multi-package installation. + Select optional behavior when beginning the transaction. + The transaction could not be initialized. +

+ Win32 MSI API: + MsiBeginTransaction +

+
+ + + Internal constructor. + + + The second parameter is an array in order to receive multiple values from the initialization method. + + + + + Creates a new Transaction object from an integer handle. + + Integer transaction handle + true to close the handle when this object is disposed + + + + Makes the current process the owner of the multi-package installation transaction. + + Select optional behavior when joining the transaction. + The transaction handle is not valid. + The transaction could not be joined. +

+ Win32 MSI API: + MsiJoinTransaction +

+
+ + + Ends the install transaction and commits all changes to the system belonging to the transaction. + + The transaction could not be committed. +

+ Runs any Commit Custom Actions and commits to the system any changes to Win32 or common language + runtime assemblies. Deletes the rollback script, and after using this option, the transaction's + changes can no longer be undone with a Rollback Installation. +

+ This method can only be called by the current owner of the transaction. +

+ Win32 MSI API: + MsiEndTransaction +

+
+ + + Ends the install transaction and undoes changes to the system belonging to the transaction. + + The transaction could not be rolled back. +

+ This method can only be called by the current owner of the transaction. +

+ Win32 MSI API: + MsiEndTransaction +

+
+ + + Gets the name of the transaction. + + + + + Notifies listeners when the process that owns the transaction changed. + + + + + Represents a media disk source of a product or a patch. + + + + + Creates a new media disk. + + + + + + + + Gets or sets the disk id of the media disk. + + + + + Gets or sets the volume label of the media disk. + + + + + Gets or sets the disk prompt of the media disk. + + + + + The Patch object represents a unique instance of a patch that has been + registered or applied. + + + + + Enumerates patch installations based on certain criteria. + + PatchCode (GUID) of the patch to be enumerated. Only + instances of patches within the scope of the context specified by the + and parameters will be + enumerated. This parameter may be set to null to enumerate all patches in the specified + context. + ProductCode (GUID) product whose patches are to be + enumerated. If non-null, patch enumeration is restricted to instances of this product + within the specified context. If null, the patches for all products under the specified + context are enumerated. + Specifies a security identifier (SID) that restricts the context + of enumeration. A SID value other than s-1-1-0 is considered a user SID and restricts + enumeration to the current user or any user in the system. The special SID string + s-1-1-0 (Everyone) specifies enumeration across all users in the system. This parameter + can be set to null to restrict the enumeration scope to the current user. When + is set to the machine context only, + must be null. + Specifies the user context. + The of patches to return. +

+ Win32 MSI APIs: + MsiEnumPatchesEx +

+
+ + + Creates a new object for accessing information about a patch installation on the current system. + + Patch code (GUID) of the patch. + ProductCode (GUID) the patch has been applied to. + This parameter may be null for patches that are registered only and not yet + applied to any product. +

+ All available user contexts will be queried. +

+
+ + + Creates a new object for accessing information about a patch installation on the current system. + + Registered patch code (GUID) of the patch. + ProductCode (GUID) the patch has been applied to. + This parameter may be null for patches that are registered only and not yet + applied to any product. + The specific user, when working in a user context. This + parameter may be null to indicate the current user. The parameter must be null + when working in a machine context. + The user context. The calling process must have administrative + privileges to get information for a product installed for a user other than the + current user. +

+ If the is null, the Patch object may + only be used to read and update the patch's SourceList information. +

+
+ + + Enumerates all patch installations on the system. + + Enumeration of patch objects. +

+ Win32 MSI API: + MsiEnumPatches +

+
+ + + Gets the patch code (GUID) of the patch. + + + + + Gets the ProductCode (GUID) of the product. + + + + + Gets a value indicating whether this patch is currently installed. + + + + + Gets a value indicating whether this patch is marked as obsolte. + + + + + Gets a value indicating whether this patch is present but has been + superseded by a more recent installed patch. + + + + + Gets the installation state of this instance of the patch. + + An unknown patch was requested + The installer configuration data is corrupt + + + + Gets the cached patch file that the product uses. + + + + + Gets the set of patch transforms that the last patch + installation applied to the product. + +

+ This value may not be available for per-user, non-managed applications + if the user is not logged on. +

+
+ + + Gets the date and time when the patch is applied to the product. + + + + + True patch is marked as possible to uninstall from the product. + +

+ Even if this property is true, the installer can still block the + uninstallation if this patch is required by another patch that + cannot be uninstalled. +

+
+ + + Get the registered display name for the patch. + + + + + Gets the registered support information URL for the patch. + + + + + Gets information about a specific patch installation. + + The property being retrieved; see remarks for valid properties. + The property value, or an empty string if the property is not set for the patch. + An unknown patch or property was requested + The installer configuration data is corrupt +

+ Win32 MSI APIs: + MsiGetPatchInfo, + MsiGetPatchInfoEx +

+
+ + + Represents a unique instance of a product that + is either advertised, installed or unknown. + + + + + Gets the set of all products with a specified upgrade code. This method lists the + currently installed and advertised products that have the specified UpgradeCode + property in their Property table. + + Upgrade code of related products + Enumeration of product codes +

+ Win32 MSI API: + MsiEnumRelatedProducts +

+
+ + + Enumerates product installations based on certain criteria. + + ProductCode (GUID) of the product instances to be enumerated. Only + instances of products within the scope of the context specified by the + and parameters will be + enumerated. This parameter may be set to null to enumerate all products in the specified + context. + Specifies a security identifier (SID) that restricts the context + of enumeration. A SID value other than s-1-1-0 is considered a user SID and restricts + enumeration to the current user or any user in the system. The special SID string + s-1-1-0 (Everyone) specifies enumeration across all users in the system. This parameter + can be set to null to restrict the enumeration scope to the current user. When + is set to the machine context only, + must be null. + Specifies the user context. + An enumeration of product objects for enumerated product instances. +

+ Win32 MSI API: + MsiEnumProductsEx +

+
+ + + Creates a new object for accessing information about a product installation on the current system. + + ProductCode (GUID) of the product. +

+ All available user contexts will be queried. +

+
+ + + Creates a new object for accessing information about a product installation on the current system. + + ProductCode (GUID) of the product. + The specific user, when working in a user context. This + parameter may be null to indicate the current user. The parameter must be null + when working in a machine context. + The user context. The calling process must have administrative + privileges to get information for a product installed for a user other than the + current user. + + + + Gets the installed state for a product feature. + + The feature being queried; identifier from the + Feature table + Installation state of the feature for the product instance: either + , , + or . +

+ Win32 MSI APIs: + MsiQueryFeatureState, + MsiQueryFeatureStateEx +

+
+ + + Gets the installed state for a product component. + + The component being queried; GUID of the component + as found in the ComponentId column of the Component table. + Installation state of the component for the product instance: either + or . +

+ Win32 MSI API: + MsiQueryComponentState +

+
+ + + Obtains and stores the user information and product ID from an installation wizard. + +

+ This method is typically called by an application during the first run of the application. The application + first gets the or . + If those properties are missing, the application calls CollectUserInfo. + CollectUserInfo opens the product's installation package and invokes a wizard sequence that collects + user information. Upon completion of the sequence, user information is registered. Since this API requires + an authored user interface, the user interface level should be set to full by calling + as . +

+ The CollectUserInfo method invokes a FirstRun dialog from the product installation database. +

+ Win32 MSI API: + MsiCollectUserInfo +

+
+ + + Some products might write some invalid/nonstandard version strings to the registry. + This method tries to get the best data it can. + + Version string retrieved from the registry. + Version object, or null if the version string is completely invalid. + + + + Enumerates all product installations on the system. + + An enumeration of product objects. +

+ Win32 MSI API: + MsiEnumProducts, +

+
+ + + Gets the set of published features for the product. + + Enumeration of published features for the product. + The installer configuration data is corrupt +

+ Because features are not ordered, any new feature has an arbitrary index, meaning + this property can return features in any order. +

+ Win32 MSI API: + MsiEnumFeatures +

+
+ + + Gets the ProductCode (GUID) of the product. + + + + + Gets a value indicating whether this product is installed on the current system. + + + + + Gets a value indicating whether this product is advertised on the current system. + + + + + Checks whether the product is installed with elevated privileges. An application is called + a "managed application" if elevated (system) privileges are used to install the application. + + True if the product is elevated; false otherwise +

+ Note that this property does not take into account policies such as AlwaysInstallElevated, + but verifies that the local system owns the product's registry data. +

+
+ + + Gets the source list of this product installation. + + + + + The support link. + + + + + The support telephone. + + + + + Date and time the product was installed. + + + + + The installed product name. + + + + + The installation location. + + + + + The installation source. + + + + + The local cached package. + + + + + The publisher. + + + + + URL about information. + + + + + The URL update information. + + + + + The product version. + + + + + The product identifier. + +

+ For more information, see + ProductID +

+
+ + + The company that is registered to use the product. + + + + + The owner who is registered to use the product. + + + + + Transforms. + + + + + Product language. + + + + + Human readable product name. + + + + + True if the product is advertised per-machine; + false if it is per-user or not advertised. + + + + + Identifier of the package that a product is installed from. + + + + + Version of the advertised product. + + + + + Primary icon for the package. + + + + + Name of the installation package for the advertised product. + + + + + True if the advertised product can be serviced by + non-administrators without elevation. + + + + + Gets information about an installation of a product. + + Name of the property being retrieved. + An unknown product or property was requested + The installer configuration data is corrupt +

+ Win32 MSI APIs: + MsiGetProductInfo, + MsiGetProductInfoEx +

+
+ + + The Record object is a container for holding and transferring a variable number of values. + Fields within the record are numerically indexed and can contain strings, integers, streams, + and null values. Record fields are indexed starting with 1. Field 0 is a special format field. + +

+ Most methods on the Record class have overloads that allow using either a number + or a name to designate a field. However note that field names only exist when the + Record is directly returned from a query on a database. For other records, attempting + to access a field by name will result in an InvalidOperationException. +

+
+ + + Creates a new record object with the requested number of fields. + + Required number of fields, which may be 0. + The maximum number of fields in a record is limited to 65535. +

+ The Record object should be d after use. + It is best that the handle be closed manually as soon as it is no longer + needed, as leaving lots of unused handles open can degrade performance. +

+ Win32 MSI API: + MsiCreateRecord +

+
+ + + Creates a new record object, providing values for an arbitrary number of fields. + + The values of the record fields. The parameters should be of type Int16, Int32 or String +

+ The Record object should be d after use. + It is best that the handle be closed manually as soon as it is no longer + needed, as leaving lots of unused handles open can degrade performance. +

+ Win32 MSI API: + MsiCreateRecord +

+
+ + + Creates a new Record object from an integer record handle. + +

+ This method is only provided for interop purposes. A Record object + should normally be obtained by calling + other methods. +

The handle will be closed when this object is disposed or finalized.

+

+ Integer record handle + true to close the handle when this object is disposed or finalized +
+ + + Sets all fields in a record to null. + +

+ Win32 MSI API: + MsiRecordClearData +

+
+ + + Reports whether a record field is null. + + Specifies the field to check. + True if the field is null, false otherwise. + The field is less than 0 or greater than the + number of fields in the Record. +

+ Win32 MSI API: + MsiRecordIsNull +

+
+ + + Reports whether a record field is null. + + Specifies the field to check. + True if the field is null, false otherwise. + The field name does not match any + of the named fields in the Record. + + + + Gets the length of a record field. The count does not include the terminating null. + + The field is less than 0 or greater than the + number of fields in the Record. +

+ The returned data size is 0 if the field is null, non-existent, + or an internal object pointer. The method also returns 0 if the handle is not a valid + Record handle. +

+ If the data is in integer format, the property returns 2 or 4. +

+ If the data is in string format, the property returns the character count + (not including the NULL terminator). +

+ If the data is in stream format, the property returns the byte count. +

+ Win32 MSI API: + MsiRecordDataSize +

+
+ + + Gets the length of a record field. The count does not include the terminating null. + + Specifies the field to check. + The field name does not match any + of the named fields in the Record. +

The returned data size is 0 if the field is null, non-existent, + or an internal object pointer. The method also returns 0 if the handle is not a valid + Record handle. +

+ If the data is in integer format, the property returns 2 or 4. +

+ If the data is in string format, the property returns the character count + (not including the NULL terminator). +

+ If the data is in stream format, the property returns the byte count. +

+
+ + + Gets a field value as an integer. + + Specifies the field to retrieve. + Integer value of the field, or 0 if the field is null. + The field is less than 0 or greater than the + number of fields in the Record. +

+ Win32 MSI API: + MsiRecordGetInteger +

+ +
+ + + Gets a field value as an integer. + + Specifies the field to retrieve. + Integer value of the field, or 0 if the field is null. + The field name does not match any + of the named fields in the Record. + + + + + Gets a field value as an integer. + + Specifies the field to retrieve. + Integer value of the field, or null if the field is null. + The field is less than 0 or greater than the + number of fields in the Record. +

+ Win32 MSI API: + MsiRecordGetInteger +

+ +
+ + + Gets a field value as an integer. + + Specifies the field to retrieve. + Integer value of the field, or null if the field is null. + The field name does not match any + of the named fields in the Record. + + + + + Sets the value of a field to an integer. + + Specifies the field to set. + new value of the field + The field is less than 0 or greater than the + number of fields in the Record. +

+ Win32 MSI API: + MsiRecordSetInteger +

+ +
+ + + Sets the value of a field to an integer. + + Specifies the field to set. + new value of the field + The field name does not match any + of the named fields in the Record. + + + + + Sets the value of a field to a nullable integer. + + Specifies the field to set. + new value of the field + The field is less than 0 or greater than the + number of fields in the Record. +

+ Win32 MSI API: + MsiRecordSetInteger +

+ +
+ + + Sets the value of a field to a nullable integer. + + Specifies the field to set. + new value of the field + The field name does not match any + of the named fields in the Record. + + + + + Gets a field value as a string. + + Specifies the field to retrieve. + String value of the field, or an empty string if the field is null. + The field is less than 0 or greater than the + number of fields in the Record. +

+ Win32 MSI API: + MsiRecordGetString +

+
+ + + Gets a field value as a string. + + Specifies the field to retrieve. + String value of the field, or an empty string if the field is null. + The field name does not match any + of the named fields in the Record. + + + + Sets the value of a field to a string. + + Specifies the field to set. + new value of the field + The field is less than 0 or greater than the + number of fields in the Record. +

+ Win32 MSI API: + MsiRecordSetString +

+
+ + + Sets the value of a field to a string. + + Specifies the field to set. + new value of the field + The field name does not match any + of the named fields in the Record. + + + + Reads a record stream field into a file. + + Specifies the field of the Record to get. + Specifies the path to the file to contain the stream. + The field is less than 0 or greater than the + number of fields in the Record. + Attempt to extract a storage from a database open + in read-write mode, or from a database without an associated file path +

+ This method is capable of directly extracting substorages. To do so, first select both the + `Name` and `Data` column of the `_Storages` table, then get the stream of the `Data` field. + However, substorages may only be extracted from a database that is open in read-only mode. +

+ Win32 MSI API: + MsiRecordReadStream +

+
+ + + Reads a record stream field into a file. + + Specifies the field of the Record to get. + Specifies the path to the file to contain the stream. + The field name does not match any + of the named fields in the Record. + Attempt to extract a storage from a database open + in read-write mode, or from a database without an associated file path +

+ This method is capable of directly extracting substorages. To do so, first select both the + `Name` and `Data` column of the `_Storages` table, then get the stream of the `Data` field. + However, substorages may only be extracted from a database that is open in read-only mode. +

+
+ + + Gets a record stream field. + + Specifies the field of the Record to get. + A Stream that reads the field data. + The field is less than 0 or greater than the + number of fields in the Record. +

+ This method is not capable of reading substorages. To extract a substorage, + use . +

+ Win32 MSI API: + MsiRecordReadStream +

+
+ + + Gets a record stream field. + + Specifies the field of the Record to get. + A Stream that reads the field data. + The field name does not match any + of the named fields in the Record. +

+ This method is not capable of reading substorages. To extract a substorage, + use . +

+
+ + + Sets a record stream field from a file. Stream data cannot be inserted into temporary fields. + + Specifies the field of the Record to set. + Specifies the path to the file containing the stream. + The field is less than 0 or greater than the + number of fields in the Record. +

+ The contents of the specified file are read into a stream object. The stream persists if + the Record is inserted into the Database and the Database is committed. +

+ To reset the stream to its beginning you must pass in null for filePath. + Do not pass an empty string, "", to reset the stream. +

+ Setting a stream with this method is more efficient than setting a field to a + FileStream object. +

+ Win32 MSI API: + MsiRecordsetStream +

+
+ + + Sets a record stream field from a file. Stream data cannot be inserted into temporary fields. + + Specifies the field name of the Record to set. + Specifies the path to the file containing the stream. + The field name does not match any + of the named fields in the Record. +

+ The contents of the specified file are read into a stream object. The stream persists if + the Record is inserted into the Database and the Database is committed. + To reset the stream to its beginning you must pass in null for filePath. + Do not pass an empty string, "", to reset the stream. +

+ Setting a stream with this method is more efficient than setting a field to a + FileStream object. +

+
+ + + Sets a record stream field from a Stream object. Stream data cannot be inserted into temporary fields. + + Specifies the field of the Record to set. + Specifies the stream data. + The field is less than 0 or greater than the + number of fields in the Record. +

+ The stream persists if the Record is inserted into the Database and the Database is committed. +

+ Win32 MSI API: + MsiRecordsetStream +

+
+ + + Sets a record stream field from a Stream object. Stream data cannot be inserted into temporary fields. + + Specifies the field name of the Record to set. + Specifies the stream data. + The field name does not match any + of the named fields in the Record. +

+ The stream persists if the Record is inserted into the Database and the Database is committed. +

+
+ + + Gets a formatted string representation of the Record. + + A formatted string representation of the Record. +

+ If field 0 of the Record is set to a nonempty string, it is used to format the data in the Record. +

+ Win32 MSI API: + MsiFormatRecord +

+ + +
+ + + Gets a formatted string representation of the Record, optionally using a Session to format properties. + + an optional Session instance that will be used to lookup any + properties in the Record's format string + A formatted string representation of the Record. +

+ If field 0 of the Record is set to a nonempty string, it is used to format the data in the Record. +

+ Win32 MSI API: + MsiFormatRecord +

+ + +
+ + + Gets a formatted string representation of the Record. + + String to be used to format the data in the Record, + instead of the Record's format string. + A formatted string representation of the Record. +

+ Win32 MSI API: + MsiFormatRecord +

+
+ + + Gets a formatted string representation of the Record, optionally using a Session to format properties. + + String to be used to format the data in the Record, + instead of the Record's format string. + an optional Session instance that will be used to lookup any + properties in the Record's format string + A formatted string representation of the Record. +

+ Win32 MSI API: + MsiFormatRecord +

+ + +
+ + + IsFormatStringInvalid is set from several View methods that invalidate the FormatString + and used to determine behavior during Record.ToString(). + + + + + Gets the number of fields in a record. + +

+ Win32 MSI API: + MsiRecordGetFieldCount +

+
+ + + Gets or sets field 0 of the Record, which is the format string. + + + + + Gets or sets a record field value. + + Specifies the name of the field of the Record to get or set. + The name does not match any known field of the Record. +

+ When getting a field, the type of the object returned depends on the type of the Record field. + The object will be one of: Int16, Int32, String, Stream, or null. +

+ When setting a field, the type of the object provided will be converted to match the View + query that returned the record, or if Record was not returned from a view then the type of + the object provided will determine the type of the Record field. The object should be one of: + Int16, Int32, String, Stream, or null. +

+
+ + + Gets or sets a record field value. + + Specifies the field of the Record to get or set. + The field is less than 0 or greater than the + number of fields in the Record. +

+ Record fields are indexed starting with 1. Field 0 is a special format field. +

+ When getting a field, the type of the object returned depends on the type of the Record field. + The object will be one of: Int16, Int32, String, Stream, or null. If the Record was returned + from a View, the type will match that of the field from the View query. Otherwise, the type + will match the type of the last value set for the field. +

+ When setting a field, the type of the object provided will be converted to match the View + query that returned the Record, or if Record was not returned from a View then the type of + the object provided will determine the type of the Record field. The object should be one of: + Int16, Int32, String, Stream, or null. +

+ The type-specific getters and setters are slightly more efficient than this property, since + they don't have to do the extra work to infer the value's type every time. +

+ Win32 MSI APIs: + MsiRecordGetInteger, + MsiRecordGetString, + MsiRecordSetInteger, + MsiRecordSetString +

+
+ + + Assigns ID numbers to the MSI APIs that are remotable. + +

+ This enumeration MUST stay in sync with the + unmanaged equivalent in RemoteMsiSession.h! +

+
+ + + Defines the signature of the native function + in SfxCA.dll that implements the remoting call. + + + + + Redirects native API calls to either the normal NativeMethods class + or to out-of-proc calls via the remoting channel. + + + + + Checks if the current process is using remoting to access the + MSI session and database APIs. + + + + + Sets a delegate that is used to make remote API calls. + +

+ The implementation of this delegate is provided by the + custom action host DLL. +

+
+ + + The Session object controls the installation process. It opens the + install database, which contains the installation tables and data. + +

+ This object is associated with a standard set of action functions, + each performing particular operations on data from one or more tables. Additional + custom actions may be added for particular product installations. The basic engine + function is a sequencer that fetches sequential records from a designated sequence + table, evaluates any specified condition expression, and executes the designated + action. Actions not recognized by the engine are deferred to the UI handler object + for processing, usually dialog box sequences. +

+ Note that only one Session object can be opened by a single process. +

+
+ + + Creates a new Session object from an integer session handle. + + Integer session handle + true to close the handle when this object is disposed or finalized +

+ This method is only provided for interop purposes. A Session object + should normally be obtained by calling + or . +

+
+ + + Performs any enabled logging operations and defers execution to the UI handler + object associated with the engine. + + Type of message to be processed + Contains message-specific fields + A message-dependent return value + the Session or Record handle is invalid + an invalid message kind is specified + the user exited the installation + the message-handler failed for an unknown reason +

+ Logging may be selectively enabled for the various message types. + See the method. +

+ If record field 0 contains a formatting string, it is used to format the data in + the other fields. Else if the message is an error, warning, or user message, an attempt + is made to find a message template in the Error table for the current database using the + error number found in field 1 of the record for message types and return values. +

+ The parameter may also include message-box flags from + the following enumerations: System.Windows.Forms.MessageBoxButtons, + System.Windows.Forms.MessageBoxDefaultButton, System.Windows.Forms.MessageBoxIcon. These + flags can be combined with the InstallMessage with a bitwise OR. +

+ Note, this method never returns Cancel or Error values. Instead, appropriate + exceptions are thrown in those cases. +

+ Win32 MSI API: + MsiProcessMessage +

+
+ + + Writes a message to the log, if logging is enabled. + + The line to be written to the log +

+ Win32 MSI API: + MsiProcessMessage +

+
+ + + Writes a formatted message to the log, if logging is enabled. + + The line to be written to the log, containing 0 or more format specifiers + An array containing 0 or more objects to be formatted +

+ Win32 MSI API: + MsiProcessMessage +

+
+ + + Evaluates a logical expression containing symbols and values. + + conditional expression + The result of the condition evaluation + the Session handle is invalid + the condition is null or empty + the conditional expression is invalid +

+ Win32 MSI API: + MsiEvaluateCondition +

+
+ + + Evaluates a logical expression containing symbols and values, specifying a default + value to be returned in case the condition is empty. + + conditional expression + value to return if the condition is empty + The result of the condition evaluation + the Session handle is invalid + the conditional expression is invalid +

+ Win32 MSI API: + MsiEvaluateCondition +

+
+ + + Formats a string containing installer properties. + + A format string containing property tokens + A formatted string containing property data + the Record handle is invalid +

+ Win32 MSI API: + MsiFormatRecord +

+
+ + + Returns a formatted string from record data. + + Record object containing a template and data to be formatted. + The template string must be set in field 0 followed by any referenced data parameters. + A formatted string containing the record data + the Record handle is invalid +

+ Win32 MSI API: + MsiFormatRecord +

+
+ + + Returns a formatted string from record data using a specified format. + + Record object containing a template and data to be formatted + Format string to be used instead of field 0 of the Record + A formatted string containing the record data + the Record handle is invalid +

+ Win32 MSI API: + MsiFormatRecord +

+
+ + + Retrieves product properties (not session properties) from the product database. + + Value of the property, or an empty string if the property is not set. +

+ Note this is not the correct method for getting ordinary session properties. For that, + see the indexer on the Session class. +

+ Win32 MSI API: + MsiGetProductProperty +

+
+ + + Checks to see if sufficient disk space is present for the current installation. + + True if there is sufficient disk space; false otherwise. +

+ Win32 MSI API: + MsiVerifyDiskSpace +

+
+ + + Gets the total disk space per drive required for the installation. + + A list of InstallCost structures, specifying the cost for each drive +

+ Win32 MSI API: + MsiEnumComponentCosts +

+
+ + + Gets the designated mode flag for the current install session. + + The type of mode to be checked. + The value of the designated mode flag. + the Session handle is invalid + an invalid mode flag was specified +

+ Note that only the following run modes are available to read from + a deferred custom action: + + + + +

+ Win32 MSI API: + MsiGetMode +

+
+ + + Sets the designated mode flag for the current install session. + + The type of mode to be set. + The desired value of the mode. + the Session handle is invalid + an invalid mode flag was specified + the mode cannot not be set +

+ Win32 MSI API: + MsiSetMode +

+
+ + + Gets the full path to the designated folder on the source media or server image. + + the folder was not found in the Directory table + the Session handle is invalid +

+ Win32 MSI API: + MsiGetSourcePath +

+
+ + + Gets the full path to the designated folder on the installation target drive. + + the folder was not found in the Directory table + the Session handle is invalid +

+ Win32 MSI API: + MsiGetTargetPath +

+
+ + + Sets the full path to the designated folder on the installation target drive. + + the folder was not found in the Directory table + the Session handle is invalid +

+ Setting the target path of a directory changes the path specification for the directory + in the in-memory Directory table. Also, the path specifications of all other path objects + in the table that are either subordinate or equivalent to the changed path are updated + to reflect the change. The properties for each affected path are also updated. +

+ If an error occurs in this function, all updated paths and properties revert to + their previous values. Therefore, it is safe to treat errors returned by this function + as non-fatal. +

+ Do not attempt to configure the target path if the components using those paths + are already installed for the current user or for a different user. Check the + ProductState property before setting the target path to determine if the product + containing this component is installed. +

+ Win32 MSI API: + MsiSetTargetPath +

+
+ + + Sets the install level for the current installation to a specified value and + recalculates the Select and Installed states for all features in the Feature + table. Also sets the Action state of each component in the Component table based + on the new level. + + New install level + the Session handle is invalid +

+ The SetInstallLevel method sets the following: + The installation level for the current installation to a specified value + The Select and Installed states for all features in the Feature table + The Action state of each component in the Component table, based on the new level + + If 0 or a negative number is passed in the ilnstallLevel parameter, + the current installation level does not change, but all features are still + updated based on the current installation level. +

+ Win32 MSI API: + MsiSetInstallLevel +

+
+ + + Executes a built-in action, custom action, or user-interface wizard action. + + Name of the action to execute. Case-sensitive. + the Session handle is invalid + the user exited the installation +

+ The DoAction method executes the action that corresponds to the name supplied. If the + name is not recognized by the installer as a built-in action or as a custom action in + the CustomAction table, the name is passed to the user-interface handler object, which + can invoke a function or a dialog box. If a null action name is supplied, the installer + uses the upper-case value of the ACTION property as the action to perform. If no property + value is defined, the default action is performed, defined as "INSTALL". +

+ Actions that update the system, such as the InstallFiles and WriteRegistryValues + actions, cannot be run by calling MsiDoAction. The exception to this rule is if DoAction + is called from a custom action that is scheduled in the InstallExecuteSequence table + between the InstallInitialize and InstallFinalize actions. Actions that do not update the + system, such as AppSearch or CostInitialize, can be called. +

+ Win32 MSI API: + MsiDoAction +

+
+ + + Executes a built-in action, custom action, or user-interface wizard action. + + Name of the action to execute. Case-sensitive. + Optional data to be passed to a deferred custom action. + the Session handle is invalid + the user exited the installation +

+ The DoAction method executes the action that corresponds to the name supplied. If the + name is not recognized by the installer as a built-in action or as a custom action in + the CustomAction table, the name is passed to the user-interface handler object, which + can invoke a function or a dialog box. If a null action name is supplied, the installer + uses the upper-case value of the ACTION property as the action to perform. If no property + value is defined, the default action is performed, defined as "INSTALL". +

+ Actions that update the system, such as the InstallFiles and WriteRegistryValues + actions, cannot be run by calling MsiDoAction. The exception to this rule is if DoAction + is called from a custom action that is scheduled in the InstallExecuteSequence table + between the InstallInitialize and InstallFinalize actions. Actions that do not update the + system, such as AppSearch or CostInitialize, can be called. +

+ If the called action is a deferred, rollback, or commit custom action, then the supplied + will be available via the + property of that custom action's session. +

+ Win32 MSI API: + MsiDoAction +

+
+ + + Executes an action sequence described in the specified table. + + Name of the table containing the action sequence. + the Session handle is invalid + the user exited the installation +

+ This method queries the specified table, ordering the actions by the numbers in the Sequence column. + For each row retrieved, an action is executed, provided that any supplied condition expression does + not evaluate to FALSE. +

+ An action sequence containing any actions that update the system, such as the InstallFiles and + WriteRegistryValues actions, cannot be run by calling DoActionSequence. The exception to this rule is if + DoActionSequence is called from a custom action that is scheduled in the InstallExecuteSequence table + between the InstallInitialize and InstallFinalize actions. Actions that do not update the system, such + as AppSearch or CostInitialize, can be called. +

+ Win32 MSI API: + MsiSequence +

+
+ + + Implements formatting for data. + + Type of format object to get. + The the current instance, if is the same type + as the current instance; otherwise, null. + + + + Closes the session handle. Also closes the active database handle, if it is open. + After closing a handle, further method calls may throw an . + + If true, the method has been called directly + or indirectly by a user's code, so managed and unmanaged resources will + be disposed. If false, only unmanaged resources will be disposed. + + + + Throws an exception if the custom action is not able to access immedate session details. + + + + + Gets the Database for the install session. + + the Session handle is invalid + the Database cannot be accessed +

+ Normally there is no need to close this Database object. The same object can be + used throughout the lifetime of the Session, and it will be closed when the Session + is closed. +

+ Win32 MSI API: + MsiGetActiveDatabase +

+
+ + + Gets the numeric language ID used by the current install session. + +

+ Win32 MSI API: + MsiGetLanguage +

+
+ + + Gets or sets the string value of a named installer property, as maintained by the + Session object in the in-memory Property table, or, if it is prefixed with a percent + sign (%), the value of a system environment variable for the current process. + + the Session handle is invalid +

+ Win32 MSI APIs: + MsiGetProperty, + MsiSetProperty +

+
+ + + Gets an accessor for components in the current session. + + + + + Gets an accessor for features in the current session. + + + + + Gets custom action data for the session that was supplied by the caller. + + + + + + Gets the (short) list of properties that are available from non-immediate custom actions. + + + + + Holds information about the target of a shortcut file. + + + + + Tests whether two shortcut targets have the same product code, feature, and/or component code. + + The first shortcut target to compare. + The second shortcut target to compare. + True if all parts of the targets are the same, else false. + + + + Tests whether two shortcut targets have the same product code, feature, and/or component code. + + The first shortcut target to compare. + The second shortcut target to compare. + True if any parts of the targets are different, else false. + + + + Tests whether two shortcut targets have the same product code, feature, and/or component code. + + The shortcut target to compare to the current object. + True if is a shortcut target and all parts of the targets are the same, else false. + + + + Generates a hash code using all parts of the shortcut target. + + An integer suitable for hashing the shortcut target. + + + + Gets the target product code of the shortcut, or null if not available. + + + + + Gets the name of the target feature of the shortcut, or null if not available. + + + + + Gets the target component code of the shortcut, or null if not available. + + + + + A list of sources for an installed product or patch. + + + + + Adds a network or URL source to the source list of the installed product. + + Path to the source to be added. This parameter is + expected to contain only the path without the filename. +

+ If this method is called with a new source, the installer adds the source + to the end of the source list. +

+ If this method is called with a source already existing in the source + list, it has no effect. +

+ Win32 MSI APIs: + MsiSourceListAddSource, + MsiSourceListAddSourceEx +

+ +
+ + + Adds or reorders a network or URL source for the product or patch. + + Path to the source to be added. This parameter is + expected to contain only the path without the filename. + Specifies the priority order in which the source + will be inserted +

+ If this method is called with a new source and + is set to 0, the installer adds the source to the end of the source list. +

+ If this method is called with a source already existing in the source + list and is set to 0, the installer retains the + source's existing index. +

+ If the method is called with an existing source in the source list + and is set to a non-zero value, the source is + removed from its current location in the list and inserted at the position + specified by Index, before any source that already exists at that position. +

+ If the method is called with a new source and Index is set to a + non-zero value, the source is inserted at the position specified by + , before any source that already exists at + that position. The index value for all sources in the list after the + index specified by Index are updated to ensure unique index values and + the pre-existing order is guaranteed to remain unchanged. +

+ If is greater than the number of sources + in the list, the source is placed at the end of the list with an index + value one larger than any existing source. +

+ Win32 MSI API: + MsiSourceListAddSourceEx +

+
+ + + Clears sources of all types: network, url, and media. + +

+ Win32 MSI API: + MsiSourceListClearAll +

+
+ + + Removes all network sources from the list. URL sources are not affected. + +

+ Win32 MSI API: + MsiSourceListClearAllEx +

+
+ + + Removes all URL sources from the list. Network sources are not affected. + +

+ Win32 MSI API: + MsiSourceListClearAllEx +

+
+ + + Checks if the specified source exists in the list. + + case-insensitive source to look for + true if the source exists in the list, false otherwise + + + + Copies the network and URL sources from this list into an array. + + destination array to be filed + offset into the destination array where copying begins + + + + Removes a network or URL source. + +

+ Win32 MSI API: + MsiSourceListClearSource +

+
+ + + Enumerates the network and URL sources in the source list of the patch or product installation. + +

+ Win32 MSI API: + MsiSourceListEnumSources +

+
+ + + Forces the installer to search the source list for a valid + source the next time a source is required. For example, when the + installer performs an installation or reinstallation, or when it + requires the path for a component that is set to run from source. + +

+ Win32 MSI APIs: + MsiSourceListForceResolution, + MsiSourceListForceResolutionEx +

+
+ + + Gets the list of disks registered for the media source of + the patch or product installation. + + + + + Gets the number of network and URL sources in the list. + + + + + Gets a boolean value indicating whether the list is read-only. + A SourceList is never read-only. + + read-only status of the list + + + + Gets or sets the path relative to the root of the installation media. + + + + + Gets or sets the prompt template that is used when prompting the user + for installation media. + + + + + Gets or sets the most recently used source location for the product. + + + + + Gets or sets the name of the Windows Installer package or patch package + on the source. + + + + + Gets the type of the last-used source. + +

+

    +
  • "n" = network location
  • +
  • "u" = URL location
  • +
  • "m" = media location
  • +
  • (empty string) = no last used source
  • +
+

+
+ + + Gets or sets source list information properties of a product or patch installation. + + The source list information property name. + An unknown product, patch, or property was requested +

+ Win32 MSI API: + MsiSourceListGetInfo +

+
+ + + A list of source media for an installed product or patch. + + + + + Adds or updates a disk of the media source for the product or patch. + +

+ To change the disk prompt only, get the existing volume label from the + registry and provide it in this call along with the new disk prompt. + Passing a null or empty string for + registers an empty string as the volume label. +

To change the volume label only, get the existing disk prompt + that is registered and provide it when calling SourceListAddMediaDisk + along with the new volume label. Passing null or an empty string + registers an empty string as the disk prompt.

+

+ Win32 MSI API: + MsiSourceListAddMediaDisk +

+
+ + + Removes all source media from the list. + +

+ Win32 MSI API: + MsiSourceListClearAllEx +

+
+ + + Checks if the specified media disk id exists in the list. + + disk id of the media to look for + true if the media exists in the list, false otherwise + + + + Copies the source media info from this list into an array. + + destination array to be filed + offset into the destination array where copying begins + + + + Removes a specified disk from the set of registered disks. + + ID of the disk to remove +

+ Win32 MSI API: + MsiSourceListClearMediaDisk +

+
+ + + Enumerates the source media in the source list of the patch or product installation. + +

+ Win32 MSI API: + MsiSourceListEnumMediaDisks +

+
+ + + Gets the number of source media in the list. + + + + + Gets a boolean value indicating whether the list is read-only. + A SourceMediaList is never read-only. + + read-only status of the list + + + + Provides access to summary information of a Windows Installer database. + + + + + Gets a SummaryInfo object that can be used to examine, update, and add + properties to the summary information stream of a package or transform. + + Path to the package (database) or transform + True to reserve resources for writing summary information properties. + the package does not exist or could not be read + the package is an invalid format +

+ The SummaryInfo object should be d after use. + It is best that the handle be closed manually as soon as it is no longer + needed, as leaving lots of unused handles open can degrade performance. +

+ Win32 MSI API: + MsiGetSummaryInformation +

+
+ + + Formats and writes the previously stored properties into the standard summary information stream. + + The stream cannot be successfully written. +

+ This method may only be called once after all the property values have been set. Properties may + still be read after the stream is written. +

+ Win32 MSI API: + MsiSummaryInfoPersist +

+
+ + Gets or sets the Title summary information property. +

+ The Title summary information property briefly describes the type of installer package. Phrases + such as "Installation Database" or "Transform" or "Patch" may be used for this property. +

+ Win32 MSI APIs: + MsiSummaryInfoGetProperty, + MsiSummaryInfoSetProperty +

+
+ + Gets or sets the Subject summary information property. +

+ The Subject summary information property conveys to a file browser the product that can be installed using + the logic and data in this installer database. For example, the value of the summary property for + Microsoft Office 97 would be "Microsoft Office 97 Professional". This value is typically set from the + installer property ProductName. +

+ Win32 MSI APIs: + MsiSummaryInfoGetProperty, + MsiSummaryInfoSetProperty +

+
+ + Gets or sets the Author summary information property. +

+ The Author summary information property conveys to a file browser the manufacturer of the installation + database. This value is typically set from the installer property Manufacturer. +

+ Win32 MSI APIs: + MsiSummaryInfoGetProperty, + MsiSummaryInfoSetProperty +

+
+ + Gets or sets the Keywords summary information property. +

+ The Keywords summary information property is used by file browsers to hold keywords that permit the + database file to be found in a keyword search. The set of keywords typically includes "Installer" as + well as product-specific keywords, and may be localized. +

+ Win32 MSI APIs: + MsiSummaryInfoGetProperty, + MsiSummaryInfoSetProperty +

+
+ + Gets or sets the Comments summary information property. +

+ The Comments summary information property conveys the general purpose of the installer database. By convention, + the value for this summary property is set to the following: +

+ "This installer database contains the logic and data required to install <product name>." +

+ where <product name> is the name of the product being installed. In general the value for this summary + property only changes in the product name, nothing else. +

+ Win32 MSI APIs: + MsiSummaryInfoGetProperty, + MsiSummaryInfoSetProperty +

+
+ + Gets or sets the Template summary information property. +

+ The Template summary information propery indicates the platform and language versions supported by the database. +

+ The syntax of the Template Summary property information is: + [platform property][,platform property][,...];[language id][,language id][,...] +

+ For example, the following are all valid values for the Template Summary property: + + Intel;1033 + Intel64;1033 + ;1033 + ; + Intel ;1033,2046 + Intel64;1033,2046 + Intel;0 + +

+ If this is a 64-bit Windows Installer, enter Intel64 in the Template summary information property. Note that an + installation package cannot have both the Intel and Intel64 properties set. +

+ If the current platform does not match one of the platforms specified then the installer will not process the + package. Not specifying a platform implies that the package is platform-independent. +

+ Entering 0 in the language ID field of the Template summary information property, or leaving this field empty, + indicates that the package is language neutral. +

+ There are variations of this property depending on whether it is in a source installer database or a transform. +

+ Source Installer Database - Only one language can be specified in a source installer database. Merge Modules are + the only packages that may have multiple languages. For more information, see Multiple Language Merge Modules. +

+ Transform - In a transform file, only one language may be specified. The specified platform and language determine + whether a transform can be applied to a particular database. The platform property and the language property can + be left blank if no transform restriction relies on them to validate the transform. +

+ This summary property is REQUIRED. +

+ Win32 MSI APIs: + MsiSummaryInfoGetProperty, + MsiSummaryInfoSetProperty +

+
+ + Gets or sets the LastSavedBy summary information property. +

+ The installer sets the Last Saved By summary information property to the value of the LogonUser property during + an administrative installation. The installer never uses this property and a user never needs to modify it. + Developers of a database editing tool may use this property to track the last person to modify the database. + This property should be left set to null in a final shipping database. +

+ In a transform, this summary property contains the platform and language ID(s) that a database should have + after it has been transformed. The property specifies to what the Template should be set in the new database. +

+ Win32 MSI APIs: + MsiSummaryInfoGetProperty, + MsiSummaryInfoSetProperty +

+
+ + Gets or sets the RevisionNumber summary information property. +

+ The Revision Number summary information property contains the package code for the installer package. The + package code is a unique identifier of the installer package. +

+ The Revision Number summary information property of a patch package specifies the GUID patch code for + the patch. This is followed by a list of patch code GUIDs for obsolete patches that are removed when this + patch is applied. The patch codes are concatenated with no delimiters separating GUIDs in the list. +

+ The Revision Number summary information property of a transform package lists the product code GUIDs + and version of the new and original products and the upgrade code GUID. The list is separated with + semicolons as follows. +

+ Original-Product-Code Original-Product-Version ; New-Product Code New-Product-Version; Upgrade-Code +

+ This summary property is REQUIRED. +

+ Win32 MSI APIs: + MsiSummaryInfoGetProperty, + MsiSummaryInfoSetProperty +

+
+ + Gets or sets the CreatingApp summary information property. +

+ The CreatingApp summary information property conveys which application created the installer database. + In general the value for this summary property is the name of the software used to author this database. +

+ Win32 MSI APIs: + MsiSummaryInfoGetProperty, + MsiSummaryInfoSetProperty +

+
+ + Gets or sets the LastPrintTime summary information property. +

+ The LastPrintTime summary information property can be set to the date and time during an administrative + installation to record when the administrative image was created. For non-administrative installations + this property is the same as the CreateTime summary information property. +

+ Win32 MSI APIs: + MsiSummaryInfoGetProperty, + MsiSummaryInfoSetProperty +

+
+ + Gets or sets the CreateTime summary information property. +

+ The CreateTime summary information property conveys when the installer database was created. +

+ Win32 MSI APIs: + MsiSummaryInfoGetProperty, + MsiSummaryInfoSetProperty +

+
+ + Gets or sets the LastSaveTime summary information property. +

+ The LastSaveTime summary information property conveys when the last time the installer database was + modified. Each time a user changes an installation the value for this summary property is updated to + the current system time/date at the time the installer database was saved. Initially the value for + this summary property is set to null to indicate that no changes have yet been made. +

+ Win32 MSI APIs: + MsiSummaryInfoGetProperty, + MsiSummaryInfoSetProperty +

+
+ + Gets or sets the CodePage summary information property. +

+ The Codepage summary information property is the numeric value of the ANSI code page used for any + strings that are stored in the summary information. Note that this is not the same code page for + strings in the installation database. The Codepage summary information property is used to translate + the strings in the summary information into Unicode when calling the Unicode API functions. The + Codepage summary information property must be set before any string properties are set in the + summary information. +

+ Win32 MSI APIs: + MsiSummaryInfoGetProperty, + MsiSummaryInfoSetProperty +

+
+ + Gets or sets the PageCount summary information property. +

+ For an installation package, the PageCount summary information property contains the minimum + installer version required. For Windows Installer version 1.0, this property must be set to the + integer 100. For 64-bit Windows Installer Packages, this property must be set to the integer 200. +

+ For a transform package, the PageCount summary information property contains minimum installer + version required to process the transform. Set to the greater of the two PageCount summary information + property values belonging to the databases used to generate the transform. +

+ The PageCount summary information property is set to null in patch packages. +

+ This summary property is REQUIRED. +

+ Win32 MSI APIs: + MsiSummaryInfoGetProperty, + MsiSummaryInfoSetProperty +

+
+ + Gets or sets the WordCount summary information property. +

+ The WordCount summary information property indicates the type of source file image. If this property is + not present, it defaults to 0. Note that this property is stored in place of the standard Count property. +

+ This property is a bit field. New bits may be added in the future. At present the following bits are + available: + + Bit 0: 0 = long file names, 1 = short file names + Bit 1: 0 = source is uncompressed, 1 = source is compressed + Bit 2: 0 = source is original media, 1 = source is administrative installation + [MSI 4.0] Bit 3: 0 = elevated privileges can be required to install, 1 = elevated privileges are not required to install + +

+ These are combined to give the WordCount summary information property one of the following values + indicating a type of source file image: + + 0 - Original source using long file names. Matches tree in Directory table. + 1 - Original source using short file names. Matches tree in Directory table. + 2 - Compressed source files using long file names. Matches cabinets and files in the Media table. + 3 - Compressed source files using short file names. Matches cabinets and files in the Media table. + 4 - Administrative image using long file names. Matches tree in Directory table. + 5 - Administrative image using short file names. Matches tree in Directory table. + +

+ Note that if the package is marked as compressed (bit 1 is set), the installer only installs files + located at the root of the source. In this case, even files marked as uncompressed in the File table must + be located at the root to be installed. To specify a source image that has both a cabinet file (compressed + files) and uncompressed files that match the tree in the Directory table, mark the package as uncompressed + by leaving bit 1 unset (value=0) in the WordCount summary information property and set + (value=16384) in the Attributes column of the File table + for each file in the cabinet. +

+ For a patch package, the WordCount summary information property specifies the patch engine that was used + to create the patch files. The default value is 1 and indicates that MSPATCH was used to create the patch + A value of "2" means that the patch is using smaller, optimized, files available only with Windows Installer + version 1.2 or later. A patch with a WordCount of "2" fails immediately if used with a Windows Installer + version earlier than 1.2. A patch with a WordCount of "3" fails immediately if used with a Windows Installer + version earlier than 2.0. +

+ This summary property is REQUIRED. +

+ Win32 MSI APIs: + MsiSummaryInfoGetProperty, + MsiSummaryInfoSetProperty +

+
+ + Gets or sets the CharacterCount summary information property. +

+ The CharacterCount summary information property is only used in transforms. This part of the summary + information stream is divided into two 16-bit words. The upper word contains the transform validation + flags. The lower word contains the transform error condition flags. +

+ Win32 MSI APIs: + MsiSummaryInfoGetProperty, + MsiSummaryInfoSetProperty +

+
+ + Gets or sets the Security summary information property. +

+ The Security summary information property conveys whether the package should be opened as read-only. The database + editing tool should not modify a read-only enforced database and should issue a warning at attempts to modify a + read-only recommended database. The following values of this property are applicable to Windows Installer files: + + 0 - no restriction + 2 - read only recommended + 4 - read only enforced + +

+ This property should be set to read-only recommended (2) for an installation database and to read-only + enforced (4) for a transform or patch. +

+ Win32 MSI APIs: + MsiSummaryInfoGetProperty, + MsiSummaryInfoSetProperty +

+
+ + + Contains information about all the tables in a Windows Installer database. + + + + + Adds a new table to the database. + + information about the table to be added + a table with the same name already exists in the database + + + + Removes all tables (and all data) from the database. + + + + + Checks if the database contains a table with the given name. + + case-sensitive name of the table to search for + True if the table exists, false otherwise. + + + + Copies the table information from this collection into an array. + + destination array to be filed + offset into the destination array where copying begins + + + + Removes a table from the database. + + case-sensitive name of the table to be removed + true if the table was removed, false if the table did not exist + + + + Enumerates the tables in the database. + + + + + Gets the number of tables in the database. + + + + + Gets a boolean value indicating whether the collection is read-only. + A TableCollection is read-only when the database is read-only. + + read-only status of the collection + + + + Gets information about a given table. + + case-sensitive name of the table + information about the requested table, or null if the table does not exist in the database + + + + Defines a table in an installation database. + + + + + Creates a table definition. + + Name of the table. + Columns in the table. + The primary keys of the table. + + + + Gets a string representation of the table. + + The name of the table. + + + + Gets the name of the table. + + + + + Gets information about the columns in this table. + +

+ This property queries the database every time it is called, + to ensure the returned values are up-to-date. For best performance, + hold onto the returned collection if using it more than once. +

+
+ + + Gets the names of the columns that are primary keys of the table. + + + + + Gets an SQL CREATE string that can be used to create the table. + + + + + Gets an SQL INSERT string that can be used insert a new record into the table. + +

+ The values are expressed as question-mark tokens, to be supplied by the record. +

+
+ + + Gets an SQL SELECT string that can be used to select all columns of the table. + +

+ The columns are listed explicitly in the SELECT string, as opposed to using "SELECT *". +

+
+ + + Contains specific information about an error encountered by the , + , or methods of the + class. + + + + + Gets the type of validation error encountered. + + + + + Gets the column containing the error, or null if the error applies to the whole row. + + + + + A View represents a result set obtained when processing a query using the + method of a + . Before any data can be transferred, + the query must be executed using the method, passing to + it all replaceable parameters designated within the SQL query string. + + + + + Executes a SQL View query and supplies any required parameters. The query uses the + question mark token to represent parameters as described in SQL Syntax. The values of + these parameters are passed in as the corresponding fields of a parameter record. + + Optional Record that supplies the parameters. This + Record contains values to replace the parameter tokens in the SQL query. + the View could not be executed + the View handle is invalid +

+ Win32 MSI API: + MsiViewExecute +

+
+ + + Executes a SQL View query. + + the View could not be executed + the View handle is invalid +

+ Win32 MSI API: + MsiViewExecute +

+
+ + + Fetches the next sequential record from the view, or null if there are no more records. + + the View is not in an active state + the View handle is invalid +

+ The Record object should be d after use. + It is best that the handle be closed manually as soon as it is no longer + needed, as leaving lots of unused handles open can degrade performance. +

+ Win32 MSI API: + MsiViewFetch +

+
+ + + Updates a fetched Record. + + specifies the modify mode + the Record to modify + the modification failed, + or a validation was requested and the data did not pass + the View handle is invalid +

+ You can update or delete a record immediately after inserting, or seeking provided you + have NOT modified the 0th field of the inserted or sought record. +

+ To execute any SQL statement, a View must be created. However, a View that does not + create a result set, such as CREATE TABLE, or INSERT INTO, cannot be used with any of + the Modify methods to update tables though the view. +

+ You cannot fetch a record containing binary data from one database and then use + that record to insert the data into another database. To move binary data from one database + to another, you should export the data to a file and then import it into the new database + using a query and the . This ensures that each database has + its own copy of the binary data. +

+ Note that custom actions can only add, modify, or remove temporary rows, columns, + or tables from a database. Custom actions cannot modify persistent data in a database, + such as data that is a part of the database stored on disk. +

+ Win32 MSI API: + MsiViewModify +

+ + + + + + + + + + + + + +
+ + + Refreshes the data in a Record. + + the Record to be refreshed + the refresh failed + the View handle is invalid +

+ The Record must have been obtained by calling . Fails with + a deleted Record. Works only with read-write Records. +

+ See for more remarks. +

+ Win32 MSI API: + MsiViewModify +

+
+ + + Inserts a Record into the view. + + the Record to be inserted + the insertion failed + the View handle is invalid +

+ Fails if a row with the same primary keys exists. Fails with a read-only database. + This method cannot be used with a View containing joins. +

+ See for more remarks. +

+ Win32 MSI API: + MsiViewModify +

+
+ + + Updates the View with new data from the Record. + + the new data + the update failed + the View handle is invalid +

+ Only non-primary keys can be updated. The Record must have been obtained by calling + . Fails with a deleted Record. Works only with read-write Records. +

+ See for more remarks. +

+ Win32 MSI API: + MsiViewModify +

+
+ + + Updates or inserts a Record into the View. + + the Record to be assigned + the assignment failed + the View handle is invalid +

+ Updates record if the primary keys match an existing row and inserts if they do not match. + Fails with a read-only database. This method cannot be used with a View containing joins. +

+ See for more remarks. +

+ Win32 MSI API: + MsiViewModify +

+
+ + + Updates or deletes and inserts a Record into the View. + + the Record to be replaced + the replacement failed + the View handle is invalid +

+ The Record must have been obtained by calling . Updates record if the + primary keys are unchanged. Deletes old row and inserts new if primary keys have changed. + Fails with a read-only database. This method cannot be used with a View containing joins. +

+ See for more remarks. +

+ Win32 MSI API: + MsiViewModify +

+
+ + + Deletes a Record from the View. + + the Record to be deleted + the deletion failed + the View handle is invalid +

+ The Record must have been obtained by calling . Fails if the row has been + deleted. Works only with read-write records. This method cannot be used with a View containing joins. +

+ See for more remarks. +

+ Win32 MSI API: + MsiViewModify +

+
+ + + Inserts a Record into the View. The inserted data is not persistent. + + the Record to be inserted + the insertion failed + the View handle is invalid +

+ Fails if a row with the same primary key exists. Works only with read-write records. + This method cannot be used with a View containing joins. +

+ See for more remarks. +

+ Win32 MSI API: + MsiViewModify +

+
+ + + Refreshes the information in the supplied record without changing the position + in the result set and without affecting subsequent fetch operations. + + the Record to be filled with the result of the seek + the seek failed + the View handle is invalid +

+ After seeking, the Record may then be used for subsequent Update, Delete, and Refresh + operations. All primary key columns of the table must be in the query and the Record must + have at least as many fields as the query. Seek cannot be used with multi-table queries. + This method cannot be used with a View containing joins. +

+ See for more remarks. +

+ Win32 MSI API: + MsiViewModify +

+
+ + + Inserts or validates a record. + + the Record to be merged + true if the record was inserted or validated, false if there is an existing + record with the same primary keys that is not identical + the merge failed (for a reason other than invalid data) + the View handle is invalid +

+ Works only with read-write records. This method cannot be used with a + View containing joins. +

+ See for more remarks. +

+ Win32 MSI API: + MsiViewModify +

+
+ + + Validates a record, returning information about any errors. + + the Record to be validated + null if the record was validated; if there is an existing record with + the same primary keys that has conflicting data then error information is returned + the validation failed (for a reason other than invalid data) + the View handle is invalid +

+ The Record must have been obtained by calling . + Works with read-write and read-only records. This method cannot be used + with a View containing joins. +

+ See for more remarks. +

+ Win32 MSI APIs: + MsiViewModify, + MsiViewGetError +

+
+ + + Validates a new record, returning information about any errors. + + the Record to be validated + null if the record was validated; if there is an existing + record with the same primary keys then error information is returned + the validation failed (for a reason other than invalid data) + the View handle is invalid +

+ Checks for duplicate keys. The Record must have been obtained by + calling . Works with read-write and read-only records. + This method cannot be used with a View containing joins. +

+ See for more remarks. +

+ Win32 MSI APIs: + MsiViewModify, + MsiViewGetError +

+
+ + + Validates fields of a fetched or new record, returning information about any errors. + Can validate one or more fields of an incomplete record. + + the Record to be validated + null if the record was validated; if there is an existing record with + the same primary keys that has conflicting data then error information is returned + the validation failed (for a reason other than invalid data) + the View handle is invalid +

+ Works with read-write and read-only records. This method cannot be used with + a View containing joins. +

+ See for more remarks. +

+ Win32 MSI APIs: + MsiViewModify, + MsiViewGetError +

+
+ + + Validates a record that will be deleted later, returning information about any errors. + + the Record to be validated + null if the record is safe to delete; if another row refers to + the primary keys of this row then error information is returned + the validation failed (for a reason other than invalid data) + the View handle is invalid +

+ Validation does not check for the existence of the primary keys of this row in properties + or strings. Does not check if a column is a foreign key to multiple tables. Works with + read-write and read-only records. This method cannot be used with a View containing joins. +

+ See for more remarks. +

+ Win32 MSI APIs: + MsiViewModify, + MsiViewGetError +

+
+ + + Enumerates over the Records retrieved by the View. + + An enumerator of Record objects. + The View was not d before attempting the enumeration. +

+ Each Record object should be d after use. + It is best that the handle be closed manually as soon as it is no longer + needed, as leaving lots of unused handles open can degrade performance. + However, note that it is not necessary to complete the enumeration just + for the purpose of closing handles, because Records are fetched lazily + on each step of the enumeration. +

+ Win32 MSI API: + MsiViewFetch +

+
+ + + Gets the Database on which this View was opened. + + + + + Gets the SQL query string used to open this View. + + + + + Gets the set of tables that were included in the SQL query for this View. + + + + + Gets the set of columns that were included in the query for this View, + or null if this view is not a SELECT query. + + the View is not in an active state + the View handle is invalid +

+ Win32 MSI API: + MsiViewGetColumnInfo +

+
+
+
diff --git a/msi/build/A2Staging/wix35-binaries/sdk/inc/aclutil.h b/msi/build/A2Staging/wix35-binaries/sdk/inc/aclutil.h index 8eef0c65e8..c19e3aba1a 100644 --- a/msi/build/A2Staging/wix35-binaries/sdk/inc/aclutil.h +++ b/msi/build/A2Staging/wix35-binaries/sdk/inc/aclutil.h @@ -1,144 +1,144 @@ -#pragma once -//------------------------------------------------------------------------------------------------- -// -// Copyright (c) Microsoft Corporation. All rights reserved. -// -// The use and distribution terms for this software are covered by the -// Common Public License 1.0 (http://opensource.org/licenses/cpl1.0.php) -// which can be found in the file CPL.TXT at the root of this distribution. -// By using this software in any fashion, you are agreeing to be bound by -// the terms of this license. -// -// You must not remove this notice, or any other, from this software. -// -// -// -// Access Control List helper functions. -// -//------------------------------------------------------------------------------------------------- - -#include -#include - -#define ReleaseSid(x) if (x) { AclFreeSid(x); } -#define ReleaseNullSid(x) if (x) { AclFreeSid(x); x = NULL; } - -#ifdef __cplusplus -extern "C" { -#endif - -// structs -struct ACL_ACCESS -{ - BOOL fDenyAccess; - DWORD dwAccessMask; - - // TODO: consider using a union - LPCWSTR pwzAccountName; // NOTE: the last three items in this structure are ignored if this is not NULL - - SID_IDENTIFIER_AUTHORITY sia; // used if pwzAccountName is NULL - BYTE nSubAuthorityCount; - DWORD nSubAuthority[8]; -}; - -struct ACL_ACE -{ - DWORD dwFlags; - DWORD dwMask; - PSID psid; -}; - - -// functions -HRESULT DAPI AclCheckAccess( - __in HANDLE hToken, - __in ACL_ACCESS* paa - ); -HRESULT DAPI AclCheckAdministratorAccess( - __in HANDLE hToken - ); -HRESULT DAPI AclCheckLocalSystemAccess( - __in HANDLE hToken - ); - -HRESULT DAPI AclGetWellKnownSid( - __in WELL_KNOWN_SID_TYPE wkst, - __deref_out PSID* ppsid - ); -HRESULT DAPI AclGetAccountSid( - __in_opt LPCWSTR wzSystem, - __in_z LPCWSTR wzAccount, - __deref_out PSID* ppsid - ); -HRESULT DAPI AclGetAccountSidString( - __in_z LPCWSTR wzSystem, - __in_z LPCWSTR wzAccount, - __deref_out_z LPWSTR* ppwzSid - ); - -HRESULT DAPI AclCreateDacl( - __in_ecount(cDeny) ACL_ACE rgaaDeny[], - __in DWORD cDeny, - __in_ecount(cAllow) ACL_ACE rgaaAllow[], - __in DWORD cAllow, - __deref_out ACL** ppAcl - ); -HRESULT DAPI AclAddToDacl( - __in ACL* pAcl, - __in_ecount_opt(cDeny) const ACL_ACE rgaaDeny[], - __in DWORD cDeny, - __in_ecount_opt(cAllow) const ACL_ACE rgaaAllow[], - __in DWORD cAllow, - __deref_out ACL** ppAclNew - ); -HRESULT DAPI AclMergeDacls( - __in const ACL* pAcl1, - __in const ACL* pAcl2, - __deref_out ACL** ppAclNew - ); -HRESULT DAPI AclCreateDaclOld( - __in_ecount(cAclAccesses) ACL_ACCESS* paa, - __in DWORD cAclAccesses, - __deref_out ACL** ppAcl - ); -HRESULT DAPI AclCreateSecurityDescriptor( - __in_ecount(cAclAccesses) ACL_ACCESS* paa, - __in DWORD cAclAccesses, - __deref_out SECURITY_DESCRIPTOR** ppsd - ); -HRESULT DAPI AclCreateSecurityDescriptorFromDacl( - __in ACL* pACL, - __deref_out SECURITY_DESCRIPTOR** ppsd - ); -HRESULT __cdecl AclCreateSecurityDescriptorFromString( - __deref_out SECURITY_DESCRIPTOR** ppsd, - __in_z __format_string LPCWSTR wzSddlFormat, - ... - ); -HRESULT DAPI AclDuplicateSecurityDescriptor( - __in SECURITY_DESCRIPTOR* psd, - __deref_out SECURITY_DESCRIPTOR** ppsd - ); -HRESULT DAPI AclGetSecurityDescriptor( - __in_z LPCWSTR wzObject, - __in SE_OBJECT_TYPE sot, - __deref_out SECURITY_DESCRIPTOR** ppsd - ); - -HRESULT DAPI AclFreeSid( - __in PSID psid - ); -HRESULT DAPI AclFreeDacl( - __in ACL* pACL - ); -HRESULT DAPI AclFreeSecurityDescriptor( - __in SECURITY_DESCRIPTOR* psd - ); - -HRESULT DAPI AclAddAdminToSecurityDescriptor( - __in SECURITY_DESCRIPTOR* pSecurity, - __deref_out SECURITY_DESCRIPTOR** ppSecurityNew - ); -#ifdef __cplusplus -} -#endif +#pragma once +//------------------------------------------------------------------------------------------------- +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// The use and distribution terms for this software are covered by the +// Common Public License 1.0 (http://opensource.org/licenses/cpl1.0.php) +// which can be found in the file CPL.TXT at the root of this distribution. +// By using this software in any fashion, you are agreeing to be bound by +// the terms of this license. +// +// You must not remove this notice, or any other, from this software. +// +// +// +// Access Control List helper functions. +// +//------------------------------------------------------------------------------------------------- + +#include +#include + +#define ReleaseSid(x) if (x) { AclFreeSid(x); } +#define ReleaseNullSid(x) if (x) { AclFreeSid(x); x = NULL; } + +#ifdef __cplusplus +extern "C" { +#endif + +// structs +struct ACL_ACCESS +{ + BOOL fDenyAccess; + DWORD dwAccessMask; + + // TODO: consider using a union + LPCWSTR pwzAccountName; // NOTE: the last three items in this structure are ignored if this is not NULL + + SID_IDENTIFIER_AUTHORITY sia; // used if pwzAccountName is NULL + BYTE nSubAuthorityCount; + DWORD nSubAuthority[8]; +}; + +struct ACL_ACE +{ + DWORD dwFlags; + DWORD dwMask; + PSID psid; +}; + + +// functions +HRESULT DAPI AclCheckAccess( + __in HANDLE hToken, + __in ACL_ACCESS* paa + ); +HRESULT DAPI AclCheckAdministratorAccess( + __in HANDLE hToken + ); +HRESULT DAPI AclCheckLocalSystemAccess( + __in HANDLE hToken + ); + +HRESULT DAPI AclGetWellKnownSid( + __in WELL_KNOWN_SID_TYPE wkst, + __deref_out PSID* ppsid + ); +HRESULT DAPI AclGetAccountSid( + __in_opt LPCWSTR wzSystem, + __in_z LPCWSTR wzAccount, + __deref_out PSID* ppsid + ); +HRESULT DAPI AclGetAccountSidString( + __in_z LPCWSTR wzSystem, + __in_z LPCWSTR wzAccount, + __deref_out_z LPWSTR* ppwzSid + ); + +HRESULT DAPI AclCreateDacl( + __in_ecount(cDeny) ACL_ACE rgaaDeny[], + __in DWORD cDeny, + __in_ecount(cAllow) ACL_ACE rgaaAllow[], + __in DWORD cAllow, + __deref_out ACL** ppAcl + ); +HRESULT DAPI AclAddToDacl( + __in ACL* pAcl, + __in_ecount_opt(cDeny) const ACL_ACE rgaaDeny[], + __in DWORD cDeny, + __in_ecount_opt(cAllow) const ACL_ACE rgaaAllow[], + __in DWORD cAllow, + __deref_out ACL** ppAclNew + ); +HRESULT DAPI AclMergeDacls( + __in const ACL* pAcl1, + __in const ACL* pAcl2, + __deref_out ACL** ppAclNew + ); +HRESULT DAPI AclCreateDaclOld( + __in_ecount(cAclAccesses) ACL_ACCESS* paa, + __in DWORD cAclAccesses, + __deref_out ACL** ppAcl + ); +HRESULT DAPI AclCreateSecurityDescriptor( + __in_ecount(cAclAccesses) ACL_ACCESS* paa, + __in DWORD cAclAccesses, + __deref_out SECURITY_DESCRIPTOR** ppsd + ); +HRESULT DAPI AclCreateSecurityDescriptorFromDacl( + __in ACL* pACL, + __deref_out SECURITY_DESCRIPTOR** ppsd + ); +HRESULT __cdecl AclCreateSecurityDescriptorFromString( + __deref_out SECURITY_DESCRIPTOR** ppsd, + __in_z __format_string LPCWSTR wzSddlFormat, + ... + ); +HRESULT DAPI AclDuplicateSecurityDescriptor( + __in SECURITY_DESCRIPTOR* psd, + __deref_out SECURITY_DESCRIPTOR** ppsd + ); +HRESULT DAPI AclGetSecurityDescriptor( + __in_z LPCWSTR wzObject, + __in SE_OBJECT_TYPE sot, + __deref_out SECURITY_DESCRIPTOR** ppsd + ); + +HRESULT DAPI AclFreeSid( + __in PSID psid + ); +HRESULT DAPI AclFreeDacl( + __in ACL* pACL + ); +HRESULT DAPI AclFreeSecurityDescriptor( + __in SECURITY_DESCRIPTOR* psd + ); + +HRESULT DAPI AclAddAdminToSecurityDescriptor( + __in SECURITY_DESCRIPTOR* pSecurity, + __deref_out SECURITY_DESCRIPTOR** ppSecurityNew + ); +#ifdef __cplusplus +} +#endif diff --git a/msi/build/A2Staging/wix35-binaries/sdk/inc/apuputil.h b/msi/build/A2Staging/wix35-binaries/sdk/inc/apuputil.h index fc8ea3f55b..0bc870f362 100644 --- a/msi/build/A2Staging/wix35-binaries/sdk/inc/apuputil.h +++ b/msi/build/A2Staging/wix35-binaries/sdk/inc/apuputil.h @@ -1,97 +1,97 @@ -#pragma once -//------------------------------------------------------------------------------------------------- -// -// Copyright (c) Microsoft Corporation. All rights reserved. -// -// The use and distribution terms for this software are covered by the -// Common Public License 1.0 (http://opensource.org/licenses/cpl1.0.php) -// which can be found in the file CPL.TXT at the root of this distribution. -// By using this software in any fashion, you are agreeing to be bound by -// the terms of this license. -// -// You must not remove this notice, or any other, from this software. -// -// -// -// Header for Application Update helper functions. -// -//------------------------------------------------------------------------------------------------- - -#ifdef __cplusplus -extern "C" { -#endif - -#define ReleaseApupChain(p) if (p) { ApupFreeChain(p); p = NULL; } -#define ReleaseNullApupChain(p) if (p) { ApupFreeChain(p); p = NULL; } - - -const LPCWSTR APPLICATION_SYNDICATION_NAMESPACE = L"http://appsyndication.org/2006/appsyn"; - -enum APUP_HASH_ALGORITHM -{ - APUP_HASH_ALGORITHM_UNKNOWN, - APUP_HASH_ALGORITHM_MD5, - APUP_HASH_ALGORITHM_SHA1, - APUP_HASH_ALGORITHM_SHA256, -}; - - -struct APPLICATION_UPDATE_ENCLOSURE -{ - LPWSTR wzUrl; - LPWSTR wzLocalName; - DWORD64 dw64Size; - - BYTE* rgbDigest; - DWORD cbDigest; - APUP_HASH_ALGORITHM digestAlgorithm; - - BOOL fInstaller; -}; - - -struct APPLICATION_UPDATE_ENTRY -{ - LPWSTR wzApplicationId; - LPWSTR wzApplicationType; - - DWORD64 dw64Version; - LPWSTR wzUpgradeId; - DWORD64 dw64UpgradeVersion; - BOOL fUpgradeExclusive; - - DWORD64 dw64TotalSize; - - DWORD cEnclosures; - APPLICATION_UPDATE_ENCLOSURE* rgEnclosures; -}; - - -struct APPLICATION_UPDATE_CHAIN -{ - LPWSTR wzDefaultApplicationId; - LPWSTR wzDefaultApplicationType; - - DWORD cEntries; - APPLICATION_UPDATE_ENTRY* rgEntries; -}; - - -HRESULT DAPI ApupAllocChainFromAtom( - __in ATOM_FEED* pFeed, - __out APPLICATION_UPDATE_CHAIN** ppChain - ); - -HRESULT DAPI ApupFilterChain( - __in APPLICATION_UPDATE_CHAIN* pChain, - __in DWORD64 dw64Version, - __out APPLICATION_UPDATE_CHAIN** ppFilteredChain - ); - -void DAPI ApupFreeChain( - __in APPLICATION_UPDATE_CHAIN* pChain - ); - -#ifdef __cplusplus -} -#endif +#pragma once +//------------------------------------------------------------------------------------------------- +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// The use and distribution terms for this software are covered by the +// Common Public License 1.0 (http://opensource.org/licenses/cpl1.0.php) +// which can be found in the file CPL.TXT at the root of this distribution. +// By using this software in any fashion, you are agreeing to be bound by +// the terms of this license. +// +// You must not remove this notice, or any other, from this software. +// +// +// +// Header for Application Update helper functions. +// +//------------------------------------------------------------------------------------------------- + +#ifdef __cplusplus +extern "C" { +#endif + +#define ReleaseApupChain(p) if (p) { ApupFreeChain(p); p = NULL; } +#define ReleaseNullApupChain(p) if (p) { ApupFreeChain(p); p = NULL; } + + +const LPCWSTR APPLICATION_SYNDICATION_NAMESPACE = L"http://appsyndication.org/2006/appsyn"; + +enum APUP_HASH_ALGORITHM +{ + APUP_HASH_ALGORITHM_UNKNOWN, + APUP_HASH_ALGORITHM_MD5, + APUP_HASH_ALGORITHM_SHA1, + APUP_HASH_ALGORITHM_SHA256, +}; + + +struct APPLICATION_UPDATE_ENCLOSURE +{ + LPWSTR wzUrl; + LPWSTR wzLocalName; + DWORD64 dw64Size; + + BYTE* rgbDigest; + DWORD cbDigest; + APUP_HASH_ALGORITHM digestAlgorithm; + + BOOL fInstaller; +}; + + +struct APPLICATION_UPDATE_ENTRY +{ + LPWSTR wzApplicationId; + LPWSTR wzApplicationType; + + DWORD64 dw64Version; + LPWSTR wzUpgradeId; + DWORD64 dw64UpgradeVersion; + BOOL fUpgradeExclusive; + + DWORD64 dw64TotalSize; + + DWORD cEnclosures; + APPLICATION_UPDATE_ENCLOSURE* rgEnclosures; +}; + + +struct APPLICATION_UPDATE_CHAIN +{ + LPWSTR wzDefaultApplicationId; + LPWSTR wzDefaultApplicationType; + + DWORD cEntries; + APPLICATION_UPDATE_ENTRY* rgEntries; +}; + + +HRESULT DAPI ApupAllocChainFromAtom( + __in ATOM_FEED* pFeed, + __out APPLICATION_UPDATE_CHAIN** ppChain + ); + +HRESULT DAPI ApupFilterChain( + __in APPLICATION_UPDATE_CHAIN* pChain, + __in DWORD64 dw64Version, + __out APPLICATION_UPDATE_CHAIN** ppFilteredChain + ); + +void DAPI ApupFreeChain( + __in APPLICATION_UPDATE_CHAIN* pChain + ); + +#ifdef __cplusplus +} +#endif diff --git a/msi/build/A2Staging/wix35-binaries/sdk/inc/atomutil.h b/msi/build/A2Staging/wix35-binaries/sdk/inc/atomutil.h index bc66c0b1ed..e194a8fc31 100644 --- a/msi/build/A2Staging/wix35-binaries/sdk/inc/atomutil.h +++ b/msi/build/A2Staging/wix35-binaries/sdk/inc/atomutil.h @@ -1,163 +1,163 @@ -//------------------------------------------------------------------------------------------------- -// -// Copyright (c) Microsoft Corporation. All rights reserved. -// -// The use and distribution terms for this software are covered by the -// Common Public License 1.0 (http://opensource.org/licenses/cpl1.0.php) -// which can be found in the file CPL.TXT at the root of this distribution. -// By using this software in any fashion, you are agreeing to be bound by -// the terms of this license. -// -// You must not remove this notice, or any other, from this software. -// -// -// -// ATOM helper funtions. -// -//------------------------------------------------------------------------------------------------- - -#pragma once - - -#ifdef __cplusplus -extern "C" { -#endif - -#define ReleaseAtomFeed(p) if (p) { AtomFreeFeed(p); } -#define ReleaseNullAtomFeed(p) if (p) { AtomFreeFeed(p); p = NULL; } - - -struct ATOM_UNKNOWN_ATTRIBUTE -{ - LPWSTR wzNamespace; - LPWSTR wzAttribute; - LPWSTR wzValue; - - ATOM_UNKNOWN_ATTRIBUTE* pNext; -}; - -struct ATOM_UNKNOWN_ELEMENT -{ - LPWSTR wzNamespace; - LPWSTR wzElement; - LPWSTR wzValue; - - ATOM_UNKNOWN_ATTRIBUTE* pAttributes; - ATOM_UNKNOWN_ELEMENT* pNext; -}; - -struct ATOM_LINK -{ - LPWSTR wzRel; - LPWSTR wzTitle; - LPWSTR wzType; - LPWSTR wzUrl; - LPWSTR wzValue; - DWORD64 dw64Length; - - ATOM_UNKNOWN_ATTRIBUTE* pUnknownAttributes; - ATOM_UNKNOWN_ELEMENT* pUnknownElements; -}; - -struct ATOM_CONTENT -{ - LPWSTR wzType; - LPWSTR wzUrl; - LPWSTR wzValue; - - ATOM_UNKNOWN_ELEMENT* pUnknownElements; -}; - -struct ATOM_AUTHOR -{ - LPWSTR wzName; - LPWSTR wzEmail; - LPWSTR wzUrl; -}; - -struct ATOM_CATEGORY -{ - LPWSTR wzLabel; - LPWSTR wzScheme; - LPWSTR wzTerm; - - ATOM_UNKNOWN_ELEMENT* pUnknownElements; -}; - -struct ATOM_ENTRY -{ - LPWSTR wzId; - LPWSTR wzSummary; - LPWSTR wzTitle; - FILETIME ftPublished; - FILETIME ftUpdated; - - ATOM_CONTENT* pContent; - - DWORD cAuthors; - ATOM_AUTHOR* rgAuthors; - - DWORD cCategories; - ATOM_CATEGORY* rgCategories; - - DWORD cLinks; - ATOM_LINK* rgLinks; - - IXMLDOMNode* pixn; - ATOM_UNKNOWN_ELEMENT* pUnknownElements; -}; - -struct ATOM_FEED -{ - LPWSTR wzGenerator; - LPWSTR wzIcon; - LPWSTR wzId; - LPWSTR wzLogo; - LPWSTR wzSubtitle; - LPWSTR wzTitle; - FILETIME ftUpdated; - - DWORD cAuthors; - ATOM_AUTHOR* rgAuthors; - - DWORD cCategories; - ATOM_CATEGORY* rgCategories; - - DWORD cEntries; - ATOM_ENTRY* rgEntries; - - DWORD cLinks; - ATOM_LINK* rgLinks; - - IXMLDOMNode* pixn; - ATOM_UNKNOWN_ELEMENT* pUnknownElements; -}; - -HRESULT DAPI AtomInitialize( - ); - -void DAPI AtomUninitialize( - ); - -HRESULT DAPI AtomParseFromString( - __in_z LPCWSTR wzAtomString, - __out ATOM_FEED **ppFeed - ); - -HRESULT DAPI AtomParseFromFile( - __in_z LPCWSTR wzAtomFile, - __out ATOM_FEED **ppFeed - ); - -HRESULT DAPI AtomParseFromDocument( - __in IXMLDOMDocument* pixdDocument, - __out ATOM_FEED **ppFeed - ); - -void DAPI AtomFreeFeed( - __in_xcount(pFeed->cItems) ATOM_FEED *pFEED - ); - -#ifdef __cplusplus -} -#endif +//------------------------------------------------------------------------------------------------- +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// The use and distribution terms for this software are covered by the +// Common Public License 1.0 (http://opensource.org/licenses/cpl1.0.php) +// which can be found in the file CPL.TXT at the root of this distribution. +// By using this software in any fashion, you are agreeing to be bound by +// the terms of this license. +// +// You must not remove this notice, or any other, from this software. +// +// +// +// ATOM helper funtions. +// +//------------------------------------------------------------------------------------------------- + +#pragma once + + +#ifdef __cplusplus +extern "C" { +#endif + +#define ReleaseAtomFeed(p) if (p) { AtomFreeFeed(p); } +#define ReleaseNullAtomFeed(p) if (p) { AtomFreeFeed(p); p = NULL; } + + +struct ATOM_UNKNOWN_ATTRIBUTE +{ + LPWSTR wzNamespace; + LPWSTR wzAttribute; + LPWSTR wzValue; + + ATOM_UNKNOWN_ATTRIBUTE* pNext; +}; + +struct ATOM_UNKNOWN_ELEMENT +{ + LPWSTR wzNamespace; + LPWSTR wzElement; + LPWSTR wzValue; + + ATOM_UNKNOWN_ATTRIBUTE* pAttributes; + ATOM_UNKNOWN_ELEMENT* pNext; +}; + +struct ATOM_LINK +{ + LPWSTR wzRel; + LPWSTR wzTitle; + LPWSTR wzType; + LPWSTR wzUrl; + LPWSTR wzValue; + DWORD64 dw64Length; + + ATOM_UNKNOWN_ATTRIBUTE* pUnknownAttributes; + ATOM_UNKNOWN_ELEMENT* pUnknownElements; +}; + +struct ATOM_CONTENT +{ + LPWSTR wzType; + LPWSTR wzUrl; + LPWSTR wzValue; + + ATOM_UNKNOWN_ELEMENT* pUnknownElements; +}; + +struct ATOM_AUTHOR +{ + LPWSTR wzName; + LPWSTR wzEmail; + LPWSTR wzUrl; +}; + +struct ATOM_CATEGORY +{ + LPWSTR wzLabel; + LPWSTR wzScheme; + LPWSTR wzTerm; + + ATOM_UNKNOWN_ELEMENT* pUnknownElements; +}; + +struct ATOM_ENTRY +{ + LPWSTR wzId; + LPWSTR wzSummary; + LPWSTR wzTitle; + FILETIME ftPublished; + FILETIME ftUpdated; + + ATOM_CONTENT* pContent; + + DWORD cAuthors; + ATOM_AUTHOR* rgAuthors; + + DWORD cCategories; + ATOM_CATEGORY* rgCategories; + + DWORD cLinks; + ATOM_LINK* rgLinks; + + IXMLDOMNode* pixn; + ATOM_UNKNOWN_ELEMENT* pUnknownElements; +}; + +struct ATOM_FEED +{ + LPWSTR wzGenerator; + LPWSTR wzIcon; + LPWSTR wzId; + LPWSTR wzLogo; + LPWSTR wzSubtitle; + LPWSTR wzTitle; + FILETIME ftUpdated; + + DWORD cAuthors; + ATOM_AUTHOR* rgAuthors; + + DWORD cCategories; + ATOM_CATEGORY* rgCategories; + + DWORD cEntries; + ATOM_ENTRY* rgEntries; + + DWORD cLinks; + ATOM_LINK* rgLinks; + + IXMLDOMNode* pixn; + ATOM_UNKNOWN_ELEMENT* pUnknownElements; +}; + +HRESULT DAPI AtomInitialize( + ); + +void DAPI AtomUninitialize( + ); + +HRESULT DAPI AtomParseFromString( + __in_z LPCWSTR wzAtomString, + __out ATOM_FEED **ppFeed + ); + +HRESULT DAPI AtomParseFromFile( + __in_z LPCWSTR wzAtomFile, + __out ATOM_FEED **ppFeed + ); + +HRESULT DAPI AtomParseFromDocument( + __in IXMLDOMDocument* pixdDocument, + __out ATOM_FEED **ppFeed + ); + +void DAPI AtomFreeFeed( + __in_xcount(pFeed->cItems) ATOM_FEED *pFEED + ); + +#ifdef __cplusplus +} +#endif diff --git a/msi/build/A2Staging/wix35-binaries/sdk/inc/buffutil.h b/msi/build/A2Staging/wix35-binaries/sdk/inc/buffutil.h index 5d72849601..a6d910923b 100644 --- a/msi/build/A2Staging/wix35-binaries/sdk/inc/buffutil.h +++ b/msi/build/A2Staging/wix35-binaries/sdk/inc/buffutil.h @@ -1,86 +1,86 @@ -//------------------------------------------------------------------------------------------------- -// -// Copyright (c) Microsoft Corporation. All rights reserved. -// -// The use and distribution terms for this software are covered by the -// Common Public License 1.0 (http://opensource.org/licenses/cpl1.0.php) -// which can be found in the file CPL.TXT at the root of this distribution. -// By using this software in any fashion, you are agreeing to be bound by -// the terms of this license. -// -// You must not remove this notice, or any other, from this software. -// -// -// -// Binary serialization helper functions. -// -//------------------------------------------------------------------------------------------------- - -#pragma once - - -#ifdef __cplusplus -extern "C" { -#endif - - -// macro definitions - -#define ReleaseBuffer ReleaseMem -#define ReleaseNullBuffer ReleaseNullMem -#define BuffFree MemFree - - -// function declarations - -HRESULT BuffReadNumber( - __in_bcount(cbBuffer) const BYTE* pbBuffer, - __in SIZE_T cbBuffer, - __inout SIZE_T* piBuffer, - __out DWORD* pdw - ); -HRESULT BuffReadNumber64( - __in_bcount(cbBuffer) const BYTE* pbBuffer, - __in SIZE_T cbBuffer, - __inout SIZE_T* piBuffer, - __out DWORD64* pdw64 - ); -HRESULT BuffReadString( - __in_bcount(cbBuffer) const BYTE* pbBuffer, - __in SIZE_T cbBuffer, - __inout SIZE_T* piBuffer, - __deref_out_z LPWSTR* pscz - ); -HRESULT BuffReadStream( - __in_bcount(cbBuffer) const BYTE* pbBuffer, - __in SIZE_T cbBuffer, - __inout SIZE_T* piBuffer, - __deref_out_bcount(*pcbStream) BYTE** ppbStream, - __out SIZE_T* pcbStream - ); - -HRESULT BuffWriteNumber( - __deref_out_bcount(*piBuffer) BYTE** ppbBuffer, - __inout SIZE_T* piBuffer, - __in DWORD dw - ); -HRESULT BuffWriteNumber64( - __deref_out_bcount(*piBuffer) BYTE** ppbBuffer, - __inout SIZE_T* piBuffer, - __in DWORD64 dw64 - ); -HRESULT BuffWriteString( - __deref_out_bcount(*piBuffer) BYTE** ppbBuffer, - __inout SIZE_T* piBuffer, - __in_z LPCWSTR scz - ); -HRESULT BuffWriteStream( - __deref_out_bcount(*piBuffer) BYTE** ppbBuffer, - __inout SIZE_T* piBuffer, - __in_bcount(cbStream) const BYTE* pbStream, - __in SIZE_T cbStream - ); - -#ifdef __cplusplus -} -#endif +//------------------------------------------------------------------------------------------------- +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// The use and distribution terms for this software are covered by the +// Common Public License 1.0 (http://opensource.org/licenses/cpl1.0.php) +// which can be found in the file CPL.TXT at the root of this distribution. +// By using this software in any fashion, you are agreeing to be bound by +// the terms of this license. +// +// You must not remove this notice, or any other, from this software. +// +// +// +// Binary serialization helper functions. +// +//------------------------------------------------------------------------------------------------- + +#pragma once + + +#ifdef __cplusplus +extern "C" { +#endif + + +// macro definitions + +#define ReleaseBuffer ReleaseMem +#define ReleaseNullBuffer ReleaseNullMem +#define BuffFree MemFree + + +// function declarations + +HRESULT BuffReadNumber( + __in_bcount(cbBuffer) const BYTE* pbBuffer, + __in SIZE_T cbBuffer, + __inout SIZE_T* piBuffer, + __out DWORD* pdw + ); +HRESULT BuffReadNumber64( + __in_bcount(cbBuffer) const BYTE* pbBuffer, + __in SIZE_T cbBuffer, + __inout SIZE_T* piBuffer, + __out DWORD64* pdw64 + ); +HRESULT BuffReadString( + __in_bcount(cbBuffer) const BYTE* pbBuffer, + __in SIZE_T cbBuffer, + __inout SIZE_T* piBuffer, + __deref_out_z LPWSTR* pscz + ); +HRESULT BuffReadStream( + __in_bcount(cbBuffer) const BYTE* pbBuffer, + __in SIZE_T cbBuffer, + __inout SIZE_T* piBuffer, + __deref_out_bcount(*pcbStream) BYTE** ppbStream, + __out SIZE_T* pcbStream + ); + +HRESULT BuffWriteNumber( + __deref_out_bcount(*piBuffer) BYTE** ppbBuffer, + __inout SIZE_T* piBuffer, + __in DWORD dw + ); +HRESULT BuffWriteNumber64( + __deref_out_bcount(*piBuffer) BYTE** ppbBuffer, + __inout SIZE_T* piBuffer, + __in DWORD64 dw64 + ); +HRESULT BuffWriteString( + __deref_out_bcount(*piBuffer) BYTE** ppbBuffer, + __inout SIZE_T* piBuffer, + __in_z LPCWSTR scz + ); +HRESULT BuffWriteStream( + __deref_out_bcount(*piBuffer) BYTE** ppbBuffer, + __inout SIZE_T* piBuffer, + __in_bcount(cbStream) const BYTE* pbStream, + __in SIZE_T cbStream + ); + +#ifdef __cplusplus +} +#endif diff --git a/msi/build/A2Staging/wix35-binaries/sdk/inc/cabcutil.h b/msi/build/A2Staging/wix35-binaries/sdk/inc/cabcutil.h index 789e49c9e8..e6a9d74348 100644 --- a/msi/build/A2Staging/wix35-binaries/sdk/inc/cabcutil.h +++ b/msi/build/A2Staging/wix35-binaries/sdk/inc/cabcutil.h @@ -1,68 +1,68 @@ -#pragma once -//------------------------------------------------------------------------------------------------- -// -// Copyright (c) Microsoft Corporation. All rights reserved. -// -// The use and distribution terms for this software are covered by the -// Common Public License 1.0 (http://opensource.org/licenses/cpl1.0.php) -// which can be found in the file CPL.TXT at the root of this distribution. -// By using this software in any fashion, you are agreeing to be bound by -// the terms of this license. -// -// You must not remove this notice, or any other, from this software. -// -// -// -// Header for cabinet creation helper functions. -// -//------------------------------------------------------------------------------------------------- - -#include -#include -#include - -#define CAB_MAX_SIZE 0x7FFFFFFF // (see KB: Q174866) - -#ifdef __cplusplus -extern "C" { -#endif - -// time vs. space trade-off -enum COMPRESSION_TYPE -{ - COMPRESSION_TYPE_NONE, // fastest - COMPRESSION_TYPE_LOW, - COMPRESSION_TYPE_MEDIUM, - COMPRESSION_TYPE_HIGH, // smallest - COMPRESSION_TYPE_MSZIP -}; - -// functions -HRESULT DAPI CabCBegin( - __in_z LPCWSTR wzCab, - __in_z LPCWSTR wzCabDir, - __in DWORD dwMaxFiles, - __in DWORD dwMaxSize, - __in DWORD dwMaxThresh, - __in COMPRESSION_TYPE ct, - __out HANDLE *phContext - ); -HRESULT DAPI CabCNextCab( - __in HANDLE hContext - ); -HRESULT DAPI CabCAddFile( - __in_z LPCWSTR wzFile, - __in_z_opt LPCWSTR wzToken, - __in_opt PMSIFILEHASHINFO pmfHash, - __in HANDLE hContext - ); -HRESULT DAPI CabCFinish( - __in HANDLE hContext - ); -void DAPI CabCCancel( - __in HANDLE hContext - ); - -#ifdef __cplusplus -} -#endif +#pragma once +//------------------------------------------------------------------------------------------------- +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// The use and distribution terms for this software are covered by the +// Common Public License 1.0 (http://opensource.org/licenses/cpl1.0.php) +// which can be found in the file CPL.TXT at the root of this distribution. +// By using this software in any fashion, you are agreeing to be bound by +// the terms of this license. +// +// You must not remove this notice, or any other, from this software. +// +// +// +// Header for cabinet creation helper functions. +// +//------------------------------------------------------------------------------------------------- + +#include +#include +#include + +#define CAB_MAX_SIZE 0x7FFFFFFF // (see KB: Q174866) + +#ifdef __cplusplus +extern "C" { +#endif + +// time vs. space trade-off +enum COMPRESSION_TYPE +{ + COMPRESSION_TYPE_NONE, // fastest + COMPRESSION_TYPE_LOW, + COMPRESSION_TYPE_MEDIUM, + COMPRESSION_TYPE_HIGH, // smallest + COMPRESSION_TYPE_MSZIP +}; + +// functions +HRESULT DAPI CabCBegin( + __in_z LPCWSTR wzCab, + __in_z LPCWSTR wzCabDir, + __in DWORD dwMaxFiles, + __in DWORD dwMaxSize, + __in DWORD dwMaxThresh, + __in COMPRESSION_TYPE ct, + __out HANDLE *phContext + ); +HRESULT DAPI CabCNextCab( + __in HANDLE hContext + ); +HRESULT DAPI CabCAddFile( + __in_z LPCWSTR wzFile, + __in_z_opt LPCWSTR wzToken, + __in_opt PMSIFILEHASHINFO pmfHash, + __in HANDLE hContext + ); +HRESULT DAPI CabCFinish( + __in HANDLE hContext + ); +void DAPI CabCCancel( + __in HANDLE hContext + ); + +#ifdef __cplusplus +} +#endif diff --git a/msi/build/A2Staging/wix35-binaries/sdk/inc/cabutil.h b/msi/build/A2Staging/wix35-binaries/sdk/inc/cabutil.h index 6e9cd501f9..0ae23d507c 100644 --- a/msi/build/A2Staging/wix35-binaries/sdk/inc/cabutil.h +++ b/msi/build/A2Staging/wix35-binaries/sdk/inc/cabutil.h @@ -1,71 +1,71 @@ -#pragma once -//------------------------------------------------------------------------------------------------- -// -// Copyright (c) Microsoft Corporation. All rights reserved. -// -// The use and distribution terms for this software are covered by the -// Common Public License 1.0 (http://opensource.org/licenses/cpl1.0.php) -// which can be found in the file CPL.TXT at the root of this distribution. -// By using this software in any fashion, you are agreeing to be bound by -// the terms of this license. -// -// You must not remove this notice, or any other, from this software. -// -// -// -// Header for cabinet decompression helper functions -// -//------------------------------------------------------------------------------------------------- - -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -// structs - - -// callback function prototypes -typedef HRESULT (*CAB_CALLBACK_OPEN_FILE)(LPCWSTR wzFile, INT_PTR* ppFile); -typedef HRESULT (*CAB_CALLBACK_READ_FILE)(INT_PTR pFile, LPVOID pvData, DWORD cbData, DWORD* pcbRead); -typedef HRESULT (*CAB_CALLBACK_WRITE_FILE)(INT_PTR pFile, LPVOID pvData, DWORD cbData, DWORD* pcbRead); -typedef LONG (*CAB_CALLBACK_SEEK_FILE)(INT_PTR pFile, DWORD dwMove, DWORD dwMoveMethod); -typedef HRESULT (*CAB_CALLBACK_CLOSE_FILE)(INT_PTR pFile); - -typedef HRESULT (*CAB_CALLBACK_BEGIN_FILE)(LPCWSTR wzFileId, FILETIME* pftFileTime, DWORD cbFileSize, LPVOID pvContext, INT_PTR* ppFile); -typedef HRESULT (*CAB_CALLBACK_END_FILE)(LPCWSTR wzFileId, LPVOID pvContext, INT_PTR pFile); -typedef HRESULT (*CAB_CALLBACK_PROGRESS)(BOOL fBeginFile, LPCWSTR wzFileId, LPVOID pvContext); - -// function type with calling convention of __stdcall that .NET 1.1 understands only -// .NET 2.0 will not need this -typedef INT_PTR (FAR __stdcall *STDCALL_PFNFDINOTIFY)(FDINOTIFICATIONTYPE fdint, PFDINOTIFICATION pfdin); - - -// functions -HRESULT DAPI CabInitialize( - __in BOOL fDelayLoad - ); -void DAPI CabUninitialize( - ); - -HRESULT DAPI CabExtract( - __in_z LPCWSTR wzCabinet, - __in_z LPCWSTR wzExtractFile, - __in_z LPCWSTR wzExtractDir, - __in_opt CAB_CALLBACK_PROGRESS pfnProgress, - __in_opt LPVOID pvContext, - __in DWORD64 dw64EmbeddedOffset - ); - -HRESULT DAPI CabEnumerate( - __in_z LPCWSTR wzCabinet, - __in_z LPCWSTR wzEnumerateFile, - __in STDCALL_PFNFDINOTIFY pfnNotify, - __in DWORD64 dw64EmbeddedOffset - ); - -#ifdef __cplusplus -} -#endif +#pragma once +//------------------------------------------------------------------------------------------------- +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// The use and distribution terms for this software are covered by the +// Common Public License 1.0 (http://opensource.org/licenses/cpl1.0.php) +// which can be found in the file CPL.TXT at the root of this distribution. +// By using this software in any fashion, you are agreeing to be bound by +// the terms of this license. +// +// You must not remove this notice, or any other, from this software. +// +// +// +// Header for cabinet decompression helper functions +// +//------------------------------------------------------------------------------------------------- + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +// structs + + +// callback function prototypes +typedef HRESULT (*CAB_CALLBACK_OPEN_FILE)(LPCWSTR wzFile, INT_PTR* ppFile); +typedef HRESULT (*CAB_CALLBACK_READ_FILE)(INT_PTR pFile, LPVOID pvData, DWORD cbData, DWORD* pcbRead); +typedef HRESULT (*CAB_CALLBACK_WRITE_FILE)(INT_PTR pFile, LPVOID pvData, DWORD cbData, DWORD* pcbRead); +typedef LONG (*CAB_CALLBACK_SEEK_FILE)(INT_PTR pFile, DWORD dwMove, DWORD dwMoveMethod); +typedef HRESULT (*CAB_CALLBACK_CLOSE_FILE)(INT_PTR pFile); + +typedef HRESULT (*CAB_CALLBACK_BEGIN_FILE)(LPCWSTR wzFileId, FILETIME* pftFileTime, DWORD cbFileSize, LPVOID pvContext, INT_PTR* ppFile); +typedef HRESULT (*CAB_CALLBACK_END_FILE)(LPCWSTR wzFileId, LPVOID pvContext, INT_PTR pFile); +typedef HRESULT (*CAB_CALLBACK_PROGRESS)(BOOL fBeginFile, LPCWSTR wzFileId, LPVOID pvContext); + +// function type with calling convention of __stdcall that .NET 1.1 understands only +// .NET 2.0 will not need this +typedef INT_PTR (FAR __stdcall *STDCALL_PFNFDINOTIFY)(FDINOTIFICATIONTYPE fdint, PFDINOTIFICATION pfdin); + + +// functions +HRESULT DAPI CabInitialize( + __in BOOL fDelayLoad + ); +void DAPI CabUninitialize( + ); + +HRESULT DAPI CabExtract( + __in_z LPCWSTR wzCabinet, + __in_z LPCWSTR wzExtractFile, + __in_z LPCWSTR wzExtractDir, + __in_opt CAB_CALLBACK_PROGRESS pfnProgress, + __in_opt LPVOID pvContext, + __in DWORD64 dw64EmbeddedOffset + ); + +HRESULT DAPI CabEnumerate( + __in_z LPCWSTR wzCabinet, + __in_z LPCWSTR wzEnumerateFile, + __in STDCALL_PFNFDINOTIFY pfnNotify, + __in DWORD64 dw64EmbeddedOffset + ); + +#ifdef __cplusplus +} +#endif diff --git a/msi/build/A2Staging/wix35-binaries/sdk/inc/certutil.h b/msi/build/A2Staging/wix35-binaries/sdk/inc/certutil.h index c77ea84983..dc0717934a 100644 --- a/msi/build/A2Staging/wix35-binaries/sdk/inc/certutil.h +++ b/msi/build/A2Staging/wix35-binaries/sdk/inc/certutil.h @@ -1,71 +1,71 @@ -#pragma once -//------------------------------------------------------------------------------------------------- -// -// Copyright (c) Microsoft Corporation. All rights reserved. -// -// The use and distribution terms for this software are covered by the -// Common Public License 1.0 (http://opensource.org/licenses/cpl1.0.php) -// which can be found in the file CPL.TXT at the root of this distribution. -// By using this software in any fashion, you are agreeing to be bound by -// the terms of this license. -// -// You must not remove this notice, or any other, from this software. -// -// -// -// Certificate helper functions. -// -//------------------------------------------------------------------------------------------------- - -#ifdef __cplusplus -extern "C" { -#endif - -HRESULT DAPI CertReadProperty( - __in PCCERT_CONTEXT pCertContext, - __in DWORD dwProperty, - __deref_out_bound LPVOID pvValue - ); - -HRESULT DAPI GetCryptProvFromCert( - __in_opt HWND hwnd, - __in PCCERT_CONTEXT pCert, - __out HCRYPTPROV *phCryptProv, - __out DWORD *pdwKeySpec, - __in BOOL *pfDidCryptAcquire, - __deref_opt_out LPWSTR *ppwszTmpContainer, - __deref_opt_out LPWSTR *ppwszProviderName, - __out DWORD *pdwProviderType - ); - -HRESULT DAPI FreeCryptProvFromCert( - __in BOOL fAcquired, - __in HCRYPTPROV hProv, - __in_opt LPWSTR pwszCapiProvider, - __in DWORD dwProviderType, - __in_opt LPWSTR pwszTmpContainer - ); - -HRESULT DAPI GetProvSecurityDesc( - __in HCRYPTPROV hProv, - __deref_out SECURITY_DESCRIPTOR** pSecurity - ); - -HRESULT DAPI SetProvSecurityDesc( - __in HCRYPTPROV hProv, - __in SECURITY_DESCRIPTOR* pSecurity - ); - -BOOL DAPI CertHasPrivateKey( - __in PCCERT_CONTEXT pCertContext, - __out_opt DWORD* pdwKeySpec - ); - -HRESULT DAPI CertInstallSingleCertificate( - __in HCERTSTORE hStore, - __in PCCERT_CONTEXT pCertContext, - __in LPCWSTR wzName - ); -#ifdef __cplusplus -} -#endif +#pragma once +//------------------------------------------------------------------------------------------------- +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// The use and distribution terms for this software are covered by the +// Common Public License 1.0 (http://opensource.org/licenses/cpl1.0.php) +// which can be found in the file CPL.TXT at the root of this distribution. +// By using this software in any fashion, you are agreeing to be bound by +// the terms of this license. +// +// You must not remove this notice, or any other, from this software. +// +// +// +// Certificate helper functions. +// +//------------------------------------------------------------------------------------------------- + +#ifdef __cplusplus +extern "C" { +#endif + +HRESULT DAPI CertReadProperty( + __in PCCERT_CONTEXT pCertContext, + __in DWORD dwProperty, + __deref_out_bound LPVOID pvValue + ); + +HRESULT DAPI GetCryptProvFromCert( + __in_opt HWND hwnd, + __in PCCERT_CONTEXT pCert, + __out HCRYPTPROV *phCryptProv, + __out DWORD *pdwKeySpec, + __in BOOL *pfDidCryptAcquire, + __deref_opt_out LPWSTR *ppwszTmpContainer, + __deref_opt_out LPWSTR *ppwszProviderName, + __out DWORD *pdwProviderType + ); + +HRESULT DAPI FreeCryptProvFromCert( + __in BOOL fAcquired, + __in HCRYPTPROV hProv, + __in_opt LPWSTR pwszCapiProvider, + __in DWORD dwProviderType, + __in_opt LPWSTR pwszTmpContainer + ); + +HRESULT DAPI GetProvSecurityDesc( + __in HCRYPTPROV hProv, + __deref_out SECURITY_DESCRIPTOR** pSecurity + ); + +HRESULT DAPI SetProvSecurityDesc( + __in HCRYPTPROV hProv, + __in SECURITY_DESCRIPTOR* pSecurity + ); + +BOOL DAPI CertHasPrivateKey( + __in PCCERT_CONTEXT pCertContext, + __out_opt DWORD* pdwKeySpec + ); + +HRESULT DAPI CertInstallSingleCertificate( + __in HCERTSTORE hStore, + __in PCCERT_CONTEXT pCertContext, + __in LPCWSTR wzName + ); +#ifdef __cplusplus +} +#endif diff --git a/msi/build/A2Staging/wix35-binaries/sdk/inc/conutil.h b/msi/build/A2Staging/wix35-binaries/sdk/inc/conutil.h index 497cf4fe9a..791a545e07 100644 --- a/msi/build/A2Staging/wix35-binaries/sdk/inc/conutil.h +++ b/msi/build/A2Staging/wix35-binaries/sdk/inc/conutil.h @@ -1,115 +1,115 @@ -#pragma once -//------------------------------------------------------------------------------------------------- -// -// Copyright (c) Microsoft Corporation. All rights reserved. -// -// The use and distribution terms for this software are covered by the -// Common Public License 1.0 (http://opensource.org/licenses/cpl1.0.php) -// which can be found in the file CPL.TXT at the root of this distribution. -// By using this software in any fashion, you are agreeing to be bound by -// the terms of this license. -// -// You must not remove this notice, or any other, from this software. -// -// -// -// Console helper functions. -// -//------------------------------------------------------------------------------------------------- - -#ifdef __cplusplus -extern "C" { -#endif - -#define ConsoleExitOnFailure(x, c, f) if (FAILED(x)) { ConsoleWriteError(x, c, f); ExitTrace(x, f); goto LExit; } -#define ConsoleExitOnFailure1(x, c, f, s) if (FAILED(x)) { ConsoleWriteError(x, c, f, s, NULL); ExitTrace1(x, f, s); goto LExit; } -#define ConsoleExitOnFailure2(x, c, f, s, t) if (FAILED(x)) { ConsoleWriteError(x, c, f, s, t); ExitTrace2(x, f, s, t); goto LExit; } -#define ConsoleExitOnFailure3(x, c, f, s, t, u) if (FAILED(x)) { ConsoleWriteError(x, c, f, s, t, u); ExitTrace3(x, f, s, t, u); goto LExit; } - -#define ConsoleExitOnLastError(x, c, f) { x = ::GetLastError(); x = HRESULT_FROM_WIN32(x); if (FAILED(x)) { ConsoleWriteError(x, c, f); ExitTrace(x, f); goto LExit; } } -#define ConsoleExitOnLastError1(x, c, f, s) { x = ::GetLastError(); x = HRESULT_FROM_WIN32(x); if (FAILED(x)) { ConsoleWriteError(x, c, f, s, NULL); ExitTrace1(x, f, s); goto LExit; } } -#define ConsoleExitOnLastError2(x, c, f, s, t) { x = ::GetLastError(); x = HRESULT_FROM_WIN32(x); if (FAILED(x)) { ConsoleWriteError(x, c, f, s, t); ExitTrace2(x, f, s, t); goto LExit; } } -#define ConsoleExitOnLastError3(x, c, f, s, t, u) { x = ::GetLastError(); x = HRESULT_FROM_WIN32(x); if (FAILED(x)) { ConsoleWriteError(x, c, f, s, t, u); ExitTrace3(x, f, s, t, u); goto LExit; } } - -#define ConsoleExitOnNull(p, x, e, c, f) if (NULL == p) { x = e; ConsoleWriteError(x, c, f); ExitTrace(x, f); goto LExit; } -#define ConsoleExitOnNull1(p, x, e, c, f, s) if (NULL == p) { x = e; ConsoleWriteError(x, c, f, s, NULL); ExitTrace1(x, f, s); goto LExit; } -#define ConsoleExitOnNull2(p, x, e, c, f, s, t) if (NULL == p) { x = e; ConsoleWriteError(x, c, f, s, t); ExitTrace2(x, f, s, t); goto LExit; } -#define ConsoleExitOnNull3(p, x, e, c, f, s, t, u) if (NULL == p) { x = e; ConsoleWriteError(x, c, f, s, t, u); ExitTrace2(x, f, s, t, u); goto LExit; } - - -// the following macros need to go away -#define ConsoleTrace(l, f) { ConsoleWriteLine(CONSOLE_COLOR_NORMAL, f); Trace(l, f); } -#define ConsoleTrace1(l, f, s) { ConsoleWriteLine(CONSOLE_COLOR_NORMAL, f, s); Trace1(l, f, s); } -#define ConsoleTrace2(l, f, s, t) { ConsoleWriteLine(CONSOLE_COLOR_NORMAL, f, s, t); Trace2(l, f, s, t); } -#define ConsoleTrace3(l, f, s, t, u) { ConsoleWriteLine(CONSOLE_COLOR_NORMAL, f, s, t, u); Trace3(l, f, s, t, u); } - -#define ConsoleWarning(f) { ConsoleWriteLine(CONSOLE_COLOR_YELLOW, f); Trace(REPORT_STANDARD, f); } -#define ConsoleWarning1(f, s) { ConsoleWriteLine(CONSOLE_COLOR_YELLOW, f, s); Trace1(REPORT_STANDARD, f, s); } -#define ConsoleWarning2(f, s, t) { ConsoleWriteLine(CONSOLE_COLOR_YELLOW, f, s, t); Trace2(REPORT_STANDARD, f, s, t); } -#define ConsoleWarning3(f, s, t, u) { ConsoleWriteLine(CONSOLE_COLOR_YELLOW, f, s, t, u); Trace3(REPORT_STANDARD, f, s, t, u); } - -#define ConsoleError(x, f) { ConsoleWriteError(x, CONSOLE_COLOR_RED, f); TraceError(x, f); } -#define ConsoleError1(x, f, s) { ConsoleWriteError(x, CONSOLE_COLOR_RED, f, s); TraceError1(x, f, s); } -#define ConsoleError2(x, f, s, t) { ConsoleWriteError(x, CONSOLE_COLOR_RED, f, s, t); TraceError2(x, f, s, t); } -#define ConsoleError3(x, f, s, t, u) { ConsoleWriteError(x, CONSOLE_COLOR_RED, f, s, t, u); TraceError3(x, f, s, t, u); } - - -// enums -enum CONSOLE_COLOR { CONSOLE_COLOR_NORMAL, CONSOLE_COLOR_RED, CONSOLE_COLOR_YELLOW, CONSOLE_COLOR_GREEN }; - -// structs - -// functions -HRESULT DAPI ConsoleInitialize(); -void DAPI ConsoleUninitialize(); - -void DAPI ConsoleGreen(); -void DAPI ConsoleRed(); -void DAPI ConsoleYellow(); -void DAPI ConsoleNormal(); - -HRESULT DAPI ConsoleWrite( - CONSOLE_COLOR cc, - __in_z __format_string LPCSTR szFormat, - ... - ); -HRESULT DAPI ConsoleWriteLine( - CONSOLE_COLOR cc, - __in_z __format_string LPCSTR szFormat, - ... - ); -HRESULT DAPI ConsoleWriteError( - HRESULT hrError, - CONSOLE_COLOR cc, - __in_z __format_string LPCSTR szFormat, - ... - ); - -HRESULT DAPI ConsoleReadW( - __deref_out_z LPWSTR* ppwzBuffer - ); - -HRESULT DAPI ConsoleReadStringA( - __deref_out_ecount_part(cchCharBuffer,*pcchNumCharReturn) LPSTR* szCharBuffer, - CONST DWORD cchCharBuffer, - __out DWORD* pcchNumCharReturn - ); -HRESULT DAPI ConsoleReadStringW( - __deref_out_ecount_part(cchCharBuffer,*pcchNumCharReturn) LPWSTR* szCharBuffer, - CONST DWORD cchCharBuffer, - __out DWORD* pcchNumCharReturn - ); - -HRESULT DAPI ConsoleReadNonBlockingW( - __deref_out_ecount_opt(*pcchSize) LPWSTR* ppwzBuffer, - __out DWORD* pcchSize, - BOOL fReadLine - ); - -HRESULT ConsoleSetReadHidden(void); -HRESULT ConsoleSetReadNormal(void); - -#ifdef __cplusplus -} -#endif - +#pragma once +//------------------------------------------------------------------------------------------------- +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// The use and distribution terms for this software are covered by the +// Common Public License 1.0 (http://opensource.org/licenses/cpl1.0.php) +// which can be found in the file CPL.TXT at the root of this distribution. +// By using this software in any fashion, you are agreeing to be bound by +// the terms of this license. +// +// You must not remove this notice, or any other, from this software. +// +// +// +// Console helper functions. +// +//------------------------------------------------------------------------------------------------- + +#ifdef __cplusplus +extern "C" { +#endif + +#define ConsoleExitOnFailure(x, c, f) if (FAILED(x)) { ConsoleWriteError(x, c, f); ExitTrace(x, f); goto LExit; } +#define ConsoleExitOnFailure1(x, c, f, s) if (FAILED(x)) { ConsoleWriteError(x, c, f, s, NULL); ExitTrace1(x, f, s); goto LExit; } +#define ConsoleExitOnFailure2(x, c, f, s, t) if (FAILED(x)) { ConsoleWriteError(x, c, f, s, t); ExitTrace2(x, f, s, t); goto LExit; } +#define ConsoleExitOnFailure3(x, c, f, s, t, u) if (FAILED(x)) { ConsoleWriteError(x, c, f, s, t, u); ExitTrace3(x, f, s, t, u); goto LExit; } + +#define ConsoleExitOnLastError(x, c, f) { x = ::GetLastError(); x = HRESULT_FROM_WIN32(x); if (FAILED(x)) { ConsoleWriteError(x, c, f); ExitTrace(x, f); goto LExit; } } +#define ConsoleExitOnLastError1(x, c, f, s) { x = ::GetLastError(); x = HRESULT_FROM_WIN32(x); if (FAILED(x)) { ConsoleWriteError(x, c, f, s, NULL); ExitTrace1(x, f, s); goto LExit; } } +#define ConsoleExitOnLastError2(x, c, f, s, t) { x = ::GetLastError(); x = HRESULT_FROM_WIN32(x); if (FAILED(x)) { ConsoleWriteError(x, c, f, s, t); ExitTrace2(x, f, s, t); goto LExit; } } +#define ConsoleExitOnLastError3(x, c, f, s, t, u) { x = ::GetLastError(); x = HRESULT_FROM_WIN32(x); if (FAILED(x)) { ConsoleWriteError(x, c, f, s, t, u); ExitTrace3(x, f, s, t, u); goto LExit; } } + +#define ConsoleExitOnNull(p, x, e, c, f) if (NULL == p) { x = e; ConsoleWriteError(x, c, f); ExitTrace(x, f); goto LExit; } +#define ConsoleExitOnNull1(p, x, e, c, f, s) if (NULL == p) { x = e; ConsoleWriteError(x, c, f, s, NULL); ExitTrace1(x, f, s); goto LExit; } +#define ConsoleExitOnNull2(p, x, e, c, f, s, t) if (NULL == p) { x = e; ConsoleWriteError(x, c, f, s, t); ExitTrace2(x, f, s, t); goto LExit; } +#define ConsoleExitOnNull3(p, x, e, c, f, s, t, u) if (NULL == p) { x = e; ConsoleWriteError(x, c, f, s, t, u); ExitTrace2(x, f, s, t, u); goto LExit; } + + +// the following macros need to go away +#define ConsoleTrace(l, f) { ConsoleWriteLine(CONSOLE_COLOR_NORMAL, f); Trace(l, f); } +#define ConsoleTrace1(l, f, s) { ConsoleWriteLine(CONSOLE_COLOR_NORMAL, f, s); Trace1(l, f, s); } +#define ConsoleTrace2(l, f, s, t) { ConsoleWriteLine(CONSOLE_COLOR_NORMAL, f, s, t); Trace2(l, f, s, t); } +#define ConsoleTrace3(l, f, s, t, u) { ConsoleWriteLine(CONSOLE_COLOR_NORMAL, f, s, t, u); Trace3(l, f, s, t, u); } + +#define ConsoleWarning(f) { ConsoleWriteLine(CONSOLE_COLOR_YELLOW, f); Trace(REPORT_STANDARD, f); } +#define ConsoleWarning1(f, s) { ConsoleWriteLine(CONSOLE_COLOR_YELLOW, f, s); Trace1(REPORT_STANDARD, f, s); } +#define ConsoleWarning2(f, s, t) { ConsoleWriteLine(CONSOLE_COLOR_YELLOW, f, s, t); Trace2(REPORT_STANDARD, f, s, t); } +#define ConsoleWarning3(f, s, t, u) { ConsoleWriteLine(CONSOLE_COLOR_YELLOW, f, s, t, u); Trace3(REPORT_STANDARD, f, s, t, u); } + +#define ConsoleError(x, f) { ConsoleWriteError(x, CONSOLE_COLOR_RED, f); TraceError(x, f); } +#define ConsoleError1(x, f, s) { ConsoleWriteError(x, CONSOLE_COLOR_RED, f, s); TraceError1(x, f, s); } +#define ConsoleError2(x, f, s, t) { ConsoleWriteError(x, CONSOLE_COLOR_RED, f, s, t); TraceError2(x, f, s, t); } +#define ConsoleError3(x, f, s, t, u) { ConsoleWriteError(x, CONSOLE_COLOR_RED, f, s, t, u); TraceError3(x, f, s, t, u); } + + +// enums +enum CONSOLE_COLOR { CONSOLE_COLOR_NORMAL, CONSOLE_COLOR_RED, CONSOLE_COLOR_YELLOW, CONSOLE_COLOR_GREEN }; + +// structs + +// functions +HRESULT DAPI ConsoleInitialize(); +void DAPI ConsoleUninitialize(); + +void DAPI ConsoleGreen(); +void DAPI ConsoleRed(); +void DAPI ConsoleYellow(); +void DAPI ConsoleNormal(); + +HRESULT DAPI ConsoleWrite( + CONSOLE_COLOR cc, + __in_z __format_string LPCSTR szFormat, + ... + ); +HRESULT DAPI ConsoleWriteLine( + CONSOLE_COLOR cc, + __in_z __format_string LPCSTR szFormat, + ... + ); +HRESULT DAPI ConsoleWriteError( + HRESULT hrError, + CONSOLE_COLOR cc, + __in_z __format_string LPCSTR szFormat, + ... + ); + +HRESULT DAPI ConsoleReadW( + __deref_out_z LPWSTR* ppwzBuffer + ); + +HRESULT DAPI ConsoleReadStringA( + __deref_out_ecount_part(cchCharBuffer,*pcchNumCharReturn) LPSTR* szCharBuffer, + CONST DWORD cchCharBuffer, + __out DWORD* pcchNumCharReturn + ); +HRESULT DAPI ConsoleReadStringW( + __deref_out_ecount_part(cchCharBuffer,*pcchNumCharReturn) LPWSTR* szCharBuffer, + CONST DWORD cchCharBuffer, + __out DWORD* pcchNumCharReturn + ); + +HRESULT DAPI ConsoleReadNonBlockingW( + __deref_out_ecount_opt(*pcchSize) LPWSTR* ppwzBuffer, + __out DWORD* pcchSize, + BOOL fReadLine + ); + +HRESULT ConsoleSetReadHidden(void); +HRESULT ConsoleSetReadNormal(void); + +#ifdef __cplusplus +} +#endif + diff --git a/msi/build/A2Staging/wix35-binaries/sdk/inc/cryputil.h b/msi/build/A2Staging/wix35-binaries/sdk/inc/cryputil.h index f233f0983e..2009269964 100644 --- a/msi/build/A2Staging/wix35-binaries/sdk/inc/cryputil.h +++ b/msi/build/A2Staging/wix35-binaries/sdk/inc/cryputil.h @@ -1,49 +1,49 @@ -//------------------------------------------------------------------------------------------------- -// -// Copyright (c) Microsoft Corporation. All rights reserved. -// -// The use and distribution terms for this software are covered by the -// Common Public License 1.0 (http://opensource.org/licenses/cpl1.0.php) -// which can be found in the file CPL.TXT at the root of this distribution. -// By using this software in any fashion, you are agreeing to be bound by -// the terms of this license. -// -// You must not remove this notice, or any other, from this software. -// -// -// -// Cryptography helper functions. -// -//------------------------------------------------------------------------------------------------- - -#pragma once - - -#ifdef __cplusplus -extern "C" { -#endif - - -// function declarations - -HRESULT CrypHashFile( - __in_z LPCWSTR wzFilePath, - __in DWORD dwProvType, - __in ALG_ID algid, - __out_bcount(cbHash) BYTE* pbHash, - __in DWORD cbHash, - __out_opt DWORD64* pqwBytesHashed - ); - -HRESULT CrypHashFileHandle( - __in HANDLE hFile, - __in DWORD dwProvType, - __in ALG_ID algid, - __out_bcount(cbHash) BYTE* pbHash, - __in DWORD cbHash, - __out_opt DWORD64* pqwBytesHashed - ); - -#ifdef __cplusplus -} -#endif +//------------------------------------------------------------------------------------------------- +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// The use and distribution terms for this software are covered by the +// Common Public License 1.0 (http://opensource.org/licenses/cpl1.0.php) +// which can be found in the file CPL.TXT at the root of this distribution. +// By using this software in any fashion, you are agreeing to be bound by +// the terms of this license. +// +// You must not remove this notice, or any other, from this software. +// +// +// +// Cryptography helper functions. +// +//------------------------------------------------------------------------------------------------- + +#pragma once + + +#ifdef __cplusplus +extern "C" { +#endif + + +// function declarations + +HRESULT CrypHashFile( + __in_z LPCWSTR wzFilePath, + __in DWORD dwProvType, + __in ALG_ID algid, + __out_bcount(cbHash) BYTE* pbHash, + __in DWORD cbHash, + __out_opt DWORD64* pqwBytesHashed + ); + +HRESULT CrypHashFileHandle( + __in HANDLE hFile, + __in DWORD dwProvType, + __in ALG_ID algid, + __out_bcount(cbHash) BYTE* pbHash, + __in DWORD cbHash, + __out_opt DWORD64* pqwBytesHashed + ); + +#ifdef __cplusplus +} +#endif diff --git a/msi/build/A2Staging/wix35-binaries/sdk/inc/dictutil.h b/msi/build/A2Staging/wix35-binaries/sdk/inc/dictutil.h index 954921f229..ed54bb17ee 100644 --- a/msi/build/A2Staging/wix35-binaries/sdk/inc/dictutil.h +++ b/msi/build/A2Staging/wix35-binaries/sdk/inc/dictutil.h @@ -1,47 +1,47 @@ -#pragma once -//------------------------------------------------------------------------------------------------- -// -// Copyright (c) Microsoft Corporation. All rights reserved. -// -// The use and distribution terms for this software are covered by the -// Common Public License 1.0 (http://opensource.org/licenses/cpl1.0.php) -// which can be found in the file CPL.TXT at the root of this distribution. -// By using this software in any fashion, you are agreeing to be bound by -// the terms of this license. -// -// You must not remove this notice, or any other, from this software. -// -// -// -// Header for string dict helper functions. -// -//------------------------------------------------------------------------------------------------- - -#ifdef __cplusplus -extern "C" { -#endif - -typedef void* STRINGDICT_HANDLE; - -HRESULT DAPI DictCreate( - __out void **ppvHandle, - __in DWORD dwNumExpectedItems, - __in size_t cByteOffset - ); -HRESULT DAPI DictAdd( - __in void *pvHandle, - __in_z LPCWSTR szString, - __in void *pvValue - ); -HRESULT DAPI DictGet( - __in void *pvHandle, - __in_z LPCWSTR szString, - __out void **ppvValue - ); -void DAPI DictDestroy( - __in void *pvHandle - ); - -#ifdef __cplusplus -} -#endif +#pragma once +//------------------------------------------------------------------------------------------------- +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// The use and distribution terms for this software are covered by the +// Common Public License 1.0 (http://opensource.org/licenses/cpl1.0.php) +// which can be found in the file CPL.TXT at the root of this distribution. +// By using this software in any fashion, you are agreeing to be bound by +// the terms of this license. +// +// You must not remove this notice, or any other, from this software. +// +// +// +// Header for string dict helper functions. +// +//------------------------------------------------------------------------------------------------- + +#ifdef __cplusplus +extern "C" { +#endif + +typedef void* STRINGDICT_HANDLE; + +HRESULT DAPI DictCreate( + __out void **ppvHandle, + __in DWORD dwNumExpectedItems, + __in size_t cByteOffset + ); +HRESULT DAPI DictAdd( + __in void *pvHandle, + __in_z LPCWSTR szString, + __in void *pvValue + ); +HRESULT DAPI DictGet( + __in void *pvHandle, + __in_z LPCWSTR szString, + __out void **ppvValue + ); +void DAPI DictDestroy( + __in void *pvHandle + ); + +#ifdef __cplusplus +} +#endif diff --git a/msi/build/A2Staging/wix35-binaries/sdk/inc/dirutil.h b/msi/build/A2Staging/wix35-binaries/sdk/inc/dirutil.h index 341b23a2f8..4dc8ee7341 100644 --- a/msi/build/A2Staging/wix35-binaries/sdk/inc/dirutil.h +++ b/msi/build/A2Staging/wix35-binaries/sdk/inc/dirutil.h @@ -1,58 +1,58 @@ -//------------------------------------------------------------------------------------------------- -// -// Copyright (c) Microsoft Corporation. All rights reserved. -// -// The use and distribution terms for this software are covered by the -// Common Public License 1.0 (http://opensource.org/licenses/cpl1.0.php) -// which can be found in the file CPL.TXT at the root of this distribution. -// By using this software in any fashion, you are agreeing to be bound by -// the terms of this license. -// -// You must not remove this notice, or any other, from this software. -// -// -// -// Directory helper funtions. -// -//------------------------------------------------------------------------------------------------- - -#pragma once - -#ifdef __cplusplus -extern "C" { -#endif - -BOOL DAPI DirExists( - __in_z LPCWSTR wzPath, - __out_opt DWORD *pdwAttributes - ); - -HRESULT DAPI DirCreateTempPath( - __in_z LPCWSTR wzPrefix, - __out_ecount_z(cchPath) LPWSTR wzPath, - __in DWORD cchPath - ); - -HRESULT DAPI DirEnsureExists( - __in_z LPCWSTR wzPath, - __in_opt LPSECURITY_ATTRIBUTES psa - ); - -HRESULT DAPI DirEnsureDelete( - __in_z LPCWSTR wzPath, - __in BOOL fDeleteFiles, - __in BOOL fRecurse - ); - -HRESULT DAPI DirGetCurrent( - __deref_out_z LPWSTR* psczCurrentDirectory - ); - -HRESULT DAPI DirSetCurrent( - __in_z LPCWSTR wzDirectory - ); - -#ifdef __cplusplus -} -#endif - +//------------------------------------------------------------------------------------------------- +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// The use and distribution terms for this software are covered by the +// Common Public License 1.0 (http://opensource.org/licenses/cpl1.0.php) +// which can be found in the file CPL.TXT at the root of this distribution. +// By using this software in any fashion, you are agreeing to be bound by +// the terms of this license. +// +// You must not remove this notice, or any other, from this software. +// +// +// +// Directory helper funtions. +// +//------------------------------------------------------------------------------------------------- + +#pragma once + +#ifdef __cplusplus +extern "C" { +#endif + +BOOL DAPI DirExists( + __in_z LPCWSTR wzPath, + __out_opt DWORD *pdwAttributes + ); + +HRESULT DAPI DirCreateTempPath( + __in_z LPCWSTR wzPrefix, + __out_ecount_z(cchPath) LPWSTR wzPath, + __in DWORD cchPath + ); + +HRESULT DAPI DirEnsureExists( + __in_z LPCWSTR wzPath, + __in_opt LPSECURITY_ATTRIBUTES psa + ); + +HRESULT DAPI DirEnsureDelete( + __in_z LPCWSTR wzPath, + __in BOOL fDeleteFiles, + __in BOOL fRecurse + ); + +HRESULT DAPI DirGetCurrent( + __deref_out_z LPWSTR* psczCurrentDirectory + ); + +HRESULT DAPI DirSetCurrent( + __in_z LPCWSTR wzDirectory + ); + +#ifdef __cplusplus +} +#endif + diff --git a/msi/build/A2Staging/wix35-binaries/sdk/inc/dutil.h b/msi/build/A2Staging/wix35-binaries/sdk/inc/dutil.h index 71073d86bf..cc1b4dbddb 100644 --- a/msi/build/A2Staging/wix35-binaries/sdk/inc/dutil.h +++ b/msi/build/A2Staging/wix35-binaries/sdk/inc/dutil.h @@ -1,212 +1,212 @@ -#pragma once -//------------------------------------------------------------------------------------------------- -// -// Copyright (c) Microsoft Corporation. All rights reserved. -// -// The use and distribution terms for this software are covered by the -// Common Public License 1.0 (http://opensource.org/licenses/cpl1.0.php) -// which can be found in the file CPL.TXT at the root of this distribution. -// By using this software in any fashion, you are agreeing to be bound by -// the terms of this license. -// -// You must not remove this notice, or any other, from this software. -// -// -// -// Header for utility layer that provides standard support for asserts, exit macros -// -//------------------------------------------------------------------------------------------------- - -#define DAPI __stdcall -#define DAPIV __cdecl // used only for functions taking variable length arguments - -#define DAPI_(type) EXTERN_C type DAPI -#define DAPIV_(type) EXTERN_C type DAPIV - - -// enums -enum REPORT_LEVEL -{ - REPORT_NONE, // turns off report (only valid for XXXSetLevel()) - REPORT_STANDARD, // written if reporting is on - REPORT_VERBOSE, // written only if verbose reporting is on - REPORT_DEBUG, // reporting useful when debugging code - REPORT_ERROR, // always gets reported, but can never be specified -}; - -// asserts and traces -typedef BOOL (DAPI *DUTIL_ASSERTDISPLAYFUNCTION)(__in_z LPCSTR sz); - -extern "C" void DAPI Dutil_SetAssertModule(__in HMODULE hAssertModule); -extern "C" void DAPI Dutil_SetAssertDisplayFunction(__in DUTIL_ASSERTDISPLAYFUNCTION pfn); -extern "C" void DAPI Dutil_Assert(__in_z LPCSTR szFile, __in int iLine); -extern "C" void DAPI Dutil_AssertSz(__in_z LPCSTR szFile, __in int iLine, __in_z LPCSTR szMsg); - -extern "C" void DAPI Dutil_TraceSetLevel(__in REPORT_LEVEL ll, __in BOOL fTraceFilenames); -extern "C" REPORT_LEVEL DAPI Dutil_TraceGetLevel(); -extern "C" void __cdecl Dutil_Trace(__in_z LPCSTR szFile, __in int iLine, __in REPORT_LEVEL rl, __in_z __format_string LPCSTR szMessage, ...); -extern "C" void __cdecl Dutil_TraceError(__in_z LPCSTR szFile, __in int iLine, __in REPORT_LEVEL rl, __in HRESULT hr, __in_z __format_string LPCSTR szMessage, ...); -extern "C" void DAPI Dutil_RootFailure(__in_z LPCSTR szFile, __in int iLine, __in HRESULT hrError); - -#ifdef DEBUG - -#define AssertSetModule(m) (void)Dutil_SetAssertModule(m) -#define AssertSetDisplayFunction(pfn) (void)Dutil_SetAssertDisplayFunction(pfn) -#define Assert(f) ((f) ? (void)0 : (void)Dutil_Assert(__FILE__, __LINE__)) -#define AssertSz(f, sz) ((f) ? (void)0 : (void)Dutil_AssertSz(__FILE__, __LINE__, sz)) - -#define TraceSetLevel(l, f) (void)Dutil_TraceSetLevel(l, f) -#define TraceGetLevel() (REPORT_LEVEL)Dutil_TraceGetLevel() -#define Trace(l, f) (void)Dutil_Trace(__FILE__, __LINE__, l, f, NULL) -#define Trace1(l, f, s) (void)Dutil_Trace(__FILE__, __LINE__, l, f, s) -#define Trace2(l, f, s, t) (void)Dutil_Trace(__FILE__, __LINE__, l, f, s, t) -#define Trace3(l, f, s, t, u) (void)Dutil_Trace(__FILE__, __LINE__, l, f, s, t, u) - -#define TraceError(x, f) (void)Dutil_TraceError(__FILE__, __LINE__, REPORT_ERROR, x, f, NULL) -#define TraceError1(x, f, s) (void)Dutil_TraceError(__FILE__, __LINE__, REPORT_ERROR, x, f, s) -#define TraceError2(x, f, s, t) (void)Dutil_TraceError(__FILE__, __LINE__, REPORT_ERROR, x, f, s, t) -#define TraceError3(x, f, s, t, u) (void)Dutil_TraceError(__FILE__, __LINE__, REPORT_ERROR, x, f, s, t, u) - -#define TraceErrorDebug(x, f) (void)Dutil_TraceError(__FILE__, __LINE__, REPORT_DEBUG, x, f, NULL) -#define TraceErrorDebug1(x, f, s) (void)Dutil_TraceError(__FILE__, __LINE__, REPORT_DEBUG, x, f, s) -#define TraceErrorDebug2(x, f, s, t) (void)Dutil_TraceError(__FILE__, __LINE__, REPORT_DEBUG, x, f, s, t) -#define TraceErrorDebug3(x, f, s, t, u) (void)Dutil_TraceError(__FILE__, __LINE__, REPORT_DEBUG, x, f, s, t, u) - -#else // !DEBUG - -#define AssertSetModule(m) -#define AssertSetDisplayFunction(pfn) -#define Assert(f) -#define AssertSz(f, sz) - -#define TraceSetLevel(l, f) -#define Trace(l, f) -#define Trace1(l, f, s) -#define Trace2(l, f, s, t) -#define Trace3(l, f, s, t, u) - -#define TraceError(x, f) -#define TraceError1(x, f, s) -#define TraceError2(x, f, s, t) -#define TraceError3(x, f, s, t, u) - -#define TraceErrorDebug(x, f) -#define TraceErrorDebug1(x, f, s) -#define TraceErrorDebug2(x, f, s, t) -#define TraceErrorDebug3(x, f, s, t, u) - -#endif // DEBUG - - -// ExitTrace can be overriden -#ifndef ExitTrace -#define ExitTrace TraceError -#endif -#ifndef ExitTrace1 -#define ExitTrace1 TraceError1 -#endif -#ifndef ExitTrace2 -#define ExitTrace2 TraceError2 -#endif -#ifndef ExitTrace3 -#define ExitTrace3 TraceError3 -#endif - -// Exit macros -#define ExitFunction() { goto LExit; } -#define ExitFunction1(x) { x; goto LExit; } - -#define ExitOnLastError(x, s) { x = ::GetLastError(); x = HRESULT_FROM_WIN32(x); if (FAILED(x)) { Dutil_RootFailure(__FILE__, __LINE__, x); ExitTrace(x, s); goto LExit; } } -#define ExitOnLastError1(x, f, s) { x = ::GetLastError(); x = HRESULT_FROM_WIN32(x); if (FAILED(x)) { Dutil_RootFailure(__FILE__, __LINE__, x); ExitTrace1(x, f, s); goto LExit; } } -#define ExitOnLastError2(x, f, s, t) { x = ::GetLastError(); x = HRESULT_FROM_WIN32(x); if (FAILED(x)) { Dutil_RootFailure(__FILE__, __LINE__, x); ExitTrace2(x, f, s, t); goto LExit; } } - -#define ExitOnLastErrorDebugTrace(x, s) { x = ::GetLastError(); x = HRESULT_FROM_WIN32(x); if (FAILED(x)) { Dutil_RootFailure(__FILE__, __LINE__, x); TraceErrorDebug(x, s); goto LExit; } } -#define ExitOnLastErrorDebugTrace1(x, f, s) { x = ::GetLastError(); x = HRESULT_FROM_WIN32(x); if (FAILED(x)) { Dutil_RootFailure(__FILE__, __LINE__, x); TraceErrorDebug1(x, f, s); goto LExit; } } -#define ExitOnLastErrorDebugTrace2(x, f, s, t) { x = ::GetLastError(); x = HRESULT_FROM_WIN32(x); if (FAILED(x)) { Dutil_RootFailure(__FILE__, __LINE__, x); TraceErrorDebug2(x, f, s, t); goto LExit; } } - -#define ExitWithLastError(x, s) { x = ::GetLastError(); x = HRESULT_FROM_WIN32(x); if (!FAILED(x)) { x = E_FAIL; } Dutil_RootFailure(__FILE__, __LINE__, x); ExitTrace(x, s); goto LExit; } -#define ExitWithLastError1(x, f, s) { x = ::GetLastError(); x = HRESULT_FROM_WIN32(x); if (!FAILED(x)) { x = E_FAIL; } Dutil_RootFailure(__FILE__, __LINE__, x); ExitTrace1(x, f, s); goto LExit; } -#define ExitWithLastError2(x, f, s, t) { x = ::GetLastError(); x = HRESULT_FROM_WIN32(x); if (!FAILED(x)) { x = E_FAIL; } Dutil_RootFailure(__FILE__, __LINE__, x); ExitTrace2(x, f, s, t); goto LExit; } -#define ExitWithLastError3(x, f, s, t, u) { x = ::GetLastError(); x = HRESULT_FROM_WIN32(x); if (!FAILED(x)) { x = E_FAIL; } Dutil_RootFailure(__FILE__, __LINE__, x); ExitTrace3(x, f, s, t, u); goto LExit; } - -#define ExitOnFailure(x, s) if (FAILED(x)) { ExitTrace(x, s); goto LExit; } -#define ExitOnFailure1(x, f, s) if (FAILED(x)) { ExitTrace1(x, f, s); goto LExit; } -#define ExitOnFailure2(x, f, s, t) if (FAILED(x)) { ExitTrace2(x, f, s, t); goto LExit; } -#define ExitOnFailure3(x, f, s, t, u) if (FAILED(x)) { ExitTrace3(x, f, s, t, u); goto LExit; } - -#define ExitOnRootFailure(x, s) if (FAILED(x)) { Dutil_RootFailure(__FILE__, __LINE__, x); ExitTrace(x, s); goto LExit; } -#define ExitOnRootFailure1(x, f, s) if (FAILED(x)) { Dutil_RootFailure(__FILE__, __LINE__, x); ExitTrace1(x, f, s); goto LExit; } -#define ExitOnRootFailure2(x, f, s, t) if (FAILED(x)) { Dutil_RootFailure(__FILE__, __LINE__, x); ExitTrace2(x, f, s, t); goto LExit; } -#define ExitOnRootFailure3(x, f, s, t, u) if (FAILED(x)) { Dutil_RootFailure(__FILE__, __LINE__, x); ExitTrace3(x, f, s, t, u); goto LExit; } - -#define ExitOnFailureDebugTrace(x, s) if (FAILED(x)) { TraceErrorDebug(x, s); goto LExit; } -#define ExitOnFailureDebugTrace1(x, f, s) if (FAILED(x)) { TraceErrorDebug1(x, f, s); goto LExit; } -#define ExitOnFailureDebugTrace2(x, f, s, t) if (FAILED(x)) { TraceErrorDebug2(x, f, s, t); goto LExit; } -#define ExitOnFailureDebugTrace3(x, f, s, t, u) if (FAILED(x)) { TraceErrorDebug3(x, f, s, t, u); goto LExit; } - -#define ExitOnNull(p, x, e, s) if (NULL == p) { x = e; Dutil_RootFailure(__FILE__, __LINE__, x); ExitTrace(x, s); goto LExit; } -#define ExitOnNull1(p, x, e, f, s) if (NULL == p) { x = e; Dutil_RootFailure(__FILE__, __LINE__, x); ExitTrace1(x, f, s); goto LExit; } -#define ExitOnNull2(p, x, e, f, s, t) if (NULL == p) { x = e; Dutil_RootFailure(__FILE__, __LINE__, x); ExitTrace2(x, f, s, t); goto LExit; } - -#define ExitOnNullWithLastError(p, x, s) if (NULL == p) { x = ::GetLastError(); x = HRESULT_FROM_WIN32(x); if (!FAILED(x)) { x = E_FAIL; } Dutil_RootFailure(__FILE__, __LINE__, x); ExitTrace(x, s); goto LExit; } -#define ExitOnNullWithLastError1(p, x, f, s) if (NULL == p) { x = ::GetLastError(); x = HRESULT_FROM_WIN32(x); if (!FAILED(x)) { x = E_FAIL; } Dutil_RootFailure(__FILE__, __LINE__, x); ExitTrace1(x, f, s); goto LExit; } - -#define ExitOnNullDebugTrace(p, x, e, s) if (NULL == p) { x = e; Dutil_RootFailure(__FILE__, __LINE__, x); TraceErrorDebug(x, s); goto LExit; } -#define ExitOnNullDebugTrace1(p, x, e, f, s) if (NULL == p) { x = e; Dutil_RootFailure(__FILE__, __LINE__, x); TraceErrorDebug1(x, f, s); goto LExit; } - -#define ExitOnInvalidHandleWithLastError(p, x, s) if (INVALID_HANDLE_VALUE == p) { x = ::GetLastError(); x = HRESULT_FROM_WIN32(x); if (!FAILED(x)) { x = E_FAIL; } Dutil_RootFailure(__FILE__, __LINE__, x); ExitTrace(x, s); goto LExit; } -#define ExitOnInvalidHandleWithLastError1(p, x, f, s) if (INVALID_HANDLE_VALUE == p) { x = ::GetLastError(); x = HRESULT_FROM_WIN32(x); if (!FAILED(x)) { x = E_FAIL; } Dutil_RootFailure(__FILE__, __LINE__, x); ExitTrace1(x, f, s); goto LExit; } - -#define ExitOnWin32Error(e, x, s) if (ERROR_SUCCESS != e) { x = HRESULT_FROM_WIN32(e); if (!FAILED(x)) { x = E_FAIL; } Dutil_RootFailure(__FILE__, __LINE__, x); ExitTrace(x, s); goto LExit; } -#define ExitOnWin32Error1(e, x, f, s) if (ERROR_SUCCESS != e) { x = HRESULT_FROM_WIN32(e); if (!FAILED(x)) { x = E_FAIL; } Dutil_RootFailure(__FILE__, __LINE__, x); ExitTrace1(x, f, s); goto LExit; } - -// release macros -#define ReleaseObject(x) if (x) { x->Release(); } -#define ReleaseObjectArray(prg, cel) if (prg) { for (DWORD Dutil_ReleaseObjectArrayIndex = 0; Dutil_ReleaseObjectArrayIndex < cel; ++Dutil_ReleaseObjectArrayIndex) { ReleaseObject(prg[Dutil_ReleaseObjectArrayIndex]); } ReleaseMem(prg); } -#define ReleaseVariant(x) { ::VariantClear(&x); } -#define ReleaseNullObject(x) if (x) { (x)->Release(); x = NULL; } -#define ReleaseCertificate(x) if (x) { ::CertFreeCertificateContext(x); x=NULL; } -#define ReleaseHandle(x) if (x) { ::CloseHandle(x); x = NULL; } - - -// useful defines and macros -#define Unused(x) ((void)x) - -#ifndef countof -#if 1 -#define countof(ary) (sizeof(ary) / sizeof(ary[0])) -#else -#ifndef __cplusplus -#define countof(ary) (sizeof(ary) / sizeof(ary[0])) -#else -template static char countofVerify(void const *, T) throw() { return 0; } -template static void countofVerify(T *const, T *const *) throw() {}; -#define countof(arr) (sizeof(countofVerify(arr,&(arr))) * sizeof(arr)/sizeof(*(arr))) -#endif -#endif -#endif - -#define roundup(x, n) roundup_typed(x, n, DWORD) -#define roundup_typed(x, n, t) (((t)(x) + ((t)(n) - 1)) & ~((t)(n) - 1)) - -#define HRESULT_FROM_RPC(x) ((HRESULT) ((x) | FACILITY_RPC)) - -#ifndef MAXSIZE_T -#define MAXSIZE_T ((SIZE_T)~((SIZE_T)0)) -#endif - -typedef const BYTE* LPCBYTE; - -#define E_FILENOTFOUND HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND) -#define E_INVALIDSTATE HRESULT_FROM_WIN32(ERROR_INVALID_STATE) -#define E_MOREDATA HRESULT_FROM_WIN32(ERROR_MORE_DATA) -#define E_NOMOREITEMS HRESULT_FROM_WIN32(ERROR_NO_MORE_ITEMS) -#define E_NOTFOUND HRESULT_FROM_WIN32(ERROR_NOT_FOUND) -#define E_MODNOTFOUND HRESULT_FROM_WIN32(ERROR_MOD_NOT_FOUND) - -#define AddRefAndRelease(x) { x->AddRef(); x->Release(); } - -#define MAKEQWORDVERSION(mj, mi, b, r) (((DWORD64)MAKELONG(r, b)) | (((DWORD64)MAKELONG(mi, mj)) << 32)) - -// other functions -extern "C" HRESULT DAPI LoadSystemLibrary(__in_z LPCWSTR wzModuleName, __out HMODULE *phModule); +#pragma once +//------------------------------------------------------------------------------------------------- +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// The use and distribution terms for this software are covered by the +// Common Public License 1.0 (http://opensource.org/licenses/cpl1.0.php) +// which can be found in the file CPL.TXT at the root of this distribution. +// By using this software in any fashion, you are agreeing to be bound by +// the terms of this license. +// +// You must not remove this notice, or any other, from this software. +// +// +// +// Header for utility layer that provides standard support for asserts, exit macros +// +//------------------------------------------------------------------------------------------------- + +#define DAPI __stdcall +#define DAPIV __cdecl // used only for functions taking variable length arguments + +#define DAPI_(type) EXTERN_C type DAPI +#define DAPIV_(type) EXTERN_C type DAPIV + + +// enums +enum REPORT_LEVEL +{ + REPORT_NONE, // turns off report (only valid for XXXSetLevel()) + REPORT_STANDARD, // written if reporting is on + REPORT_VERBOSE, // written only if verbose reporting is on + REPORT_DEBUG, // reporting useful when debugging code + REPORT_ERROR, // always gets reported, but can never be specified +}; + +// asserts and traces +typedef BOOL (DAPI *DUTIL_ASSERTDISPLAYFUNCTION)(__in_z LPCSTR sz); + +extern "C" void DAPI Dutil_SetAssertModule(__in HMODULE hAssertModule); +extern "C" void DAPI Dutil_SetAssertDisplayFunction(__in DUTIL_ASSERTDISPLAYFUNCTION pfn); +extern "C" void DAPI Dutil_Assert(__in_z LPCSTR szFile, __in int iLine); +extern "C" void DAPI Dutil_AssertSz(__in_z LPCSTR szFile, __in int iLine, __in_z LPCSTR szMsg); + +extern "C" void DAPI Dutil_TraceSetLevel(__in REPORT_LEVEL ll, __in BOOL fTraceFilenames); +extern "C" REPORT_LEVEL DAPI Dutil_TraceGetLevel(); +extern "C" void __cdecl Dutil_Trace(__in_z LPCSTR szFile, __in int iLine, __in REPORT_LEVEL rl, __in_z __format_string LPCSTR szMessage, ...); +extern "C" void __cdecl Dutil_TraceError(__in_z LPCSTR szFile, __in int iLine, __in REPORT_LEVEL rl, __in HRESULT hr, __in_z __format_string LPCSTR szMessage, ...); +extern "C" void DAPI Dutil_RootFailure(__in_z LPCSTR szFile, __in int iLine, __in HRESULT hrError); + +#ifdef DEBUG + +#define AssertSetModule(m) (void)Dutil_SetAssertModule(m) +#define AssertSetDisplayFunction(pfn) (void)Dutil_SetAssertDisplayFunction(pfn) +#define Assert(f) ((f) ? (void)0 : (void)Dutil_Assert(__FILE__, __LINE__)) +#define AssertSz(f, sz) ((f) ? (void)0 : (void)Dutil_AssertSz(__FILE__, __LINE__, sz)) + +#define TraceSetLevel(l, f) (void)Dutil_TraceSetLevel(l, f) +#define TraceGetLevel() (REPORT_LEVEL)Dutil_TraceGetLevel() +#define Trace(l, f) (void)Dutil_Trace(__FILE__, __LINE__, l, f, NULL) +#define Trace1(l, f, s) (void)Dutil_Trace(__FILE__, __LINE__, l, f, s) +#define Trace2(l, f, s, t) (void)Dutil_Trace(__FILE__, __LINE__, l, f, s, t) +#define Trace3(l, f, s, t, u) (void)Dutil_Trace(__FILE__, __LINE__, l, f, s, t, u) + +#define TraceError(x, f) (void)Dutil_TraceError(__FILE__, __LINE__, REPORT_ERROR, x, f, NULL) +#define TraceError1(x, f, s) (void)Dutil_TraceError(__FILE__, __LINE__, REPORT_ERROR, x, f, s) +#define TraceError2(x, f, s, t) (void)Dutil_TraceError(__FILE__, __LINE__, REPORT_ERROR, x, f, s, t) +#define TraceError3(x, f, s, t, u) (void)Dutil_TraceError(__FILE__, __LINE__, REPORT_ERROR, x, f, s, t, u) + +#define TraceErrorDebug(x, f) (void)Dutil_TraceError(__FILE__, __LINE__, REPORT_DEBUG, x, f, NULL) +#define TraceErrorDebug1(x, f, s) (void)Dutil_TraceError(__FILE__, __LINE__, REPORT_DEBUG, x, f, s) +#define TraceErrorDebug2(x, f, s, t) (void)Dutil_TraceError(__FILE__, __LINE__, REPORT_DEBUG, x, f, s, t) +#define TraceErrorDebug3(x, f, s, t, u) (void)Dutil_TraceError(__FILE__, __LINE__, REPORT_DEBUG, x, f, s, t, u) + +#else // !DEBUG + +#define AssertSetModule(m) +#define AssertSetDisplayFunction(pfn) +#define Assert(f) +#define AssertSz(f, sz) + +#define TraceSetLevel(l, f) +#define Trace(l, f) +#define Trace1(l, f, s) +#define Trace2(l, f, s, t) +#define Trace3(l, f, s, t, u) + +#define TraceError(x, f) +#define TraceError1(x, f, s) +#define TraceError2(x, f, s, t) +#define TraceError3(x, f, s, t, u) + +#define TraceErrorDebug(x, f) +#define TraceErrorDebug1(x, f, s) +#define TraceErrorDebug2(x, f, s, t) +#define TraceErrorDebug3(x, f, s, t, u) + +#endif // DEBUG + + +// ExitTrace can be overriden +#ifndef ExitTrace +#define ExitTrace TraceError +#endif +#ifndef ExitTrace1 +#define ExitTrace1 TraceError1 +#endif +#ifndef ExitTrace2 +#define ExitTrace2 TraceError2 +#endif +#ifndef ExitTrace3 +#define ExitTrace3 TraceError3 +#endif + +// Exit macros +#define ExitFunction() { goto LExit; } +#define ExitFunction1(x) { x; goto LExit; } + +#define ExitOnLastError(x, s) { x = ::GetLastError(); x = HRESULT_FROM_WIN32(x); if (FAILED(x)) { Dutil_RootFailure(__FILE__, __LINE__, x); ExitTrace(x, s); goto LExit; } } +#define ExitOnLastError1(x, f, s) { x = ::GetLastError(); x = HRESULT_FROM_WIN32(x); if (FAILED(x)) { Dutil_RootFailure(__FILE__, __LINE__, x); ExitTrace1(x, f, s); goto LExit; } } +#define ExitOnLastError2(x, f, s, t) { x = ::GetLastError(); x = HRESULT_FROM_WIN32(x); if (FAILED(x)) { Dutil_RootFailure(__FILE__, __LINE__, x); ExitTrace2(x, f, s, t); goto LExit; } } + +#define ExitOnLastErrorDebugTrace(x, s) { x = ::GetLastError(); x = HRESULT_FROM_WIN32(x); if (FAILED(x)) { Dutil_RootFailure(__FILE__, __LINE__, x); TraceErrorDebug(x, s); goto LExit; } } +#define ExitOnLastErrorDebugTrace1(x, f, s) { x = ::GetLastError(); x = HRESULT_FROM_WIN32(x); if (FAILED(x)) { Dutil_RootFailure(__FILE__, __LINE__, x); TraceErrorDebug1(x, f, s); goto LExit; } } +#define ExitOnLastErrorDebugTrace2(x, f, s, t) { x = ::GetLastError(); x = HRESULT_FROM_WIN32(x); if (FAILED(x)) { Dutil_RootFailure(__FILE__, __LINE__, x); TraceErrorDebug2(x, f, s, t); goto LExit; } } + +#define ExitWithLastError(x, s) { x = ::GetLastError(); x = HRESULT_FROM_WIN32(x); if (!FAILED(x)) { x = E_FAIL; } Dutil_RootFailure(__FILE__, __LINE__, x); ExitTrace(x, s); goto LExit; } +#define ExitWithLastError1(x, f, s) { x = ::GetLastError(); x = HRESULT_FROM_WIN32(x); if (!FAILED(x)) { x = E_FAIL; } Dutil_RootFailure(__FILE__, __LINE__, x); ExitTrace1(x, f, s); goto LExit; } +#define ExitWithLastError2(x, f, s, t) { x = ::GetLastError(); x = HRESULT_FROM_WIN32(x); if (!FAILED(x)) { x = E_FAIL; } Dutil_RootFailure(__FILE__, __LINE__, x); ExitTrace2(x, f, s, t); goto LExit; } +#define ExitWithLastError3(x, f, s, t, u) { x = ::GetLastError(); x = HRESULT_FROM_WIN32(x); if (!FAILED(x)) { x = E_FAIL; } Dutil_RootFailure(__FILE__, __LINE__, x); ExitTrace3(x, f, s, t, u); goto LExit; } + +#define ExitOnFailure(x, s) if (FAILED(x)) { ExitTrace(x, s); goto LExit; } +#define ExitOnFailure1(x, f, s) if (FAILED(x)) { ExitTrace1(x, f, s); goto LExit; } +#define ExitOnFailure2(x, f, s, t) if (FAILED(x)) { ExitTrace2(x, f, s, t); goto LExit; } +#define ExitOnFailure3(x, f, s, t, u) if (FAILED(x)) { ExitTrace3(x, f, s, t, u); goto LExit; } + +#define ExitOnRootFailure(x, s) if (FAILED(x)) { Dutil_RootFailure(__FILE__, __LINE__, x); ExitTrace(x, s); goto LExit; } +#define ExitOnRootFailure1(x, f, s) if (FAILED(x)) { Dutil_RootFailure(__FILE__, __LINE__, x); ExitTrace1(x, f, s); goto LExit; } +#define ExitOnRootFailure2(x, f, s, t) if (FAILED(x)) { Dutil_RootFailure(__FILE__, __LINE__, x); ExitTrace2(x, f, s, t); goto LExit; } +#define ExitOnRootFailure3(x, f, s, t, u) if (FAILED(x)) { Dutil_RootFailure(__FILE__, __LINE__, x); ExitTrace3(x, f, s, t, u); goto LExit; } + +#define ExitOnFailureDebugTrace(x, s) if (FAILED(x)) { TraceErrorDebug(x, s); goto LExit; } +#define ExitOnFailureDebugTrace1(x, f, s) if (FAILED(x)) { TraceErrorDebug1(x, f, s); goto LExit; } +#define ExitOnFailureDebugTrace2(x, f, s, t) if (FAILED(x)) { TraceErrorDebug2(x, f, s, t); goto LExit; } +#define ExitOnFailureDebugTrace3(x, f, s, t, u) if (FAILED(x)) { TraceErrorDebug3(x, f, s, t, u); goto LExit; } + +#define ExitOnNull(p, x, e, s) if (NULL == p) { x = e; Dutil_RootFailure(__FILE__, __LINE__, x); ExitTrace(x, s); goto LExit; } +#define ExitOnNull1(p, x, e, f, s) if (NULL == p) { x = e; Dutil_RootFailure(__FILE__, __LINE__, x); ExitTrace1(x, f, s); goto LExit; } +#define ExitOnNull2(p, x, e, f, s, t) if (NULL == p) { x = e; Dutil_RootFailure(__FILE__, __LINE__, x); ExitTrace2(x, f, s, t); goto LExit; } + +#define ExitOnNullWithLastError(p, x, s) if (NULL == p) { x = ::GetLastError(); x = HRESULT_FROM_WIN32(x); if (!FAILED(x)) { x = E_FAIL; } Dutil_RootFailure(__FILE__, __LINE__, x); ExitTrace(x, s); goto LExit; } +#define ExitOnNullWithLastError1(p, x, f, s) if (NULL == p) { x = ::GetLastError(); x = HRESULT_FROM_WIN32(x); if (!FAILED(x)) { x = E_FAIL; } Dutil_RootFailure(__FILE__, __LINE__, x); ExitTrace1(x, f, s); goto LExit; } + +#define ExitOnNullDebugTrace(p, x, e, s) if (NULL == p) { x = e; Dutil_RootFailure(__FILE__, __LINE__, x); TraceErrorDebug(x, s); goto LExit; } +#define ExitOnNullDebugTrace1(p, x, e, f, s) if (NULL == p) { x = e; Dutil_RootFailure(__FILE__, __LINE__, x); TraceErrorDebug1(x, f, s); goto LExit; } + +#define ExitOnInvalidHandleWithLastError(p, x, s) if (INVALID_HANDLE_VALUE == p) { x = ::GetLastError(); x = HRESULT_FROM_WIN32(x); if (!FAILED(x)) { x = E_FAIL; } Dutil_RootFailure(__FILE__, __LINE__, x); ExitTrace(x, s); goto LExit; } +#define ExitOnInvalidHandleWithLastError1(p, x, f, s) if (INVALID_HANDLE_VALUE == p) { x = ::GetLastError(); x = HRESULT_FROM_WIN32(x); if (!FAILED(x)) { x = E_FAIL; } Dutil_RootFailure(__FILE__, __LINE__, x); ExitTrace1(x, f, s); goto LExit; } + +#define ExitOnWin32Error(e, x, s) if (ERROR_SUCCESS != e) { x = HRESULT_FROM_WIN32(e); if (!FAILED(x)) { x = E_FAIL; } Dutil_RootFailure(__FILE__, __LINE__, x); ExitTrace(x, s); goto LExit; } +#define ExitOnWin32Error1(e, x, f, s) if (ERROR_SUCCESS != e) { x = HRESULT_FROM_WIN32(e); if (!FAILED(x)) { x = E_FAIL; } Dutil_RootFailure(__FILE__, __LINE__, x); ExitTrace1(x, f, s); goto LExit; } + +// release macros +#define ReleaseObject(x) if (x) { x->Release(); } +#define ReleaseObjectArray(prg, cel) if (prg) { for (DWORD Dutil_ReleaseObjectArrayIndex = 0; Dutil_ReleaseObjectArrayIndex < cel; ++Dutil_ReleaseObjectArrayIndex) { ReleaseObject(prg[Dutil_ReleaseObjectArrayIndex]); } ReleaseMem(prg); } +#define ReleaseVariant(x) { ::VariantClear(&x); } +#define ReleaseNullObject(x) if (x) { (x)->Release(); x = NULL; } +#define ReleaseCertificate(x) if (x) { ::CertFreeCertificateContext(x); x=NULL; } +#define ReleaseHandle(x) if (x) { ::CloseHandle(x); x = NULL; } + + +// useful defines and macros +#define Unused(x) ((void)x) + +#ifndef countof +#if 1 +#define countof(ary) (sizeof(ary) / sizeof(ary[0])) +#else +#ifndef __cplusplus +#define countof(ary) (sizeof(ary) / sizeof(ary[0])) +#else +template static char countofVerify(void const *, T) throw() { return 0; } +template static void countofVerify(T *const, T *const *) throw() {}; +#define countof(arr) (sizeof(countofVerify(arr,&(arr))) * sizeof(arr)/sizeof(*(arr))) +#endif +#endif +#endif + +#define roundup(x, n) roundup_typed(x, n, DWORD) +#define roundup_typed(x, n, t) (((t)(x) + ((t)(n) - 1)) & ~((t)(n) - 1)) + +#define HRESULT_FROM_RPC(x) ((HRESULT) ((x) | FACILITY_RPC)) + +#ifndef MAXSIZE_T +#define MAXSIZE_T ((SIZE_T)~((SIZE_T)0)) +#endif + +typedef const BYTE* LPCBYTE; + +#define E_FILENOTFOUND HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND) +#define E_INVALIDSTATE HRESULT_FROM_WIN32(ERROR_INVALID_STATE) +#define E_MOREDATA HRESULT_FROM_WIN32(ERROR_MORE_DATA) +#define E_NOMOREITEMS HRESULT_FROM_WIN32(ERROR_NO_MORE_ITEMS) +#define E_NOTFOUND HRESULT_FROM_WIN32(ERROR_NOT_FOUND) +#define E_MODNOTFOUND HRESULT_FROM_WIN32(ERROR_MOD_NOT_FOUND) + +#define AddRefAndRelease(x) { x->AddRef(); x->Release(); } + +#define MAKEQWORDVERSION(mj, mi, b, r) (((DWORD64)MAKELONG(r, b)) | (((DWORD64)MAKELONG(mi, mj)) << 32)) + +// other functions +extern "C" HRESULT DAPI LoadSystemLibrary(__in_z LPCWSTR wzModuleName, __out HMODULE *phModule); diff --git a/msi/build/A2Staging/wix35-binaries/sdk/inc/eseutil.h b/msi/build/A2Staging/wix35-binaries/sdk/inc/eseutil.h index 975a5372a2..27ec027fc5 100644 --- a/msi/build/A2Staging/wix35-binaries/sdk/inc/eseutil.h +++ b/msi/build/A2Staging/wix35-binaries/sdk/inc/eseutil.h @@ -1,212 +1,212 @@ -#pragma once -//------------------------------------------------------------------------------------------------- -// -// Copyright (c) Microsoft Corporation. All rights reserved. -// -// The use and distribution terms for this software are covered by the -// Common Public License 1.0 (http://opensource.org/licenses/cpl1.0.php) -// which can be found in the file CPL.TXT at the root of this distribution. -// By using this software in any fashion, you are agreeing to be bound by -// the terms of this license. -// -// You must not remove this notice, or any other, from this software. -// -// -// -// Header for Extensible Storage Engine (Jetblue) helper functions. -// -//------------------------------------------------------------------------------------------------- - -#ifdef __cplusplus -extern "C" { -#endif - -struct COLUMN_SCHEMA -{ - JET_COLUMNID jcColumn; - LPCWSTR pszName; - JET_COLTYP jcColumnType; - BOOL fKey; // If this column is part of the key of the table - BOOL fFixed; - BOOL fNullable; - BOOL fAutoIncrement; -}; - -struct TABLE_SCHEMA -{ - JET_TABLEID jtTable; - LPCWSTR pszName; - DWORD dwColumns; - COLUMN_SCHEMA *pcsColumns; -}; - -struct DATABASE_SCHEMA -{ - DWORD dwTables; - TABLE_SCHEMA *ptsTables; -}; - -typedef void* ESE_QUERY_HANDLE; - -HRESULT DAPI EseBeginSession( - __out JET_INSTANCE *pjiInstance, - __out JET_SESID *pjsSession, - __in_z LPCWSTR pszInstance, - __in_z LPCWSTR pszPath - ); -HRESULT DAPI EseEndSession( - __in JET_INSTANCE jiInstance, - __in JET_SESID jsSession - ); -HRESULT DAPI EseEnsureDatabase( - __in JET_SESID jsSession, - __in_z LPCWSTR pszFile, - __in DATABASE_SCHEMA *pdsSchema, - __out JET_DBID* pjdbDb, - __in BOOL fExclusive, - __in BOOL fReadonly - ); -HRESULT DAPI EseCloseDatabase( - __in JET_SESID jsSession, - __in JET_DBID jdbDb - ); -HRESULT DAPI EseCreateTable( - __in JET_SESID jsSession, - __in JET_DBID jdbDb, - __in_z LPCWSTR pszTable, - __out JET_TABLEID *pjtTable - ); -HRESULT DAPI EseOpenTable( - __in JET_SESID jsSession, - __in JET_DBID jdbDb, - __in_z LPCWSTR pszTable, - __out JET_TABLEID *pjtTable - ); -HRESULT DAPI EseCloseTable( - __in JET_SESID jsSession, - __in JET_TABLEID jtTable - ); -HRESULT DAPI EseEnsureColumn( - __in JET_SESID jsSession, - __in JET_TABLEID jtTable, - __in_z LPCWSTR pszColumnName, - __in JET_COLTYP jcColumnType, - __in ULONG ulColumnSize, - __in BOOL fFixed, - __in BOOL fNullable, - __out_opt JET_COLUMNID *pjcColumn - ); -HRESULT DAPI EseGetColumn( - __in JET_SESID jsSession, - __in JET_TABLEID jtTable, - __in_z LPCWSTR pszColumnName, - __out JET_COLUMNID *pjcColumn - ); -HRESULT DAPI EseMoveCursor( - __in JET_SESID jsSession, - __in JET_TABLEID jtTable, - __in LONG lRow - ); -HRESULT DAPI EseDeleteRow( - __in JET_SESID jsSession, - __in JET_TABLEID jtTable - ); -HRESULT DAPI EseBeginTransaction( - __in JET_SESID jsSession - ); -HRESULT DAPI EseCommitTransaction( - __in JET_SESID jsSession - ); -HRESULT DAPI EsePrepareUpdate( - __in JET_SESID jsSession, - __in JET_TABLEID jtTable, - __in ULONG ulPrep - ); -HRESULT DAPI EseFinishUpdate( - __in JET_SESID jsSession, - __in JET_TABLEID jtTable - ); -HRESULT DAPI EseSetColumnDword( - __in JET_SESID jsSession, - __in JET_TABLEID jtTable, - __in JET_COLUMNID jcColumn, - __in DWORD dwValue - ); -// Sets a column value without the need to call begintransaction, prepareupdate, finishupdate, or committransaction (all of these are called in sequence for you) -HRESULT DAPI EseSetColumnDwordFull( - __in JET_SESID jsSession, - __in JET_TABLEID jtTable, - __in JET_COLUMNID jcColumn, - __in DWORD dwValue - ); -HRESULT DAPI EseSetColumnString( - __in JET_SESID jsSession, - __in JET_TABLEID jtTable, - __in JET_COLUMNID jcColumn, - __in_z LPCWSTR pszValue - ); -// Sets a column value without the need to call begintransaction, prepareupdate, finishupdate, or committransaction (all of these are called in sequence for you) -HRESULT DAPI EseSetColumnStringFull( - __in JET_SESID jsSession, - __in JET_TABLEID jtTable, - __in JET_COLUMNID jcColumn, - __in_z LPCWSTR pszValue - ); -HRESULT DAPI EseSetColumnEmpty( - __in JET_SESID jsSession, - __in JET_TABLEID jtTable, - __in JET_COLUMNID jcColumn - ); -HRESULT DAPI EseSetColumnEmptyFull( - __in JET_SESID jsSession, - __in JET_TABLEID jtTable, - __in JET_COLUMNID jcColumn - ); -HRESULT DAPI EseGetColumnDword( - __in JET_SESID jsSession, - __in JET_TABLEID jtTable, - __in JET_COLUMNID jcColumn, - __out DWORD *pdwValue - ); -HRESULT DAPI EseGetColumnString( - __in JET_SESID jsSession, - __in JET_TABLEID jtTable, - __in JET_COLUMNID jcColumn, - __out LPWSTR *ppszValue - ); - -// Call this once for each key column in the table -HRESULT DAPI EseBeginQuery( - __in JET_SESID jsSession, - __in JET_TABLEID jtTable, - __in BOOL fExact, - __out ESE_QUERY_HANDLE *peqhHandle - ); -HRESULT DAPI EseSetQueryColumnDword( - __in JET_SESID jsSession, - __in JET_TABLEID jtTable, - __in ESE_QUERY_HANDLE eqhHandle, - __in DWORD dwData, - __in BOOL fFinal // If this is true, all other key columns in the query will be set to "*" - ); -HRESULT DAPI EseSetQueryColumnString( - __in JET_SESID jsSession, - __in JET_TABLEID jtTable, - __in ESE_QUERY_HANDLE eqhHandle, - __in_z LPCWSTR pszString, - __in BOOL fFinal // If this is true, all other key columns in the query will be set to "*" - ); -// This frees the query handle without actually running the query -void DAPI EseFreeQuery( - __in ESE_QUERY_HANDLE eqhHandle - ); -// Once all columns have been set up, call this and read the result -HRESULT DAPI EseRunQuery( - __in JET_SESID jsSession, - __in JET_TABLEID jtTable, - __in ESE_QUERY_HANDLE eqhHandle - ); - -#ifdef __cplusplus -} -#endif +#pragma once +//------------------------------------------------------------------------------------------------- +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// The use and distribution terms for this software are covered by the +// Common Public License 1.0 (http://opensource.org/licenses/cpl1.0.php) +// which can be found in the file CPL.TXT at the root of this distribution. +// By using this software in any fashion, you are agreeing to be bound by +// the terms of this license. +// +// You must not remove this notice, or any other, from this software. +// +// +// +// Header for Extensible Storage Engine (Jetblue) helper functions. +// +//------------------------------------------------------------------------------------------------- + +#ifdef __cplusplus +extern "C" { +#endif + +struct COLUMN_SCHEMA +{ + JET_COLUMNID jcColumn; + LPCWSTR pszName; + JET_COLTYP jcColumnType; + BOOL fKey; // If this column is part of the key of the table + BOOL fFixed; + BOOL fNullable; + BOOL fAutoIncrement; +}; + +struct TABLE_SCHEMA +{ + JET_TABLEID jtTable; + LPCWSTR pszName; + DWORD dwColumns; + COLUMN_SCHEMA *pcsColumns; +}; + +struct DATABASE_SCHEMA +{ + DWORD dwTables; + TABLE_SCHEMA *ptsTables; +}; + +typedef void* ESE_QUERY_HANDLE; + +HRESULT DAPI EseBeginSession( + __out JET_INSTANCE *pjiInstance, + __out JET_SESID *pjsSession, + __in_z LPCWSTR pszInstance, + __in_z LPCWSTR pszPath + ); +HRESULT DAPI EseEndSession( + __in JET_INSTANCE jiInstance, + __in JET_SESID jsSession + ); +HRESULT DAPI EseEnsureDatabase( + __in JET_SESID jsSession, + __in_z LPCWSTR pszFile, + __in DATABASE_SCHEMA *pdsSchema, + __out JET_DBID* pjdbDb, + __in BOOL fExclusive, + __in BOOL fReadonly + ); +HRESULT DAPI EseCloseDatabase( + __in JET_SESID jsSession, + __in JET_DBID jdbDb + ); +HRESULT DAPI EseCreateTable( + __in JET_SESID jsSession, + __in JET_DBID jdbDb, + __in_z LPCWSTR pszTable, + __out JET_TABLEID *pjtTable + ); +HRESULT DAPI EseOpenTable( + __in JET_SESID jsSession, + __in JET_DBID jdbDb, + __in_z LPCWSTR pszTable, + __out JET_TABLEID *pjtTable + ); +HRESULT DAPI EseCloseTable( + __in JET_SESID jsSession, + __in JET_TABLEID jtTable + ); +HRESULT DAPI EseEnsureColumn( + __in JET_SESID jsSession, + __in JET_TABLEID jtTable, + __in_z LPCWSTR pszColumnName, + __in JET_COLTYP jcColumnType, + __in ULONG ulColumnSize, + __in BOOL fFixed, + __in BOOL fNullable, + __out_opt JET_COLUMNID *pjcColumn + ); +HRESULT DAPI EseGetColumn( + __in JET_SESID jsSession, + __in JET_TABLEID jtTable, + __in_z LPCWSTR pszColumnName, + __out JET_COLUMNID *pjcColumn + ); +HRESULT DAPI EseMoveCursor( + __in JET_SESID jsSession, + __in JET_TABLEID jtTable, + __in LONG lRow + ); +HRESULT DAPI EseDeleteRow( + __in JET_SESID jsSession, + __in JET_TABLEID jtTable + ); +HRESULT DAPI EseBeginTransaction( + __in JET_SESID jsSession + ); +HRESULT DAPI EseCommitTransaction( + __in JET_SESID jsSession + ); +HRESULT DAPI EsePrepareUpdate( + __in JET_SESID jsSession, + __in JET_TABLEID jtTable, + __in ULONG ulPrep + ); +HRESULT DAPI EseFinishUpdate( + __in JET_SESID jsSession, + __in JET_TABLEID jtTable + ); +HRESULT DAPI EseSetColumnDword( + __in JET_SESID jsSession, + __in JET_TABLEID jtTable, + __in JET_COLUMNID jcColumn, + __in DWORD dwValue + ); +// Sets a column value without the need to call begintransaction, prepareupdate, finishupdate, or committransaction (all of these are called in sequence for you) +HRESULT DAPI EseSetColumnDwordFull( + __in JET_SESID jsSession, + __in JET_TABLEID jtTable, + __in JET_COLUMNID jcColumn, + __in DWORD dwValue + ); +HRESULT DAPI EseSetColumnString( + __in JET_SESID jsSession, + __in JET_TABLEID jtTable, + __in JET_COLUMNID jcColumn, + __in_z LPCWSTR pszValue + ); +// Sets a column value without the need to call begintransaction, prepareupdate, finishupdate, or committransaction (all of these are called in sequence for you) +HRESULT DAPI EseSetColumnStringFull( + __in JET_SESID jsSession, + __in JET_TABLEID jtTable, + __in JET_COLUMNID jcColumn, + __in_z LPCWSTR pszValue + ); +HRESULT DAPI EseSetColumnEmpty( + __in JET_SESID jsSession, + __in JET_TABLEID jtTable, + __in JET_COLUMNID jcColumn + ); +HRESULT DAPI EseSetColumnEmptyFull( + __in JET_SESID jsSession, + __in JET_TABLEID jtTable, + __in JET_COLUMNID jcColumn + ); +HRESULT DAPI EseGetColumnDword( + __in JET_SESID jsSession, + __in JET_TABLEID jtTable, + __in JET_COLUMNID jcColumn, + __out DWORD *pdwValue + ); +HRESULT DAPI EseGetColumnString( + __in JET_SESID jsSession, + __in JET_TABLEID jtTable, + __in JET_COLUMNID jcColumn, + __out LPWSTR *ppszValue + ); + +// Call this once for each key column in the table +HRESULT DAPI EseBeginQuery( + __in JET_SESID jsSession, + __in JET_TABLEID jtTable, + __in BOOL fExact, + __out ESE_QUERY_HANDLE *peqhHandle + ); +HRESULT DAPI EseSetQueryColumnDword( + __in JET_SESID jsSession, + __in JET_TABLEID jtTable, + __in ESE_QUERY_HANDLE eqhHandle, + __in DWORD dwData, + __in BOOL fFinal // If this is true, all other key columns in the query will be set to "*" + ); +HRESULT DAPI EseSetQueryColumnString( + __in JET_SESID jsSession, + __in JET_TABLEID jtTable, + __in ESE_QUERY_HANDLE eqhHandle, + __in_z LPCWSTR pszString, + __in BOOL fFinal // If this is true, all other key columns in the query will be set to "*" + ); +// This frees the query handle without actually running the query +void DAPI EseFreeQuery( + __in ESE_QUERY_HANDLE eqhHandle + ); +// Once all columns have been set up, call this and read the result +HRESULT DAPI EseRunQuery( + __in JET_SESID jsSession, + __in JET_TABLEID jtTable, + __in ESE_QUERY_HANDLE eqhHandle + ); + +#ifdef __cplusplus +} +#endif diff --git a/msi/build/A2Staging/wix35-binaries/sdk/inc/fileutil.h b/msi/build/A2Staging/wix35-binaries/sdk/inc/fileutil.h index bc41a2158a..327a3586ff 100644 --- a/msi/build/A2Staging/wix35-binaries/sdk/inc/fileutil.h +++ b/msi/build/A2Staging/wix35-binaries/sdk/inc/fileutil.h @@ -1,176 +1,176 @@ -#pragma once -//------------------------------------------------------------------------------------------------- -// -// Copyright (c) Microsoft Corporation. All rights reserved. -// -// The use and distribution terms for this software are covered by the -// Common Public License 1.0 (http://opensource.org/licenses/cpl1.0.php) -// which can be found in the file CPL.TXT at the root of this distribution. -// By using this software in any fashion, you are agreeing to be bound by -// the terms of this license. -// -// You must not remove this notice, or any other, from this software. -// -// -// -// Header for file helper functions. -// -//------------------------------------------------------------------------------------------------- - -#ifdef __cplusplus -extern "C" { -#endif - -#define ReleaseFile(h) if (INVALID_HANDLE_VALUE != h) { ::CloseHandle(h); h = INVALID_HANDLE_VALUE; } -#define ReleaseFileHandle(h) if (INVALID_HANDLE_VALUE != h) { ::CloseHandle(h); h = INVALID_HANDLE_VALUE; } -#define ReleaseFileFindHandle(h) if (INVALID_HANDLE_VALUE != h) { ::FindClose(h); h = INVALID_HANDLE_VALUE; } - -enum FILE_ARCHITECTURE -{ - FILE_ARCHITECTURE_UNKNOWN, - FILE_ARCHITECTURE_X86, - FILE_ARCHITECTURE_X64, - FILE_ARCHITECTURE_IA64, -}; - - -LPWSTR DAPI FileFromPath( - __in_z LPCWSTR wzPath - ); -HRESULT DAPI FileResolvePath( - __in_z LPCWSTR wzRelativePath, - __out LPWSTR *ppwzFullPath - ); -HRESULT DAPI FileStripExtension( - __in_z LPCWSTR wzFileName, - __out LPWSTR *ppwzFileNameNoExtension - ); -HRESULT DAPI FileChangeExtension( - __in_z LPCWSTR wzFileName, - __in_z LPCWSTR wzNewExtension, - __out LPWSTR *ppwzFileNameNewExtension - ); -HRESULT DAPI FileAddSuffixToBaseName( - __in_z LPCWSTR wzFileName, - __in_z LPCWSTR wzSuffix, - __out_z LPWSTR* psczNewFileName - ); -HRESULT DAPI FileVersionFromString( - __in_z LPCWSTR wzVersion, - __out DWORD *pdwVerMajor, - __out DWORD* pdwVerMinor - ); -HRESULT DAPI FileVersionFromStringEx( - __in_z LPCWSTR wzVersion, - __in DWORD cchVersion, - __out DWORD64* pqwVersion - ); -HRESULT DAPI FileSetPointer( - __in HANDLE hFile, - __in DWORD64 dw64Move, - __out_opt DWORD64* pdw64NewPosition, - __in DWORD dwMoveMethod - ); -HRESULT DAPI FileSize( - __in_z LPCWSTR pwzFileName, - __out LONGLONG* pllSize - ); -HRESULT DAPI FileSizeByHandle( - __in HANDLE hFile, - __out LONGLONG* pllSize - ); -BOOL DAPI FileExistsEx( - __in_z LPCWSTR wzPath, - __out_opt DWORD *pdwAttributes - ); -HRESULT DAPI FileRead( - __deref_out_bcount_full(*pcbDest) LPBYTE* ppbDest, - __out DWORD* pcbDest, - __in_z LPCWSTR wzSrcPath - ); -HRESULT DAPI FileReadUntil( - __deref_out_bcount_full(*pcbDest) LPBYTE* ppbDest, - __out_range(<=, cbMaxRead) DWORD* pcbDest, - __in_z LPCWSTR wzSrcPath, - __in DWORD cbMaxRead - ); -HRESULT DAPI FileReadPartial( - __deref_out_bcount_full(*pcbDest) LPBYTE* ppbDest, - __out_range(<=, cbMaxRead) DWORD* pcbDest, - __in_z LPCWSTR wzSrcPath, - __in BOOL fSeek, - __in DWORD cbStartPosition, - __in DWORD cbMaxRead, - __in BOOL fPartialOK - ); -HRESULT DAPI FileWrite( - __in_z LPCWSTR pwzFileName, - __in DWORD dwFlagsAndAttributes, - __in_bcount(cbData) LPCBYTE pbData, - __in DWORD cbData, - __out_opt HANDLE* pHandle - ); -HRESULT DAPI FileWriteHandle( - __in HANDLE hFile, - __in_bcount(cbData) LPCBYTE pbData, - __in DWORD cbData - ); -HRESULT DAPI FileEnsureCopy( - __in_z LPCWSTR wzSource, - __in_z LPCWSTR wzTarget, - __in BOOL fOverwrite - ); -HRESULT DAPI FileEnsureMove( - __in_z LPCWSTR wzSource, - __in_z LPCWSTR wzTarget, - __in BOOL fOverwrite, - __in BOOL fAllowCopy - ); -HRESULT DAPI FileCreateTemp( - __in_z LPCWSTR wzPrefix, - __in_z LPCWSTR wzExtension, - __deref_opt_out_z LPWSTR* ppwzTempFile, - __out_opt HANDLE* phTempFile - ); -HRESULT DAPI FileCreateTempW( - __in_z LPCWSTR wzPrefix, - __in_z LPCWSTR wzExtension, - __deref_opt_out_z LPWSTR* ppwzTempFile, - __out_opt HANDLE* phTempFile - ); -HRESULT DAPI FileVersion( - __in_z LPCWSTR wzFilename, - __out DWORD *pdwVerMajor, - __out DWORD* pdwVerMinor - ); -HRESULT DAPI FileIsSame( - __in_z LPCWSTR wzFile1, - __in_z LPCWSTR wzFile2, - __out LPBOOL lpfSameFile - ); -HRESULT DAPI FileEnsureDelete( - __in_z LPCWSTR wzFile - ); -HRESULT DAPI FileGetTime( - __in_z LPCWSTR wzFile, - __out_opt LPFILETIME lpCreationTime, - __out_opt LPFILETIME lpLastAccessTime, - __out_opt LPFILETIME lpLastWriteTime - ); -HRESULT DAPI FileSetTime( - __in_z LPCWSTR wzFile, - __in_opt const FILETIME *lpCreationTime, - __in_opt const FILETIME *lpLastAccessTime, - __in_opt const FILETIME *lpLastWriteTime - ); -HRESULT DAPI FileResetTime( - __in_z LPCWSTR wzFile - ); -HRESULT FileExecutableArchitecture( - __in_z LPCWSTR wzFile, - __out FILE_ARCHITECTURE *pArchitecture - ); - -#ifdef __cplusplus -} -#endif +#pragma once +//------------------------------------------------------------------------------------------------- +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// The use and distribution terms for this software are covered by the +// Common Public License 1.0 (http://opensource.org/licenses/cpl1.0.php) +// which can be found in the file CPL.TXT at the root of this distribution. +// By using this software in any fashion, you are agreeing to be bound by +// the terms of this license. +// +// You must not remove this notice, or any other, from this software. +// +// +// +// Header for file helper functions. +// +//------------------------------------------------------------------------------------------------- + +#ifdef __cplusplus +extern "C" { +#endif + +#define ReleaseFile(h) if (INVALID_HANDLE_VALUE != h) { ::CloseHandle(h); h = INVALID_HANDLE_VALUE; } +#define ReleaseFileHandle(h) if (INVALID_HANDLE_VALUE != h) { ::CloseHandle(h); h = INVALID_HANDLE_VALUE; } +#define ReleaseFileFindHandle(h) if (INVALID_HANDLE_VALUE != h) { ::FindClose(h); h = INVALID_HANDLE_VALUE; } + +enum FILE_ARCHITECTURE +{ + FILE_ARCHITECTURE_UNKNOWN, + FILE_ARCHITECTURE_X86, + FILE_ARCHITECTURE_X64, + FILE_ARCHITECTURE_IA64, +}; + + +LPWSTR DAPI FileFromPath( + __in_z LPCWSTR wzPath + ); +HRESULT DAPI FileResolvePath( + __in_z LPCWSTR wzRelativePath, + __out LPWSTR *ppwzFullPath + ); +HRESULT DAPI FileStripExtension( + __in_z LPCWSTR wzFileName, + __out LPWSTR *ppwzFileNameNoExtension + ); +HRESULT DAPI FileChangeExtension( + __in_z LPCWSTR wzFileName, + __in_z LPCWSTR wzNewExtension, + __out LPWSTR *ppwzFileNameNewExtension + ); +HRESULT DAPI FileAddSuffixToBaseName( + __in_z LPCWSTR wzFileName, + __in_z LPCWSTR wzSuffix, + __out_z LPWSTR* psczNewFileName + ); +HRESULT DAPI FileVersionFromString( + __in_z LPCWSTR wzVersion, + __out DWORD *pdwVerMajor, + __out DWORD* pdwVerMinor + ); +HRESULT DAPI FileVersionFromStringEx( + __in_z LPCWSTR wzVersion, + __in DWORD cchVersion, + __out DWORD64* pqwVersion + ); +HRESULT DAPI FileSetPointer( + __in HANDLE hFile, + __in DWORD64 dw64Move, + __out_opt DWORD64* pdw64NewPosition, + __in DWORD dwMoveMethod + ); +HRESULT DAPI FileSize( + __in_z LPCWSTR pwzFileName, + __out LONGLONG* pllSize + ); +HRESULT DAPI FileSizeByHandle( + __in HANDLE hFile, + __out LONGLONG* pllSize + ); +BOOL DAPI FileExistsEx( + __in_z LPCWSTR wzPath, + __out_opt DWORD *pdwAttributes + ); +HRESULT DAPI FileRead( + __deref_out_bcount_full(*pcbDest) LPBYTE* ppbDest, + __out DWORD* pcbDest, + __in_z LPCWSTR wzSrcPath + ); +HRESULT DAPI FileReadUntil( + __deref_out_bcount_full(*pcbDest) LPBYTE* ppbDest, + __out_range(<=, cbMaxRead) DWORD* pcbDest, + __in_z LPCWSTR wzSrcPath, + __in DWORD cbMaxRead + ); +HRESULT DAPI FileReadPartial( + __deref_out_bcount_full(*pcbDest) LPBYTE* ppbDest, + __out_range(<=, cbMaxRead) DWORD* pcbDest, + __in_z LPCWSTR wzSrcPath, + __in BOOL fSeek, + __in DWORD cbStartPosition, + __in DWORD cbMaxRead, + __in BOOL fPartialOK + ); +HRESULT DAPI FileWrite( + __in_z LPCWSTR pwzFileName, + __in DWORD dwFlagsAndAttributes, + __in_bcount(cbData) LPCBYTE pbData, + __in DWORD cbData, + __out_opt HANDLE* pHandle + ); +HRESULT DAPI FileWriteHandle( + __in HANDLE hFile, + __in_bcount(cbData) LPCBYTE pbData, + __in DWORD cbData + ); +HRESULT DAPI FileEnsureCopy( + __in_z LPCWSTR wzSource, + __in_z LPCWSTR wzTarget, + __in BOOL fOverwrite + ); +HRESULT DAPI FileEnsureMove( + __in_z LPCWSTR wzSource, + __in_z LPCWSTR wzTarget, + __in BOOL fOverwrite, + __in BOOL fAllowCopy + ); +HRESULT DAPI FileCreateTemp( + __in_z LPCWSTR wzPrefix, + __in_z LPCWSTR wzExtension, + __deref_opt_out_z LPWSTR* ppwzTempFile, + __out_opt HANDLE* phTempFile + ); +HRESULT DAPI FileCreateTempW( + __in_z LPCWSTR wzPrefix, + __in_z LPCWSTR wzExtension, + __deref_opt_out_z LPWSTR* ppwzTempFile, + __out_opt HANDLE* phTempFile + ); +HRESULT DAPI FileVersion( + __in_z LPCWSTR wzFilename, + __out DWORD *pdwVerMajor, + __out DWORD* pdwVerMinor + ); +HRESULT DAPI FileIsSame( + __in_z LPCWSTR wzFile1, + __in_z LPCWSTR wzFile2, + __out LPBOOL lpfSameFile + ); +HRESULT DAPI FileEnsureDelete( + __in_z LPCWSTR wzFile + ); +HRESULT DAPI FileGetTime( + __in_z LPCWSTR wzFile, + __out_opt LPFILETIME lpCreationTime, + __out_opt LPFILETIME lpLastAccessTime, + __out_opt LPFILETIME lpLastWriteTime + ); +HRESULT DAPI FileSetTime( + __in_z LPCWSTR wzFile, + __in_opt const FILETIME *lpCreationTime, + __in_opt const FILETIME *lpLastAccessTime, + __in_opt const FILETIME *lpLastWriteTime + ); +HRESULT DAPI FileResetTime( + __in_z LPCWSTR wzFile + ); +HRESULT FileExecutableArchitecture( + __in_z LPCWSTR wzFile, + __out FILE_ARCHITECTURE *pArchitecture + ); + +#ifdef __cplusplus +} +#endif diff --git a/msi/build/A2Staging/wix35-binaries/sdk/inc/gdiputil.h b/msi/build/A2Staging/wix35-binaries/sdk/inc/gdiputil.h index 6720c7384d..c7b622e566 100644 --- a/msi/build/A2Staging/wix35-binaries/sdk/inc/gdiputil.h +++ b/msi/build/A2Staging/wix35-binaries/sdk/inc/gdiputil.h @@ -1,46 +1,46 @@ -//------------------------------------------------------------------------------------------------- -// -// Copyright (c) Microsoft Corporation. All rights reserved. -// -// The use and distribution terms for this software are covered by the -// Common Public License 1.0 (http://opensource.org/licenses/cpl1.0.php) -// which can be found in the file CPL.TXT at the root of this distribution. -// By using this software in any fashion, you are agreeing to be bound by -// the terms of this license. -// -// You must not remove this notice, or any other, from this software. -// -// -// -// GDI+ helper functions. -// -//------------------------------------------------------------------------------------------------- - -#pragma once - -#define ExitOnGdipFailure(g, x, s) { x = GdipHresultFromStatus(g); if (FAILED(x)) { Dutil_RootFailure(__FILE__, __LINE__, x); ExitTrace(x, s); goto LExit; } } -#define ExitOnGdipFailure1(g, x, f, s) { x = GdipHresultFromStatus(g); if (FAILED(x)) { Dutil_RootFailure(__FILE__, __LINE__, x); ExitTrace1(x, f, s); goto LExit; } } -#define ExitOnGdipFailure2(g, x, f, s, t) { x = GdipHresultFromStatus(g); if (FAILED(x)) { Dutil_RootFailure(__FILE__, __LINE__, x); ExitTrace2(x, f, s, t); goto LExit; } } - -#ifdef __cplusplus -extern "C" { -#endif - -HRESULT DAPI GdipBitmapFromResource( - __in_opt HINSTANCE hinst, - __in_z LPCSTR szId, - __out Gdiplus::Bitmap **ppBitmap - ); - -HRESULT DAPI GdipBitmapFromFile( - __in_z LPCWSTR wzFileName, - __out Gdiplus::Bitmap **ppBitmap - ); - -HRESULT DAPI GdipHresultFromStatus( - __in Gdiplus::Status gs - ); - -#ifdef __cplusplus -} -#endif +//------------------------------------------------------------------------------------------------- +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// The use and distribution terms for this software are covered by the +// Common Public License 1.0 (http://opensource.org/licenses/cpl1.0.php) +// which can be found in the file CPL.TXT at the root of this distribution. +// By using this software in any fashion, you are agreeing to be bound by +// the terms of this license. +// +// You must not remove this notice, or any other, from this software. +// +// +// +// GDI+ helper functions. +// +//------------------------------------------------------------------------------------------------- + +#pragma once + +#define ExitOnGdipFailure(g, x, s) { x = GdipHresultFromStatus(g); if (FAILED(x)) { Dutil_RootFailure(__FILE__, __LINE__, x); ExitTrace(x, s); goto LExit; } } +#define ExitOnGdipFailure1(g, x, f, s) { x = GdipHresultFromStatus(g); if (FAILED(x)) { Dutil_RootFailure(__FILE__, __LINE__, x); ExitTrace1(x, f, s); goto LExit; } } +#define ExitOnGdipFailure2(g, x, f, s, t) { x = GdipHresultFromStatus(g); if (FAILED(x)) { Dutil_RootFailure(__FILE__, __LINE__, x); ExitTrace2(x, f, s, t); goto LExit; } } + +#ifdef __cplusplus +extern "C" { +#endif + +HRESULT DAPI GdipBitmapFromResource( + __in_opt HINSTANCE hinst, + __in_z LPCSTR szId, + __out Gdiplus::Bitmap **ppBitmap + ); + +HRESULT DAPI GdipBitmapFromFile( + __in_z LPCWSTR wzFileName, + __out Gdiplus::Bitmap **ppBitmap + ); + +HRESULT DAPI GdipHresultFromStatus( + __in Gdiplus::Status gs + ); + +#ifdef __cplusplus +} +#endif diff --git a/msi/build/A2Staging/wix35-binaries/sdk/inc/inetutil.h b/msi/build/A2Staging/wix35-binaries/sdk/inc/inetutil.h index 42eb692819..59836b5b30 100644 --- a/msi/build/A2Staging/wix35-binaries/sdk/inc/inetutil.h +++ b/msi/build/A2Staging/wix35-binaries/sdk/inc/inetutil.h @@ -1,54 +1,54 @@ -#pragma once -//------------------------------------------------------------------------------------------------- -// -// Copyright (c) Microsoft Corporation. All rights reserved. -// -// The use and distribution terms for this software are covered by the -// Common Public License 1.0 (http://opensource.org/licenses/cpl1.0.php) -// which can be found in the file CPL.TXT at the root of this distribution. -// By using this software in any fashion, you are agreeing to be bound by -// the terms of this license. -// -// You must not remove this notice, or any other, from this software. -// -// -// -// Internet utilites. -// -//------------------------------------------------------------------------------------------------- - -#ifdef __cplusplus -extern "C" { -#endif - -#define ReleaseInternet(h) if (h) { ::InternetCloseHandle(h); h = NULL; } -#define ReleaseNullInternet(h) if (h) { ::InternetCloseHandle(h); h = NULL; } - - -// functions -HRESULT DAPI InternetGetSizeByHandle( - __in HINTERNET hiFile, - __out LONGLONG* pllSize - ); - -HRESULT DAPI InternetGetCreateTimeByHandle( - __in HINTERNET hiFile, - __out LPFILETIME pft - ); - -HRESULT DAPI InternetQueryInfoString( - __in HINTERNET h, - __in DWORD dwInfo, - __deref_out_z LPWSTR* psczValue - ); - -HRESULT DAPI InternetQueryInfoNumber( - __in HINTERNET h, - __in DWORD dwInfo, - __out LONG* plInfo - ); - -#ifdef __cplusplus -} -#endif - +#pragma once +//------------------------------------------------------------------------------------------------- +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// The use and distribution terms for this software are covered by the +// Common Public License 1.0 (http://opensource.org/licenses/cpl1.0.php) +// which can be found in the file CPL.TXT at the root of this distribution. +// By using this software in any fashion, you are agreeing to be bound by +// the terms of this license. +// +// You must not remove this notice, or any other, from this software. +// +// +// +// Internet utilites. +// +//------------------------------------------------------------------------------------------------- + +#ifdef __cplusplus +extern "C" { +#endif + +#define ReleaseInternet(h) if (h) { ::InternetCloseHandle(h); h = NULL; } +#define ReleaseNullInternet(h) if (h) { ::InternetCloseHandle(h); h = NULL; } + + +// functions +HRESULT DAPI InternetGetSizeByHandle( + __in HINTERNET hiFile, + __out LONGLONG* pllSize + ); + +HRESULT DAPI InternetGetCreateTimeByHandle( + __in HINTERNET hiFile, + __out LPFILETIME pft + ); + +HRESULT DAPI InternetQueryInfoString( + __in HINTERNET h, + __in DWORD dwInfo, + __deref_out_z LPWSTR* psczValue + ); + +HRESULT DAPI InternetQueryInfoNumber( + __in HINTERNET h, + __in DWORD dwInfo, + __out LONG* plInfo + ); + +#ifdef __cplusplus +} +#endif + diff --git a/msi/build/A2Staging/wix35-binaries/sdk/inc/jsonutil.h b/msi/build/A2Staging/wix35-binaries/sdk/inc/jsonutil.h index f204124fe5..2ce9c9fa35 100644 --- a/msi/build/A2Staging/wix35-binaries/sdk/inc/jsonutil.h +++ b/msi/build/A2Staging/wix35-binaries/sdk/inc/jsonutil.h @@ -1,94 +1,94 @@ -#pragma once -//------------------------------------------------------------------------------------------------- -// -// Copyright (c) Microsoft Corporation. All rights reserved. -// -// The use and distribution terms for this software are covered by the -// Common Public License 1.0 (http://opensource.org/licenses/cpl1.0.php) -// which can be found in the file CPL.TXT at the root of this distribution. -// By using this software in any fashion, you are agreeing to be bound by -// the terms of this license. -// -// You must not remove this notice, or any other, from this software. -// -// -// -// JavaScript Object Notation (JSON) helper functions. -// -//------------------------------------------------------------------------------------------------- - -#ifdef __cplusplus -extern "C" { -#endif - -enum JSON_WRITER_TOKEN -{ - JSON_WRITER_TOKEN_NONE, - JSON_WRITER_TOKEN_ARRAY_START, - JSON_WRITER_TOKEN_ARRAY_VALUE, - JSON_WRITER_TOKEN_ARRAY_END, - JSON_WRITER_TOKEN_OBJECT_START, - JSON_WRITER_TOKEN_OBJECT_KEY, - JSON_WRITER_TOKEN_OBJECT_VALUE, - JSON_WRITER_TOKEN_OBJECT_END, - JSON_WRITER_TOKEN_VALUE, -}; - -typedef struct _JSON_WRITER -{ - CRITICAL_SECTION cs; - LPWSTR sczJson; - - JSON_WRITER_TOKEN* rgTokenStack; - DWORD cTokens; - DWORD cMaxTokens; -} JSON_WRITER; - - -DAPI_(HRESULT) JsonInitializeWriter( - __in JSON_WRITER* pWriter - ); - -DAPI_(void) JsonUninitializeWriter( - __in JSON_WRITER* pWriter - ); - -DAPI_(HRESULT) JsonWriteBool( - __in JSON_WRITER* pWriter, - __in BOOL fValue - ); - -DAPI_(HRESULT) JsonWriteNumber( - __in JSON_WRITER* pWriter, - __in DWORD dwValue - ); - -DAPI_(HRESULT) JsonWriteString( - __in JSON_WRITER* pWriter, - __in_z_opt LPCWSTR wzValue - ); - -DAPI_(HRESULT) JsonWriteArrayStart( - __in JSON_WRITER* pWriter - ); - -DAPI_(HRESULT) JsonWriteArrayEnd( - __in JSON_WRITER* pWriter - ); - -DAPI_(HRESULT) JsonWriteObjectStart( - __in JSON_WRITER* pWriter - ); - -DAPI_(HRESULT) JsonWriteObjectKey( - __in JSON_WRITER* pWriter, - __in_z LPCWSTR wzKey - ); - -DAPI_(HRESULT) JsonWriteObjectEnd( - __in JSON_WRITER* pWriter - ); - -#ifdef __cplusplus -} -#endif +#pragma once +//------------------------------------------------------------------------------------------------- +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// The use and distribution terms for this software are covered by the +// Common Public License 1.0 (http://opensource.org/licenses/cpl1.0.php) +// which can be found in the file CPL.TXT at the root of this distribution. +// By using this software in any fashion, you are agreeing to be bound by +// the terms of this license. +// +// You must not remove this notice, or any other, from this software. +// +// +// +// JavaScript Object Notation (JSON) helper functions. +// +//------------------------------------------------------------------------------------------------- + +#ifdef __cplusplus +extern "C" { +#endif + +enum JSON_WRITER_TOKEN +{ + JSON_WRITER_TOKEN_NONE, + JSON_WRITER_TOKEN_ARRAY_START, + JSON_WRITER_TOKEN_ARRAY_VALUE, + JSON_WRITER_TOKEN_ARRAY_END, + JSON_WRITER_TOKEN_OBJECT_START, + JSON_WRITER_TOKEN_OBJECT_KEY, + JSON_WRITER_TOKEN_OBJECT_VALUE, + JSON_WRITER_TOKEN_OBJECT_END, + JSON_WRITER_TOKEN_VALUE, +}; + +typedef struct _JSON_WRITER +{ + CRITICAL_SECTION cs; + LPWSTR sczJson; + + JSON_WRITER_TOKEN* rgTokenStack; + DWORD cTokens; + DWORD cMaxTokens; +} JSON_WRITER; + + +DAPI_(HRESULT) JsonInitializeWriter( + __in JSON_WRITER* pWriter + ); + +DAPI_(void) JsonUninitializeWriter( + __in JSON_WRITER* pWriter + ); + +DAPI_(HRESULT) JsonWriteBool( + __in JSON_WRITER* pWriter, + __in BOOL fValue + ); + +DAPI_(HRESULT) JsonWriteNumber( + __in JSON_WRITER* pWriter, + __in DWORD dwValue + ); + +DAPI_(HRESULT) JsonWriteString( + __in JSON_WRITER* pWriter, + __in_z_opt LPCWSTR wzValue + ); + +DAPI_(HRESULT) JsonWriteArrayStart( + __in JSON_WRITER* pWriter + ); + +DAPI_(HRESULT) JsonWriteArrayEnd( + __in JSON_WRITER* pWriter + ); + +DAPI_(HRESULT) JsonWriteObjectStart( + __in JSON_WRITER* pWriter + ); + +DAPI_(HRESULT) JsonWriteObjectKey( + __in JSON_WRITER* pWriter, + __in_z LPCWSTR wzKey + ); + +DAPI_(HRESULT) JsonWriteObjectEnd( + __in JSON_WRITER* pWriter + ); + +#ifdef __cplusplus +} +#endif diff --git a/msi/build/A2Staging/wix35-binaries/sdk/inc/locutil.h b/msi/build/A2Staging/wix35-binaries/sdk/inc/locutil.h index 2a8875af23..d69f305a48 100644 --- a/msi/build/A2Staging/wix35-binaries/sdk/inc/locutil.h +++ b/msi/build/A2Staging/wix35-binaries/sdk/inc/locutil.h @@ -1,53 +1,53 @@ -//------------------------------------------------------------------------------------------------- -// -// Copyright (c) Microsoft Corporation. All rights reserved. -// -// The use and distribution terms for this software are covered by the -// Common Public License 1.0 (http://opensource.org/licenses/cpl1.0.php) -// which can be found in the file CPL.TXT at the root of this distribution. -// By using this software in any fashion, you are agreeing to be bound by -// the terms of this license. -// -// You must not remove this notice, or any other, from this software. -// -// -// -// Header for localization helper functions. -// -//------------------------------------------------------------------------------------------------- -#pragma once - -#ifdef __cplusplus -extern "C" { -#endif - -struct LOC_STRING -{ - LPWSTR wzID; - LPWSTR wzText; - BOOL bOverridable; -}; - -struct LOC_STRINGSET -{ - DWORD cLocStrings; - LOC_STRING* rgLocStrings; -}; - -HRESULT DAPI LocLoadFromFile( - __in_z LPCWSTR wzWxlFile, - __out LOC_STRINGSET** ppLocStringSet - ); - -HRESULT DAPI LocLocalizeString( - __in const LOC_STRINGSET* pLocStringSet, - __inout LPWSTR* ppInput - ); - -void DAPI LocFree( - __in_opt LOC_STRINGSET* pLocStringSet - ); - -#ifdef __cplusplus -} -#endif +//------------------------------------------------------------------------------------------------- +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// The use and distribution terms for this software are covered by the +// Common Public License 1.0 (http://opensource.org/licenses/cpl1.0.php) +// which can be found in the file CPL.TXT at the root of this distribution. +// By using this software in any fashion, you are agreeing to be bound by +// the terms of this license. +// +// You must not remove this notice, or any other, from this software. +// +// +// +// Header for localization helper functions. +// +//------------------------------------------------------------------------------------------------- +#pragma once + +#ifdef __cplusplus +extern "C" { +#endif + +struct LOC_STRING +{ + LPWSTR wzID; + LPWSTR wzText; + BOOL bOverridable; +}; + +struct LOC_STRINGSET +{ + DWORD cLocStrings; + LOC_STRING* rgLocStrings; +}; + +HRESULT DAPI LocLoadFromFile( + __in_z LPCWSTR wzWxlFile, + __out LOC_STRINGSET** ppLocStringSet + ); + +HRESULT DAPI LocLocalizeString( + __in const LOC_STRINGSET* pLocStringSet, + __inout LPWSTR* ppInput + ); + +void DAPI LocFree( + __in_opt LOC_STRINGSET* pLocStringSet + ); + +#ifdef __cplusplus +} +#endif diff --git a/msi/build/A2Staging/wix35-binaries/sdk/inc/logutil.h b/msi/build/A2Staging/wix35-binaries/sdk/inc/logutil.h index 27a4c75094..bf5f15cf42 100644 --- a/msi/build/A2Staging/wix35-binaries/sdk/inc/logutil.h +++ b/msi/build/A2Staging/wix35-binaries/sdk/inc/logutil.h @@ -1,182 +1,182 @@ -#pragma once -//------------------------------------------------------------------------------------------------- -// -// Copyright (c) Microsoft Corporation. All rights reserved. -// -// The use and distribution terms for this software are covered by the -// Common Public License 1.0 (http://opensource.org/licenses/cpl1.0.php) -// which can be found in the file CPL.TXT at the root of this distribution. -// By using this software in any fashion, you are agreeing to be bound by -// the terms of this license. -// -// You must not remove this notice, or any other, from this software. -// -// -// -// Header for string helper functions. -// -//------------------------------------------------------------------------------------------------- - -#ifdef __cplusplus -extern "C" { -#endif - -#define LogExitOnFailure(x, i, f) if (FAILED(x)) { LogErrorId(x, i, NULL, NULL, NULL); ExitTrace(x, f); goto LExit; } -#define LogExitOnFailure1(x, i, f, s) if (FAILED(x)) { LogErrorId(x, i, s, NULL, NULL); ExitTrace1(x, f, s); goto LExit; } -#define LogExitOnFailure2(x, i, f, s, t) if (FAILED(x)) { LogErrorId(x, i, s, t, NULL); ExitTrace2(x, f, s, t); goto LExit; } -#define LogExitOnFailure3(x, i, f, s, t, u) if (FAILED(x)) { LogErrorId(x, i, s, t, u); ExitTrace3(x, f, s, t, u); goto LExit; } - -// enums - -// structs - -// functions -BOOL DAPI IsLogInitialized(); - -HRESULT DAPI LogInitialize( - __in HMODULE hModule, - __in_z LPCWSTR wzLog, - __in_z_opt LPCWSTR wzExt, - __in BOOL fAppend, - __in BOOL fHeader - ); - -HRESULT DAPI LogRename( - __in_z LPCWSTR wzNewPath - ); - -void DAPI LogUninitialize( - __in BOOL fFooter - ); - -BOOL DAPI LogIsOpen(); - -HRESULT DAPI LogSetSpecialParams( - __in_z LPCSTR wzSpecialBeginLine, - __in_z LPCSTR wzSpecialAfterTimeStamp, - __in_z LPCSTR wzSpecialEndLine - ); - -REPORT_LEVEL DAPI LogSetLevel( - __in REPORT_LEVEL rl, - __in BOOL fLogChange - ); - -REPORT_LEVEL DAPI LogGetLevel(); - -HRESULT DAPI LogGetPath( - __out_ecount_z(cchLogPath) LPWSTR pwzLogPath, - __in DWORD cchLogPath - ); - -HANDLE DAPI LogGetHandle(); - -HRESULT DAPIV LogString( - __in REPORT_LEVEL rl, - __in_z __format_string LPCSTR szFormat, - ... - ); - -HRESULT DAPI LogStringArgs( - __in REPORT_LEVEL rl, - __in_z __format_string LPCSTR szFormat, - __in va_list args - ); - -HRESULT DAPIV LogStringLine( - __in REPORT_LEVEL rl, - __in_z __format_string LPCSTR szFormat, - ... - ); - -HRESULT DAPI LogStringLineArgs( - __in REPORT_LEVEL rl, - __in_z __format_string LPCSTR szFormat, - __in va_list args - ); - -HRESULT DAPI LogIdModuleArgs( - __in REPORT_LEVEL rl, - __in DWORD dwLogId, - __in_opt HMODULE hModule, - __in va_list args - ); - -/* - * Wraps LogIdModuleArgs, so inline to save the function call - */ - -inline HRESULT LogId( - __in REPORT_LEVEL rl, - __in DWORD dwLogId, - ... - ) -{ - HRESULT hr = S_OK; - va_list args; - - va_start(args, dwLogId); - hr = LogIdModuleArgs(rl, dwLogId, NULL, args); - va_end(args); - - return hr; -} - - -/* - * Wraps LogIdModuleArgs, so inline to save the function call - */ - -inline HRESULT LogIdArgs( - __in REPORT_LEVEL rl, - __in DWORD dwLogId, - __in va_list args - ) -{ - return LogIdModuleArgs(rl, dwLogId, NULL, args); -} - -HRESULT DAPIV LogErrorString( - __in HRESULT hrError, - __in_z __format_string LPCSTR szFormat, - ... - ); - -HRESULT DAPI LogErrorStringArgs( - __in HRESULT hrError, - __in_z __format_string LPCSTR szFormat, - __in va_list args - ); - -HRESULT DAPI LogErrorIdModule( - __in HRESULT hrError, - __in DWORD dwLogId, - __in_opt HMODULE hModule, - __in_z_opt LPCWSTR wzString1, - __in_z_opt LPCWSTR wzString2, - __in_z_opt LPCWSTR wzString3 - ); - -inline HRESULT LogErrorId( - __in HRESULT hrError, - __in DWORD dwLogId, - __in_z_opt LPCWSTR wzString1, - __in_z_opt LPCWSTR wzString2, - __in_z_opt LPCWSTR wzString3 - ) -{ - return LogErrorIdModule(hrError, dwLogId, NULL, wzString1, wzString2, wzString3); -} - -HRESULT DAPI LogHeader(); - -HRESULT DAPI LogFooter(); - -// begin the switch of LogXXX to LogStringXXX -#define Log LogString -#define LogLine LogStringLine - -#ifdef __cplusplus -} -#endif - +#pragma once +//------------------------------------------------------------------------------------------------- +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// The use and distribution terms for this software are covered by the +// Common Public License 1.0 (http://opensource.org/licenses/cpl1.0.php) +// which can be found in the file CPL.TXT at the root of this distribution. +// By using this software in any fashion, you are agreeing to be bound by +// the terms of this license. +// +// You must not remove this notice, or any other, from this software. +// +// +// +// Header for string helper functions. +// +//------------------------------------------------------------------------------------------------- + +#ifdef __cplusplus +extern "C" { +#endif + +#define LogExitOnFailure(x, i, f) if (FAILED(x)) { LogErrorId(x, i, NULL, NULL, NULL); ExitTrace(x, f); goto LExit; } +#define LogExitOnFailure1(x, i, f, s) if (FAILED(x)) { LogErrorId(x, i, s, NULL, NULL); ExitTrace1(x, f, s); goto LExit; } +#define LogExitOnFailure2(x, i, f, s, t) if (FAILED(x)) { LogErrorId(x, i, s, t, NULL); ExitTrace2(x, f, s, t); goto LExit; } +#define LogExitOnFailure3(x, i, f, s, t, u) if (FAILED(x)) { LogErrorId(x, i, s, t, u); ExitTrace3(x, f, s, t, u); goto LExit; } + +// enums + +// structs + +// functions +BOOL DAPI IsLogInitialized(); + +HRESULT DAPI LogInitialize( + __in HMODULE hModule, + __in_z LPCWSTR wzLog, + __in_z_opt LPCWSTR wzExt, + __in BOOL fAppend, + __in BOOL fHeader + ); + +HRESULT DAPI LogRename( + __in_z LPCWSTR wzNewPath + ); + +void DAPI LogUninitialize( + __in BOOL fFooter + ); + +BOOL DAPI LogIsOpen(); + +HRESULT DAPI LogSetSpecialParams( + __in_z LPCSTR wzSpecialBeginLine, + __in_z LPCSTR wzSpecialAfterTimeStamp, + __in_z LPCSTR wzSpecialEndLine + ); + +REPORT_LEVEL DAPI LogSetLevel( + __in REPORT_LEVEL rl, + __in BOOL fLogChange + ); + +REPORT_LEVEL DAPI LogGetLevel(); + +HRESULT DAPI LogGetPath( + __out_ecount_z(cchLogPath) LPWSTR pwzLogPath, + __in DWORD cchLogPath + ); + +HANDLE DAPI LogGetHandle(); + +HRESULT DAPIV LogString( + __in REPORT_LEVEL rl, + __in_z __format_string LPCSTR szFormat, + ... + ); + +HRESULT DAPI LogStringArgs( + __in REPORT_LEVEL rl, + __in_z __format_string LPCSTR szFormat, + __in va_list args + ); + +HRESULT DAPIV LogStringLine( + __in REPORT_LEVEL rl, + __in_z __format_string LPCSTR szFormat, + ... + ); + +HRESULT DAPI LogStringLineArgs( + __in REPORT_LEVEL rl, + __in_z __format_string LPCSTR szFormat, + __in va_list args + ); + +HRESULT DAPI LogIdModuleArgs( + __in REPORT_LEVEL rl, + __in DWORD dwLogId, + __in_opt HMODULE hModule, + __in va_list args + ); + +/* + * Wraps LogIdModuleArgs, so inline to save the function call + */ + +inline HRESULT LogId( + __in REPORT_LEVEL rl, + __in DWORD dwLogId, + ... + ) +{ + HRESULT hr = S_OK; + va_list args; + + va_start(args, dwLogId); + hr = LogIdModuleArgs(rl, dwLogId, NULL, args); + va_end(args); + + return hr; +} + + +/* + * Wraps LogIdModuleArgs, so inline to save the function call + */ + +inline HRESULT LogIdArgs( + __in REPORT_LEVEL rl, + __in DWORD dwLogId, + __in va_list args + ) +{ + return LogIdModuleArgs(rl, dwLogId, NULL, args); +} + +HRESULT DAPIV LogErrorString( + __in HRESULT hrError, + __in_z __format_string LPCSTR szFormat, + ... + ); + +HRESULT DAPI LogErrorStringArgs( + __in HRESULT hrError, + __in_z __format_string LPCSTR szFormat, + __in va_list args + ); + +HRESULT DAPI LogErrorIdModule( + __in HRESULT hrError, + __in DWORD dwLogId, + __in_opt HMODULE hModule, + __in_z_opt LPCWSTR wzString1, + __in_z_opt LPCWSTR wzString2, + __in_z_opt LPCWSTR wzString3 + ); + +inline HRESULT LogErrorId( + __in HRESULT hrError, + __in DWORD dwLogId, + __in_z_opt LPCWSTR wzString1, + __in_z_opt LPCWSTR wzString2, + __in_z_opt LPCWSTR wzString3 + ) +{ + return LogErrorIdModule(hrError, dwLogId, NULL, wzString1, wzString2, wzString3); +} + +HRESULT DAPI LogHeader(); + +HRESULT DAPI LogFooter(); + +// begin the switch of LogXXX to LogStringXXX +#define Log LogString +#define LogLine LogStringLine + +#ifdef __cplusplus +} +#endif + diff --git a/msi/build/A2Staging/wix35-binaries/sdk/inc/memutil.h b/msi/build/A2Staging/wix35-binaries/sdk/inc/memutil.h index a9110ec5e2..b41a07cf00 100644 --- a/msi/build/A2Staging/wix35-binaries/sdk/inc/memutil.h +++ b/msi/build/A2Staging/wix35-binaries/sdk/inc/memutil.h @@ -1,65 +1,65 @@ -#pragma once -//------------------------------------------------------------------------------------------------- -// -// Copyright (c) Microsoft Corporation. All rights reserved. -// -// The use and distribution terms for this software are covered by the -// Common Public License 1.0 (http://opensource.org/licenses/cpl1.0.php) -// which can be found in the file CPL.TXT at the root of this distribution. -// By using this software in any fashion, you are agreeing to be bound by -// the terms of this license. -// -// You must not remove this notice, or any other, from this software. -// -// -// -// Header for memory helper functions. -// -//------------------------------------------------------------------------------------------------- - -#ifdef __cplusplus -extern "C" { -#endif - -#define ReleaseMem(p) if (p) { MemFree(p); } -#define ReleaseNullMem(p) if (p) { MemFree(p); p = NULL; } - -#define MEM_ENSURE_ARRAY_SIZE(type, pointer, count, max, grow, hresult, errMsg) \ - if (max <= count) { \ - LPVOID pv = NULL; DWORD cNewMax = count + grow; \ - if (0 == max) pv = MemAlloc(sizeof(type) * cNewMax, TRUE); else pv = MemReAlloc(pointer, sizeof(type) * cNewMax, TRUE); \ - ExitOnNull(pv, hresult, E_OUTOFMEMORY, errMsg); \ - max = cNewMax; pointer = static_cast(pv); \ - } - -HRESULT DAPI MemInitialize(); -void DAPI MemUninitialize(); - -LPVOID DAPI MemAlloc( - __in SIZE_T cbSize, - __in BOOL fZero - ); -LPVOID DAPI MemReAlloc( - __in LPVOID pv, - __in SIZE_T cbSize, - __in BOOL fZero - ); - -HRESULT DAPI MemEnsureArraySize( - __inout_ecount(cArray) LPVOID* ppvArray, - __in DWORD cArray, - __in SIZE_T cbArrayType, - __in DWORD dwGrowthCount - ); - -HRESULT DAPI MemFree( - __in LPVOID pv - ); -SIZE_T DAPI MemSize( - __in LPCVOID pv - ); - -#ifdef __cplusplus -} -#endif - +#pragma once +//------------------------------------------------------------------------------------------------- +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// The use and distribution terms for this software are covered by the +// Common Public License 1.0 (http://opensource.org/licenses/cpl1.0.php) +// which can be found in the file CPL.TXT at the root of this distribution. +// By using this software in any fashion, you are agreeing to be bound by +// the terms of this license. +// +// You must not remove this notice, or any other, from this software. +// +// +// +// Header for memory helper functions. +// +//------------------------------------------------------------------------------------------------- + +#ifdef __cplusplus +extern "C" { +#endif + +#define ReleaseMem(p) if (p) { MemFree(p); } +#define ReleaseNullMem(p) if (p) { MemFree(p); p = NULL; } + +#define MEM_ENSURE_ARRAY_SIZE(type, pointer, count, max, grow, hresult, errMsg) \ + if (max <= count) { \ + LPVOID pv = NULL; DWORD cNewMax = count + grow; \ + if (0 == max) pv = MemAlloc(sizeof(type) * cNewMax, TRUE); else pv = MemReAlloc(pointer, sizeof(type) * cNewMax, TRUE); \ + ExitOnNull(pv, hresult, E_OUTOFMEMORY, errMsg); \ + max = cNewMax; pointer = static_cast(pv); \ + } + +HRESULT DAPI MemInitialize(); +void DAPI MemUninitialize(); + +LPVOID DAPI MemAlloc( + __in SIZE_T cbSize, + __in BOOL fZero + ); +LPVOID DAPI MemReAlloc( + __in LPVOID pv, + __in SIZE_T cbSize, + __in BOOL fZero + ); + +HRESULT DAPI MemEnsureArraySize( + __inout_ecount(cArray) LPVOID* ppvArray, + __in DWORD cArray, + __in SIZE_T cbArrayType, + __in DWORD dwGrowthCount + ); + +HRESULT DAPI MemFree( + __in LPVOID pv + ); +SIZE_T DAPI MemSize( + __in LPCVOID pv + ); + +#ifdef __cplusplus +} +#endif + diff --git a/msi/build/A2Staging/wix35-binaries/sdk/inc/metautil.h b/msi/build/A2Staging/wix35-binaries/sdk/inc/metautil.h index e8046ce7dc..e594760c35 100644 --- a/msi/build/A2Staging/wix35-binaries/sdk/inc/metautil.h +++ b/msi/build/A2Staging/wix35-binaries/sdk/inc/metautil.h @@ -1,67 +1,67 @@ -#pragma once -//------------------------------------------------------------------------------------------------- -// -// Copyright (c) Microsoft Corporation. All rights reserved. -// -// The use and distribution terms for this software are covered by the -// Common Public License 1.0 (http://opensource.org/licenses/cpl1.0.php) -// which can be found in the file CPL.TXT at the root of this distribution. -// By using this software in any fashion, you are agreeing to be bound by -// the terms of this license. -// -// You must not remove this notice, or any other, from this software. -// -// -// -// IIS Metabase helper functions. -// -//------------------------------------------------------------------------------------------------- - -#include -#include -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -// structs - -// prototypes -HRESULT DAPI MetaFindWebBase( - __in IMSAdminBaseW* piMetabase, - __in_z LPCWSTR wzIP, - __in int iPort, - __in_z LPCWSTR wzHeader, - __in BOOL fSecure, - __out_ecount(cchWebBase) LPWSTR wzWebBase, - __in DWORD cchWebBase - ); -HRESULT DAPI MetaFindFreeWebBase( - __in IMSAdminBaseW* piMetabase, - __out_ecount(cchWebBase) LPWSTR wzWebBase, - __in DWORD cchWebBase - ); - -HRESULT DAPI MetaOpenKey( - __in IMSAdminBaseW* piMetabase, - __in METADATA_HANDLE mhKey, - __in_z LPCWSTR wzKey, - __in DWORD dwAccess, - __in DWORD cRetries, - __out METADATA_HANDLE* pmh - ); -HRESULT DAPI MetaGetValue( - __in IMSAdminBaseW* piMetabase, - __in METADATA_HANDLE mhKey, - __in_z LPCWSTR wzKey, - __inout METADATA_RECORD* pmr - ); -void DAPI MetaFreeValue( - __in METADATA_RECORD* pmr - ); - -#ifdef __cplusplus -} -#endif +#pragma once +//------------------------------------------------------------------------------------------------- +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// The use and distribution terms for this software are covered by the +// Common Public License 1.0 (http://opensource.org/licenses/cpl1.0.php) +// which can be found in the file CPL.TXT at the root of this distribution. +// By using this software in any fashion, you are agreeing to be bound by +// the terms of this license. +// +// You must not remove this notice, or any other, from this software. +// +// +// +// IIS Metabase helper functions. +// +//------------------------------------------------------------------------------------------------- + +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +// structs + +// prototypes +HRESULT DAPI MetaFindWebBase( + __in IMSAdminBaseW* piMetabase, + __in_z LPCWSTR wzIP, + __in int iPort, + __in_z LPCWSTR wzHeader, + __in BOOL fSecure, + __out_ecount(cchWebBase) LPWSTR wzWebBase, + __in DWORD cchWebBase + ); +HRESULT DAPI MetaFindFreeWebBase( + __in IMSAdminBaseW* piMetabase, + __out_ecount(cchWebBase) LPWSTR wzWebBase, + __in DWORD cchWebBase + ); + +HRESULT DAPI MetaOpenKey( + __in IMSAdminBaseW* piMetabase, + __in METADATA_HANDLE mhKey, + __in_z LPCWSTR wzKey, + __in DWORD dwAccess, + __in DWORD cRetries, + __out METADATA_HANDLE* pmh + ); +HRESULT DAPI MetaGetValue( + __in IMSAdminBaseW* piMetabase, + __in METADATA_HANDLE mhKey, + __in_z LPCWSTR wzKey, + __inout METADATA_RECORD* pmr + ); +void DAPI MetaFreeValue( + __in METADATA_RECORD* pmr + ); + +#ifdef __cplusplus +} +#endif diff --git a/msi/build/A2Staging/wix35-binaries/sdk/inc/osutil.h b/msi/build/A2Staging/wix35-binaries/sdk/inc/osutil.h index 81a62f7dec..785e4abce4 100644 --- a/msi/build/A2Staging/wix35-binaries/sdk/inc/osutil.h +++ b/msi/build/A2Staging/wix35-binaries/sdk/inc/osutil.h @@ -1,48 +1,48 @@ -#pragma once -//------------------------------------------------------------------------------------------------- -// -// Copyright (c) Microsoft Corporation. All rights reserved. -// -// The use and distribution terms for this software are covered by the -// Common Public License 1.0 (http://opensource.org/licenses/cpl1.0.php) -// which can be found in the file CPL.TXT at the root of this distribution. -// By using this software in any fashion, you are agreeing to be bound by -// the terms of this license. -// -// You must not remove this notice, or any other, from this software. -// -// -// -// Operating system helper functions. -// -//------------------------------------------------------------------------------------------------- - -#ifdef __cplusplus -extern "C" { -#endif - -enum OS_VERSION -{ - OS_VERSION_UNKNOWN, - OS_VERSION_WINNT, - OS_VERSION_WIN2000, - OS_VERSION_WINXP, - OS_VERSION_WIN2003, - OS_VERSION_VISTA, - OS_VERSION_WIN2008, - OS_VERSION_WIN7, - OS_VERSION_WIN2008_R2, - OS_VERSION_FUTURE -}; - -void DAPI OsGetVersion( - __out OS_VERSION* pVersion, - __out DWORD* pdwServicePack - ); -HRESULT OsIsRunningPrivileged( - __out BOOL* pfPrivileged - ); - -#ifdef __cplusplus -} -#endif +#pragma once +//------------------------------------------------------------------------------------------------- +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// The use and distribution terms for this software are covered by the +// Common Public License 1.0 (http://opensource.org/licenses/cpl1.0.php) +// which can be found in the file CPL.TXT at the root of this distribution. +// By using this software in any fashion, you are agreeing to be bound by +// the terms of this license. +// +// You must not remove this notice, or any other, from this software. +// +// +// +// Operating system helper functions. +// +//------------------------------------------------------------------------------------------------- + +#ifdef __cplusplus +extern "C" { +#endif + +enum OS_VERSION +{ + OS_VERSION_UNKNOWN, + OS_VERSION_WINNT, + OS_VERSION_WIN2000, + OS_VERSION_WINXP, + OS_VERSION_WIN2003, + OS_VERSION_VISTA, + OS_VERSION_WIN2008, + OS_VERSION_WIN7, + OS_VERSION_WIN2008_R2, + OS_VERSION_FUTURE +}; + +void DAPI OsGetVersion( + __out OS_VERSION* pVersion, + __out DWORD* pdwServicePack + ); +HRESULT OsIsRunningPrivileged( + __out BOOL* pfPrivileged + ); + +#ifdef __cplusplus +} +#endif diff --git a/msi/build/A2Staging/wix35-binaries/sdk/inc/pathutil.h b/msi/build/A2Staging/wix35-binaries/sdk/inc/pathutil.h index eceb4785e2..f886c997f0 100644 --- a/msi/build/A2Staging/wix35-binaries/sdk/inc/pathutil.h +++ b/msi/build/A2Staging/wix35-binaries/sdk/inc/pathutil.h @@ -1,90 +1,90 @@ -#pragma once -//------------------------------------------------------------------------------------------------- -// -// Copyright (c) Microsoft Corporation. All rights reserved. -// -// The use and distribution terms for this software are covered by the -// Common Public License 1.0 (http://opensource.org/licenses/cpl1.0.php) -// which can be found in the file CPL.TXT at the root of this distribution. -// By using this software in any fashion, you are agreeing to be bound by -// the terms of this license. -// -// You must not remove this notice, or any other, from this software. -// -// -// -// Header for path helper functions. -// -//------------------------------------------------------------------------------------------------- - -#ifdef __cplusplus -extern "C" { -#endif - -enum PATH_EXPAND -{ - PATH_EXPAND_ENVIRONMENT = 0x0001, - PATH_EXPAND_FULLPATH = 0x0002, -}; - -LPWSTR DAPI PathFile( - __in_z LPCWSTR wzPath - ); -HRESULT DAPI PathGetDirectory( - __in_z LPCWSTR wzPath, - __out LPWSTR *psczDirectory - ); -HRESULT DAPI PathExpand( - __out LPWSTR *psczFullPath, - __in_z LPCWSTR wzRelativePath, - __in DWORD dwResolveFlags - ); -HRESULT DAPI PathPrefix( - __inout LPWSTR *psczFullPath - ); -HRESULT DAPI PathBackslashTerminate( - __inout LPWSTR* psczPath - ); -HRESULT DAPI PathFixedBackslashTerminate( - __inout_ecount_z(cchPath) LPWSTR wzPath, - __in DWORD_PTR cchPath - ); -HRESULT DAPI PathForCurrentProcess( - __inout LPWSTR *psczFullPath, - __in_opt HMODULE hModule - ); -HRESULT DAPI PathRelativeToModule( - __inout LPWSTR *psczFullPath, - __in_opt LPCWSTR wzFileName, - __in_opt HMODULE hModule - ); -HRESULT DAPI PathCreateTempFile( - __in_opt LPCWSTR wzDirectory, - __in_opt __format_string LPCWSTR wzFileNameTemplate, - __in DWORD dwUniqueCount, - __in DWORD dwFileAttributes, - __out_opt LPWSTR* psczTempFile, - __out_opt HANDLE* phTempFile - ); -HRESULT DAPI PathCreateTempDirectory( - __in_opt LPCWSTR wzDirectory, - __in __format_string LPCWSTR wzDirectoryNameTemplate, - __in DWORD dwUniqueCount, - __out LPWSTR* psczTempDirectory - ); -HRESULT DAPI PathGetKnownFolder( - __in int csidl, - __out LPWSTR* psczKnownFolder - ); -BOOL DAPI PathIsAbsolute( - __in_z LPCWSTR wzPath - ); -HRESULT DAPI PathConcat( - __in_opt LPCWSTR wzPath1, - __in_opt LPCWSTR wzPath2, - __deref_out_z LPWSTR* psczCombined - ); - -#ifdef __cplusplus -} -#endif +#pragma once +//------------------------------------------------------------------------------------------------- +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// The use and distribution terms for this software are covered by the +// Common Public License 1.0 (http://opensource.org/licenses/cpl1.0.php) +// which can be found in the file CPL.TXT at the root of this distribution. +// By using this software in any fashion, you are agreeing to be bound by +// the terms of this license. +// +// You must not remove this notice, or any other, from this software. +// +// +// +// Header for path helper functions. +// +//------------------------------------------------------------------------------------------------- + +#ifdef __cplusplus +extern "C" { +#endif + +enum PATH_EXPAND +{ + PATH_EXPAND_ENVIRONMENT = 0x0001, + PATH_EXPAND_FULLPATH = 0x0002, +}; + +LPWSTR DAPI PathFile( + __in_z LPCWSTR wzPath + ); +HRESULT DAPI PathGetDirectory( + __in_z LPCWSTR wzPath, + __out LPWSTR *psczDirectory + ); +HRESULT DAPI PathExpand( + __out LPWSTR *psczFullPath, + __in_z LPCWSTR wzRelativePath, + __in DWORD dwResolveFlags + ); +HRESULT DAPI PathPrefix( + __inout LPWSTR *psczFullPath + ); +HRESULT DAPI PathBackslashTerminate( + __inout LPWSTR* psczPath + ); +HRESULT DAPI PathFixedBackslashTerminate( + __inout_ecount_z(cchPath) LPWSTR wzPath, + __in DWORD_PTR cchPath + ); +HRESULT DAPI PathForCurrentProcess( + __inout LPWSTR *psczFullPath, + __in_opt HMODULE hModule + ); +HRESULT DAPI PathRelativeToModule( + __inout LPWSTR *psczFullPath, + __in_opt LPCWSTR wzFileName, + __in_opt HMODULE hModule + ); +HRESULT DAPI PathCreateTempFile( + __in_opt LPCWSTR wzDirectory, + __in_opt __format_string LPCWSTR wzFileNameTemplate, + __in DWORD dwUniqueCount, + __in DWORD dwFileAttributes, + __out_opt LPWSTR* psczTempFile, + __out_opt HANDLE* phTempFile + ); +HRESULT DAPI PathCreateTempDirectory( + __in_opt LPCWSTR wzDirectory, + __in __format_string LPCWSTR wzDirectoryNameTemplate, + __in DWORD dwUniqueCount, + __out LPWSTR* psczTempDirectory + ); +HRESULT DAPI PathGetKnownFolder( + __in int csidl, + __out LPWSTR* psczKnownFolder + ); +BOOL DAPI PathIsAbsolute( + __in_z LPCWSTR wzPath + ); +HRESULT DAPI PathConcat( + __in_opt LPCWSTR wzPath1, + __in_opt LPCWSTR wzPath2, + __deref_out_z LPWSTR* psczCombined + ); + +#ifdef __cplusplus +} +#endif diff --git a/msi/build/A2Staging/wix35-binaries/sdk/inc/perfutil.h b/msi/build/A2Staging/wix35-binaries/sdk/inc/perfutil.h index 3a3f0723dc..9c7c87a1c6 100644 --- a/msi/build/A2Staging/wix35-binaries/sdk/inc/perfutil.h +++ b/msi/build/A2Staging/wix35-binaries/sdk/inc/perfutil.h @@ -1,39 +1,39 @@ -#pragma once -//------------------------------------------------------------------------------------------------- -// -// Copyright (c) Microsoft Corporation. All rights reserved. -// -// The use and distribution terms for this software are covered by the -// Common Public License 1.0 (http://opensource.org/licenses/cpl1.0.php) -// which can be found in the file CPL.TXT at the root of this distribution. -// By using this software in any fashion, you are agreeing to be bound by -// the terms of this license. -// -// You must not remove this notice, or any other, from this software. -// -// -// -// Performance helper functions. -// -//------------------------------------------------------------------------------------------------- - -#ifdef __cplusplus -extern "C" { -#endif - -// structs - - -// functions -void DAPI PerfInitialize( - ); -void DAPI PerfClickTime( - __out_opt LARGE_INTEGER* pliElapsed - ); -double DAPI PerfConvertToSeconds( - __in const LARGE_INTEGER* pli - ); - -#ifdef __cplusplus -} -#endif +#pragma once +//------------------------------------------------------------------------------------------------- +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// The use and distribution terms for this software are covered by the +// Common Public License 1.0 (http://opensource.org/licenses/cpl1.0.php) +// which can be found in the file CPL.TXT at the root of this distribution. +// By using this software in any fashion, you are agreeing to be bound by +// the terms of this license. +// +// You must not remove this notice, or any other, from this software. +// +// +// +// Performance helper functions. +// +//------------------------------------------------------------------------------------------------- + +#ifdef __cplusplus +extern "C" { +#endif + +// structs + + +// functions +void DAPI PerfInitialize( + ); +void DAPI PerfClickTime( + __out_opt LARGE_INTEGER* pliElapsed + ); +double DAPI PerfConvertToSeconds( + __in const LARGE_INTEGER* pli + ); + +#ifdef __cplusplus +} +#endif diff --git a/msi/build/A2Staging/wix35-binaries/sdk/inc/procutil.h b/msi/build/A2Staging/wix35-binaries/sdk/inc/procutil.h index 3d5d3bda9d..007dd3ec44 100644 --- a/msi/build/A2Staging/wix35-binaries/sdk/inc/procutil.h +++ b/msi/build/A2Staging/wix35-binaries/sdk/inc/procutil.h @@ -1,54 +1,54 @@ -#pragma once -//------------------------------------------------------------------------------------------------- -// -// Copyright (c) Microsoft Corporation. All rights reserved. -// -// The use and distribution terms for this software are covered by the -// Common Public License 1.0 (http://opensource.org/licenses/cpl1.0.php) -// which can be found in the file CPL.TXT at the root of this distribution. -// By using this software in any fashion, you are agreeing to be bound by -// the terms of this license. -// -// You must not remove this notice, or any other, from this software. -// -// -// -// Header for proces helper functions. -// -//------------------------------------------------------------------------------------------------- - -#ifdef __cplusplus -extern "C" { -#endif - -HRESULT DAPI ProcExecute( - __in_z LPWSTR wzCommand, - __out HANDLE *phProcess, - __out_opt HANDLE *phChildStdIn, - __out_opt HANDLE *phChildStdOutErr - ); -HRESULT DAPI ProcWaitForCompletion( - __in HANDLE hProcess, - __in DWORD dwTimeout, - __out DWORD *pReturnCode - ); -HRESULT DAPI ProcWaitForIds( - __in_ecount(cProcessIds) const DWORD* pdwProcessIds, - __in DWORD cProcessIds, - __in DWORD dwMilliseconds - ); -HRESULT DAPI ProcCloseIds( - __in_ecount(cProcessIds) const DWORD* pdwProcessIds, - __in DWORD cProcessIds - ); - -// following code in proc2utl.cpp due to dependency on PSAPI.DLL. -HRESULT DAPI ProcFindAllIdsFromExeName( - __in_z LPCWSTR wzExeName, - __out DWORD** ppdwProcessIds, - __out DWORD* pcProcessIds - ); - -#ifdef __cplusplus -} -#endif +#pragma once +//------------------------------------------------------------------------------------------------- +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// The use and distribution terms for this software are covered by the +// Common Public License 1.0 (http://opensource.org/licenses/cpl1.0.php) +// which can be found in the file CPL.TXT at the root of this distribution. +// By using this software in any fashion, you are agreeing to be bound by +// the terms of this license. +// +// You must not remove this notice, or any other, from this software. +// +// +// +// Header for proces helper functions. +// +//------------------------------------------------------------------------------------------------- + +#ifdef __cplusplus +extern "C" { +#endif + +HRESULT DAPI ProcExecute( + __in_z LPWSTR wzCommand, + __out HANDLE *phProcess, + __out_opt HANDLE *phChildStdIn, + __out_opt HANDLE *phChildStdOutErr + ); +HRESULT DAPI ProcWaitForCompletion( + __in HANDLE hProcess, + __in DWORD dwTimeout, + __out DWORD *pReturnCode + ); +HRESULT DAPI ProcWaitForIds( + __in_ecount(cProcessIds) const DWORD* pdwProcessIds, + __in DWORD cProcessIds, + __in DWORD dwMilliseconds + ); +HRESULT DAPI ProcCloseIds( + __in_ecount(cProcessIds) const DWORD* pdwProcessIds, + __in DWORD cProcessIds + ); + +// following code in proc2utl.cpp due to dependency on PSAPI.DLL. +HRESULT DAPI ProcFindAllIdsFromExeName( + __in_z LPCWSTR wzExeName, + __out DWORD** ppdwProcessIds, + __out DWORD* pcProcessIds + ); + +#ifdef __cplusplus +} +#endif diff --git a/msi/build/A2Staging/wix35-binaries/sdk/inc/regutil.h b/msi/build/A2Staging/wix35-binaries/sdk/inc/regutil.h index f9f1276ce7..65f8b1f202 100644 --- a/msi/build/A2Staging/wix35-binaries/sdk/inc/regutil.h +++ b/msi/build/A2Staging/wix35-binaries/sdk/inc/regutil.h @@ -1,32 +1,32 @@ -//------------------------------------------------------------------------------------------------- -// -// Copyright (c) Microsoft Corporation. All rights reserved. -// -// The use and distribution terms for this software are covered by the -// Common Public License 1.0 (http://opensource.org/licenses/cpl1.0.php) -// which can be found in the file CPL.TXT at the root of this distribution. -// By using this software in any fashion, you are agreeing to be bound by -// the terms of this license. -// -// You must not remove this notice, or any other, from this software. -// -// -// -// Registry helper functions. -// -//------------------------------------------------------------------------------------------------- - -#pragma once - - -#ifdef __cplusplus -extern "C" { -#endif - -#define ReleaseRegKey(h) if (h) { ::RegCloseKey(h); h = NULL; } - - -#ifdef __cplusplus -} -#endif - +//------------------------------------------------------------------------------------------------- +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// The use and distribution terms for this software are covered by the +// Common Public License 1.0 (http://opensource.org/licenses/cpl1.0.php) +// which can be found in the file CPL.TXT at the root of this distribution. +// By using this software in any fashion, you are agreeing to be bound by +// the terms of this license. +// +// You must not remove this notice, or any other, from this software. +// +// +// +// Registry helper functions. +// +//------------------------------------------------------------------------------------------------- + +#pragma once + + +#ifdef __cplusplus +extern "C" { +#endif + +#define ReleaseRegKey(h) if (h) { ::RegCloseKey(h); h = NULL; } + + +#ifdef __cplusplus +} +#endif + diff --git a/msi/build/A2Staging/wix35-binaries/sdk/inc/resrutil.h b/msi/build/A2Staging/wix35-binaries/sdk/inc/resrutil.h index 79b1687b8c..1f1309975b 100644 --- a/msi/build/A2Staging/wix35-binaries/sdk/inc/resrutil.h +++ b/msi/build/A2Staging/wix35-binaries/sdk/inc/resrutil.h @@ -1,60 +1,60 @@ -//------------------------------------------------------------------------------------------------- -// -// Copyright (c) Microsoft Corporation. All rights reserved. -// -// The use and distribution terms for this software are covered by the -// Common Public License 1.0 (http://opensource.org/licenses/cpl1.0.php) -// which can be found in the file CPL.TXT at the root of this distribution. -// By using this software in any fashion, you are agreeing to be bound by -// the terms of this license. -// -// You must not remove this notice, or any other, from this software. -// -// -// -// Resource read helper functions. -// -//------------------------------------------------------------------------------------------------- - -#pragma once - - -#ifdef __cplusplus -extern "C" { -#endif - -HRESULT DAPI ResGetStringLangId( - __in_opt LPCWSTR wzPath, - __in UINT uID, - __out WORD *pwLangId - ); - -HRESULT DAPI ResReadString( - __in HINSTANCE hinst, - __in UINT uID, - __deref_out_z LPWSTR* ppwzString - ); - -HRESULT DAPI ResReadStringAnsi( - __in HINSTANCE hinst, - __in UINT uID, - __deref_out_z LPSTR* ppszString - ); - -HRESULT DAPI ResReadData( - __in_opt HINSTANCE hinst, - __in_z LPCSTR szDataName, - __deref_out_bcount(*pcb) PVOID *ppv, - __out DWORD *pcb - ); - -HRESULT DAPI ResExportDataToFile( - __in_z LPCSTR szDataName, - __in_z LPCWSTR wzTargetFile, - __in DWORD dwCreationDisposition - ); - -#ifdef __cplusplus -} -#endif - +//------------------------------------------------------------------------------------------------- +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// The use and distribution terms for this software are covered by the +// Common Public License 1.0 (http://opensource.org/licenses/cpl1.0.php) +// which can be found in the file CPL.TXT at the root of this distribution. +// By using this software in any fashion, you are agreeing to be bound by +// the terms of this license. +// +// You must not remove this notice, or any other, from this software. +// +// +// +// Resource read helper functions. +// +//------------------------------------------------------------------------------------------------- + +#pragma once + + +#ifdef __cplusplus +extern "C" { +#endif + +HRESULT DAPI ResGetStringLangId( + __in_opt LPCWSTR wzPath, + __in UINT uID, + __out WORD *pwLangId + ); + +HRESULT DAPI ResReadString( + __in HINSTANCE hinst, + __in UINT uID, + __deref_out_z LPWSTR* ppwzString + ); + +HRESULT DAPI ResReadStringAnsi( + __in HINSTANCE hinst, + __in UINT uID, + __deref_out_z LPSTR* ppszString + ); + +HRESULT DAPI ResReadData( + __in_opt HINSTANCE hinst, + __in_z LPCSTR szDataName, + __deref_out_bcount(*pcb) PVOID *ppv, + __out DWORD *pcb + ); + +HRESULT DAPI ResExportDataToFile( + __in_z LPCSTR szDataName, + __in_z LPCWSTR wzTargetFile, + __in DWORD dwCreationDisposition + ); + +#ifdef __cplusplus +} +#endif + diff --git a/msi/build/A2Staging/wix35-binaries/sdk/inc/reswutil.h b/msi/build/A2Staging/wix35-binaries/sdk/inc/reswutil.h index d7a026771c..746c949fe6 100644 --- a/msi/build/A2Staging/wix35-binaries/sdk/inc/reswutil.h +++ b/msi/build/A2Staging/wix35-binaries/sdk/inc/reswutil.h @@ -1,48 +1,48 @@ -//------------------------------------------------------------------------------------------------- -// -// Copyright (c) Microsoft Corporation. All rights reserved. -// -// The use and distribution terms for this software are covered by the -// Common Public License 1.0 (http://opensource.org/licenses/cpl1.0.php) -// which can be found in the file CPL.TXT at the root of this distribution. -// By using this software in any fashion, you are agreeing to be bound by -// the terms of this license. -// -// You must not remove this notice, or any other, from this software. -// -// -// -// Resource writer helper functions. -// -//------------------------------------------------------------------------------------------------- - -#pragma once - - -#ifdef __cplusplus -extern "C" { -#endif - -HRESULT DAPI ResWriteString( - __in_z LPCWSTR wzResourceFile, - __in DWORD dwDataId, - __in_z LPCWSTR wzData, - __in WORD wLangId - ); - -HRESULT DAPI ResWriteData( - __in_z LPCWSTR wzResourceFile, - __in_z LPCSTR szDataName, - __in PVOID pData, - __in DWORD cbData - ); - -HRESULT DAPI ResImportDataFromFile( - __in_z LPCWSTR wzTargetFile, - __in_z LPCWSTR wzSourceFile, - __in_z LPCSTR szDataName - ); - -#ifdef __cplusplus -} -#endif +//------------------------------------------------------------------------------------------------- +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// The use and distribution terms for this software are covered by the +// Common Public License 1.0 (http://opensource.org/licenses/cpl1.0.php) +// which can be found in the file CPL.TXT at the root of this distribution. +// By using this software in any fashion, you are agreeing to be bound by +// the terms of this license. +// +// You must not remove this notice, or any other, from this software. +// +// +// +// Resource writer helper functions. +// +//------------------------------------------------------------------------------------------------- + +#pragma once + + +#ifdef __cplusplus +extern "C" { +#endif + +HRESULT DAPI ResWriteString( + __in_z LPCWSTR wzResourceFile, + __in DWORD dwDataId, + __in_z LPCWSTR wzData, + __in WORD wLangId + ); + +HRESULT DAPI ResWriteData( + __in_z LPCWSTR wzResourceFile, + __in_z LPCSTR szDataName, + __in PVOID pData, + __in DWORD cbData + ); + +HRESULT DAPI ResImportDataFromFile( + __in_z LPCWSTR wzTargetFile, + __in_z LPCWSTR wzSourceFile, + __in_z LPCSTR szDataName + ); + +#ifdef __cplusplus +} +#endif diff --git a/msi/build/A2Staging/wix35-binaries/sdk/inc/rexutil.h b/msi/build/A2Staging/wix35-binaries/sdk/inc/rexutil.h index a1a7d9d569..503a3c95b1 100644 --- a/msi/build/A2Staging/wix35-binaries/sdk/inc/rexutil.h +++ b/msi/build/A2Staging/wix35-binaries/sdk/inc/rexutil.h @@ -1,69 +1,69 @@ -#pragma once -//------------------------------------------------------------------------------------------------- -// -// Copyright (c) Microsoft Corporation. All rights reserved. -// -// The use and distribution terms for this software are covered by the -// Common Public License 1.0 (http://opensource.org/licenses/cpl1.0.php) -// which can be found in the file CPL.TXT at the root of this distribution. -// By using this software in any fashion, you are agreeing to be bound by -// the terms of this license. -// -// You must not remove this notice, or any other, from this software. -// -// -// -// Resource Cabinet Extract Utilities -// -//------------------------------------------------------------------------------------------------- - -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -// defines -#define FILETABLESIZE 40 - -// structs -struct MEM_FILE -{ - LPCBYTE vpStart; - UINT uiCurrent; - UINT uiLength; -}; - -enum FAKE_FILE_TYPE { NORMAL_FILE, MEMORY_FILE }; - -typedef HRESULT (*REX_CALLBACK_PROGRESS)(BOOL fBeginFile, LPCWSTR wzFileId, LPVOID pvContext); -typedef VOID (*REX_CALLBACK_WRITE)(UINT cb); - - -struct FAKE_FILE // used __in internal file table -{ - BOOL fUsed; - FAKE_FILE_TYPE fftType; - MEM_FILE mfFile; // State for memory file - HANDLE hFile; // Handle for disk file -}; - -// functions -HRESULT RexInitialize(); -void RexUninitialize(); - -HRESULT RexExtract( - __in_z LPCSTR szResource, - __in_z LPCWSTR wzExtractId, - __in_z LPCWSTR wzExtractDir, - __in_z LPCWSTR wzExtractName, - __in REX_CALLBACK_PROGRESS pfnProgress, - __in REX_CALLBACK_WRITE pfnWrite, - __in LPVOID pvContext - ); - -#ifdef __cplusplus -} -#endif - +#pragma once +//------------------------------------------------------------------------------------------------- +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// The use and distribution terms for this software are covered by the +// Common Public License 1.0 (http://opensource.org/licenses/cpl1.0.php) +// which can be found in the file CPL.TXT at the root of this distribution. +// By using this software in any fashion, you are agreeing to be bound by +// the terms of this license. +// +// You must not remove this notice, or any other, from this software. +// +// +// +// Resource Cabinet Extract Utilities +// +//------------------------------------------------------------------------------------------------- + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +// defines +#define FILETABLESIZE 40 + +// structs +struct MEM_FILE +{ + LPCBYTE vpStart; + UINT uiCurrent; + UINT uiLength; +}; + +enum FAKE_FILE_TYPE { NORMAL_FILE, MEMORY_FILE }; + +typedef HRESULT (*REX_CALLBACK_PROGRESS)(BOOL fBeginFile, LPCWSTR wzFileId, LPVOID pvContext); +typedef VOID (*REX_CALLBACK_WRITE)(UINT cb); + + +struct FAKE_FILE // used __in internal file table +{ + BOOL fUsed; + FAKE_FILE_TYPE fftType; + MEM_FILE mfFile; // State for memory file + HANDLE hFile; // Handle for disk file +}; + +// functions +HRESULT RexInitialize(); +void RexUninitialize(); + +HRESULT RexExtract( + __in_z LPCSTR szResource, + __in_z LPCWSTR wzExtractId, + __in_z LPCWSTR wzExtractDir, + __in_z LPCWSTR wzExtractName, + __in REX_CALLBACK_PROGRESS pfnProgress, + __in REX_CALLBACK_WRITE pfnWrite, + __in LPVOID pvContext + ); + +#ifdef __cplusplus +} +#endif + diff --git a/msi/build/A2Staging/wix35-binaries/sdk/inc/rssutil.h b/msi/build/A2Staging/wix35-binaries/sdk/inc/rssutil.h index febdb2db84..e9ee4fe57a 100644 --- a/msi/build/A2Staging/wix35-binaries/sdk/inc/rssutil.h +++ b/msi/build/A2Staging/wix35-binaries/sdk/inc/rssutil.h @@ -1,106 +1,106 @@ -//------------------------------------------------------------------------------------------------- -// -// Copyright (c) Microsoft Corporation. All rights reserved. -// -// The use and distribution terms for this software are covered by the -// Common Public License 1.0 (http://opensource.org/licenses/cpl1.0.php) -// which can be found in the file CPL.TXT at the root of this distribution. -// By using this software in any fashion, you are agreeing to be bound by -// the terms of this license. -// -// You must not remove this notice, or any other, from this software. -// -// -// -// RSS helper funtions. -// -//------------------------------------------------------------------------------------------------- - -#pragma once - - -#ifdef __cplusplus -extern "C" { -#endif - -#define ReleaseRssChannel(p) if (p) { RssFreeChannel(p); } -#define ReleaseNullRssChannel(p) if (p) { RssFreeChannel(p); p = NULL; } - - -struct RSS_UNKNOWN_ATTRIBUTE -{ - LPWSTR wzNamespace; - LPWSTR wzAttribute; - LPWSTR wzValue; - - RSS_UNKNOWN_ATTRIBUTE* pNext; -}; - -struct RSS_UNKNOWN_ELEMENT -{ - LPWSTR wzNamespace; - LPWSTR wzElement; - LPWSTR wzValue; - - RSS_UNKNOWN_ATTRIBUTE* pAttributes; - RSS_UNKNOWN_ELEMENT* pNext; -}; - -struct RSS_ITEM -{ - LPWSTR wzTitle; - LPWSTR wzLink; - LPWSTR wzDescription; - - LPWSTR wzGuid; - FILETIME ftPublished; - - LPWSTR wzEnclosureUrl; - DWORD dwEnclosureSize; - LPWSTR wzEnclosureType; - - RSS_UNKNOWN_ELEMENT* pUnknownElements; -}; - -struct RSS_CHANNEL -{ - LPWSTR wzTitle; - LPWSTR wzLink; - LPWSTR wzDescription; - DWORD dwTimeToLive; - - RSS_UNKNOWN_ELEMENT* pUnknownElements; - - DWORD cItems; - RSS_ITEM rgItems[1]; -}; - -HRESULT DAPI RssInitialize( - ); - -void DAPI RssUninitialize( - ); - -HRESULT DAPI RssParseFromString( - __in_z LPCWSTR wzRssString, - __out RSS_CHANNEL **ppChannel - ); - -HRESULT DAPI RssParseFromFile( - __in_z LPCWSTR wzRssFile, - __out RSS_CHANNEL **ppChannel - ); - -// Adding this until we have the updated specstrings.h -#ifndef __in_xcount -#define __in_xcount(size) -#endif - -void DAPI RssFreeChannel( - __in_xcount(pChannel->cItems) RSS_CHANNEL *pChannel - ); - -#ifdef __cplusplus -} -#endif - +//------------------------------------------------------------------------------------------------- +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// The use and distribution terms for this software are covered by the +// Common Public License 1.0 (http://opensource.org/licenses/cpl1.0.php) +// which can be found in the file CPL.TXT at the root of this distribution. +// By using this software in any fashion, you are agreeing to be bound by +// the terms of this license. +// +// You must not remove this notice, or any other, from this software. +// +// +// +// RSS helper funtions. +// +//------------------------------------------------------------------------------------------------- + +#pragma once + + +#ifdef __cplusplus +extern "C" { +#endif + +#define ReleaseRssChannel(p) if (p) { RssFreeChannel(p); } +#define ReleaseNullRssChannel(p) if (p) { RssFreeChannel(p); p = NULL; } + + +struct RSS_UNKNOWN_ATTRIBUTE +{ + LPWSTR wzNamespace; + LPWSTR wzAttribute; + LPWSTR wzValue; + + RSS_UNKNOWN_ATTRIBUTE* pNext; +}; + +struct RSS_UNKNOWN_ELEMENT +{ + LPWSTR wzNamespace; + LPWSTR wzElement; + LPWSTR wzValue; + + RSS_UNKNOWN_ATTRIBUTE* pAttributes; + RSS_UNKNOWN_ELEMENT* pNext; +}; + +struct RSS_ITEM +{ + LPWSTR wzTitle; + LPWSTR wzLink; + LPWSTR wzDescription; + + LPWSTR wzGuid; + FILETIME ftPublished; + + LPWSTR wzEnclosureUrl; + DWORD dwEnclosureSize; + LPWSTR wzEnclosureType; + + RSS_UNKNOWN_ELEMENT* pUnknownElements; +}; + +struct RSS_CHANNEL +{ + LPWSTR wzTitle; + LPWSTR wzLink; + LPWSTR wzDescription; + DWORD dwTimeToLive; + + RSS_UNKNOWN_ELEMENT* pUnknownElements; + + DWORD cItems; + RSS_ITEM rgItems[1]; +}; + +HRESULT DAPI RssInitialize( + ); + +void DAPI RssUninitialize( + ); + +HRESULT DAPI RssParseFromString( + __in_z LPCWSTR wzRssString, + __out RSS_CHANNEL **ppChannel + ); + +HRESULT DAPI RssParseFromFile( + __in_z LPCWSTR wzRssFile, + __out RSS_CHANNEL **ppChannel + ); + +// Adding this until we have the updated specstrings.h +#ifndef __in_xcount +#define __in_xcount(size) +#endif + +void DAPI RssFreeChannel( + __in_xcount(pChannel->cItems) RSS_CHANNEL *pChannel + ); + +#ifdef __cplusplus +} +#endif + diff --git a/msi/build/A2Staging/wix35-binaries/sdk/inc/shelutil.h b/msi/build/A2Staging/wix35-binaries/sdk/inc/shelutil.h index 4f771f62fb..2b24c7388f 100644 --- a/msi/build/A2Staging/wix35-binaries/sdk/inc/shelutil.h +++ b/msi/build/A2Staging/wix35-binaries/sdk/inc/shelutil.h @@ -1,58 +1,58 @@ -#pragma once -//------------------------------------------------------------------------------------------------- -// -// Copyright (c) Microsoft Corporation. All rights reserved. -// -// The use and distribution terms for this software are covered by the -// Common Public License 1.0 (http://opensource.org/licenses/cpl1.0.php) -// which can be found in the file CPL.TXT at the root of this distribution. -// By using this software in any fashion, you are agreeing to be bound by -// the terms of this license. -// -// You must not remove this notice, or any other, from this software. -// -// -// -// Header for proces helper functions. -// -//------------------------------------------------------------------------------------------------- - -#ifndef REFKNOWNFOLDERID -#define REFKNOWNFOLDERID REFGUID -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -HRESULT DAPI ShelExec( - __in_z LPCWSTR wzTargetPath, - __in_opt LPCWSTR wzParameters, - __in_opt LPCWSTR wzVerb, - __in_opt LPCWSTR wzWorkingDirectory, - __in int nShowCmd, - __out_opt HINSTANCE* phInstance - ); - -HRESULT DAPI ShelExecEx( - __in_z LPCWSTR wzTargetPath, - __in_z_opt LPCWSTR wzParameters, - __in_z_opt LPCWSTR wzVerb, - __in_z_opt LPCWSTR wzWorkingDirectory, - __in int nShowCmd, - __out_opt HINSTANCE* phInstance - ); - -HRESULT DAPI ShelGetFolder( - __out_z LPWSTR* psczFolderPath, - __in int csidlFolder - ); - -HRESULT DAPI ShelGetKnownFolder( - __out_z LPWSTR* psczFolderPath, - __in REFKNOWNFOLDERID rfidFolder - ); - -#ifdef __cplusplus -} -#endif +#pragma once +//------------------------------------------------------------------------------------------------- +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// The use and distribution terms for this software are covered by the +// Common Public License 1.0 (http://opensource.org/licenses/cpl1.0.php) +// which can be found in the file CPL.TXT at the root of this distribution. +// By using this software in any fashion, you are agreeing to be bound by +// the terms of this license. +// +// You must not remove this notice, or any other, from this software. +// +// +// +// Header for proces helper functions. +// +//------------------------------------------------------------------------------------------------- + +#ifndef REFKNOWNFOLDERID +#define REFKNOWNFOLDERID REFGUID +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +HRESULT DAPI ShelExec( + __in_z LPCWSTR wzTargetPath, + __in_opt LPCWSTR wzParameters, + __in_opt LPCWSTR wzVerb, + __in_opt LPCWSTR wzWorkingDirectory, + __in int nShowCmd, + __out_opt HINSTANCE* phInstance + ); + +HRESULT DAPI ShelExecEx( + __in_z LPCWSTR wzTargetPath, + __in_z_opt LPCWSTR wzParameters, + __in_z_opt LPCWSTR wzVerb, + __in_z_opt LPCWSTR wzWorkingDirectory, + __in int nShowCmd, + __out_opt HINSTANCE* phInstance + ); + +HRESULT DAPI ShelGetFolder( + __out_z LPWSTR* psczFolderPath, + __in int csidlFolder + ); + +HRESULT DAPI ShelGetKnownFolder( + __out_z LPWSTR* psczFolderPath, + __in REFKNOWNFOLDERID rfidFolder + ); + +#ifdef __cplusplus +} +#endif diff --git a/msi/build/A2Staging/wix35-binaries/sdk/inc/sqlutil.h b/msi/build/A2Staging/wix35-binaries/sdk/inc/sqlutil.h index da550b6b84..bfb04e14c6 100644 --- a/msi/build/A2Staging/wix35-binaries/sdk/inc/sqlutil.h +++ b/msi/build/A2Staging/wix35-binaries/sdk/inc/sqlutil.h @@ -1,151 +1,151 @@ -#pragma once -//------------------------------------------------------------------------------------------------- -// -// Copyright (c) Microsoft Corporation. All rights reserved. -// -// The use and distribution terms for this software are covered by the -// Common Public License 1.0 (http://opensource.org/licenses/cpl1.0.php) -// which can be found in the file CPL.TXT at the root of this distribution. -// By using this software in any fashion, you are agreeing to be bound by -// the terms of this license. -// -// You must not remove this notice, or any other, from this software. -// -// -// -// SQL helper functions. -// -//------------------------------------------------------------------------------------------------- - -#include -#include -#include - - -#ifdef __cplusplus -extern "C" { -#endif - -// Adding this until the SQL annotations are published to specstrings.h -#ifndef __sql_command -#define __sql_command -#endif - -// structs -struct SQL_FILESPEC -{ - WCHAR wzName[MAX_PATH]; - WCHAR wzFilename[MAX_PATH]; - WCHAR wzSize[MAX_PATH]; - WCHAR wzMaxSize[MAX_PATH]; - WCHAR wzGrow[MAX_PATH]; -}; - - -// functions -HRESULT DAPI SqlConnectDatabase( - __in_z LPCWSTR wzServer, - __in_z LPCWSTR wzInstance, - __in_z LPCWSTR wzDatabase, - __in BOOL fIntegratedAuth, - __in_z LPCWSTR wzUser, - __in_z LPCWSTR wzPassword, - __out IDBCreateSession** ppidbSession - ); -HRESULT DAPI SqlStartTransaction( - __in IDBCreateSession* pidbSession, - __out IDBCreateCommand** ppidbCommand, - __out ITransaction** ppit - ); -HRESULT DAPI SqlEndTransaction( - __in ITransaction* pit, - __in BOOL fCommit - ); -HRESULT DAPI SqlDatabaseExists( - __in_z LPCWSTR wzServer, - __in_z LPCWSTR wzInstance, - __in_z LPCWSTR wzDatabase, - __in BOOL fIntegratedAuth, - __in_z LPCWSTR wzUser, - __in_z LPCWSTR wzPassword, - __out_opt BSTR* pbstrErrorDescription - ); -HRESULT DAPI SqlSessionDatabaseExists( - __in IDBCreateSession* pidbSession, - __in_z LPCWSTR wzDatabase, - __out_opt BSTR* pbstrErrorDescription - ); -HRESULT DAPI SqlDatabaseEnsureExists( - __in_z LPCWSTR wzServer, - __in_z LPCWSTR wzInstance, - __in_z LPCWSTR wzDatabase, - __in BOOL fIntegratedAuth, - __in_z LPCWSTR wzUser, - __in_z LPCWSTR wzPassword, - __in_opt const SQL_FILESPEC* psfDatabase, - __in_opt const SQL_FILESPEC* psfLog, - __out_opt BSTR* pbstrErrorDescription - ); -HRESULT DAPI SqlSessionDatabaseEnsureExists( - __in IDBCreateSession* pidbSession, - __in_z LPCWSTR wzDatabase, - __in_opt const SQL_FILESPEC* psfDatabase, - __in_opt const SQL_FILESPEC* psfLog, - __out_opt BSTR* pbstrErrorDescription - ); -HRESULT DAPI SqlCreateDatabase( - __in_z LPCWSTR wzServer, - __in_z LPCWSTR wzInstance, - __in_z LPCWSTR wzDatabase, - __in BOOL fIntegratedAuth, - __in_z LPCWSTR wzUser, - __in_z LPCWSTR wzPassword, - __in_opt const SQL_FILESPEC* psfDatabase, - __in_opt const SQL_FILESPEC* psfLog, - __out_opt BSTR* pbstrErrorDescription - ); -HRESULT DAPI SqlSessionCreateDatabase( - __in IDBCreateSession* pidbSession, - __in_z LPCWSTR wzDatabase, - __in_opt const SQL_FILESPEC* psfDatabase, - __in_opt const SQL_FILESPEC* psfLog, - __out_opt BSTR* pbstrErrorDescription - ); -HRESULT DAPI SqlDropDatabase( - __in_z LPCWSTR wzServer, - __in_z LPCWSTR wzInstance, - __in_z LPCWSTR wzDatabase, - __in BOOL fIntegratedAuth, - __in_z LPCWSTR wzUser, - __in_z LPCWSTR wzPassword, - __out_opt BSTR* pbstrErrorDescription - ); -HRESULT DAPI SqlSessionDropDatabase( - __in IDBCreateSession* pidbSession, - __in_z LPCWSTR wzDatabase, - __out_opt BSTR* pbstrErrorDescription - ); -HRESULT DAPI SqlSessionExecuteQuery( - __in IDBCreateSession* pidbSession, - __in __sql_command LPCWSTR wzSql, - __out_opt IRowset** ppirs, - __out_opt DBROWCOUNT* pcRows, - __out_opt BSTR* pbstrErrorDescription - ); -HRESULT DAPI SqlCommandExecuteQuery( - __in IDBCreateCommand* pidbCommand, - __in __sql_command LPCWSTR wzSql, - __out IRowset** ppirs, - __out DBROWCOUNT* pcRows - ); -HRESULT DAPI SqlGetErrorInfo( - __in IUnknown* pObjectWithError, - __in REFIID IID_InterfaceWithError, - __in DWORD dwLocaleId, - __out_opt BSTR* pbstrErrorSource, - __out_opt BSTR* pbstrErrorDescription - ); - -#ifdef __cplusplus -} -#endif +#pragma once +//------------------------------------------------------------------------------------------------- +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// The use and distribution terms for this software are covered by the +// Common Public License 1.0 (http://opensource.org/licenses/cpl1.0.php) +// which can be found in the file CPL.TXT at the root of this distribution. +// By using this software in any fashion, you are agreeing to be bound by +// the terms of this license. +// +// You must not remove this notice, or any other, from this software. +// +// +// +// SQL helper functions. +// +//------------------------------------------------------------------------------------------------- + +#include +#include +#include + + +#ifdef __cplusplus +extern "C" { +#endif + +// Adding this until the SQL annotations are published to specstrings.h +#ifndef __sql_command +#define __sql_command +#endif + +// structs +struct SQL_FILESPEC +{ + WCHAR wzName[MAX_PATH]; + WCHAR wzFilename[MAX_PATH]; + WCHAR wzSize[MAX_PATH]; + WCHAR wzMaxSize[MAX_PATH]; + WCHAR wzGrow[MAX_PATH]; +}; + + +// functions +HRESULT DAPI SqlConnectDatabase( + __in_z LPCWSTR wzServer, + __in_z LPCWSTR wzInstance, + __in_z LPCWSTR wzDatabase, + __in BOOL fIntegratedAuth, + __in_z LPCWSTR wzUser, + __in_z LPCWSTR wzPassword, + __out IDBCreateSession** ppidbSession + ); +HRESULT DAPI SqlStartTransaction( + __in IDBCreateSession* pidbSession, + __out IDBCreateCommand** ppidbCommand, + __out ITransaction** ppit + ); +HRESULT DAPI SqlEndTransaction( + __in ITransaction* pit, + __in BOOL fCommit + ); +HRESULT DAPI SqlDatabaseExists( + __in_z LPCWSTR wzServer, + __in_z LPCWSTR wzInstance, + __in_z LPCWSTR wzDatabase, + __in BOOL fIntegratedAuth, + __in_z LPCWSTR wzUser, + __in_z LPCWSTR wzPassword, + __out_opt BSTR* pbstrErrorDescription + ); +HRESULT DAPI SqlSessionDatabaseExists( + __in IDBCreateSession* pidbSession, + __in_z LPCWSTR wzDatabase, + __out_opt BSTR* pbstrErrorDescription + ); +HRESULT DAPI SqlDatabaseEnsureExists( + __in_z LPCWSTR wzServer, + __in_z LPCWSTR wzInstance, + __in_z LPCWSTR wzDatabase, + __in BOOL fIntegratedAuth, + __in_z LPCWSTR wzUser, + __in_z LPCWSTR wzPassword, + __in_opt const SQL_FILESPEC* psfDatabase, + __in_opt const SQL_FILESPEC* psfLog, + __out_opt BSTR* pbstrErrorDescription + ); +HRESULT DAPI SqlSessionDatabaseEnsureExists( + __in IDBCreateSession* pidbSession, + __in_z LPCWSTR wzDatabase, + __in_opt const SQL_FILESPEC* psfDatabase, + __in_opt const SQL_FILESPEC* psfLog, + __out_opt BSTR* pbstrErrorDescription + ); +HRESULT DAPI SqlCreateDatabase( + __in_z LPCWSTR wzServer, + __in_z LPCWSTR wzInstance, + __in_z LPCWSTR wzDatabase, + __in BOOL fIntegratedAuth, + __in_z LPCWSTR wzUser, + __in_z LPCWSTR wzPassword, + __in_opt const SQL_FILESPEC* psfDatabase, + __in_opt const SQL_FILESPEC* psfLog, + __out_opt BSTR* pbstrErrorDescription + ); +HRESULT DAPI SqlSessionCreateDatabase( + __in IDBCreateSession* pidbSession, + __in_z LPCWSTR wzDatabase, + __in_opt const SQL_FILESPEC* psfDatabase, + __in_opt const SQL_FILESPEC* psfLog, + __out_opt BSTR* pbstrErrorDescription + ); +HRESULT DAPI SqlDropDatabase( + __in_z LPCWSTR wzServer, + __in_z LPCWSTR wzInstance, + __in_z LPCWSTR wzDatabase, + __in BOOL fIntegratedAuth, + __in_z LPCWSTR wzUser, + __in_z LPCWSTR wzPassword, + __out_opt BSTR* pbstrErrorDescription + ); +HRESULT DAPI SqlSessionDropDatabase( + __in IDBCreateSession* pidbSession, + __in_z LPCWSTR wzDatabase, + __out_opt BSTR* pbstrErrorDescription + ); +HRESULT DAPI SqlSessionExecuteQuery( + __in IDBCreateSession* pidbSession, + __in __sql_command LPCWSTR wzSql, + __out_opt IRowset** ppirs, + __out_opt DBROWCOUNT* pcRows, + __out_opt BSTR* pbstrErrorDescription + ); +HRESULT DAPI SqlCommandExecuteQuery( + __in IDBCreateCommand* pidbCommand, + __in __sql_command LPCWSTR wzSql, + __out IRowset** ppirs, + __out DBROWCOUNT* pcRows + ); +HRESULT DAPI SqlGetErrorInfo( + __in IUnknown* pObjectWithError, + __in REFIID IID_InterfaceWithError, + __in DWORD dwLocaleId, + __out_opt BSTR* pbstrErrorSource, + __out_opt BSTR* pbstrErrorDescription + ); + +#ifdef __cplusplus +} +#endif diff --git a/msi/build/A2Staging/wix35-binaries/sdk/inc/strutil.h b/msi/build/A2Staging/wix35-binaries/sdk/inc/strutil.h index fb6f14eeab..07b0f58e30 100644 --- a/msi/build/A2Staging/wix35-binaries/sdk/inc/strutil.h +++ b/msi/build/A2Staging/wix35-binaries/sdk/inc/strutil.h @@ -1,256 +1,256 @@ -#pragma once -//------------------------------------------------------------------------------------------------- -// -// Copyright (c) Microsoft Corporation. All rights reserved. -// -// The use and distribution terms for this software are covered by the -// Common Public License 1.0 (http://opensource.org/licenses/cpl1.0.php) -// which can be found in the file CPL.TXT at the root of this distribution. -// By using this software in any fashion, you are agreeing to be bound by -// the terms of this license. -// -// You must not remove this notice, or any other, from this software. -// -// -// -// Header for string helper functions. -// -//------------------------------------------------------------------------------------------------- - -#ifdef __cplusplus -extern "C" { -#endif - -#define ReleaseStr(pwz) if (pwz) { StrFree(pwz); } -#define ReleaseNullStr(pwz) if (pwz) { StrFree(pwz); pwz = NULL; } -#define ReleaseBSTR(bstr) if (bstr) { ::SysFreeString(bstr); } -#define ReleaseNullBSTR(bstr) if (bstr) { ::SysFreeString(bstr); bstr = NULL; } -#define ReleaseNullStrArray(rg, c) { if (rg) { StrArrayFree(rg, c); c = 0; rg = NULL; } } - -#define DeclareConstBSTR(bstr_const, wz) const WCHAR bstr_const[] = { 0x00, 0x00, sizeof(wz)-sizeof(WCHAR), 0x00, wz } -#define UseConstBSTR(bstr_const) const_cast(bstr_const + 4) - -HRESULT DAPI StrAlloc( - __deref_out_ecount_part(cch, 0) LPWSTR* ppwz, - __in DWORD_PTR cch - ); -HRESULT DAPI StrTrimCapacity( - __deref_out LPWSTR* ppwz - ); -HRESULT DAPI StrAnsiAlloc( - __deref_out_ecount_part(cch, 0) LPSTR* ppz, - __in DWORD_PTR cch - ); -HRESULT DAPI StrAnsiTrimCapacity( - __deref_out LPSTR* ppz - ); -HRESULT DAPI StrAllocString( - __deref_out_ecount_z(cchSource+1) LPWSTR* ppwz, - __in_z LPCWSTR wzSource, - __in DWORD_PTR cchSource - ); -HRESULT DAPI StrAnsiAllocString( - __deref_out_ecount_z(cchSource+1) LPSTR* ppsz, - __in_z LPCWSTR wzSource, - __in DWORD_PTR cchSource, - __in UINT uiCodepage - ); -HRESULT DAPI StrAllocStringAnsi( - __deref_out_ecount_z(cchSource+1) LPWSTR* ppwz, - __in_z LPCSTR szSource, - __in DWORD_PTR cchSource, - __in UINT uiCodepage - ); -HRESULT DAPI StrAllocPrefix( - __deref_out_z LPWSTR* ppwz, - __in_z LPCWSTR wzPrefix, - __in DWORD_PTR cchPrefix - ); -HRESULT DAPI StrAllocConcat( - __deref_out_z LPWSTR* ppwz, - __in_z LPCWSTR wzSource, - __in DWORD_PTR cchSource - ); -HRESULT DAPI StrAnsiAllocConcat( - __deref_out_z LPSTR* ppz, - __in_z LPCSTR pzSource, - __in DWORD_PTR cchSource - ); -HRESULT __cdecl StrAllocFormatted( - __deref_out_z LPWSTR* ppwz, - __in __format_string LPCWSTR wzFormat, - ... - ); -HRESULT __cdecl StrAnsiAllocFormatted( - __deref_out_z LPSTR* ppsz, - __in __format_string LPCSTR szFormat, - ... - ); -HRESULT DAPI StrAllocFormattedArgs( - __deref_out_z LPWSTR* ppwz, - __in __format_string LPCWSTR wzFormat, - __in va_list args - ); -HRESULT DAPI StrAnsiAllocFormattedArgs( - __deref_out_z LPSTR* ppsz, - __in __format_string LPCSTR szFormat, - __in va_list args - ); -HRESULT DAPI StrAllocFromError( - __inout LPWSTR *ppwzMessage, - __in HRESULT hrError, - __in_opt HMODULE hModule, - ... - ); - -HRESULT DAPI StrMaxLength( - __in LPCVOID p, - __out DWORD_PTR* pcch - ); -HRESULT DAPI StrSize( - __in LPCVOID p, - __out DWORD_PTR* pcb - ); - -HRESULT DAPI StrFree( - __in LPVOID p - ); - -HRESULT DAPI StrCurrentTime( - __deref_out_z LPWSTR* ppwz, - __in BOOL fGMT - ); -HRESULT DAPI StrCurrentDateTime( - __deref_out_z LPWSTR* ppwz, - __in BOOL fGMT - ); - -HRESULT DAPI StrReplaceStringAll( - __inout LPWSTR* ppwzOriginal, - __in_z LPCWSTR wzOldSubString, - __in_z LPCWSTR wzNewSubString - ); -HRESULT DAPI StrReplaceString( - __inout LPWSTR* ppwzOriginal, - __inout DWORD* pdwStartIndex, - __in_z LPCWSTR wzOldSubString, - __in_z LPCWSTR wzNewSubString - ); - -HRESULT DAPI StrHexEncode( - __in_ecount(cbSource) const BYTE* pbSource, - __in DWORD_PTR cbSource, - __out_ecount(cchDest) LPWSTR wzDest, - __in DWORD_PTR cchDest - ); -HRESULT DAPI StrHexDecode( - __in_z LPCWSTR wzSource, - __out_bcount(cbDest) BYTE* pbDest, - __in DWORD_PTR cbDest - ); - -HRESULT DAPI StrAllocBase85Encode( - __in_bcount(cbSource) const BYTE* pbSource, - __in DWORD_PTR cbSource, - __deref_out_z LPWSTR* pwzDest - ); -HRESULT DAPI StrAllocBase85Decode( - __in_z LPCWSTR wzSource, - __deref_out_bcount(*pcbDest) BYTE** hbDest, - __out DWORD_PTR* pcbDest - ); - -HRESULT DAPI MultiSzLen( - __in_z LPCWSTR pwzMultiSz, - __out DWORD_PTR* pcch - ); -HRESULT DAPI MultiSzPrepend( - __deref_inout_z LPWSTR* ppwzMultiSz, - __inout_opt DWORD_PTR *pcchMultiSz, - __in_z LPCWSTR pwzInsert - ); -HRESULT DAPI MultiSzFindSubstring( - __in_z LPCWSTR pwzMultiSz, - __in_z LPCWSTR pwzSubstring, - __out_opt DWORD_PTR* pdwIndex, - __deref_opt_out_z LPCWSTR* ppwzFoundIn - ); -HRESULT DAPI MultiSzFindString( - __in_z LPCWSTR pwzMultiSz, - __in_z LPCWSTR pwzString, - __out_opt DWORD_PTR* pdwIndex, - __deref_opt_out_z LPCWSTR* ppwzFound - ); -HRESULT DAPI MultiSzRemoveString( - __deref_inout_z LPWSTR* ppwzMultiSz, - __in DWORD_PTR dwIndex - ); -HRESULT DAPI MultiSzInsertString( - __deref_inout_z LPWSTR* ppwzMultiSz, - __inout_opt DWORD_PTR *pcchMultiSz, - __in DWORD_PTR dwIndex, - __in_z LPCWSTR pwzInsert - ); -HRESULT DAPI MultiSzReplaceString( - __deref_inout_z LPWSTR* ppwzMultiSz, - __in DWORD_PTR dwIndex, - __in_z LPCWSTR pwzString - ); - -LPCWSTR wcsistr( - __in_z LPCWSTR wzString, - __in_z LPCWSTR wzCharSet - ); - -HRESULT DAPI StrStringToInt16( - __in_z LPCWSTR wzIn, - __in DWORD cchIn, - __out SHORT* psOut - ); -HRESULT DAPI StrStringToUInt16( - __in_z LPCWSTR wzIn, - __in DWORD cchIn, - __out USHORT* pusOut - ); -HRESULT DAPI StrStringToInt32( - __in_z LPCWSTR wzIn, - __in DWORD cchIn, - __out INT* piOut - ); -HRESULT DAPI StrStringToUInt32( - __in_z LPCWSTR wzIn, - __in DWORD cchIn, - __out UINT* puiOut - ); -HRESULT DAPI StrStringToInt64( - __in_z LPCWSTR wzIn, - __in DWORD cchIn, - __out LONGLONG* pllOut - ); -HRESULT DAPI StrStringToUInt64( - __in_z LPCWSTR wzIn, - __in DWORD cchIn, - __out ULONGLONG* pullOut - ); -void DAPI StrStringToUpper( - __inout_z LPWSTR wzIn - ); -void DAPI StrStringToLower( - __inout_z LPWSTR wzIn - ); - -HRESULT DAPI StrArrayAllocString( - __deref_inout_ecount(*pcStrArray) LPWSTR **prgsczStrArray, - __inout LPUINT pcStrArray, - __in_z LPCWSTR wzSource, - __in DWORD_PTR cchSource - ); - -HRESULT DAPI StrArrayFree( - __in_ecount(cStrArray) LPWSTR *rgsczStrArray, - __in UINT cStrArray - ); - -#ifdef __cplusplus -} -#endif +#pragma once +//------------------------------------------------------------------------------------------------- +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// The use and distribution terms for this software are covered by the +// Common Public License 1.0 (http://opensource.org/licenses/cpl1.0.php) +// which can be found in the file CPL.TXT at the root of this distribution. +// By using this software in any fashion, you are agreeing to be bound by +// the terms of this license. +// +// You must not remove this notice, or any other, from this software. +// +// +// +// Header for string helper functions. +// +//------------------------------------------------------------------------------------------------- + +#ifdef __cplusplus +extern "C" { +#endif + +#define ReleaseStr(pwz) if (pwz) { StrFree(pwz); } +#define ReleaseNullStr(pwz) if (pwz) { StrFree(pwz); pwz = NULL; } +#define ReleaseBSTR(bstr) if (bstr) { ::SysFreeString(bstr); } +#define ReleaseNullBSTR(bstr) if (bstr) { ::SysFreeString(bstr); bstr = NULL; } +#define ReleaseNullStrArray(rg, c) { if (rg) { StrArrayFree(rg, c); c = 0; rg = NULL; } } + +#define DeclareConstBSTR(bstr_const, wz) const WCHAR bstr_const[] = { 0x00, 0x00, sizeof(wz)-sizeof(WCHAR), 0x00, wz } +#define UseConstBSTR(bstr_const) const_cast(bstr_const + 4) + +HRESULT DAPI StrAlloc( + __deref_out_ecount_part(cch, 0) LPWSTR* ppwz, + __in DWORD_PTR cch + ); +HRESULT DAPI StrTrimCapacity( + __deref_out LPWSTR* ppwz + ); +HRESULT DAPI StrAnsiAlloc( + __deref_out_ecount_part(cch, 0) LPSTR* ppz, + __in DWORD_PTR cch + ); +HRESULT DAPI StrAnsiTrimCapacity( + __deref_out LPSTR* ppz + ); +HRESULT DAPI StrAllocString( + __deref_out_ecount_z(cchSource+1) LPWSTR* ppwz, + __in_z LPCWSTR wzSource, + __in DWORD_PTR cchSource + ); +HRESULT DAPI StrAnsiAllocString( + __deref_out_ecount_z(cchSource+1) LPSTR* ppsz, + __in_z LPCWSTR wzSource, + __in DWORD_PTR cchSource, + __in UINT uiCodepage + ); +HRESULT DAPI StrAllocStringAnsi( + __deref_out_ecount_z(cchSource+1) LPWSTR* ppwz, + __in_z LPCSTR szSource, + __in DWORD_PTR cchSource, + __in UINT uiCodepage + ); +HRESULT DAPI StrAllocPrefix( + __deref_out_z LPWSTR* ppwz, + __in_z LPCWSTR wzPrefix, + __in DWORD_PTR cchPrefix + ); +HRESULT DAPI StrAllocConcat( + __deref_out_z LPWSTR* ppwz, + __in_z LPCWSTR wzSource, + __in DWORD_PTR cchSource + ); +HRESULT DAPI StrAnsiAllocConcat( + __deref_out_z LPSTR* ppz, + __in_z LPCSTR pzSource, + __in DWORD_PTR cchSource + ); +HRESULT __cdecl StrAllocFormatted( + __deref_out_z LPWSTR* ppwz, + __in __format_string LPCWSTR wzFormat, + ... + ); +HRESULT __cdecl StrAnsiAllocFormatted( + __deref_out_z LPSTR* ppsz, + __in __format_string LPCSTR szFormat, + ... + ); +HRESULT DAPI StrAllocFormattedArgs( + __deref_out_z LPWSTR* ppwz, + __in __format_string LPCWSTR wzFormat, + __in va_list args + ); +HRESULT DAPI StrAnsiAllocFormattedArgs( + __deref_out_z LPSTR* ppsz, + __in __format_string LPCSTR szFormat, + __in va_list args + ); +HRESULT DAPI StrAllocFromError( + __inout LPWSTR *ppwzMessage, + __in HRESULT hrError, + __in_opt HMODULE hModule, + ... + ); + +HRESULT DAPI StrMaxLength( + __in LPCVOID p, + __out DWORD_PTR* pcch + ); +HRESULT DAPI StrSize( + __in LPCVOID p, + __out DWORD_PTR* pcb + ); + +HRESULT DAPI StrFree( + __in LPVOID p + ); + +HRESULT DAPI StrCurrentTime( + __deref_out_z LPWSTR* ppwz, + __in BOOL fGMT + ); +HRESULT DAPI StrCurrentDateTime( + __deref_out_z LPWSTR* ppwz, + __in BOOL fGMT + ); + +HRESULT DAPI StrReplaceStringAll( + __inout LPWSTR* ppwzOriginal, + __in_z LPCWSTR wzOldSubString, + __in_z LPCWSTR wzNewSubString + ); +HRESULT DAPI StrReplaceString( + __inout LPWSTR* ppwzOriginal, + __inout DWORD* pdwStartIndex, + __in_z LPCWSTR wzOldSubString, + __in_z LPCWSTR wzNewSubString + ); + +HRESULT DAPI StrHexEncode( + __in_ecount(cbSource) const BYTE* pbSource, + __in DWORD_PTR cbSource, + __out_ecount(cchDest) LPWSTR wzDest, + __in DWORD_PTR cchDest + ); +HRESULT DAPI StrHexDecode( + __in_z LPCWSTR wzSource, + __out_bcount(cbDest) BYTE* pbDest, + __in DWORD_PTR cbDest + ); + +HRESULT DAPI StrAllocBase85Encode( + __in_bcount(cbSource) const BYTE* pbSource, + __in DWORD_PTR cbSource, + __deref_out_z LPWSTR* pwzDest + ); +HRESULT DAPI StrAllocBase85Decode( + __in_z LPCWSTR wzSource, + __deref_out_bcount(*pcbDest) BYTE** hbDest, + __out DWORD_PTR* pcbDest + ); + +HRESULT DAPI MultiSzLen( + __in_z LPCWSTR pwzMultiSz, + __out DWORD_PTR* pcch + ); +HRESULT DAPI MultiSzPrepend( + __deref_inout_z LPWSTR* ppwzMultiSz, + __inout_opt DWORD_PTR *pcchMultiSz, + __in_z LPCWSTR pwzInsert + ); +HRESULT DAPI MultiSzFindSubstring( + __in_z LPCWSTR pwzMultiSz, + __in_z LPCWSTR pwzSubstring, + __out_opt DWORD_PTR* pdwIndex, + __deref_opt_out_z LPCWSTR* ppwzFoundIn + ); +HRESULT DAPI MultiSzFindString( + __in_z LPCWSTR pwzMultiSz, + __in_z LPCWSTR pwzString, + __out_opt DWORD_PTR* pdwIndex, + __deref_opt_out_z LPCWSTR* ppwzFound + ); +HRESULT DAPI MultiSzRemoveString( + __deref_inout_z LPWSTR* ppwzMultiSz, + __in DWORD_PTR dwIndex + ); +HRESULT DAPI MultiSzInsertString( + __deref_inout_z LPWSTR* ppwzMultiSz, + __inout_opt DWORD_PTR *pcchMultiSz, + __in DWORD_PTR dwIndex, + __in_z LPCWSTR pwzInsert + ); +HRESULT DAPI MultiSzReplaceString( + __deref_inout_z LPWSTR* ppwzMultiSz, + __in DWORD_PTR dwIndex, + __in_z LPCWSTR pwzString + ); + +LPCWSTR wcsistr( + __in_z LPCWSTR wzString, + __in_z LPCWSTR wzCharSet + ); + +HRESULT DAPI StrStringToInt16( + __in_z LPCWSTR wzIn, + __in DWORD cchIn, + __out SHORT* psOut + ); +HRESULT DAPI StrStringToUInt16( + __in_z LPCWSTR wzIn, + __in DWORD cchIn, + __out USHORT* pusOut + ); +HRESULT DAPI StrStringToInt32( + __in_z LPCWSTR wzIn, + __in DWORD cchIn, + __out INT* piOut + ); +HRESULT DAPI StrStringToUInt32( + __in_z LPCWSTR wzIn, + __in DWORD cchIn, + __out UINT* puiOut + ); +HRESULT DAPI StrStringToInt64( + __in_z LPCWSTR wzIn, + __in DWORD cchIn, + __out LONGLONG* pllOut + ); +HRESULT DAPI StrStringToUInt64( + __in_z LPCWSTR wzIn, + __in DWORD cchIn, + __out ULONGLONG* pullOut + ); +void DAPI StrStringToUpper( + __inout_z LPWSTR wzIn + ); +void DAPI StrStringToLower( + __inout_z LPWSTR wzIn + ); + +HRESULT DAPI StrArrayAllocString( + __deref_inout_ecount(*pcStrArray) LPWSTR **prgsczStrArray, + __inout LPUINT pcStrArray, + __in_z LPCWSTR wzSource, + __in DWORD_PTR cchSource + ); + +HRESULT DAPI StrArrayFree( + __in_ecount(cStrArray) LPWSTR *rgsczStrArray, + __in UINT cStrArray + ); + +#ifdef __cplusplus +} +#endif diff --git a/msi/build/A2Staging/wix35-binaries/sdk/inc/thmutil.h b/msi/build/A2Staging/wix35-binaries/sdk/inc/thmutil.h index f9760f4eeb..6f1b310418 100644 --- a/msi/build/A2Staging/wix35-binaries/sdk/inc/thmutil.h +++ b/msi/build/A2Staging/wix35-binaries/sdk/inc/thmutil.h @@ -1,191 +1,191 @@ -#pragma once -//------------------------------------------------------------------------------------------------- -// -// Copyright (c) Microsoft Corporation. All rights reserved. -// -// The use and distribution terms for this software are covered by the -// Common Public License 1.0 (http://opensource.org/licenses/cpl1.0.php) -// which can be found in the file CPL.TXT at the root of this distribution. -// By using this software in any fashion, you are agreeing to be bound by -// the terms of this license. -// -// You must not remove this notice, or any other, from this software. -// -// -// -// Theme helper functions. -// -//------------------------------------------------------------------------------------------------- - -#ifdef __cplusplus -extern "C" { -#endif - -enum THEME_CONTROL_DATA -{ - THEME_CONTROL_DATA_HOVER = 1, -}; - -enum THEME_CONTROL_TYPE -{ - THEME_CONTROL_TYPE_UNKNOWN, - THEME_CONTROL_TYPE_BUTTON, - THEME_CONTROL_TYPE_CHECKBOX, - THEME_CONTROL_TYPE_EDITBOX, - THEME_CONTROL_TYPE_HYPERLINK, - THEME_CONTROL_TYPE_IMAGE, - THEME_CONTROL_TYPE_PROGRESSBAR, - THEME_CONTROL_TYPE_RICHEDIT, - THEME_CONTROL_TYPE_STATIC, - THEME_CONTROL_TYPE_TEXT, -}; - -struct THEME_CONTROL -{ - THEME_CONTROL_TYPE type; - - LPWSTR wzText; - int nX; - int nY; - int nHeight; - int nWidth; - int nSourceX; - int nSourceY; - - DWORD dwStyle; - DWORD dwFontId; - DWORD dwFontHoverId; - DWORD dwFontSelectedId; - HWND hWnd; -}; - - -struct THEME_FONT -{ - HFONT hFont; - COLORREF crForeground; - HBRUSH hForeground; - COLORREF crBackground; - HBRUSH hBackground; -}; - - -struct THEME -{ - DWORD dwStyle; - DWORD dwFontId; - HANDLE hIcon; - LPWSTR wzCaption; - int nHeight; - int nWidth; - int nSourceX; - int nSourceY; - - HBITMAP hImage; - - DWORD cFonts; - THEME_FONT* rgFonts; - - DWORD cControls; - THEME_CONTROL* rgControls; - - // state variables that should be ignored - HWND hwndHover; // currently -}; - - -HRESULT DAPI ThemeInitialize( - __in HMODULE hModule - ); - -void DAPI ThemeUninitialize(); - -HRESULT DAPI ThemeLoadFromFile( - __in_z LPCWSTR wzThemeFile, - __out THEME** ppTheme - ); - -HRESULT DAPI ThemeLoadFromResource( - __in_opt HMODULE hModule, - __in_z LPCSTR szResource, - __out THEME** ppTheme - ); - -void DAPI ThemeFree( - __in THEME* pTheme - ); - -HRESULT DAPI ThemeLoadControls( - __in THEME* pTheme, - __in HWND hwndParent - ); - -HRESULT DAPI ThemeDrawBackground( - __in THEME* pTheme, - __in PAINTSTRUCT* pps - ); - -HRESULT DAPI ThemeDrawControl( - __in THEME* pTheme, - __in DRAWITEMSTRUCT* pdis - ); - -void DAPI ThemeHoverControl( - __in THEME* pTheme, - __in HWND hwndParent, - __in HWND hwndControl - ); - -BOOL DAPI ThemeIsControlChecked( - __in THEME* pTheme, - __in DWORD dwControl - ); - -BOOL DAPI ThemeSetControlColor( - __in THEME* pTheme, - __in HDC hdc, - __in HWND hWnd, - __out HBRUSH* phBackgroundBrush - ); - -HRESULT DAPI ThemeSetProgressControl( - __in THEME* pTheme, - __in DWORD dwControl, - __in DWORD dwProgressPercentage - ); - -HRESULT DAPI ThemeSetProgressControlColor( - __in THEME* pTheme, - __in DWORD dwControl, - __in DWORD dwColorIndex - ); - -HRESULT DAPI ThemeSetTextControl( - __in THEME* pTheme, - __in DWORD dwControl, - __in_z LPCWSTR wzText - ); - -HRESULT DAPI ThemeGetTextControl( - __in const THEME* pTheme, - __in DWORD dwControl, - __out LPWSTR* psczText - ); - -HRESULT DAPI ThemeLoadRichEditFromFile( - __in THEME* pTheme, - __in DWORD dwControl, - __in_z LPCWSTR wzFileName, - __in HMODULE hModule - ); - -HRESULT DAPI ThemeLoadLocFromFile( - __in THEME* pTheme, - __in_z LPCWSTR wzFileName, - __in HMODULE hModule - ); - -#ifdef __cplusplus -} -#endif - +#pragma once +//------------------------------------------------------------------------------------------------- +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// The use and distribution terms for this software are covered by the +// Common Public License 1.0 (http://opensource.org/licenses/cpl1.0.php) +// which can be found in the file CPL.TXT at the root of this distribution. +// By using this software in any fashion, you are agreeing to be bound by +// the terms of this license. +// +// You must not remove this notice, or any other, from this software. +// +// +// +// Theme helper functions. +// +//------------------------------------------------------------------------------------------------- + +#ifdef __cplusplus +extern "C" { +#endif + +enum THEME_CONTROL_DATA +{ + THEME_CONTROL_DATA_HOVER = 1, +}; + +enum THEME_CONTROL_TYPE +{ + THEME_CONTROL_TYPE_UNKNOWN, + THEME_CONTROL_TYPE_BUTTON, + THEME_CONTROL_TYPE_CHECKBOX, + THEME_CONTROL_TYPE_EDITBOX, + THEME_CONTROL_TYPE_HYPERLINK, + THEME_CONTROL_TYPE_IMAGE, + THEME_CONTROL_TYPE_PROGRESSBAR, + THEME_CONTROL_TYPE_RICHEDIT, + THEME_CONTROL_TYPE_STATIC, + THEME_CONTROL_TYPE_TEXT, +}; + +struct THEME_CONTROL +{ + THEME_CONTROL_TYPE type; + + LPWSTR wzText; + int nX; + int nY; + int nHeight; + int nWidth; + int nSourceX; + int nSourceY; + + DWORD dwStyle; + DWORD dwFontId; + DWORD dwFontHoverId; + DWORD dwFontSelectedId; + HWND hWnd; +}; + + +struct THEME_FONT +{ + HFONT hFont; + COLORREF crForeground; + HBRUSH hForeground; + COLORREF crBackground; + HBRUSH hBackground; +}; + + +struct THEME +{ + DWORD dwStyle; + DWORD dwFontId; + HANDLE hIcon; + LPWSTR wzCaption; + int nHeight; + int nWidth; + int nSourceX; + int nSourceY; + + HBITMAP hImage; + + DWORD cFonts; + THEME_FONT* rgFonts; + + DWORD cControls; + THEME_CONTROL* rgControls; + + // state variables that should be ignored + HWND hwndHover; // currently +}; + + +HRESULT DAPI ThemeInitialize( + __in HMODULE hModule + ); + +void DAPI ThemeUninitialize(); + +HRESULT DAPI ThemeLoadFromFile( + __in_z LPCWSTR wzThemeFile, + __out THEME** ppTheme + ); + +HRESULT DAPI ThemeLoadFromResource( + __in_opt HMODULE hModule, + __in_z LPCSTR szResource, + __out THEME** ppTheme + ); + +void DAPI ThemeFree( + __in THEME* pTheme + ); + +HRESULT DAPI ThemeLoadControls( + __in THEME* pTheme, + __in HWND hwndParent + ); + +HRESULT DAPI ThemeDrawBackground( + __in THEME* pTheme, + __in PAINTSTRUCT* pps + ); + +HRESULT DAPI ThemeDrawControl( + __in THEME* pTheme, + __in DRAWITEMSTRUCT* pdis + ); + +void DAPI ThemeHoverControl( + __in THEME* pTheme, + __in HWND hwndParent, + __in HWND hwndControl + ); + +BOOL DAPI ThemeIsControlChecked( + __in THEME* pTheme, + __in DWORD dwControl + ); + +BOOL DAPI ThemeSetControlColor( + __in THEME* pTheme, + __in HDC hdc, + __in HWND hWnd, + __out HBRUSH* phBackgroundBrush + ); + +HRESULT DAPI ThemeSetProgressControl( + __in THEME* pTheme, + __in DWORD dwControl, + __in DWORD dwProgressPercentage + ); + +HRESULT DAPI ThemeSetProgressControlColor( + __in THEME* pTheme, + __in DWORD dwControl, + __in DWORD dwColorIndex + ); + +HRESULT DAPI ThemeSetTextControl( + __in THEME* pTheme, + __in DWORD dwControl, + __in_z LPCWSTR wzText + ); + +HRESULT DAPI ThemeGetTextControl( + __in const THEME* pTheme, + __in DWORD dwControl, + __out LPWSTR* psczText + ); + +HRESULT DAPI ThemeLoadRichEditFromFile( + __in THEME* pTheme, + __in DWORD dwControl, + __in_z LPCWSTR wzFileName, + __in HMODULE hModule + ); + +HRESULT DAPI ThemeLoadLocFromFile( + __in THEME* pTheme, + __in_z LPCWSTR wzFileName, + __in HMODULE hModule + ); + +#ifdef __cplusplus +} +#endif + diff --git a/msi/build/A2Staging/wix35-binaries/sdk/inc/timeutil.h b/msi/build/A2Staging/wix35-binaries/sdk/inc/timeutil.h index 54ecc633fb..cc92d17ad3 100644 --- a/msi/build/A2Staging/wix35-binaries/sdk/inc/timeutil.h +++ b/msi/build/A2Staging/wix35-binaries/sdk/inc/timeutil.h @@ -1,33 +1,33 @@ -#pragma once -//------------------------------------------------------------------------------------------------- -// -// Copyright (c) Microsoft Corporation. All rights reserved. -// -// The use and distribution terms for this software are covered by the -// Common Public License 1.0 (http://opensource.org/licenses/cpl1.0.php) -// which can be found in the file CPL.TXT at the root of this distribution. -// By using this software in any fashion, you are agreeing to be bound by -// the terms of this license. -// -// You must not remove this notice, or any other, from this software. -// -// -// -// Time helper functions. -// -//------------------------------------------------------------------------------------------------- - - -#ifdef __cplusplus -extern "C" { -#endif - -HRESULT DAPI TimeFromString( - __in_z LPCWSTR wzTime, - __out FILETIME* pFileTime - ); - -#ifdef __cplusplus -} -#endif - +#pragma once +//------------------------------------------------------------------------------------------------- +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// The use and distribution terms for this software are covered by the +// Common Public License 1.0 (http://opensource.org/licenses/cpl1.0.php) +// which can be found in the file CPL.TXT at the root of this distribution. +// By using this software in any fashion, you are agreeing to be bound by +// the terms of this license. +// +// You must not remove this notice, or any other, from this software. +// +// +// +// Time helper functions. +// +//------------------------------------------------------------------------------------------------- + + +#ifdef __cplusplus +extern "C" { +#endif + +HRESULT DAPI TimeFromString( + __in_z LPCWSTR wzTime, + __out FILETIME* pFileTime + ); + +#ifdef __cplusplus +} +#endif + diff --git a/msi/build/A2Staging/wix35-binaries/sdk/inc/uriutil.h b/msi/build/A2Staging/wix35-binaries/sdk/inc/uriutil.h index e7de565244..86ab80cc17 100644 --- a/msi/build/A2Staging/wix35-binaries/sdk/inc/uriutil.h +++ b/msi/build/A2Staging/wix35-binaries/sdk/inc/uriutil.h @@ -1,93 +1,93 @@ -//------------------------------------------------------------------------------------------------- -// -// Copyright (c) Microsoft Corporation. All rights reserved. -// -// The use and distribution terms for this software are covered by the -// Common Public License 1.0 (http://opensource.org/licenses/cpl1.0.php) -// which can be found in the file CPL.TXT at the root of this distribution. -// By using this software in any fashion, you are agreeing to be bound by -// the terms of this license. -// -// You must not remove this notice, or any other, from this software. -// -// -// -// URI helper funtions. -// -//------------------------------------------------------------------------------------------------- - -#pragma once - - -#ifdef __cplusplus -extern "C" { -#endif - -enum URI_PROTOCOL -{ - URI_PROTOCOL_UNKNOWN, - URI_PROTOCOL_FILE, - URI_PROTOCOL_FTP, - URI_PROTOCOL_HTTP, - URI_PROTOCOL_LOCAL, - URI_PROTOCOL_UNC -}; - - -HRESULT DAPI UriCanonicalize( - __inout_z LPWSTR* psczUri - ); - -HRESULT DAPI UriCrack( - __in_z LPCWSTR wzUri, - __out_opt INTERNET_SCHEME* pScheme, - __deref_opt_out_z LPWSTR* psczHostName, - __out_opt INTERNET_PORT* pPort, - __deref_opt_out_z LPWSTR* psczUser, - __deref_opt_out_z LPWSTR* psczPassword, - __deref_opt_out_z LPWSTR* psczPath, - __deref_opt_out_z LPWSTR* psczQueryString - ); - -HRESULT DAPI UriCreate( - __inout_z LPWSTR* psczUri, - __in INTERNET_SCHEME scheme, - __in_z_opt LPWSTR wzHostName, - __in INTERNET_PORT port, - __in_z_opt LPWSTR wzUser, - __in_z_opt LPWSTR wzPassword, - __in_z_opt LPWSTR wzPath, - __in_z_opt LPWSTR wzQueryString - ); - -HRESULT DAPI UriCanonicalize( - __inout_z LPWSTR* psczUri - ); - -HRESULT DAPI UriFile( - __deref_out_z LPWSTR* psczFile, - __in_z LPCWSTR wzUri - ); - -HRESULT DAPI UriProtocol( - __in_z LPCWSTR wzUri, - __out URI_PROTOCOL* pProtocol - ); - -HRESULT DAPI UriRoot( - __in_z LPCWSTR wzUri, - __out LPWSTR* ppwzRoot, - __out_opt URI_PROTOCOL* pProtocol - ); - -HRESULT DAPI UriResolve( - __in_z LPCWSTR wzUri, - __in_opt LPCWSTR wzBaseUri, - __out LPWSTR* ppwzResolvedUri, - __out_opt const URI_PROTOCOL* pResolvedProtocol - ); - -#ifdef __cplusplus -} -#endif - +//------------------------------------------------------------------------------------------------- +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// The use and distribution terms for this software are covered by the +// Common Public License 1.0 (http://opensource.org/licenses/cpl1.0.php) +// which can be found in the file CPL.TXT at the root of this distribution. +// By using this software in any fashion, you are agreeing to be bound by +// the terms of this license. +// +// You must not remove this notice, or any other, from this software. +// +// +// +// URI helper funtions. +// +//------------------------------------------------------------------------------------------------- + +#pragma once + + +#ifdef __cplusplus +extern "C" { +#endif + +enum URI_PROTOCOL +{ + URI_PROTOCOL_UNKNOWN, + URI_PROTOCOL_FILE, + URI_PROTOCOL_FTP, + URI_PROTOCOL_HTTP, + URI_PROTOCOL_LOCAL, + URI_PROTOCOL_UNC +}; + + +HRESULT DAPI UriCanonicalize( + __inout_z LPWSTR* psczUri + ); + +HRESULT DAPI UriCrack( + __in_z LPCWSTR wzUri, + __out_opt INTERNET_SCHEME* pScheme, + __deref_opt_out_z LPWSTR* psczHostName, + __out_opt INTERNET_PORT* pPort, + __deref_opt_out_z LPWSTR* psczUser, + __deref_opt_out_z LPWSTR* psczPassword, + __deref_opt_out_z LPWSTR* psczPath, + __deref_opt_out_z LPWSTR* psczQueryString + ); + +HRESULT DAPI UriCreate( + __inout_z LPWSTR* psczUri, + __in INTERNET_SCHEME scheme, + __in_z_opt LPWSTR wzHostName, + __in INTERNET_PORT port, + __in_z_opt LPWSTR wzUser, + __in_z_opt LPWSTR wzPassword, + __in_z_opt LPWSTR wzPath, + __in_z_opt LPWSTR wzQueryString + ); + +HRESULT DAPI UriCanonicalize( + __inout_z LPWSTR* psczUri + ); + +HRESULT DAPI UriFile( + __deref_out_z LPWSTR* psczFile, + __in_z LPCWSTR wzUri + ); + +HRESULT DAPI UriProtocol( + __in_z LPCWSTR wzUri, + __out URI_PROTOCOL* pProtocol + ); + +HRESULT DAPI UriRoot( + __in_z LPCWSTR wzUri, + __out LPWSTR* ppwzRoot, + __out_opt URI_PROTOCOL* pProtocol + ); + +HRESULT DAPI UriResolve( + __in_z LPCWSTR wzUri, + __in_opt LPCWSTR wzBaseUri, + __out LPWSTR* ppwzResolvedUri, + __out_opt const URI_PROTOCOL* pResolvedProtocol + ); + +#ifdef __cplusplus +} +#endif + diff --git a/msi/build/A2Staging/wix35-binaries/sdk/inc/userutil.h b/msi/build/A2Staging/wix35-binaries/sdk/inc/userutil.h index 61e8b533fe..05d2936b1f 100644 --- a/msi/build/A2Staging/wix35-binaries/sdk/inc/userutil.h +++ b/msi/build/A2Staging/wix35-binaries/sdk/inc/userutil.h @@ -1,47 +1,47 @@ -#pragma once -//------------------------------------------------------------------------------------------------- -// -// Copyright (c) Microsoft Corporation. All rights reserved. -// -// The use and distribution terms for this software are covered by the -// Common Public License 1.0 (http://opensource.org/licenses/cpl1.0.php) -// which can be found in the file CPL.TXT at the root of this distribution. -// By using this software in any fashion, you are agreeing to be bound by -// the terms of this license. -// -// You must not remove this notice, or any other, from this software. -// -// -// -// User helper funtions. -// -//------------------------------------------------------------------------------------------------- - -#ifdef __cplusplus -extern "C" { -#endif - -HRESULT DAPI UserBuildDomainUserName( - __out_ecount_z(cchDest) LPWSTR wzDest, - __in int cchDest, - __in_z LPCWSTR pwzName, - __in_z LPCWSTR pwzDomain - ); - -HRESULT DAPI UserCheckIsMember( - __in_z LPCWSTR pwzName, - __in_z LPCWSTR pwzDomain, - __in_z LPCWSTR pwzGroupName, - __in_z LPCWSTR pwzGroupDomain, - __out LPBOOL lpfMember - ); - -HRESULT DAPI UserCreateADsPath( - __in_z LPCWSTR wzObjectDomain, - __in_z LPCWSTR wzObjectName, - __out BSTR *pbstrAdsPath - ); - -#ifdef __cplusplus -} -#endif +#pragma once +//------------------------------------------------------------------------------------------------- +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// The use and distribution terms for this software are covered by the +// Common Public License 1.0 (http://opensource.org/licenses/cpl1.0.php) +// which can be found in the file CPL.TXT at the root of this distribution. +// By using this software in any fashion, you are agreeing to be bound by +// the terms of this license. +// +// You must not remove this notice, or any other, from this software. +// +// +// +// User helper funtions. +// +//------------------------------------------------------------------------------------------------- + +#ifdef __cplusplus +extern "C" { +#endif + +HRESULT DAPI UserBuildDomainUserName( + __out_ecount_z(cchDest) LPWSTR wzDest, + __in int cchDest, + __in_z LPCWSTR pwzName, + __in_z LPCWSTR pwzDomain + ); + +HRESULT DAPI UserCheckIsMember( + __in_z LPCWSTR pwzName, + __in_z LPCWSTR pwzDomain, + __in_z LPCWSTR pwzGroupName, + __in_z LPCWSTR pwzGroupDomain, + __out LPBOOL lpfMember + ); + +HRESULT DAPI UserCreateADsPath( + __in_z LPCWSTR wzObjectDomain, + __in_z LPCWSTR wzObjectName, + __out BSTR *pbstrAdsPath + ); + +#ifdef __cplusplus +} +#endif diff --git a/msi/build/A2Staging/wix35-binaries/sdk/inc/wcautil.h b/msi/build/A2Staging/wix35-binaries/sdk/inc/wcautil.h index 960ead0d8a..95e8cef52e 100644 --- a/msi/build/A2Staging/wix35-binaries/sdk/inc/wcautil.h +++ b/msi/build/A2Staging/wix35-binaries/sdk/inc/wcautil.h @@ -1,379 +1,379 @@ -#pragma once -//------------------------------------------------------------------------------------------------- -// -// Copyright (c) Microsoft Corporation. All rights reserved. -// -// The use and distribution terms for this software are covered by the -// Common Public License 1.0 (http://opensource.org/licenses/cpl1.0.php) -// which can be found in the file CPL.TXT at the root of this distribution. -// By using this software in any fashion, you are agreeing to be bound by -// the terms of this license. -// -// You must not remove this notice, or any other, from this software. -// -// -// -// Windows Installer XML CustomAction utility library. -// -//------------------------------------------------------------------------------------------------- - -#ifdef __cplusplus -extern "C" { -#endif - -#define WIXAPI __stdcall -#define ExitTrace WcaLogError -#define ExitTrace1 WcaLogError -#define ExitTrace2 WcaLogError -#define ExitTrace3 WcaLogError - -#include "dutil.h" - -#define MessageExitOnLastError(x, e, s) { x = ::GetLastError(); x = HRESULT_FROM_WIN32(x); if (FAILED(x)) { ExitTrace(x, "%s", s); WcaErrorMessage(e, x, MB_OK, 0); goto LExit; } } -#define MessageExitOnLastError1(x, e, f, s) { x = ::GetLastError(); x = HRESULT_FROM_WIN32(x); if (FAILED(x)) { ExitTrace1(x, f, s); WcaErrorMessage(e, x, MB_OK, 1, s); goto LExit; } } - -#define MessageExitOnFailure(x, e, s) if (FAILED(x)) { ExitTrace(x, "%s", s); WcaErrorMessage(e, x, INSTALLMESSAGE_ERROR | MB_OK, 0); goto LExit; } -#define MessageExitOnFailure1(x, e, f, s) if (FAILED(x)) { ExitTrace1(x, f, s); WcaErrorMessage(e, x, INSTALLMESSAGE_ERROR | MB_OK, 1, s); goto LExit; } -#define MessageExitOnFailure2(x, e, f, s, t) if (FAILED(x)) { ExitTrace2(x, f, s, t); WcaErrorMessage(e, x, INSTALLMESSAGE_ERROR | MB_OK, 2, s, t); goto LExit; } -#define MessageExitOnFailure3(x, e, f, s, t, u) if (FAILED(x)) { ExitTrace2(x, f, s, t, u); WcaErrorMessage(e, x, INSTALLMESSAGE_ERROR | MB_OK, 3, s, t, u); goto LExit; } - -#define MessageExitOnNullWithLastError(p, x, e, s) if (NULL == p) { x = ::GetLastError(); x = HRESULT_FROM_WIN32(x); if (!FAILED(x)) { x = E_FAIL; } ExitTrace(x, "%s", s); WcaErrorMessage(e, x, MB_OK, 0); goto LExit; } -#define MessageExitOnNullWithLastError1(p, x, e, f, s) if (NULL == p) { x = ::GetLastError(); x = HRESULT_FROM_WIN32(x); if (!FAILED(x)) { x = E_FAIL; } ExitTrace(x, f, s); WcaErrorMessage(e, x, MB_OK, 1, s); goto LExit; } -#define MessageExitOnNullWithLastError2(p, x, e, f, s, t) if (NULL == p) { x = ::GetLastError(); x = HRESULT_FROM_WIN32(x); if (!FAILED(x)) { x = E_FAIL; } ExitTrace(x, f, s, t); WcaErrorMessage(e, x, MB_OK, 2, s, t); goto LExit; } - -// Generic action enum. -enum WCA_ACTION -{ - WCA_ACTION_NONE, - WCA_ACTION_INSTALL, - WCA_ACTION_UNINSTALL, -}; - -enum WCA_CASCRIPT -{ - WCA_CASCRIPT_SCHEDULED, - WCA_CASCRIPT_ROLLBACK, -}; - -enum WCA_CASCRIPT_CLOSE -{ - WCA_CASCRIPT_CLOSE_PRESERVE, - WCA_CASCRIPT_CLOSE_DELETE, -}; - -enum WCA_TODO -{ - WCA_TODO_UNKNOWN, - WCA_TODO_INSTALL, - WCA_TODO_UNINSTALL, - WCA_TODO_REINSTALL, -}; - -typedef struct WCA_CASCRIPT_STRUCT -{ - LPWSTR pwzScriptPath; - HANDLE hScriptFile; -} *WCA_CASCRIPT_HANDLE; - -void WIXAPI WcaGlobalInitialize( - __in HINSTANCE hInst - ); -void WIXAPI WcaGlobalFinalize(); - -HRESULT WIXAPI WcaInitialize( - __in MSIHANDLE hInstall, - __in_z PCSTR szCustomActionLogName - ); -UINT WIXAPI WcaFinalize( - __in UINT iReturnValue - ); -BOOL WIXAPI WcaIsInitialized(); - -MSIHANDLE WIXAPI WcaGetInstallHandle(); -MSIHANDLE WIXAPI WcaGetDatabaseHandle(); - -const char* WIXAPI WcaGetLogName(); - -void WIXAPI WcaSetReturnValue( - __in UINT iReturnValue - ); -BOOL WIXAPI WcaCancelDetected(); - -const int LOG_BUFFER = 2048; -enum LOGLEVEL -{ - LOGMSG_TRACEONLY, // Never written to the log file (except in DEBUG builds) - LOGMSG_VERBOSE, // Written to log when LOGVERBOSE - LOGMSG_STANDARD // Written to log whenever informational logging is enabled -}; - -void __cdecl WcaLog( - __in LOGLEVEL llv, - __in_z __format_string PCSTR fmt, ... - ); -BOOL WIXAPI WcaDisplayAssert( - __in LPCSTR sz - ); -void __cdecl WcaLogError( - __in HRESULT hr, - __in LPCSTR szMessage, - ... - ); - -UINT WIXAPI WcaProcessMessage( - __in INSTALLMESSAGE eMessageType, - __in MSIHANDLE hRecord - ); -UINT __cdecl WcaErrorMessage( - __in int iError, - __in HRESULT hrError, - __in UINT uiType, - __in DWORD cArgs, - ... - ); -HRESULT WIXAPI WcaProgressMessage( - __in UINT uiCost, - __in BOOL fExtendProgressBar - ); - -BOOL WIXAPI WcaIsInstalling( - __in INSTALLSTATE isInstalled, - __in INSTALLSTATE isAction - ); -BOOL WIXAPI WcaIsReInstalling( - __in INSTALLSTATE isInstalled, - __in INSTALLSTATE isAction - ); -BOOL WIXAPI WcaIsUninstalling( - __in INSTALLSTATE isInstalled, - __in INSTALLSTATE isAction - ); - -HRESULT WIXAPI WcaSetComponentState( - __in_z LPCWSTR wzComponent, - __in INSTALLSTATE isState - ); - -HRESULT WIXAPI WcaTableExists( - __in_z LPCWSTR wzTable - ); - -HRESULT WIXAPI WcaOpenView( - __in_z LPCWSTR wzSql, - __out MSIHANDLE* phView - ); -HRESULT WIXAPI WcaExecuteView( - __in MSIHANDLE hView, - __in MSIHANDLE hRec - ); -HRESULT WIXAPI WcaOpenExecuteView( - __in_z LPCWSTR wzSql, - __out MSIHANDLE* phView - ); -HRESULT WIXAPI WcaFetchRecord( - __in MSIHANDLE hView, - __out MSIHANDLE* phRec - ); -HRESULT WIXAPI WcaFetchSingleRecord( - __in MSIHANDLE hView, - __out MSIHANDLE* phRec - ); - -HRESULT WIXAPI WcaGetProperty( - __in_z LPCWSTR wzProperty, - __inout LPWSTR* ppwzData - ); -HRESULT WIXAPI WcaGetFormattedProperty( - __in_z LPCWSTR wzProperty, - __out LPWSTR* ppwzData - ); -HRESULT WIXAPI WcaGetFormattedString( - __in_z LPCWSTR wzString, - __out LPWSTR* ppwzData - ); -HRESULT WIXAPI WcaGetIntProperty( - __in_z LPCWSTR wzProperty, - __inout int* piData - ); -HRESULT WIXAPI WcaGetTargetPath( - __in_z LPCWSTR wzFolder, - __out LPWSTR* ppwzData - ); -HRESULT WIXAPI WcaSetProperty( - __in_z LPCWSTR wzPropertyName, - __in_z LPCWSTR wzPropertyValue - ); -HRESULT WIXAPI WcaSetIntProperty( - __in_z LPCWSTR wzPropertyName, - __in int nPropertyValue - ); -BOOL WIXAPI WcaIsPropertySet( - __in LPCSTR szProperty - ); - -HRESULT WIXAPI WcaGetRecordInteger( - __in MSIHANDLE hRec, - __in UINT uiField, - __inout int* piData - ); -HRESULT WIXAPI WcaGetRecordString( - __in MSIHANDLE hRec, - __in UINT uiField, - __inout LPWSTR* ppwzData - ); -HRESULT WIXAPI WcaGetRecordFormattedInteger( - __in MSIHANDLE hRec, - __in UINT uiField, - __out int* piData - ); -HRESULT WIXAPI WcaGetRecordFormattedString( - __in MSIHANDLE hRec, - __in UINT uiField, - __inout LPWSTR* ppwzData - ); - -HRESULT WIXAPI WcaAllocStream( - __deref_out_bcount_part(cbData, 0) BYTE** ppbData, - __in DWORD cbData - ); -HRESULT WIXAPI WcaFreeStream( - __in BYTE* pbData - ); - -HRESULT WIXAPI WcaGetRecordStream( - __in MSIHANDLE hRecBinary, - __in UINT uiField, - __deref_out_bcount_full(*pcbData) BYTE** ppbData, - __out DWORD* pcbData - ); -HRESULT WIXAPI WcaSetRecordString( - __in MSIHANDLE hRec, - __in UINT uiField, - __in_z LPCWSTR wzData - ); -HRESULT WIXAPI WcaSetRecordInteger( - __in MSIHANDLE hRec, - __in UINT uiField, - __in int iValue - ); - -HRESULT WIXAPI WcaDoDeferredAction( - __in_z LPCWSTR wzAction, - __in_z LPCWSTR wzCustomActionData, - __in UINT uiCost - ); -DWORD WIXAPI WcaCountOfCustomActionDataRecords( - __in_z LPCWSTR wzData - ); - -void WIXAPI RevertCustomActionData( - __in LPWSTR wzRevertTo, - __in LPCWSTR wzRevertFrom - ); - -HRESULT WIXAPI WcaReadStringFromCaData( - __deref_in LPWSTR* ppwzCustomActionData, - __deref_out_z LPWSTR* ppwzString - ); -HRESULT WIXAPI WcaReadIntegerFromCaData( - __deref_in LPWSTR* ppwzCustomActionData, - __out int* piResult - ); -HRESULT WIXAPI WcaReadStreamFromCaData( - __deref_in LPWSTR* ppwzCustomActionData, - __deref_out_bcount(*pcbData) BYTE** ppbData, - __out DWORD_PTR* pcbData - ); -HRESULT WIXAPI WcaWriteStringToCaData( - __in_z LPCWSTR wzString, - __deref_inout_z LPWSTR* ppwzCustomActionData - ); -HRESULT WIXAPI WcaWriteIntegerToCaData( - __in int i, - __deref_inout_z LPWSTR* ppwzCustomActionData - ); -HRESULT WIXAPI WcaWriteStreamToCaData( - __in_bcount(cbData) const BYTE* pbData, - __in DWORD cbData, - __deref_inout_z LPWSTR* ppwzCustomActionData - ); - -HRESULT __cdecl WcaAddTempRecord( - __inout MSIHANDLE* phTableView, - __inout MSIHANDLE* phColumns, - __in_z LPCWSTR wzTable, - __out_opt MSIDBERROR* pdbError, - __in UINT uiUniquifyColumn, - __in UINT cColumns, - ... - ); - -HRESULT WIXAPI WcaDumpTable( - __in_z LPCWSTR wzTable - ); - -HRESULT WIXAPI WcaDeferredActionRequiresReboot(); -BOOL WIXAPI WcaDidDeferredActionRequireReboot(); - -HRESULT WIXAPI WcaCaScriptCreateKey( - __out LPWSTR* ppwzScriptKey - ); - -HRESULT WIXAPI WcaCaScriptCreate( - __in WCA_ACTION action, - __in WCA_CASCRIPT script, - __in BOOL fImpersonated, - __in_z LPCWSTR wzScriptKey, - __in BOOL fAppend, - __out WCA_CASCRIPT_HANDLE* phScript - ); - -HRESULT WIXAPI WcaCaScriptOpen( - __in WCA_ACTION action, - __in WCA_CASCRIPT script, - __in BOOL fImpersonated, - __in_z LPCWSTR wzScriptKey, - __out WCA_CASCRIPT_HANDLE* phScript - ); - -void WIXAPI WcaCaScriptClose( - __in_opt WCA_CASCRIPT_HANDLE hScript, - __in WCA_CASCRIPT_CLOSE closeOperation - ); - -HRESULT WIXAPI WcaCaScriptReadAsCustomActionData( - __in WCA_CASCRIPT_HANDLE hScript, - __out LPWSTR* ppwzCustomActionData - ); - -HRESULT WIXAPI WcaCaScriptWriteString( - __in WCA_CASCRIPT_HANDLE hScript, - __in_z LPCWSTR wzValue - ); - -HRESULT WIXAPI WcaCaScriptWriteNumber( - __in WCA_CASCRIPT_HANDLE hScript, - __in DWORD dwValue - ); - -void WIXAPI WcaCaScriptFlush( - __in WCA_CASCRIPT_HANDLE hScript - ); - -void WIXAPI WcaCaScriptCleanup( - __in_z LPCWSTR wzProductCode, - __in BOOL fImpersonated - ); - -HRESULT WIXAPI QuietExec( - __inout_z LPWSTR wzCommand, - __in DWORD dwTimeout - ); - -WCA_TODO WIXAPI WcaGetComponentToDo( - __in_z LPCWSTR wzComponentId - ); - -#ifdef __cplusplus -} -#endif +#pragma once +//------------------------------------------------------------------------------------------------- +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// The use and distribution terms for this software are covered by the +// Common Public License 1.0 (http://opensource.org/licenses/cpl1.0.php) +// which can be found in the file CPL.TXT at the root of this distribution. +// By using this software in any fashion, you are agreeing to be bound by +// the terms of this license. +// +// You must not remove this notice, or any other, from this software. +// +// +// +// Windows Installer XML CustomAction utility library. +// +//------------------------------------------------------------------------------------------------- + +#ifdef __cplusplus +extern "C" { +#endif + +#define WIXAPI __stdcall +#define ExitTrace WcaLogError +#define ExitTrace1 WcaLogError +#define ExitTrace2 WcaLogError +#define ExitTrace3 WcaLogError + +#include "dutil.h" + +#define MessageExitOnLastError(x, e, s) { x = ::GetLastError(); x = HRESULT_FROM_WIN32(x); if (FAILED(x)) { ExitTrace(x, "%s", s); WcaErrorMessage(e, x, MB_OK, 0); goto LExit; } } +#define MessageExitOnLastError1(x, e, f, s) { x = ::GetLastError(); x = HRESULT_FROM_WIN32(x); if (FAILED(x)) { ExitTrace1(x, f, s); WcaErrorMessage(e, x, MB_OK, 1, s); goto LExit; } } + +#define MessageExitOnFailure(x, e, s) if (FAILED(x)) { ExitTrace(x, "%s", s); WcaErrorMessage(e, x, INSTALLMESSAGE_ERROR | MB_OK, 0); goto LExit; } +#define MessageExitOnFailure1(x, e, f, s) if (FAILED(x)) { ExitTrace1(x, f, s); WcaErrorMessage(e, x, INSTALLMESSAGE_ERROR | MB_OK, 1, s); goto LExit; } +#define MessageExitOnFailure2(x, e, f, s, t) if (FAILED(x)) { ExitTrace2(x, f, s, t); WcaErrorMessage(e, x, INSTALLMESSAGE_ERROR | MB_OK, 2, s, t); goto LExit; } +#define MessageExitOnFailure3(x, e, f, s, t, u) if (FAILED(x)) { ExitTrace2(x, f, s, t, u); WcaErrorMessage(e, x, INSTALLMESSAGE_ERROR | MB_OK, 3, s, t, u); goto LExit; } + +#define MessageExitOnNullWithLastError(p, x, e, s) if (NULL == p) { x = ::GetLastError(); x = HRESULT_FROM_WIN32(x); if (!FAILED(x)) { x = E_FAIL; } ExitTrace(x, "%s", s); WcaErrorMessage(e, x, MB_OK, 0); goto LExit; } +#define MessageExitOnNullWithLastError1(p, x, e, f, s) if (NULL == p) { x = ::GetLastError(); x = HRESULT_FROM_WIN32(x); if (!FAILED(x)) { x = E_FAIL; } ExitTrace(x, f, s); WcaErrorMessage(e, x, MB_OK, 1, s); goto LExit; } +#define MessageExitOnNullWithLastError2(p, x, e, f, s, t) if (NULL == p) { x = ::GetLastError(); x = HRESULT_FROM_WIN32(x); if (!FAILED(x)) { x = E_FAIL; } ExitTrace(x, f, s, t); WcaErrorMessage(e, x, MB_OK, 2, s, t); goto LExit; } + +// Generic action enum. +enum WCA_ACTION +{ + WCA_ACTION_NONE, + WCA_ACTION_INSTALL, + WCA_ACTION_UNINSTALL, +}; + +enum WCA_CASCRIPT +{ + WCA_CASCRIPT_SCHEDULED, + WCA_CASCRIPT_ROLLBACK, +}; + +enum WCA_CASCRIPT_CLOSE +{ + WCA_CASCRIPT_CLOSE_PRESERVE, + WCA_CASCRIPT_CLOSE_DELETE, +}; + +enum WCA_TODO +{ + WCA_TODO_UNKNOWN, + WCA_TODO_INSTALL, + WCA_TODO_UNINSTALL, + WCA_TODO_REINSTALL, +}; + +typedef struct WCA_CASCRIPT_STRUCT +{ + LPWSTR pwzScriptPath; + HANDLE hScriptFile; +} *WCA_CASCRIPT_HANDLE; + +void WIXAPI WcaGlobalInitialize( + __in HINSTANCE hInst + ); +void WIXAPI WcaGlobalFinalize(); + +HRESULT WIXAPI WcaInitialize( + __in MSIHANDLE hInstall, + __in_z PCSTR szCustomActionLogName + ); +UINT WIXAPI WcaFinalize( + __in UINT iReturnValue + ); +BOOL WIXAPI WcaIsInitialized(); + +MSIHANDLE WIXAPI WcaGetInstallHandle(); +MSIHANDLE WIXAPI WcaGetDatabaseHandle(); + +const char* WIXAPI WcaGetLogName(); + +void WIXAPI WcaSetReturnValue( + __in UINT iReturnValue + ); +BOOL WIXAPI WcaCancelDetected(); + +const int LOG_BUFFER = 2048; +enum LOGLEVEL +{ + LOGMSG_TRACEONLY, // Never written to the log file (except in DEBUG builds) + LOGMSG_VERBOSE, // Written to log when LOGVERBOSE + LOGMSG_STANDARD // Written to log whenever informational logging is enabled +}; + +void __cdecl WcaLog( + __in LOGLEVEL llv, + __in_z __format_string PCSTR fmt, ... + ); +BOOL WIXAPI WcaDisplayAssert( + __in LPCSTR sz + ); +void __cdecl WcaLogError( + __in HRESULT hr, + __in LPCSTR szMessage, + ... + ); + +UINT WIXAPI WcaProcessMessage( + __in INSTALLMESSAGE eMessageType, + __in MSIHANDLE hRecord + ); +UINT __cdecl WcaErrorMessage( + __in int iError, + __in HRESULT hrError, + __in UINT uiType, + __in DWORD cArgs, + ... + ); +HRESULT WIXAPI WcaProgressMessage( + __in UINT uiCost, + __in BOOL fExtendProgressBar + ); + +BOOL WIXAPI WcaIsInstalling( + __in INSTALLSTATE isInstalled, + __in INSTALLSTATE isAction + ); +BOOL WIXAPI WcaIsReInstalling( + __in INSTALLSTATE isInstalled, + __in INSTALLSTATE isAction + ); +BOOL WIXAPI WcaIsUninstalling( + __in INSTALLSTATE isInstalled, + __in INSTALLSTATE isAction + ); + +HRESULT WIXAPI WcaSetComponentState( + __in_z LPCWSTR wzComponent, + __in INSTALLSTATE isState + ); + +HRESULT WIXAPI WcaTableExists( + __in_z LPCWSTR wzTable + ); + +HRESULT WIXAPI WcaOpenView( + __in_z LPCWSTR wzSql, + __out MSIHANDLE* phView + ); +HRESULT WIXAPI WcaExecuteView( + __in MSIHANDLE hView, + __in MSIHANDLE hRec + ); +HRESULT WIXAPI WcaOpenExecuteView( + __in_z LPCWSTR wzSql, + __out MSIHANDLE* phView + ); +HRESULT WIXAPI WcaFetchRecord( + __in MSIHANDLE hView, + __out MSIHANDLE* phRec + ); +HRESULT WIXAPI WcaFetchSingleRecord( + __in MSIHANDLE hView, + __out MSIHANDLE* phRec + ); + +HRESULT WIXAPI WcaGetProperty( + __in_z LPCWSTR wzProperty, + __inout LPWSTR* ppwzData + ); +HRESULT WIXAPI WcaGetFormattedProperty( + __in_z LPCWSTR wzProperty, + __out LPWSTR* ppwzData + ); +HRESULT WIXAPI WcaGetFormattedString( + __in_z LPCWSTR wzString, + __out LPWSTR* ppwzData + ); +HRESULT WIXAPI WcaGetIntProperty( + __in_z LPCWSTR wzProperty, + __inout int* piData + ); +HRESULT WIXAPI WcaGetTargetPath( + __in_z LPCWSTR wzFolder, + __out LPWSTR* ppwzData + ); +HRESULT WIXAPI WcaSetProperty( + __in_z LPCWSTR wzPropertyName, + __in_z LPCWSTR wzPropertyValue + ); +HRESULT WIXAPI WcaSetIntProperty( + __in_z LPCWSTR wzPropertyName, + __in int nPropertyValue + ); +BOOL WIXAPI WcaIsPropertySet( + __in LPCSTR szProperty + ); + +HRESULT WIXAPI WcaGetRecordInteger( + __in MSIHANDLE hRec, + __in UINT uiField, + __inout int* piData + ); +HRESULT WIXAPI WcaGetRecordString( + __in MSIHANDLE hRec, + __in UINT uiField, + __inout LPWSTR* ppwzData + ); +HRESULT WIXAPI WcaGetRecordFormattedInteger( + __in MSIHANDLE hRec, + __in UINT uiField, + __out int* piData + ); +HRESULT WIXAPI WcaGetRecordFormattedString( + __in MSIHANDLE hRec, + __in UINT uiField, + __inout LPWSTR* ppwzData + ); + +HRESULT WIXAPI WcaAllocStream( + __deref_out_bcount_part(cbData, 0) BYTE** ppbData, + __in DWORD cbData + ); +HRESULT WIXAPI WcaFreeStream( + __in BYTE* pbData + ); + +HRESULT WIXAPI WcaGetRecordStream( + __in MSIHANDLE hRecBinary, + __in UINT uiField, + __deref_out_bcount_full(*pcbData) BYTE** ppbData, + __out DWORD* pcbData + ); +HRESULT WIXAPI WcaSetRecordString( + __in MSIHANDLE hRec, + __in UINT uiField, + __in_z LPCWSTR wzData + ); +HRESULT WIXAPI WcaSetRecordInteger( + __in MSIHANDLE hRec, + __in UINT uiField, + __in int iValue + ); + +HRESULT WIXAPI WcaDoDeferredAction( + __in_z LPCWSTR wzAction, + __in_z LPCWSTR wzCustomActionData, + __in UINT uiCost + ); +DWORD WIXAPI WcaCountOfCustomActionDataRecords( + __in_z LPCWSTR wzData + ); + +void WIXAPI RevertCustomActionData( + __in LPWSTR wzRevertTo, + __in LPCWSTR wzRevertFrom + ); + +HRESULT WIXAPI WcaReadStringFromCaData( + __deref_in LPWSTR* ppwzCustomActionData, + __deref_out_z LPWSTR* ppwzString + ); +HRESULT WIXAPI WcaReadIntegerFromCaData( + __deref_in LPWSTR* ppwzCustomActionData, + __out int* piResult + ); +HRESULT WIXAPI WcaReadStreamFromCaData( + __deref_in LPWSTR* ppwzCustomActionData, + __deref_out_bcount(*pcbData) BYTE** ppbData, + __out DWORD_PTR* pcbData + ); +HRESULT WIXAPI WcaWriteStringToCaData( + __in_z LPCWSTR wzString, + __deref_inout_z LPWSTR* ppwzCustomActionData + ); +HRESULT WIXAPI WcaWriteIntegerToCaData( + __in int i, + __deref_inout_z LPWSTR* ppwzCustomActionData + ); +HRESULT WIXAPI WcaWriteStreamToCaData( + __in_bcount(cbData) const BYTE* pbData, + __in DWORD cbData, + __deref_inout_z LPWSTR* ppwzCustomActionData + ); + +HRESULT __cdecl WcaAddTempRecord( + __inout MSIHANDLE* phTableView, + __inout MSIHANDLE* phColumns, + __in_z LPCWSTR wzTable, + __out_opt MSIDBERROR* pdbError, + __in UINT uiUniquifyColumn, + __in UINT cColumns, + ... + ); + +HRESULT WIXAPI WcaDumpTable( + __in_z LPCWSTR wzTable + ); + +HRESULT WIXAPI WcaDeferredActionRequiresReboot(); +BOOL WIXAPI WcaDidDeferredActionRequireReboot(); + +HRESULT WIXAPI WcaCaScriptCreateKey( + __out LPWSTR* ppwzScriptKey + ); + +HRESULT WIXAPI WcaCaScriptCreate( + __in WCA_ACTION action, + __in WCA_CASCRIPT script, + __in BOOL fImpersonated, + __in_z LPCWSTR wzScriptKey, + __in BOOL fAppend, + __out WCA_CASCRIPT_HANDLE* phScript + ); + +HRESULT WIXAPI WcaCaScriptOpen( + __in WCA_ACTION action, + __in WCA_CASCRIPT script, + __in BOOL fImpersonated, + __in_z LPCWSTR wzScriptKey, + __out WCA_CASCRIPT_HANDLE* phScript + ); + +void WIXAPI WcaCaScriptClose( + __in_opt WCA_CASCRIPT_HANDLE hScript, + __in WCA_CASCRIPT_CLOSE closeOperation + ); + +HRESULT WIXAPI WcaCaScriptReadAsCustomActionData( + __in WCA_CASCRIPT_HANDLE hScript, + __out LPWSTR* ppwzCustomActionData + ); + +HRESULT WIXAPI WcaCaScriptWriteString( + __in WCA_CASCRIPT_HANDLE hScript, + __in_z LPCWSTR wzValue + ); + +HRESULT WIXAPI WcaCaScriptWriteNumber( + __in WCA_CASCRIPT_HANDLE hScript, + __in DWORD dwValue + ); + +void WIXAPI WcaCaScriptFlush( + __in WCA_CASCRIPT_HANDLE hScript + ); + +void WIXAPI WcaCaScriptCleanup( + __in_z LPCWSTR wzProductCode, + __in BOOL fImpersonated + ); + +HRESULT WIXAPI QuietExec( + __inout_z LPWSTR wzCommand, + __in DWORD dwTimeout + ); + +WCA_TODO WIXAPI WcaGetComponentToDo( + __in_z LPCWSTR wzComponentId + ); + +#ifdef __cplusplus +} +#endif diff --git a/msi/build/A2Staging/wix35-binaries/sdk/inc/wcawow64.h b/msi/build/A2Staging/wix35-binaries/sdk/inc/wcawow64.h index 6ad5c6d759..9cfc60a711 100644 --- a/msi/build/A2Staging/wix35-binaries/sdk/inc/wcawow64.h +++ b/msi/build/A2Staging/wix35-binaries/sdk/inc/wcawow64.h @@ -1,35 +1,35 @@ -#pragma once -//------------------------------------------------------------------------------------------------- -// -// Copyright (c) Microsoft Corporation. All rights reserved. -// -// The use and distribution terms for this software are covered by the -// Common Public License 1.0 (http://opensource.org/licenses/cpl1.0.php) -// which can be found in the file CPL.TXT at the root of this distribution. -// By using this software in any fashion, you are agreeing to be bound by -// the terms of this license. -// -// You must not remove this notice, or any other, from this software. -// -// -// -// Windows Installer XML CustomAction utility library for Wow64 API-related functionality. -// -//------------------------------------------------------------------------------------------------- - -#include "wcautil.h" - -#ifdef __cplusplus -extern "C" { -#endif - -HRESULT WIXAPI WcaInitializeWow64(); -BOOL WIXAPI WcaIsWow64Process(); -BOOL WIXAPI WcaIsWow64Initialized(); -HRESULT WIXAPI WcaDisableWow64FSRedirection(); -HRESULT WIXAPI WcaRevertWow64FSRedirection(); -HRESULT WIXAPI WcaFinalizeWow64(); - -#ifdef __cplusplus -} -#endif +#pragma once +//------------------------------------------------------------------------------------------------- +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// The use and distribution terms for this software are covered by the +// Common Public License 1.0 (http://opensource.org/licenses/cpl1.0.php) +// which can be found in the file CPL.TXT at the root of this distribution. +// By using this software in any fashion, you are agreeing to be bound by +// the terms of this license. +// +// You must not remove this notice, or any other, from this software. +// +// +// +// Windows Installer XML CustomAction utility library for Wow64 API-related functionality. +// +//------------------------------------------------------------------------------------------------- + +#include "wcautil.h" + +#ifdef __cplusplus +extern "C" { +#endif + +HRESULT WIXAPI WcaInitializeWow64(); +BOOL WIXAPI WcaIsWow64Process(); +BOOL WIXAPI WcaIsWow64Initialized(); +HRESULT WIXAPI WcaDisableWow64FSRedirection(); +HRESULT WIXAPI WcaRevertWow64FSRedirection(); +HRESULT WIXAPI WcaFinalizeWow64(); + +#ifdef __cplusplus +} +#endif diff --git a/msi/build/A2Staging/wix35-binaries/sdk/inc/wcawrapquery.h b/msi/build/A2Staging/wix35-binaries/sdk/inc/wcawrapquery.h index 747aee2ee6..b74f7d441e 100644 --- a/msi/build/A2Staging/wix35-binaries/sdk/inc/wcawrapquery.h +++ b/msi/build/A2Staging/wix35-binaries/sdk/inc/wcawrapquery.h @@ -1,146 +1,146 @@ -#pragma once -//------------------------------------------------------------------------------------------------- -// -// Copyright (c) Microsoft Corporation. All rights reserved. -// -// The use and distribution terms for this software are covered by the -// Common Public License 1.0 (http://opensource.org/licenses/cpl1.0.php) -// which can be found in the file CPL.TXT at the root of this distribution. -// By using this software in any fashion, you are agreeing to be bound by -// the terms of this license. -// -// You must not remove this notice, or any other, from this software. -// -// -// -// Windows Installer XML CustomAction utility library wrappers meant to wrap an MSI view as -// opened by an immediate custom action and transmit it to a deferred custom action -// -//------------------------------------------------------------------------------------------------- - -#include "wcautil.h" - -// Enumerations -enum eWrapQueryAction -{ - wqaTableBegin = 1, - wqaTableFinish, - wqaRowBegin, - wqaRowFinish -}; - -enum eColumnDataType -{ - cdtString = 1, - cdtInt, - cdtStream, - cdtUnknown -}; - -enum eFormatMaskColumn -{ - efmcColumn1 = 1, - efmcColumn2 = 1 << 1, - efmcColumn3 = 1 << 2, - efmcColumn4 = 1 << 3, - efmcColumn5 = 1 << 4, - efmcColumn6 = 1 << 5, - efmcColumn7 = 1 << 6, - efmcColumn8 = 1 << 7, - efmcColumn9 = 1 << 8, - efmcColumn10 = 1 << 9, - efmcColumn11 = 1 << 10, - efmcColumn12 = 1 << 11, - efmcColumn13 = 1 << 12, - efmcColumn14 = 1 << 13, - efmcColumn15 = 1 << 14, - efmcColumn16 = 1 << 15, - efmcColumn17 = 1 << 16, - efmcColumn18 = 1 << 17, - efmcColumn19 = 1 << 18, - efmcColumn20 = 1 << 19, - efmcColumn21 = 1 << 20, - efmcColumn22 = 1 << 21, - efmcColumn23 = 1 << 22, - efmcColumn24 = 1 << 23, - efmcColumn25 = 1 << 24, - efmcColumn26 = 1 << 25, - efmcColumn27 = 1 << 26, - efmcColumn28 = 1 << 27, - efmcColumn29 = 1 << 28, - efmcColumn30 = 1 << 29, - efmcColumn31 = 1 << 30, - efmcColumn32 = 1 << 31, -}; - -// Keeps track of the query instance for the reading CA (deferred CA) -typedef struct WCA_WRAPQUERY_STRUCT -{ - // These are used to size our dynamic arrays below - DWORD dwColumns, dwRows, dwNextIndex; - - // Dynamic arrays of column schema information - eColumnDataType *pcdtColumnType; - LPWSTR *ppwzColumnNames; - - // Dynamic array of raw record data - MSIHANDLE *phRecords; -} *WCA_WRAPQUERY_HANDLE; - -// Wrap a query -// Setting the pfFormatMask enables control over which fields will be formatted, and which will be left unchanged -// Setting dwComponentColumn to something other than 0xFFFFFFFF tells WcaWrapQuery to add two additional columns to the right side of the table -// - ISInstalled and ISAction - which map to the ComponentState of the component (the component is found in the column specified) -// Note that if a component is NULL, the component state columns will also be left null, and it will be up to the deferred CA to fail or ignore the case appropriately -// Setting dwDirectoryColumn to something other than 0xFFFFFFFF tells WcaWrapQuery to add two more additional columns to the right side of the table -// - SourcePath and TargetPath - which map to the Directory's Source and Target Path (the directory is found in the column specified) -// Note that if a directory is NULL, the directory source/target path columns will also be left null, and it will be up to the deferred CA to fail or ignore the case appropriately -HRESULT WIXAPI WcaWrapQuery( - __in_z LPCWSTR pwzQuery, - __inout LPWSTR * ppwzCustomActionData, - __in_opt DWORD dwFormatMask, - __in_opt DWORD dwComponentColumn, - __in_opt DWORD dwDirectoryColumn - ); -// This wraps an empty table query into the custom action data - this is a way to indicate to the deferred custom action that a necessary table doesn't exist, or its query returned no results -HRESULT WIXAPI WcaWrapEmptyQuery( - __inout LPWSTR * ppwzCustomActionData - ); - -// Open a new unwrap query operation, with data from the ppwzCustomActionData string -HRESULT WIXAPI WcaBeginUnwrapQuery( - __out WCA_WRAPQUERY_HANDLE * phWrapQuery, - __inout LPWSTR * ppwzCustomActionData - ); - -// Get the number of records in a query being unwrapped -DWORD WIXAPI WcaGetQueryRecords( - __in const WCA_WRAPQUERY_HANDLE hWrapQuery - ); - -// This function resets a query back to its first row, so that the next fetch returns the first record -void WIXAPI WcaFetchWrappedReset( - __in WCA_WRAPQUERY_HANDLE hWrapQuery - ); -// Fetch the next record in this query -// NOTE: the MSIHANDLE returned by this function should not be released, as it is the same handle used by the query object to maintain the item. -// so, don't use this function with PMSIHANDLE objects! -HRESULT WIXAPI WcaFetchWrappedRecord( - __in WCA_WRAPQUERY_HANDLE hWrapQuery, - __out MSIHANDLE* phRec - ); - -// Fetch the next record in the query where the string value in column dwComparisonColumn equals the value pwzExpectedValue -// NOTE: the MSIHANDLE returned by this function should not be released, as it is the same handle used by the query object to maintain the item. -// so, don't use this function with PMSIHANDLE objects! -HRESULT WIXAPI WcaFetchWrappedRecordWhereString( - __in WCA_WRAPQUERY_HANDLE hWrapQuery, - __in DWORD dwComparisonColumn, - __in_z LPCWSTR pwzExpectedValue, - __out MSIHANDLE* phRec - ); - -// Release a query ID (frees memory, and frees the ID for a new query) -void WIXAPI WcaFinishUnwrapQuery( - __in_opt WCA_WRAPQUERY_HANDLE hWrapQuery - ); +#pragma once +//------------------------------------------------------------------------------------------------- +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// The use and distribution terms for this software are covered by the +// Common Public License 1.0 (http://opensource.org/licenses/cpl1.0.php) +// which can be found in the file CPL.TXT at the root of this distribution. +// By using this software in any fashion, you are agreeing to be bound by +// the terms of this license. +// +// You must not remove this notice, or any other, from this software. +// +// +// +// Windows Installer XML CustomAction utility library wrappers meant to wrap an MSI view as +// opened by an immediate custom action and transmit it to a deferred custom action +// +//------------------------------------------------------------------------------------------------- + +#include "wcautil.h" + +// Enumerations +enum eWrapQueryAction +{ + wqaTableBegin = 1, + wqaTableFinish, + wqaRowBegin, + wqaRowFinish +}; + +enum eColumnDataType +{ + cdtString = 1, + cdtInt, + cdtStream, + cdtUnknown +}; + +enum eFormatMaskColumn +{ + efmcColumn1 = 1, + efmcColumn2 = 1 << 1, + efmcColumn3 = 1 << 2, + efmcColumn4 = 1 << 3, + efmcColumn5 = 1 << 4, + efmcColumn6 = 1 << 5, + efmcColumn7 = 1 << 6, + efmcColumn8 = 1 << 7, + efmcColumn9 = 1 << 8, + efmcColumn10 = 1 << 9, + efmcColumn11 = 1 << 10, + efmcColumn12 = 1 << 11, + efmcColumn13 = 1 << 12, + efmcColumn14 = 1 << 13, + efmcColumn15 = 1 << 14, + efmcColumn16 = 1 << 15, + efmcColumn17 = 1 << 16, + efmcColumn18 = 1 << 17, + efmcColumn19 = 1 << 18, + efmcColumn20 = 1 << 19, + efmcColumn21 = 1 << 20, + efmcColumn22 = 1 << 21, + efmcColumn23 = 1 << 22, + efmcColumn24 = 1 << 23, + efmcColumn25 = 1 << 24, + efmcColumn26 = 1 << 25, + efmcColumn27 = 1 << 26, + efmcColumn28 = 1 << 27, + efmcColumn29 = 1 << 28, + efmcColumn30 = 1 << 29, + efmcColumn31 = 1 << 30, + efmcColumn32 = 1 << 31, +}; + +// Keeps track of the query instance for the reading CA (deferred CA) +typedef struct WCA_WRAPQUERY_STRUCT +{ + // These are used to size our dynamic arrays below + DWORD dwColumns, dwRows, dwNextIndex; + + // Dynamic arrays of column schema information + eColumnDataType *pcdtColumnType; + LPWSTR *ppwzColumnNames; + + // Dynamic array of raw record data + MSIHANDLE *phRecords; +} *WCA_WRAPQUERY_HANDLE; + +// Wrap a query +// Setting the pfFormatMask enables control over which fields will be formatted, and which will be left unchanged +// Setting dwComponentColumn to something other than 0xFFFFFFFF tells WcaWrapQuery to add two additional columns to the right side of the table +// - ISInstalled and ISAction - which map to the ComponentState of the component (the component is found in the column specified) +// Note that if a component is NULL, the component state columns will also be left null, and it will be up to the deferred CA to fail or ignore the case appropriately +// Setting dwDirectoryColumn to something other than 0xFFFFFFFF tells WcaWrapQuery to add two more additional columns to the right side of the table +// - SourcePath and TargetPath - which map to the Directory's Source and Target Path (the directory is found in the column specified) +// Note that if a directory is NULL, the directory source/target path columns will also be left null, and it will be up to the deferred CA to fail or ignore the case appropriately +HRESULT WIXAPI WcaWrapQuery( + __in_z LPCWSTR pwzQuery, + __inout LPWSTR * ppwzCustomActionData, + __in_opt DWORD dwFormatMask, + __in_opt DWORD dwComponentColumn, + __in_opt DWORD dwDirectoryColumn + ); +// This wraps an empty table query into the custom action data - this is a way to indicate to the deferred custom action that a necessary table doesn't exist, or its query returned no results +HRESULT WIXAPI WcaWrapEmptyQuery( + __inout LPWSTR * ppwzCustomActionData + ); + +// Open a new unwrap query operation, with data from the ppwzCustomActionData string +HRESULT WIXAPI WcaBeginUnwrapQuery( + __out WCA_WRAPQUERY_HANDLE * phWrapQuery, + __inout LPWSTR * ppwzCustomActionData + ); + +// Get the number of records in a query being unwrapped +DWORD WIXAPI WcaGetQueryRecords( + __in const WCA_WRAPQUERY_HANDLE hWrapQuery + ); + +// This function resets a query back to its first row, so that the next fetch returns the first record +void WIXAPI WcaFetchWrappedReset( + __in WCA_WRAPQUERY_HANDLE hWrapQuery + ); +// Fetch the next record in this query +// NOTE: the MSIHANDLE returned by this function should not be released, as it is the same handle used by the query object to maintain the item. +// so, don't use this function with PMSIHANDLE objects! +HRESULT WIXAPI WcaFetchWrappedRecord( + __in WCA_WRAPQUERY_HANDLE hWrapQuery, + __out MSIHANDLE* phRec + ); + +// Fetch the next record in the query where the string value in column dwComparisonColumn equals the value pwzExpectedValue +// NOTE: the MSIHANDLE returned by this function should not be released, as it is the same handle used by the query object to maintain the item. +// so, don't use this function with PMSIHANDLE objects! +HRESULT WIXAPI WcaFetchWrappedRecordWhereString( + __in WCA_WRAPQUERY_HANDLE hWrapQuery, + __in DWORD dwComparisonColumn, + __in_z LPCWSTR pwzExpectedValue, + __out MSIHANDLE* phRec + ); + +// Release a query ID (frees memory, and frees the ID for a new query) +void WIXAPI WcaFinishUnwrapQuery( + __in_opt WCA_WRAPQUERY_HANDLE hWrapQuery + ); diff --git a/msi/build/A2Staging/wix35-binaries/sdk/inc/wiutil.h b/msi/build/A2Staging/wix35-binaries/sdk/inc/wiutil.h index e29ce5a8ba..0325a0143c 100644 --- a/msi/build/A2Staging/wix35-binaries/sdk/inc/wiutil.h +++ b/msi/build/A2Staging/wix35-binaries/sdk/inc/wiutil.h @@ -1,50 +1,50 @@ -#pragma once -//------------------------------------------------------------------------------------------------- -// -// Copyright (c) Microsoft Corporation. All rights reserved. -// -// The use and distribution terms for this software are covered by the -// Common Public License 1.0 (http://opensource.org/licenses/cpl1.0.php) -// which can be found in the file CPL.TXT at the root of this distribution. -// By using this software in any fashion, you are agreeing to be bound by -// the terms of this license. -// -// You must not remove this notice, or any other, from this software. -// -// -// -// Header for Windows Installer helper functions. -// -//------------------------------------------------------------------------------------------------- - -#ifdef __cplusplus -extern "C" { -#endif - -#define MAX_DARWIN_KEY 73 -#define MAX_DARWIN_COLUMN 255 - -#define ReleaseMsi(h) if (h) { ::MsiCloseHandle(h); } -#define ReleaseNullMsi(h) if (h) { ::MsiCloseHandle(h); h = NULL; } - -HRESULT DAPI WiuGetComponentPath( - __in_z LPCWSTR wzProductCode, - __in_z LPCWSTR wzComponentId, - __out LPWSTR* ppwzPath - ); - -HRESULT DAPI WiuGetProductInfo( - __in_z LPCWSTR wzProductCode, - __in_z LPCWSTR wzProperty, - __out LPWSTR* ppwzValue - ); - -HRESULT DAPI WiuGetProductProperty( - __in MSIHANDLE hProduct, - __in_z LPCWSTR wzProperty, - __out LPWSTR* ppwzValue - ); - -#ifdef __cplusplus -} -#endif +#pragma once +//------------------------------------------------------------------------------------------------- +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// The use and distribution terms for this software are covered by the +// Common Public License 1.0 (http://opensource.org/licenses/cpl1.0.php) +// which can be found in the file CPL.TXT at the root of this distribution. +// By using this software in any fashion, you are agreeing to be bound by +// the terms of this license. +// +// You must not remove this notice, or any other, from this software. +// +// +// +// Header for Windows Installer helper functions. +// +//------------------------------------------------------------------------------------------------- + +#ifdef __cplusplus +extern "C" { +#endif + +#define MAX_DARWIN_KEY 73 +#define MAX_DARWIN_COLUMN 255 + +#define ReleaseMsi(h) if (h) { ::MsiCloseHandle(h); } +#define ReleaseNullMsi(h) if (h) { ::MsiCloseHandle(h); h = NULL; } + +HRESULT DAPI WiuGetComponentPath( + __in_z LPCWSTR wzProductCode, + __in_z LPCWSTR wzComponentId, + __out LPWSTR* ppwzPath + ); + +HRESULT DAPI WiuGetProductInfo( + __in_z LPCWSTR wzProductCode, + __in_z LPCWSTR wzProperty, + __out LPWSTR* ppwzValue + ); + +HRESULT DAPI WiuGetProductProperty( + __in MSIHANDLE hProduct, + __in_z LPCWSTR wzProperty, + __out LPWSTR* ppwzValue + ); + +#ifdef __cplusplus +} +#endif diff --git a/msi/build/A2Staging/wix35-binaries/sdk/inc/xmlutil.h b/msi/build/A2Staging/wix35-binaries/sdk/inc/xmlutil.h index ce59975fd5..dca3451b33 100644 --- a/msi/build/A2Staging/wix35-binaries/sdk/inc/xmlutil.h +++ b/msi/build/A2Staging/wix35-binaries/sdk/inc/xmlutil.h @@ -1,183 +1,183 @@ -#pragma once -//------------------------------------------------------------------------------------------------- -// -// Copyright (c) Microsoft Corporation. All rights reserved. -// -// The use and distribution terms for this software are covered by the -// Common Public License 1.0 (http://opensource.org/licenses/cpl1.0.php) -// which can be found in the file CPL.TXT at the root of this distribution. -// By using this software in any fashion, you are agreeing to be bound by -// the terms of this license. -// -// You must not remove this notice, or any other, from this software. -// -// -// -// XML helper funtions. -// -//------------------------------------------------------------------------------------------------- - -// constant XML CLSIDs and IIDs -extern __declspec(selectany) const CLSID XmlUtil_CLSID_DOMDocument = {0x2933BF90, 0x7B36, 0x11d2, {0xB2, 0x0E, 0x00, 0xC0, 0x4F, 0x98, 0x3E, 0x60}}; -extern __declspec(selectany) const CLSID XmlUtil_CLSID_DOMDocument20 = {0xF6D90F11, 0x9C73, 0x11D3, {0xB3, 0x2E, 0x00, 0xC0, 0x4F, 0x99, 0x0B, 0xB4}}; -extern __declspec(selectany) const CLSID XmlUtil_CLSID_DOMDocument26 = {0xf5078f1b, 0xc551, 0x11d3, {0x89, 0xb9, 0x00, 0x00, 0xf8, 0x1f, 0xe2, 0x21}}; -extern __declspec(selectany) const CLSID XmlUtil_CLSID_DOMDocument30 = {0xf5078f32, 0xc551, 0x11d3, {0x89, 0xb9, 0x00, 0x00, 0xf8, 0x1f, 0xe2, 0x21}}; -extern __declspec(selectany) const CLSID XmlUtil_CLSID_DOMDocument40 = {0x88d969c0, 0xf192, 0x11d4, {0xa6, 0x5f, 0x00, 0x40, 0x96, 0x32, 0x51, 0xe5}}; -extern __declspec(selectany) const CLSID XmlUtil_CLSID_DOMDocument50 = {0x88d969e5, 0xf192, 0x11d4, {0xa6, 0x5f, 0x00, 0x40, 0x96, 0x32, 0x51, 0xe5}}; -extern __declspec(selectany) const CLSID XmlUtil_CLSID_DOMDocument60 = {0x88d96a05, 0xf192, 0x11d4, {0xa6, 0x5f, 0x00, 0x40, 0x96, 0x32, 0x51, 0xe5}}; -extern __declspec(selectany) const CLSID XmlUtil_CLSID_XMLSchemaCache = {0x88d969c2, 0xf192, 0x11d4, {0xa6, 0x5f, 0x00, 0x40, 0x96, 0x32, 0x51, 0xe5}}; - -extern __declspec(selectany) const IID XmlUtil_IID_IXMLDOMDocument = {0x2933BF81, 0x7B36, 0x11D2, {0xB2, 0x0E, 0x00, 0xC0, 0x4F, 0x98, 0x3E, 0x60}}; -extern __declspec(selectany) const IID XmlUtil_IID_IXMLDOMDocument2 = {0x2933BF95, 0x7B36, 0x11D2, {0xB2, 0x0E, 0x00, 0xC0, 0x4F, 0x98, 0x3E, 0x60}}; -extern __declspec(selectany) const IID XmlUtil_IID_IXMLDOMSchemaCollection = {0x373984C8, 0xB845, 0x449B, {0x91, 0xE7, 0x45, 0xAC, 0x83, 0x03, 0x6A, 0xDE}}; - -enum XML_LOAD_ATTRIBUTE -{ - XML_LOAD_PRESERVE_WHITESPACE = 1, -}; - - -#ifdef __cplusplus -extern "C" { -#endif - -HRESULT DAPI XmlInitialize(); -void DAPI XmlUninitialize(); - -HRESULT DAPI XmlCreateElement( - __in IXMLDOMDocument *pixdDocument, - __in_z LPCWSTR wzElementName, - __out IXMLDOMElement **ppixnElement - ); -HRESULT DAPI XmlCreateDocument( - __in_opt LPCWSTR pwzElementName, - __out IXMLDOMDocument** ppixdDocument, - __out_opt IXMLDOMElement** ppixeRootElement = NULL - ); -HRESULT DAPI XmlLoadDocument( - __in_z LPCWSTR wzDocument, - __out IXMLDOMDocument** ppixdDocument - ); -HRESULT DAPI XmlLoadDocumentEx( - __in_z LPCWSTR wzDocument, - __in DWORD dwAttributes, - __out IXMLDOMDocument** ppixdDocument - ); -HRESULT DAPI XmlLoadDocumentFromFile( - __in_z LPCWSTR wzPath, - __out IXMLDOMDocument** ppixdDocument - ); -HRESULT DAPI XmlLoadDocumentFromBuffer( - __in_bcount(cbSource) const BYTE* pbSource, - __in DWORD cbSource, - __out IXMLDOMDocument** ppixdDocument - ); -HRESULT DAPI XmlLoadDocumentFromFileEx( - __in_z LPCWSTR wzPath, - __in DWORD dwAttributes, - __out IXMLDOMDocument** ppixdDocument - ); -HRESULT DAPI XmlSelectSingleNode( - __in IXMLDOMNode* pixnParent, - __in_z LPCWSTR wzXPath, - __out IXMLDOMNode **ppixnChild - ); -HRESULT DAPI XmlSetAttribute( - __in IXMLDOMNode* pixnNode, - __in_z LPCWSTR pwzAttribute, - __in_z LPCWSTR pwzAttributeValue - ); -HRESULT DAPI XmlCreateTextNode( - __in IXMLDOMDocument *pixdDocument, - __in_z LPCWSTR wzText, - __out IXMLDOMText **ppixnTextNode - ); -HRESULT DAPI XmlGetText( - __in IXMLDOMNode* pixnNode, - __deref_out_z BSTR* pbstrText - ); -HRESULT DAPI XmlGetAttribute( - __in IXMLDOMNode* pixnNode, - __in_z LPCWSTR pwzAttribute, - __deref_out_z BSTR* pbstrAttributeValue - ); -HRESULT DAPI XmlGetAttributeEx( - __in IXMLDOMNode* pixnNode, - __in_z LPCWSTR wzAttribute, - __deref_out_z LPWSTR* psczAttributeValue - ); -HRESULT DAPI XmlGetYesNoAttribute( - __in IXMLDOMNode* pixnNode, - __in_z LPCWSTR wzAttribute, - __out BOOL* pfYes - ); -HRESULT DAPI XmlGetAttributeNumber( - __in IXMLDOMNode* pixnNode, - __in_z LPCWSTR pwzAttribute, - __out DWORD* pdwValue - ); -HRESULT DAPI XmlGetAttributeNumberBase( - __in IXMLDOMNode* pixnNode, - __in_z LPCWSTR pwzAttribute, - __in int nBase, - __out DWORD* pdwValue - ); -HRESULT DAPI XmlGetAttributeLargeNumber( - __in IXMLDOMNode* pixnNode, - __in_z LPCWSTR pwzAttribute, - __out DWORD64* pdw64Value - ); -HRESULT DAPI XmlGetNamedItem( - __in IXMLDOMNamedNodeMap *pixnmAttributes, - __in_opt LPCWSTR wzName, - __out IXMLDOMNode **ppixnNamedItem - ); -HRESULT DAPI XmlSetText( - __in IXMLDOMNode* pixnNode, - __in_z LPCWSTR pwzText - ); -HRESULT DAPI XmlSetTextNumber( - __in IXMLDOMNode *pixnNode, - __in DWORD dwValue - ); -HRESULT DAPI XmlCreateChild( - __in IXMLDOMNode* pixnParent, - __in_z LPCWSTR pwzElementType, - __out IXMLDOMNode** ppixnChild - ); -HRESULT DAPI XmlRemoveAttribute( - __in IXMLDOMNode* pixnNode, - __in_z LPCWSTR pwzAttribute - ); -HRESULT DAPI XmlSelectNodes( - __in IXMLDOMNode* pixnParent, - __in_z LPCWSTR wzXPath, - __out IXMLDOMNodeList **ppixnChild - ); -HRESULT DAPI XmlNextAttribute( - __in IXMLDOMNamedNodeMap* pixnnm, - __out IXMLDOMNode** pixnAttribute, - __deref_opt_out_z_opt BSTR* pbstrAttribute - ); -HRESULT DAPI XmlNextElement( - __in IXMLDOMNodeList* pixnl, - __out IXMLDOMNode** pixnElement, - __deref_opt_out_z_opt BSTR* pbstrElement - ); -HRESULT DAPI XmlRemoveChildren( - __in IXMLDOMNode* pixnSource, - __in_z LPCWSTR pwzXPath - ); -HRESULT DAPI XmlSaveDocument( - __in IXMLDOMDocument* pixdDocument, - __inout LPCWSTR wzPath - ); -HRESULT DAPI XmlSaveDocumentToBuffer( - __in IXMLDOMDocument* pixdDocument, - __deref_out_bcount(*pcbDest) BYTE** ppbDest, - __out DWORD* pcbDest - ); - -#ifdef __cplusplus -} -#endif +#pragma once +//------------------------------------------------------------------------------------------------- +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// The use and distribution terms for this software are covered by the +// Common Public License 1.0 (http://opensource.org/licenses/cpl1.0.php) +// which can be found in the file CPL.TXT at the root of this distribution. +// By using this software in any fashion, you are agreeing to be bound by +// the terms of this license. +// +// You must not remove this notice, or any other, from this software. +// +// +// +// XML helper funtions. +// +//------------------------------------------------------------------------------------------------- + +// constant XML CLSIDs and IIDs +extern __declspec(selectany) const CLSID XmlUtil_CLSID_DOMDocument = {0x2933BF90, 0x7B36, 0x11d2, {0xB2, 0x0E, 0x00, 0xC0, 0x4F, 0x98, 0x3E, 0x60}}; +extern __declspec(selectany) const CLSID XmlUtil_CLSID_DOMDocument20 = {0xF6D90F11, 0x9C73, 0x11D3, {0xB3, 0x2E, 0x00, 0xC0, 0x4F, 0x99, 0x0B, 0xB4}}; +extern __declspec(selectany) const CLSID XmlUtil_CLSID_DOMDocument26 = {0xf5078f1b, 0xc551, 0x11d3, {0x89, 0xb9, 0x00, 0x00, 0xf8, 0x1f, 0xe2, 0x21}}; +extern __declspec(selectany) const CLSID XmlUtil_CLSID_DOMDocument30 = {0xf5078f32, 0xc551, 0x11d3, {0x89, 0xb9, 0x00, 0x00, 0xf8, 0x1f, 0xe2, 0x21}}; +extern __declspec(selectany) const CLSID XmlUtil_CLSID_DOMDocument40 = {0x88d969c0, 0xf192, 0x11d4, {0xa6, 0x5f, 0x00, 0x40, 0x96, 0x32, 0x51, 0xe5}}; +extern __declspec(selectany) const CLSID XmlUtil_CLSID_DOMDocument50 = {0x88d969e5, 0xf192, 0x11d4, {0xa6, 0x5f, 0x00, 0x40, 0x96, 0x32, 0x51, 0xe5}}; +extern __declspec(selectany) const CLSID XmlUtil_CLSID_DOMDocument60 = {0x88d96a05, 0xf192, 0x11d4, {0xa6, 0x5f, 0x00, 0x40, 0x96, 0x32, 0x51, 0xe5}}; +extern __declspec(selectany) const CLSID XmlUtil_CLSID_XMLSchemaCache = {0x88d969c2, 0xf192, 0x11d4, {0xa6, 0x5f, 0x00, 0x40, 0x96, 0x32, 0x51, 0xe5}}; + +extern __declspec(selectany) const IID XmlUtil_IID_IXMLDOMDocument = {0x2933BF81, 0x7B36, 0x11D2, {0xB2, 0x0E, 0x00, 0xC0, 0x4F, 0x98, 0x3E, 0x60}}; +extern __declspec(selectany) const IID XmlUtil_IID_IXMLDOMDocument2 = {0x2933BF95, 0x7B36, 0x11D2, {0xB2, 0x0E, 0x00, 0xC0, 0x4F, 0x98, 0x3E, 0x60}}; +extern __declspec(selectany) const IID XmlUtil_IID_IXMLDOMSchemaCollection = {0x373984C8, 0xB845, 0x449B, {0x91, 0xE7, 0x45, 0xAC, 0x83, 0x03, 0x6A, 0xDE}}; + +enum XML_LOAD_ATTRIBUTE +{ + XML_LOAD_PRESERVE_WHITESPACE = 1, +}; + + +#ifdef __cplusplus +extern "C" { +#endif + +HRESULT DAPI XmlInitialize(); +void DAPI XmlUninitialize(); + +HRESULT DAPI XmlCreateElement( + __in IXMLDOMDocument *pixdDocument, + __in_z LPCWSTR wzElementName, + __out IXMLDOMElement **ppixnElement + ); +HRESULT DAPI XmlCreateDocument( + __in_opt LPCWSTR pwzElementName, + __out IXMLDOMDocument** ppixdDocument, + __out_opt IXMLDOMElement** ppixeRootElement = NULL + ); +HRESULT DAPI XmlLoadDocument( + __in_z LPCWSTR wzDocument, + __out IXMLDOMDocument** ppixdDocument + ); +HRESULT DAPI XmlLoadDocumentEx( + __in_z LPCWSTR wzDocument, + __in DWORD dwAttributes, + __out IXMLDOMDocument** ppixdDocument + ); +HRESULT DAPI XmlLoadDocumentFromFile( + __in_z LPCWSTR wzPath, + __out IXMLDOMDocument** ppixdDocument + ); +HRESULT DAPI XmlLoadDocumentFromBuffer( + __in_bcount(cbSource) const BYTE* pbSource, + __in DWORD cbSource, + __out IXMLDOMDocument** ppixdDocument + ); +HRESULT DAPI XmlLoadDocumentFromFileEx( + __in_z LPCWSTR wzPath, + __in DWORD dwAttributes, + __out IXMLDOMDocument** ppixdDocument + ); +HRESULT DAPI XmlSelectSingleNode( + __in IXMLDOMNode* pixnParent, + __in_z LPCWSTR wzXPath, + __out IXMLDOMNode **ppixnChild + ); +HRESULT DAPI XmlSetAttribute( + __in IXMLDOMNode* pixnNode, + __in_z LPCWSTR pwzAttribute, + __in_z LPCWSTR pwzAttributeValue + ); +HRESULT DAPI XmlCreateTextNode( + __in IXMLDOMDocument *pixdDocument, + __in_z LPCWSTR wzText, + __out IXMLDOMText **ppixnTextNode + ); +HRESULT DAPI XmlGetText( + __in IXMLDOMNode* pixnNode, + __deref_out_z BSTR* pbstrText + ); +HRESULT DAPI XmlGetAttribute( + __in IXMLDOMNode* pixnNode, + __in_z LPCWSTR pwzAttribute, + __deref_out_z BSTR* pbstrAttributeValue + ); +HRESULT DAPI XmlGetAttributeEx( + __in IXMLDOMNode* pixnNode, + __in_z LPCWSTR wzAttribute, + __deref_out_z LPWSTR* psczAttributeValue + ); +HRESULT DAPI XmlGetYesNoAttribute( + __in IXMLDOMNode* pixnNode, + __in_z LPCWSTR wzAttribute, + __out BOOL* pfYes + ); +HRESULT DAPI XmlGetAttributeNumber( + __in IXMLDOMNode* pixnNode, + __in_z LPCWSTR pwzAttribute, + __out DWORD* pdwValue + ); +HRESULT DAPI XmlGetAttributeNumberBase( + __in IXMLDOMNode* pixnNode, + __in_z LPCWSTR pwzAttribute, + __in int nBase, + __out DWORD* pdwValue + ); +HRESULT DAPI XmlGetAttributeLargeNumber( + __in IXMLDOMNode* pixnNode, + __in_z LPCWSTR pwzAttribute, + __out DWORD64* pdw64Value + ); +HRESULT DAPI XmlGetNamedItem( + __in IXMLDOMNamedNodeMap *pixnmAttributes, + __in_opt LPCWSTR wzName, + __out IXMLDOMNode **ppixnNamedItem + ); +HRESULT DAPI XmlSetText( + __in IXMLDOMNode* pixnNode, + __in_z LPCWSTR pwzText + ); +HRESULT DAPI XmlSetTextNumber( + __in IXMLDOMNode *pixnNode, + __in DWORD dwValue + ); +HRESULT DAPI XmlCreateChild( + __in IXMLDOMNode* pixnParent, + __in_z LPCWSTR pwzElementType, + __out IXMLDOMNode** ppixnChild + ); +HRESULT DAPI XmlRemoveAttribute( + __in IXMLDOMNode* pixnNode, + __in_z LPCWSTR pwzAttribute + ); +HRESULT DAPI XmlSelectNodes( + __in IXMLDOMNode* pixnParent, + __in_z LPCWSTR wzXPath, + __out IXMLDOMNodeList **ppixnChild + ); +HRESULT DAPI XmlNextAttribute( + __in IXMLDOMNamedNodeMap* pixnnm, + __out IXMLDOMNode** pixnAttribute, + __deref_opt_out_z_opt BSTR* pbstrAttribute + ); +HRESULT DAPI XmlNextElement( + __in IXMLDOMNodeList* pixnl, + __out IXMLDOMNode** pixnElement, + __deref_opt_out_z_opt BSTR* pbstrElement + ); +HRESULT DAPI XmlRemoveChildren( + __in IXMLDOMNode* pixnSource, + __in_z LPCWSTR pwzXPath + ); +HRESULT DAPI XmlSaveDocument( + __in IXMLDOMDocument* pixdDocument, + __inout LPCWSTR wzPath + ); +HRESULT DAPI XmlSaveDocumentToBuffer( + __in IXMLDOMDocument* pixdDocument, + __deref_out_bcount(*pcbDest) BYTE** ppbDest, + __out DWORD* pcbDest + ); + +#ifdef __cplusplus +} +#endif diff --git a/nativeLib/build.native/build.native.ecl b/nativeLib/build.native/build.native.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/nativeLib/build.ohd/build.ohd.ecl b/nativeLib/build.ohd/build.ohd.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/nativeLib/com.raytheon.uf.nativelib.cimport/com.raytheon.uf.nativelib.cimport.ecl b/nativeLib/com.raytheon.uf.nativelib.cimport/com.raytheon.uf.nativelib.cimport.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/nativeLib/com.raytheon.uf.nativelib.feature/com.raytheon.uf.nativelib.feature.ecl b/nativeLib/com.raytheon.uf.nativelib.feature/com.raytheon.uf.nativelib.feature.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/nativeLib/dist.native/dist.native.ecl b/nativeLib/dist.native/dist.native.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/nativeLib/dist.native/i386-pc-linux-gnu.tar.REMOVED.git-id b/nativeLib/dist.native/i386-pc-linux-gnu.tar.REMOVED.git-id index a9c10210ce..ab1e8b3642 100644 --- a/nativeLib/dist.native/i386-pc-linux-gnu.tar.REMOVED.git-id +++ b/nativeLib/dist.native/i386-pc-linux-gnu.tar.REMOVED.git-id @@ -1 +1 @@ -853369bfa5ae7458b8f31dc33c6a817a6e257e36 \ No newline at end of file +43a91b8b2ef2c9fc8df4133865f8e9048d01fcf5 \ No newline at end of file diff --git a/nativeLib/docs.native/docs.native.ecl b/nativeLib/docs.native/docs.native.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/nativeLib/docs.ohd/docs.ohd.ecl b/nativeLib/docs.ohd/docs.ohd.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/nativeLib/edexBridge/edexBridge.ecl b/nativeLib/edexBridge/edexBridge.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/nativeLib/edex_com/edex_com.ecl b/nativeLib/edex_com/edex_com.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/nativeLib/edex_com/src/PointDataServerRequest.cpp b/nativeLib/edex_com/src/PointDataServerRequest.cpp index 898fa14ac4..0caf1125ac 100644 --- a/nativeLib/edex_com/src/PointDataServerRequest.cpp +++ b/nativeLib/edex_com/src/PointDataServerRequest.cpp @@ -29,6 +29,7 @@ * Date Ticket# Engineer Description * ------------ ---------- ----------- -------------------------- * 08/08/11 9696 gzhou Initial Creation + * 03/27/12 11342 Xiaochuan Update getStringData() to return string & * * * @@ -119,16 +120,19 @@ string PointDataServerRequest::getParameterUnit(const string& parameter) { return "MISSING"; } -string PointDataServerRequest::getStringData(const string& parameter, +const string & PointDataServerRequest::getStringData(const string& parameter, int offset) { + + static const string MISS = "MISSING"; + if (position.find(parameter) != position.end()) { if (lookup[parameter] != STRING) { - return "MISSING"; + return MISS; } int pos = position[parameter]; return pdtc.stringData.at(pos).stringData.at(offset); } - return "MISSING"; + return MISS; } int32_t PointDataServerRequest::getIntData(const string& parameter, int offset) { diff --git a/nativeLib/edex_com/src/PointDataServerRequest.h b/nativeLib/edex_com/src/PointDataServerRequest.h index e4df88c4cf..cf121784d2 100644 --- a/nativeLib/edex_com/src/PointDataServerRequest.h +++ b/nativeLib/edex_com/src/PointDataServerRequest.h @@ -29,6 +29,7 @@ * Date Ticket# Engineer Description * ------------ ---------- ----------- -------------------------- * 08/08/11 9696 gzhou Initial Creation + * 03/27/12 11342 Xiaochuan Update getStringData() to return string & * * * @@ -88,7 +89,7 @@ public: int requestData(const string& station); string getParameterUnit(const string& parameter); int getParameterType(const string& parameter); - string getStringData(const string& parameter, int offset); + const string & getStringData(const string& parameter, int offset); int32_t getIntData(const string& parameter, int offset); int64_t getLongData(const string& parameter, int offset); float getFloatData(const string& parameter, int offset); diff --git a/nativeLib/edex_notify/edex_notify.ecl b/nativeLib/edex_notify/edex_notify.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/nativeLib/edex_pdc/edex_pdc.ecl b/nativeLib/edex_pdc/edex_pdc.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/nativeLib/gridslice/gridslice.ecl b/nativeLib/gridslice/gridslice.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/nativeLib/gridslice/src/gridslice.c b/nativeLib/gridslice/src/gridslice.c index 9f53c5a0cb..6d8fcd81fe 100644 --- a/nativeLib/gridslice/src/gridslice.c +++ b/nativeLib/gridslice/src/gridslice.c @@ -1,365 +1,365 @@ -/***************************************************************************************** - * COPYRIGHT (c), 2009, RAYTHEON COMPANY - * ALL RIGHTS RESERVED, An Unpublished Work - * - * RAYTHEON PROPRIETARY - * If the end user is not the U.S. Government or any agency thereof, use - * or disclosure of data contained in this source code file is subject to - * the proprietary restrictions set forth in the Master Rights File. - * - * U.S. GOVERNMENT PURPOSE RIGHTS NOTICE - * If the end user is the U.S. Government or any agency thereof, this source - * code is provided to the U.S. Government with Government Purpose Rights. - * Use or disclosure of data contained in this source code file is subject to - * the "Government Purpose Rights" restriction in the Master Rights File. - * - * U.S. EXPORT CONTROLLED TECHNICAL DATA - * Use or disclosure of data contained in this source code file is subject to - * the export restrictions set forth in the Master Rights File. - ******************************************************************************************/ - -/* - * Python module that utilizes the AWIPSI sliceConvert functions to offer - * slicing capability to numpy arrays. - * - *
- *
- * SOFTWARE HISTORY
- *
- * Date         Ticket#     Engineer    Description
- * ------------ ----------  ----------- --------------------------
- * 11/17/09     3580        brockwoo    Initial Creation
- *
- * 
- * - * @author brockwoo - * @version 1 - */ - -#include -#include -#include -#include "numpy/arrayobject.h" -#include "sliceConvert.h" - -static PyObject *GridSliceError; - -static int dimensions(PyObject * array) { - int returnValue = 0; - int aDim = PyArray_NDIM(array); - if (aDim == 3) { - returnValue |= 4; // 2d arrays - } else if (aDim == 2) { - npy_int * aDimList = PyArray_DIMS(array); - if (aDimList[0] == 1) { - returnValue |= 1; //linear array - } - } else { - returnValue |= 8; // Unsupported - } - return returnValue; -} - -static PyObject * defineNumpySlice(PyObject *self, PyObject* args) -/* float ** vc3d, float ** param3d, int mnx, - int nx, int ny, int nz, float param, int sense, float * vc2d) */{ - PyObject * vc; - PyObject * param; - //int mx = 0; - int nx = 0; - int ny = 0; - int nz = 0; - float targetLevel; - int sense; - int vu, pu, uniformity; - float * vc2d; - float ** vc3d; - int * vc3dDim; - float ** param3d; - int * param3dDim; - int levelCount; - int vnz, pnz, vny , pny , vnx , pnx; - int dimSize[2]; - npy_int * vdimList; - npy_int * pdimList; - - if (!PyArg_ParseTuple(args, "OOfi", &vc, ¶m, &targetLevel, &sense)) { - return NULL; - } - - vu = dimensions(vc); - pu = dimensions(param); - uniformity = (vu | pu); - - if ((uniformity >> 3) == 1) { - PyErr_SetString(GridSliceError, - "One of the numpy arrays passed cannot be used for slicing."); - return NULL; - } - - vdimList = PyArray_DIMS(vc); - pdimList = PyArray_DIMS(param); - vc2d = 0; - if (uniformity == 4) { // two cubes - if (vdimList[0] != pdimList[0] || vdimList[1] != pdimList[1] - || vdimList[2] != pdimList[2]) { - PyErr_SetString(GridSliceError, - "Dimensions are different between cubes. Calculation cannot be done."); - return NULL; - } - nz = vdimList[0]; - ny = vdimList[1]; - nx = vdimList[2]; - vc3d = (float**) malloc(nz * sizeof(float*)); - param3d = (float**) malloc(nz * sizeof(float*)); - vc2d = (float*) malloc(nx * ny * sizeof(float)); - levelCount = 0; - for (levelCount = 0; levelCount < nz; levelCount++) { - vc3d[levelCount] = (float *) PyArray_GETPTR1(vc, levelCount); - param3d[levelCount] = (float *) PyArray_GETPTR1(param, levelCount); - } - - defineSlice(vc3d, param3d, nx, nx, ny, nz, targetLevel, sense, vc2d); - free(vc3d); - free(param3d); - } else if (uniformity < 4 || uniformity == 5) { // one cube and one constant or two constants - vnz = (vu == 4) ? vdimList[0] : vdimList[1]; - pnz = (pu == 4) ? pdimList[0] : pdimList[1]; - vny = (vu == 4) ? vdimList[1] : 0; - pny = (pu == 4) ? pdimList[1] : 0; - vnx = (vu == 4) ? vdimList[2] : 0; - pnx = (pu == 4) ? pdimList[2] : 0; - if (vnz != pnz) { - PyErr_SetString(GridSliceError, - "Dimensions are different between the arrays. Calculation cannot be done."); - return NULL; - } - nz = vnz; - ny = vny >= pny ? vny : pny; - nx = vnx >= pnx ? vnx : pnx; - vc3d = (float**) malloc(nz * sizeof(float*)); - param3d = (float**) malloc(nz * sizeof(float*)); - vc2d = (float*) malloc(nx * ny * sizeof(float)); - vc3dDim = (int*) malloc(nz * sizeof(int)); - param3dDim = (int*) malloc(nz * sizeof(int)); - - levelCount = 0; - for (levelCount = 0; levelCount < nz; levelCount++) { - if (vu == 4) { - vc3d[levelCount] = (float *) PyArray_GETPTR1(vc, levelCount); - vc3dDim[levelCount] = 2; - } else { - vc3d[levelCount] = (float *) PyArray_GETPTR2(vc, 0, levelCount); - vc3dDim[levelCount] = 0; - } - if (pu == 4) { - param3d[levelCount] - = (float *) PyArray_GETPTR1(param, levelCount); - param3dDim[levelCount] = 2; - } else { - param3d[levelCount] - = (float *) PyArray_GETPTR2(param, 0, levelCount); - param3dDim[levelCount] = 0; - } - - } - defineSliceD(vc3d, vc3dDim, param3d, param3dDim, nx, nx, ny, nz, - targetLevel, sense, vc2d); - free(vc3d); - free(param3d); - free(vc3dDim); - free(param3dDim); - } - - if (vc2d) { - PyObject * pyVc2d; - dimSize[0] = ny; - dimSize[1] = nx; - pyVc2d = PyArray_SimpleNew(2, dimSize, NPY_FLOAT); - memcpy(((PyArrayObject *) pyVc2d)->data, vc2d, nx * ny * sizeof(float)); - free(vc2d); - return pyVc2d; - } else { - PyErr_SetString( - GridSliceError, - "The result grid returned was empty. Please check your initial data and try again."); - return NULL; - } -} - -static PyObject * createNumpySlice(PyObject *self, PyObject* args) -/*float ** vc3d, float * vc2d, - float ** slice3d, int mnx, int nx, int ny, int nz, int sense, - float * slice)*/{ - - PyObject * vc; - PyObject * s3d; - //int mx = 0; - int nx = 0; - int ny = 0; - int nz = 0; - PyObject * targetLevel; - int sense; - int hyb = DOINTERP; - int vu; - int su; - int uniformity; - int vnz; - float * slice = 0; - float ** vc3d ; - float ** slice3d; - int * vc3dDim ; - int levelCount; - float * vc2d ; - int dimSize[2]; - npy_int * vdimList; - npy_int * sdimList; - - if (!PyArg_ParseTuple(args, "OOOi|i", &vc, &s3d, &targetLevel, &sense, &hyb)) { - return NULL; - } - - vu = dimensions(vc); - su = dimensions(s3d); - uniformity = (vu | su); - - vdimList = PyArray_DIMS(vc); - sdimList = PyArray_DIMS(s3d); - - if (uniformity == 4) { - if (vdimList[0] != sdimList[0] || vdimList[1] != sdimList[1] - || vdimList[2] != sdimList[2]) { - PyErr_SetString(GridSliceError, - "Dimensions are different between cubes. Calculation cannot be done."); - return NULL; - } - nz = vdimList[0]; - ny = vdimList[1]; - nx = vdimList[2]; - vc3d = (float**) malloc(nz * sizeof(float*)); - slice3d = (float**) malloc(nz * sizeof(float*)); - slice = (float*) malloc(nx * ny * sizeof(float)); - levelCount = 0; - vc2d = (float *) PyArray_GETPTR1(targetLevel, 0); - for (levelCount = 0; levelCount < nz; levelCount++) { - vc3d[levelCount] = (float *) PyArray_GETPTR1(vc, levelCount); - slice3d[levelCount] = (float *) PyArray_GETPTR1(s3d, levelCount); - } - if (hyb == DOINTERP) { - createSlice(vc3d, vc2d, slice3d, nx, nx, ny, nz, sense, slice); - } else { - sampleSlice(vc3d, vc2d, slice3d, nx, nx, ny, nz, sense, hyb, slice); - } - - free(vc3d); - free(slice3d); - } else if (vu < 4 && su == 4) { // one cube and one constant or two constants - vnz = (vu == 4) ? vdimList[0] : vdimList[1]; - if (vnz != sdimList[0]) { - PyErr_SetString(GridSliceError, - "Dimensions are different between the arrays. Calculation cannot be done."); - return NULL; - } - nz = sdimList[0]; - ny = sdimList[1]; - nx = sdimList[2]; - vc3d = (float**) malloc(nz * sizeof(float*)); - slice3d = (float**) malloc(nz * sizeof(float*)); - vc3dDim = (int*) malloc(nz * sizeof(int)); - slice = (float*) malloc(nx * ny * sizeof(float)); - levelCount = 0; - for (levelCount = 0; levelCount < nz; levelCount++) { - if (vu == 4) { - vc3d[levelCount] = (float *) PyArray_GETPTR1(vc, levelCount); - vc3dDim[levelCount] = 2; - } else { - vc3d[levelCount] = (float *) PyArray_GETPTR2(vc, 0, levelCount); - vc3dDim[levelCount] = 0; - } - slice3d[levelCount] = (float *) PyArray_GETPTR1(s3d, levelCount); - } - vc2d = (float *) PyArray_GETPTR1(targetLevel, 0); - if (hyb == DOINTERP) { - createSliceD(vc3d, vc3dDim, vc2d, 2, slice3d, nx, nx, ny, nz, sense, slice); - } else { - sampleSliceD(vc3d, vc3dDim, vc2d, 2, slice3d, nx, nx, ny, nz, sense, hyb, slice); - } - free(vc3d); - free(slice3d); - free(vc3dDim); - } - - if (slice) { - PyObject * pyVc2d; - dimSize[0] = ny; - dimSize[1] = nx; - pyVc2d = PyArray_SimpleNew(2, dimSize, NPY_FLOAT); - memcpy(((PyArrayObject *) pyVc2d)->data, slice, nx * ny * sizeof(float)); - free(slice); - return pyVc2d; - } else { - PyErr_SetString( - GridSliceError, - "The result grid returned was empty. Please check your initial data and try again."); - return NULL; - } - - return NULL; -} - -static PyObject * createNumpySliceD(PyObject *self, PyObject* args) -/*float ** vc3d, int * dim3, float * vc2d, - int dim2, float ** slice3d, int mnx, int nx, int ny, int nz, int sense, - float * slice)*/{ - return NULL; -} - -static PyObject * sampleNumpySlice(PyObject *self, PyObject* args) -/*float ** vc3d, float * vc2d, - float ** slice3d, int mnx, int nx, int ny, int nz, int sense, int hyb, - float * slice)*/{ - return NULL; -} - -static PyObject * sampleNumpySliceD(PyObject *self, PyObject* args) -/*float ** vc3d, int * dim3, float * vc2d, - int dim2, float ** slice3d, int mnx, int nx, int ny, int nz, int sense, - int hyb, float * slice)*/{ - return NULL; -} - -static PyObject * defineNumpySlices(PyObject *self, PyObject* args) -/*float * vc3d, int senseA, float * param3d, - int senseB, int nx, int ny, int nz, float * paramC, int nc, float * vcC)*/{ - return NULL; -} - -static PyObject * createNumpySlices(PyObject *self, PyObject* args) -/*float * vc3d, float * param3d, int sense, - int nx, int ny, int nz, float * vcC, int nc, float * paramC)*/{ - return NULL; -} - -static PyMethodDef gridslice_methods[] = { { "defineNumpySlice", - defineNumpySlice, METH_VARARGS, "Description to be decided." }, { - "createNumpySlice", createNumpySlice, METH_VARARGS, - "Description to be decided." }, { "createNumpySliceD", - createNumpySliceD, METH_VARARGS, "Description to be decided." }, { - "sampleNumpySlice", sampleNumpySlice, METH_VARARGS, - "Description to be decided." }, { "sampleNumpySliceD", - sampleNumpySliceD, METH_VARARGS, "Description to be decided." }, { - "defineNumpySlices", defineNumpySlices, METH_VARARGS, - "Description to be decided." }, { "createNumpySlices", - createNumpySlices, METH_VARARGS, "Description to be decided." }, { - NULL, NULL, 0, NULL } /* sentinel */ -}; - -void initgridslice(void) { - PyObject *m; - import_array(); - PyImport_AddModule("gridslice"); - m = Py_InitModule("gridslice", gridslice_methods); - GridSliceError = PyErr_NewException("gridslice.error", NULL, NULL); - Py_INCREF(GridSliceError); - PyModule_AddObject(m, "error", GridSliceError); -} +/***************************************************************************************** + * COPYRIGHT (c), 2009, RAYTHEON COMPANY + * ALL RIGHTS RESERVED, An Unpublished Work + * + * RAYTHEON PROPRIETARY + * If the end user is not the U.S. Government or any agency thereof, use + * or disclosure of data contained in this source code file is subject to + * the proprietary restrictions set forth in the Master Rights File. + * + * U.S. GOVERNMENT PURPOSE RIGHTS NOTICE + * If the end user is the U.S. Government or any agency thereof, this source + * code is provided to the U.S. Government with Government Purpose Rights. + * Use or disclosure of data contained in this source code file is subject to + * the "Government Purpose Rights" restriction in the Master Rights File. + * + * U.S. EXPORT CONTROLLED TECHNICAL DATA + * Use or disclosure of data contained in this source code file is subject to + * the export restrictions set forth in the Master Rights File. + ******************************************************************************************/ + +/* + * Python module that utilizes the AWIPSI sliceConvert functions to offer + * slicing capability to numpy arrays. + * + *
+ *
+ * SOFTWARE HISTORY
+ *
+ * Date         Ticket#     Engineer    Description
+ * ------------ ----------  ----------- --------------------------
+ * 11/17/09     3580        brockwoo    Initial Creation
+ *
+ * 
+ * + * @author brockwoo + * @version 1 + */ + +#include +#include +#include +#include "numpy/arrayobject.h" +#include "sliceConvert.h" + +static PyObject *GridSliceError; + +static int dimensions(PyObject * array) { + int returnValue = 0; + int aDim = PyArray_NDIM(array); + if (aDim == 3) { + returnValue |= 4; // 2d arrays + } else if (aDim == 2) { + npy_int * aDimList = PyArray_DIMS(array); + if (aDimList[0] == 1) { + returnValue |= 1; //linear array + } + } else { + returnValue |= 8; // Unsupported + } + return returnValue; +} + +static PyObject * defineNumpySlice(PyObject *self, PyObject* args) +/* float ** vc3d, float ** param3d, int mnx, + int nx, int ny, int nz, float param, int sense, float * vc2d) */{ + PyObject * vc; + PyObject * param; + //int mx = 0; + int nx = 0; + int ny = 0; + int nz = 0; + float targetLevel; + int sense; + int vu, pu, uniformity; + float * vc2d; + float ** vc3d; + int * vc3dDim; + float ** param3d; + int * param3dDim; + int levelCount; + int vnz, pnz, vny , pny , vnx , pnx; + int dimSize[2]; + npy_int * vdimList; + npy_int * pdimList; + + if (!PyArg_ParseTuple(args, "OOfi", &vc, ¶m, &targetLevel, &sense)) { + return NULL; + } + + vu = dimensions(vc); + pu = dimensions(param); + uniformity = (vu | pu); + + if ((uniformity >> 3) == 1) { + PyErr_SetString(GridSliceError, + "One of the numpy arrays passed cannot be used for slicing."); + return NULL; + } + + vdimList = PyArray_DIMS(vc); + pdimList = PyArray_DIMS(param); + vc2d = 0; + if (uniformity == 4) { // two cubes + if (vdimList[0] != pdimList[0] || vdimList[1] != pdimList[1] + || vdimList[2] != pdimList[2]) { + PyErr_SetString(GridSliceError, + "Dimensions are different between cubes. Calculation cannot be done."); + return NULL; + } + nz = vdimList[0]; + ny = vdimList[1]; + nx = vdimList[2]; + vc3d = (float**) malloc(nz * sizeof(float*)); + param3d = (float**) malloc(nz * sizeof(float*)); + vc2d = (float*) malloc(nx * ny * sizeof(float)); + levelCount = 0; + for (levelCount = 0; levelCount < nz; levelCount++) { + vc3d[levelCount] = (float *) PyArray_GETPTR1(vc, levelCount); + param3d[levelCount] = (float *) PyArray_GETPTR1(param, levelCount); + } + + defineSlice(vc3d, param3d, nx, nx, ny, nz, targetLevel, sense, vc2d); + free(vc3d); + free(param3d); + } else if (uniformity < 4 || uniformity == 5) { // one cube and one constant or two constants + vnz = (vu == 4) ? vdimList[0] : vdimList[1]; + pnz = (pu == 4) ? pdimList[0] : pdimList[1]; + vny = (vu == 4) ? vdimList[1] : 0; + pny = (pu == 4) ? pdimList[1] : 0; + vnx = (vu == 4) ? vdimList[2] : 0; + pnx = (pu == 4) ? pdimList[2] : 0; + if (vnz != pnz) { + PyErr_SetString(GridSliceError, + "Dimensions are different between the arrays. Calculation cannot be done."); + return NULL; + } + nz = vnz; + ny = vny >= pny ? vny : pny; + nx = vnx >= pnx ? vnx : pnx; + vc3d = (float**) malloc(nz * sizeof(float*)); + param3d = (float**) malloc(nz * sizeof(float*)); + vc2d = (float*) malloc(nx * ny * sizeof(float)); + vc3dDim = (int*) malloc(nz * sizeof(int)); + param3dDim = (int*) malloc(nz * sizeof(int)); + + levelCount = 0; + for (levelCount = 0; levelCount < nz; levelCount++) { + if (vu == 4) { + vc3d[levelCount] = (float *) PyArray_GETPTR1(vc, levelCount); + vc3dDim[levelCount] = 2; + } else { + vc3d[levelCount] = (float *) PyArray_GETPTR2(vc, 0, levelCount); + vc3dDim[levelCount] = 0; + } + if (pu == 4) { + param3d[levelCount] + = (float *) PyArray_GETPTR1(param, levelCount); + param3dDim[levelCount] = 2; + } else { + param3d[levelCount] + = (float *) PyArray_GETPTR2(param, 0, levelCount); + param3dDim[levelCount] = 0; + } + + } + defineSliceD(vc3d, vc3dDim, param3d, param3dDim, nx, nx, ny, nz, + targetLevel, sense, vc2d); + free(vc3d); + free(param3d); + free(vc3dDim); + free(param3dDim); + } + + if (vc2d) { + PyObject * pyVc2d; + dimSize[0] = ny; + dimSize[1] = nx; + pyVc2d = PyArray_SimpleNew(2, dimSize, NPY_FLOAT); + memcpy(((PyArrayObject *) pyVc2d)->data, vc2d, nx * ny * sizeof(float)); + free(vc2d); + return pyVc2d; + } else { + PyErr_SetString( + GridSliceError, + "The result grid returned was empty. Please check your initial data and try again."); + return NULL; + } +} + +static PyObject * createNumpySlice(PyObject *self, PyObject* args) +/*float ** vc3d, float * vc2d, + float ** slice3d, int mnx, int nx, int ny, int nz, int sense, + float * slice)*/{ + + PyObject * vc; + PyObject * s3d; + //int mx = 0; + int nx = 0; + int ny = 0; + int nz = 0; + PyObject * targetLevel; + int sense; + int hyb = DOINTERP; + int vu; + int su; + int uniformity; + int vnz; + float * slice = 0; + float ** vc3d ; + float ** slice3d; + int * vc3dDim ; + int levelCount; + float * vc2d ; + int dimSize[2]; + npy_int * vdimList; + npy_int * sdimList; + + if (!PyArg_ParseTuple(args, "OOOi|i", &vc, &s3d, &targetLevel, &sense, &hyb)) { + return NULL; + } + + vu = dimensions(vc); + su = dimensions(s3d); + uniformity = (vu | su); + + vdimList = PyArray_DIMS(vc); + sdimList = PyArray_DIMS(s3d); + + if (uniformity == 4) { + if (vdimList[0] != sdimList[0] || vdimList[1] != sdimList[1] + || vdimList[2] != sdimList[2]) { + PyErr_SetString(GridSliceError, + "Dimensions are different between cubes. Calculation cannot be done."); + return NULL; + } + nz = vdimList[0]; + ny = vdimList[1]; + nx = vdimList[2]; + vc3d = (float**) malloc(nz * sizeof(float*)); + slice3d = (float**) malloc(nz * sizeof(float*)); + slice = (float*) malloc(nx * ny * sizeof(float)); + levelCount = 0; + vc2d = (float *) PyArray_GETPTR1(targetLevel, 0); + for (levelCount = 0; levelCount < nz; levelCount++) { + vc3d[levelCount] = (float *) PyArray_GETPTR1(vc, levelCount); + slice3d[levelCount] = (float *) PyArray_GETPTR1(s3d, levelCount); + } + if (hyb == DOINTERP) { + createSlice(vc3d, vc2d, slice3d, nx, nx, ny, nz, sense, slice); + } else { + sampleSlice(vc3d, vc2d, slice3d, nx, nx, ny, nz, sense, hyb, slice); + } + + free(vc3d); + free(slice3d); + } else if (vu < 4 && su == 4) { // one cube and one constant or two constants + vnz = (vu == 4) ? vdimList[0] : vdimList[1]; + if (vnz != sdimList[0]) { + PyErr_SetString(GridSliceError, + "Dimensions are different between the arrays. Calculation cannot be done."); + return NULL; + } + nz = sdimList[0]; + ny = sdimList[1]; + nx = sdimList[2]; + vc3d = (float**) malloc(nz * sizeof(float*)); + slice3d = (float**) malloc(nz * sizeof(float*)); + vc3dDim = (int*) malloc(nz * sizeof(int)); + slice = (float*) malloc(nx * ny * sizeof(float)); + levelCount = 0; + for (levelCount = 0; levelCount < nz; levelCount++) { + if (vu == 4) { + vc3d[levelCount] = (float *) PyArray_GETPTR1(vc, levelCount); + vc3dDim[levelCount] = 2; + } else { + vc3d[levelCount] = (float *) PyArray_GETPTR2(vc, 0, levelCount); + vc3dDim[levelCount] = 0; + } + slice3d[levelCount] = (float *) PyArray_GETPTR1(s3d, levelCount); + } + vc2d = (float *) PyArray_GETPTR1(targetLevel, 0); + if (hyb == DOINTERP) { + createSliceD(vc3d, vc3dDim, vc2d, 2, slice3d, nx, nx, ny, nz, sense, slice); + } else { + sampleSliceD(vc3d, vc3dDim, vc2d, 2, slice3d, nx, nx, ny, nz, sense, hyb, slice); + } + free(vc3d); + free(slice3d); + free(vc3dDim); + } + + if (slice) { + PyObject * pyVc2d; + dimSize[0] = ny; + dimSize[1] = nx; + pyVc2d = PyArray_SimpleNew(2, dimSize, NPY_FLOAT); + memcpy(((PyArrayObject *) pyVc2d)->data, slice, nx * ny * sizeof(float)); + free(slice); + return pyVc2d; + } else { + PyErr_SetString( + GridSliceError, + "The result grid returned was empty. Please check your initial data and try again."); + return NULL; + } + + return NULL; +} + +static PyObject * createNumpySliceD(PyObject *self, PyObject* args) +/*float ** vc3d, int * dim3, float * vc2d, + int dim2, float ** slice3d, int mnx, int nx, int ny, int nz, int sense, + float * slice)*/{ + return NULL; +} + +static PyObject * sampleNumpySlice(PyObject *self, PyObject* args) +/*float ** vc3d, float * vc2d, + float ** slice3d, int mnx, int nx, int ny, int nz, int sense, int hyb, + float * slice)*/{ + return NULL; +} + +static PyObject * sampleNumpySliceD(PyObject *self, PyObject* args) +/*float ** vc3d, int * dim3, float * vc2d, + int dim2, float ** slice3d, int mnx, int nx, int ny, int nz, int sense, + int hyb, float * slice)*/{ + return NULL; +} + +static PyObject * defineNumpySlices(PyObject *self, PyObject* args) +/*float * vc3d, int senseA, float * param3d, + int senseB, int nx, int ny, int nz, float * paramC, int nc, float * vcC)*/{ + return NULL; +} + +static PyObject * createNumpySlices(PyObject *self, PyObject* args) +/*float * vc3d, float * param3d, int sense, + int nx, int ny, int nz, float * vcC, int nc, float * paramC)*/{ + return NULL; +} + +static PyMethodDef gridslice_methods[] = { { "defineNumpySlice", + defineNumpySlice, METH_VARARGS, "Description to be decided." }, { + "createNumpySlice", createNumpySlice, METH_VARARGS, + "Description to be decided." }, { "createNumpySliceD", + createNumpySliceD, METH_VARARGS, "Description to be decided." }, { + "sampleNumpySlice", sampleNumpySlice, METH_VARARGS, + "Description to be decided." }, { "sampleNumpySliceD", + sampleNumpySliceD, METH_VARARGS, "Description to be decided." }, { + "defineNumpySlices", defineNumpySlices, METH_VARARGS, + "Description to be decided." }, { "createNumpySlices", + createNumpySlices, METH_VARARGS, "Description to be decided." }, { + NULL, NULL, 0, NULL } /* sentinel */ +}; + +void initgridslice(void) { + PyObject *m; + import_array(); + PyImport_AddModule("gridslice"); + m = Py_InitModule("gridslice", gridslice_methods); + GridSliceError = PyErr_NewException("gridslice.error", NULL, NULL); + Py_INCREF(GridSliceError); + PyModule_AddObject(m, "error", GridSliceError); +} diff --git a/nativeLib/gridslice/src/windows/project/gridslice.bat b/nativeLib/gridslice/src/windows/project/gridslice.bat index 4c3b036085..bcdef9dc18 100644 --- a/nativeLib/gridslice/src/windows/project/gridslice.bat +++ b/nativeLib/gridslice/src/windows/project/gridslice.bat @@ -1,89 +1,89 @@ -@echo OFF -REM This script will compile a Windows version of the gridslice library. -REM In order to compile the gridslice library, you will need to have -REM Microsoft Visual C++ 2008 installed and the AWIPS II Runtime Environment. -REM -REM This script should work on both a 32-bit and a 64-bit Windows 7 -REM installation. - - -SET CONTAINING_DIR=%~dp0 - -SET REG_EXE= -REM Determine what our architecture is. -IF "%PROCESSOR_ARCHITECTURE%" == "AMD64" ( - GOTO OS_64_BIT -) ELSE ( - IF "%PROCESSOR_ARCHITECTURE%" == "x86" ( - GOTO OS_32_BIT - ) ELSE ( - echo "ERROR: Unrecognized Architecture." - PAUSE && EXIT 1 - ) -) - -:OS_32_BIT - SET REG_EXE=C:\Windows\System32\reg.exe - GOTO ARCH_KNOWN -:OS_64_BIT - SET REG_EXE=C:\Windows\SysWOW64\reg.exe - GOTO ARCH_KNOWN -:ARCH_KNOWN - -SET A2_PYTHON_REG="HKLM\Software\Raytheon\Runtime Environment\AWIPS II Python" - -%REG_EXE% QUERY %A2_PYTHON_REG% /v PythonInstallDirectory > NUL 2>&1 -IF ERRORLEVEL 1 ( - echo ENVIRONMENT ERROR - Unable to find AWIPS II Python. - PAUSE && EXIT 1 -) - -REM Determine where AWIPS II Python has been installed. -FOR /F "tokens=2* delims= " %%A IN ( - '%REG_EXE% QUERY %A2_PYTHON_REG% /v PythonInstallDirectory' -) DO ( - SET PythonInstallDirectory=%%B -) - -cd "%CONTAINING_DIR%" - -REM Compile gridslice -cl.exe /LD "%CONTAINING_DIR%..\..\sliceConvert.c" ^ - "%CONTAINING_DIR%..\..\gridslice.c" ^ - -I"%PythonInstallDirectory%\Lib\site-packages\numpy\core\include" ^ - -I"%PythonInstallDirectory%\include" ^ - "%PythonInstallDirectory%\libs\python27.lib" ^ - /link/out:gridslice.pyd /EXPORT:initgridslice -if ERRORLEVEL 1 ( - echo ERROR: The gridslice compile has failed. - PAUSE && EXIT 1 -) - -REM Move the build artifacts to the build directory. -IF NOT EXIST "%CONTAINING_DIR%..\build" ( - MKDIR "%CONTAINING_DIR%..\build" -) -MOVE /Y "%CONTAINING_DIR%gridslice.pyd" ^ - "%CONTAINING_DIR%..\build" - -REM Cleanup the remaining non-essential build artifacts. -IF EXIST "%CONTAINING_DIR%gridslice.obj" ( - echo Y | DEL "%CONTAINING_DIR%gridslice.obj" -) -IF EXIST "%CONTAINING_DIR%gridslice.sln.cache" ( - echo Y | DEL "%CONTAINING_DIR%gridslice.sln.cache" -) -IF EXIST "%CONTAINING_DIR%sliceConvert.obj" ( - echo Y | DEL "%CONTAINING_DIR%sliceConvert.obj" -) -IF EXIST "%CONTAINING_DIR%sliceConvert.lib" ( - echo Y | DEL "%CONTAINING_DIR%sliceConvert.lib" -) -IF EXIST "%CONTAINING_DIR%sliceConvert.exp" ( - echo Y | DEL "%CONTAINING_DIR%sliceConvert.exp" -) - -echo. -echo. -echo The gridslice compile was successful. -PAUSE +@echo OFF +REM This script will compile a Windows version of the gridslice library. +REM In order to compile the gridslice library, you will need to have +REM Microsoft Visual C++ 2008 installed and the AWIPS II Runtime Environment. +REM +REM This script should work on both a 32-bit and a 64-bit Windows 7 +REM installation. + + +SET CONTAINING_DIR=%~dp0 + +SET REG_EXE= +REM Determine what our architecture is. +IF "%PROCESSOR_ARCHITECTURE%" == "AMD64" ( + GOTO OS_64_BIT +) ELSE ( + IF "%PROCESSOR_ARCHITECTURE%" == "x86" ( + GOTO OS_32_BIT + ) ELSE ( + echo "ERROR: Unrecognized Architecture." + PAUSE && EXIT 1 + ) +) + +:OS_32_BIT + SET REG_EXE=C:\Windows\System32\reg.exe + GOTO ARCH_KNOWN +:OS_64_BIT + SET REG_EXE=C:\Windows\SysWOW64\reg.exe + GOTO ARCH_KNOWN +:ARCH_KNOWN + +SET A2_PYTHON_REG="HKLM\Software\Raytheon\Runtime Environment\AWIPS II Python" + +%REG_EXE% QUERY %A2_PYTHON_REG% /v PythonInstallDirectory > NUL 2>&1 +IF ERRORLEVEL 1 ( + echo ENVIRONMENT ERROR - Unable to find AWIPS II Python. + PAUSE && EXIT 1 +) + +REM Determine where AWIPS II Python has been installed. +FOR /F "tokens=2* delims= " %%A IN ( + '%REG_EXE% QUERY %A2_PYTHON_REG% /v PythonInstallDirectory' +) DO ( + SET PythonInstallDirectory=%%B +) + +cd "%CONTAINING_DIR%" + +REM Compile gridslice +cl.exe /LD "%CONTAINING_DIR%..\..\sliceConvert.c" ^ + "%CONTAINING_DIR%..\..\gridslice.c" ^ + -I"%PythonInstallDirectory%\Lib\site-packages\numpy\core\include" ^ + -I"%PythonInstallDirectory%\include" ^ + "%PythonInstallDirectory%\libs\python27.lib" ^ + /link/out:gridslice.pyd /EXPORT:initgridslice +if ERRORLEVEL 1 ( + echo ERROR: The gridslice compile has failed. + PAUSE && EXIT 1 +) + +REM Move the build artifacts to the build directory. +IF NOT EXIST "%CONTAINING_DIR%..\build" ( + MKDIR "%CONTAINING_DIR%..\build" +) +MOVE /Y "%CONTAINING_DIR%gridslice.pyd" ^ + "%CONTAINING_DIR%..\build" + +REM Cleanup the remaining non-essential build artifacts. +IF EXIST "%CONTAINING_DIR%gridslice.obj" ( + echo Y | DEL "%CONTAINING_DIR%gridslice.obj" +) +IF EXIST "%CONTAINING_DIR%gridslice.sln.cache" ( + echo Y | DEL "%CONTAINING_DIR%gridslice.sln.cache" +) +IF EXIST "%CONTAINING_DIR%sliceConvert.obj" ( + echo Y | DEL "%CONTAINING_DIR%sliceConvert.obj" +) +IF EXIST "%CONTAINING_DIR%sliceConvert.lib" ( + echo Y | DEL "%CONTAINING_DIR%sliceConvert.lib" +) +IF EXIST "%CONTAINING_DIR%sliceConvert.exp" ( + echo Y | DEL "%CONTAINING_DIR%sliceConvert.exp" +) + +echo. +echo. +echo The gridslice compile was successful. +PAUSE diff --git a/nativeLib/ncep_grib2module/ncep_grib2module.ecl b/nativeLib/ncep_grib2module/ncep_grib2module.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/nativeLib/ohd.bias_trans/ohd.bias_trans.ecl b/nativeLib/ohd.bias_trans/ohd.bias_trans.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/nativeLib/ohd.common/ohd.common.ecl b/nativeLib/ohd.common/ohd.common.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/nativeLib/ohd.damcrest/ohd.damcrest.ecl b/nativeLib/ohd.damcrest/ohd.damcrest.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/nativeLib/ohd.damcrestdb/ohd.damcrestdb.ecl b/nativeLib/ohd.damcrestdb/ohd.damcrestdb.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/nativeLib/ohd.db/ohd.db.ecl b/nativeLib/ohd.db/ohd.db.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/nativeLib/ohd.dimensions_file_uploader/ohd.dimensions_file_uploader.ecl b/nativeLib/ohd.dimensions_file_uploader/ohd.dimensions_file_uploader.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/nativeLib/ohd.fcstservice/ohd.fcstservice.ecl b/nativeLib/ohd.fcstservice/ohd.fcstservice.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/nativeLib/ohd.ihfsdb/ohd.ihfsdb.ecl b/nativeLib/ohd.ihfsdb/ohd.ihfsdb.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/nativeLib/ohd.lib/ohd.lib.ecl b/nativeLib/ohd.lib/ohd.lib.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/nativeLib/ohd.map/ohd.map.ecl b/nativeLib/ohd.map/ohd.map.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/nativeLib/ohd.misc_dialogs/ohd.misc_dialogs.ecl b/nativeLib/ohd.misc_dialogs/ohd.misc_dialogs.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/nativeLib/ohd.mpe/ohd.mpe.ecl b/nativeLib/ohd.mpe/ohd.mpe.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/nativeLib/ohd.pdc_pp/ohd.pdc_pp.ecl b/nativeLib/ohd.pdc_pp/ohd.pdc_pp.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/nativeLib/ohd.prism/ohd.prism.ecl b/nativeLib/ohd.prism/ohd.prism.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/nativeLib/ohd.rax_apps/ohd.rax_apps.ecl b/nativeLib/ohd.rax_apps/ohd.rax_apps.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/nativeLib/ohd.raxdb/ohd.raxdb.ecl b/nativeLib/ohd.raxdb/ohd.raxdb.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/nativeLib/ohd.rivermonitor/ohd.rivermonitor.ecl b/nativeLib/ohd.rivermonitor/ohd.rivermonitor.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/nativeLib/ohd.sshp/ohd.sshp.ecl b/nativeLib/ohd.sshp/ohd.sshp.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/nativeLib/ohd.swttable/ohd.swttable.ecl b/nativeLib/ohd.swttable/ohd.swttable.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/nativeLib/ohd.sys_monitor/ohd.sys_monitor.ecl b/nativeLib/ohd.sys_monitor/ohd.sys_monitor.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/nativeLib/ohd.tsl/ohd.tsl.ecl b/nativeLib/ohd.tsl/ohd.tsl.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/nativeLib/ohd.var/ohd.var.ecl b/nativeLib/ohd.var/ohd.var.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/nativeLib/org.apache.qpid/org.apache.qpid.ecl b/nativeLib/org.apache.qpid/org.apache.qpid.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/nativeLib/org.apache.thrift/org.apache.thrift.ecl b/nativeLib/org.apache.thrift/org.apache.thrift.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/nativeLib/rary.cots.ant-contrib/rary.cots.ant-contrib.ecl b/nativeLib/rary.cots.ant-contrib/rary.cots.ant-contrib.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/nativeLib/rary.cots.gfortran/rary.cots.gfortran.ecl b/nativeLib/rary.cots.gfortran/rary.cots.gfortran.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/nativeLib/rary.cots.jasper/rary.cots.jasper.ecl b/nativeLib/rary.cots.jasper/rary.cots.jasper.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/nativeLib/rary.cots.java/rary.cots.java.ecl b/nativeLib/rary.cots.java/rary.cots.java.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/nativeLib/rary.cots.jepp/jepp-2.3/src/jep/pyjobject.c b/nativeLib/rary.cots.jepp/jepp-2.3/src/jep/pyjobject.c index d0fc938eb1..69bc8fba9e 100755 --- a/nativeLib/rary.cots.jepp/jepp-2.3/src/jep/pyjobject.c +++ b/nativeLib/rary.cots.jepp/jepp-2.3/src/jep/pyjobject.c @@ -1,969 +1,969 @@ -/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 c-style: "K&R" -*- */ -/* - jep - Java Embedded Python - - Copyright (c) 2004 - 2008 Mike Johnson. - - This file is licenced under the the zlib/libpng License. - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any - damages arising from the use of this software. - - Permission is granted to anyone to use this software for any - purpose, including commercial applications, and to alter it and - redistribute it freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you - must not claim that you wrote the original software. If you use - this software in a product, an acknowledgment in the product - documentation would be appreciated but is not required. - - 2. Altered source versions must be plainly marked as such, and - must not be misrepresented as being the original software. - - 3. This notice may not be removed or altered from any source - distribution. -*/ - -#ifdef WIN32 -# include "winconfig.h" -#endif - -#include /* added by bkowal */ - -#if HAVE_CONFIG_H -# include -#endif - -#if HAVE_UNISTD_H -# include -# include -#endif - -// shut up the compiler -#ifdef _POSIX_C_SOURCE -# undef _POSIX_C_SOURCE -#endif -#include - -// shut up the compiler -#ifdef _POSIX_C_SOURCE -# undef _POSIX_C_SOURCE -#endif -#ifdef _FILE_OFFSET_BITS -# undef _FILE_OFFSET_BITS -#endif -#include "Python.h" - -#include "pyembed.h" -#include "pyjobject.h" -#include "pyjmethod.h" -#include "pyjfield.h" -#include "pyjclass.h" -#include "util.h" - -// added by njensen -#include "numpy/arrayobject.h" -#include "pyjmethodwrapper.h" - -staticforward PyTypeObject PyJobject_Type; - -static int pyjobject_init(JNIEnv *env, PyJobject_Object*); -static int pyjobject_setattr(PyJobject_Object*, char*, PyObject*); -static void pyjobject_addmethod(PyJobject_Object*, PyObject*); -static void pyjobject_addfield(PyJobject_Object*, PyObject*); -static void pyjobject_dealloc(PyJobject_Object*); - -static jmethodID objectGetClass = 0; -static jmethodID classGetMethods = 0; -static jmethodID classGetFields = 0; - -static jmethodID xMethod = 0; -static jmethodID yMethod = 0; -static jmethodID getMethod = 0; - -// added by njensen -static jclass floatarrayclass = NULL; -static jclass bytearrayclass = NULL; -static jclass intarrayclass = NULL; -static jclass stringclass = NULL; - -// added by njensen -static jmethodID classGetName = 0; -static PyObject* classnamePyJMethodsDict = NULL; - -// called internally to make new PyJobject_Object instances -PyObject* pyjobject_new(JNIEnv *env, jobject obj) { - PyJobject_Object *pyjob; - - if(PyType_Ready(&PyJobject_Type) < 0) - return NULL; - if(!obj) { - PyErr_Format(PyExc_RuntimeError, "Invalid object."); - return NULL; - } - - pyjob = PyObject_NEW(PyJobject_Object, &PyJobject_Type); - pyjob->object = (*env)->NewGlobalRef(env, obj); - pyjob->clazz = (*env)->NewGlobalRef(env, (*env)->GetObjectClass(env, obj)); - pyjob->pyjclass = NULL; - pyjob->attr = PyList_New(0); - pyjob->methods = PyList_New(0); - pyjob->fields = PyList_New(0); - pyjob->finishAttr = 0; - - if(pyjobject_init(env, pyjob)) - return (PyObject *) pyjob; - return NULL; -} - - -PyObject* pyjobject_new_class(JNIEnv *env, jclass clazz) { - PyJobject_Object *pyjob; - - if(!clazz) { - PyErr_Format(PyExc_RuntimeError, "Invalid class object."); - return NULL; - } - - pyjob = PyObject_NEW(PyJobject_Object, &PyJobject_Type); - pyjob->object = NULL; - pyjob->clazz = (*env)->NewGlobalRef(env, clazz); - pyjob->attr = PyList_New(0); - pyjob->methods = PyList_New(0); - pyjob->fields = PyList_New(0); - pyjob->finishAttr = 0; - - pyjob->pyjclass = pyjclass_new(env, (PyObject *) pyjob); - - if(pyjobject_init(env, pyjob)) - return (PyObject *) pyjob; - return NULL; -} - - -static int pyjobject_init(JNIEnv *env, PyJobject_Object *pyjob) { - jobjectArray methodArray = NULL; - jobjectArray fieldArray = NULL; - int i, len = 0; - jobject langClass = NULL; - - // added by njensen - jstring jClassName = NULL; - const char * charJClassName; - PyObject * pyJClassName = NULL; - PyObject * pyAttrName = NULL; - PyObject * cachedMethodList = NULL; - jclass lock = NULL; - - - (*env)->PushLocalFrame(env, 20); - // ------------------------------ call Class.getMethods() - - - // well, first call getClass() - if(objectGetClass == 0) { - objectGetClass = (*env)->GetMethodID(env, - pyjob->clazz, - "getClass", - "()Ljava/lang/Class;"); - if(process_java_exception(env) || !objectGetClass) - goto EXIT_ERROR; - } - - langClass = (*env)->CallObjectMethod(env, pyjob->clazz, objectGetClass); - if(process_java_exception(env) || !langClass) - goto EXIT_ERROR; - - // then, get methodid for getMethods() - if(classGetMethods == 0) { - classGetMethods = (*env)->GetMethodID(env, - langClass, - "getMethods", - "()[Ljava/lang/reflect/Method;"); - if(process_java_exception(env) || !classGetMethods) - goto EXIT_ERROR; - } - - // added by njensen - if(classGetName == 0) - { - classGetName = (*env)->GetMethodID(env, - langClass, - "getName", - "()Ljava/lang/String;"); - } - jClassName = (*env)->CallObjectMethod(env, pyjob->clazz, classGetName); - charJClassName = jstring2char(env, jClassName); - pyJClassName = PyString_FromString(charJClassName); - release_utf_char(env, jClassName, charJClassName); - pyAttrName = PyString_FromString("jclassname"); - if(PyObject_SetAttr((PyObject *) pyjob, - pyAttrName, - pyJClassName) != 0) - { - PyErr_Format(PyExc_RuntimeError, "Couldn't add jclassname as attribute."); - } - PyList_Append(pyjob->fields, pyAttrName); - Py_DECREF(pyAttrName); - (*env)->DeleteLocalRef(env, jClassName); - pyjob->jclassname = pyJClassName; - // end of jclassname code - - // begin synchronized - lock = (*env)->FindClass(env, "java/lang/String"); - if((*env)->MonitorEnter(env, lock) != JNI_OK) - { - PyErr_Format(PyExc_RuntimeError, "Couldn't get synchronization lock on class method creation."); - } - if(classnamePyJMethodsDict == NULL) - { - classnamePyJMethodsDict = PyDict_New(); - } - - cachedMethodList = PyDict_GetItem(classnamePyJMethodsDict, pyJClassName); - if(cachedMethodList == NULL) - { - PyObject* pyjMethodList = NULL; - pyjMethodList = PyList_New(0); - - // njensen: I changed the architecture to speed it up so it caches - // pyjmethods for each Java Class object, then applies that method - // to the object in question. The cache is built here, then - // pyjobject_getattr associates the object with the method, and - // pyjmethod_call ensures it is passed along. - - - // - GetMethodID fails when you pass the clazz object, it expects - // a java.lang.Class jobject. - // - if you CallObjectMethod with the langClass jclass object, - // it'll return an array of methods, but they're methods of the - // java.lang.reflect.Method class -- not ->object. - // - // so what i did here was find the methodid using langClass, - // but then i call the method using clazz. methodIds for java - // classes are shared.... - - methodArray = (jobjectArray) (*env)->CallObjectMethod(env, - pyjob->clazz, - classGetMethods); - if(process_java_exception(env) || !methodArray) - goto EXIT_ERROR; - - // for each method, create a new pyjmethod object - // and add to the internal methods list. - len = (*env)->GetArrayLength(env, methodArray); - for(i = 0; i < len; i++) { - PyJmethod_Object *pymethod = NULL; - jobject rmethod = NULL; - - rmethod = (*env)->GetObjectArrayElement(env, - methodArray, - i); - - // make new PyJmethod_Object, linked to pyjob - if(pyjob->object) - pymethod = pyjmethod_new(env, rmethod, pyjob); - else - pymethod = pyjmethod_new_static(env, rmethod, pyjob); - - if(!pymethod) - continue; - - if(pymethod->pyMethodName && PyString_Check(pymethod->pyMethodName)) { - if(PyList_Append(pyjMethodList, (PyObject*) pymethod) != 0) - printf("WARNING: couldn't add method"); - } - - Py_DECREF(pymethod); - (*env)->DeleteLocalRef(env, rmethod); - } - PyDict_SetItem(classnamePyJMethodsDict, pyJClassName, pyjMethodList); - cachedMethodList = pyjMethodList; - (*env)->DeleteLocalRef(env, methodArray); - } // end of looping over available methods - if((*env)->MonitorExit(env, lock) != JNI_OK) - { - PyErr_Format(PyExc_RuntimeError, "Couldn't release synchronization lock on class method creation."); - } - // end of synchronization - - len = PyList_Size(cachedMethodList); - for(i = 0; i < len; i++) - { - PyJmethod_Object* pymethod = (PyJmethod_Object*) PyList_GetItem(cachedMethodList, i); - if(PyObject_SetAttr((PyObject *) pyjob, pymethod->pyMethodName, (PyObject*) pymethod) != 0) - { - PyErr_Format(PyExc_RuntimeError, "Couldn't add method as attribute."); - } - else - { - pyjobject_addmethod(pyjob, pymethod->pyMethodName); - } - } - // end of cached method optimizations - - - // ------------------------------ process fields - - if(classGetFields == 0) { - classGetFields = (*env)->GetMethodID(env, - langClass, - "getFields", - "()[Ljava/lang/reflect/Field;"); - if(process_java_exception(env) || !classGetFields) - goto EXIT_ERROR; - } - - fieldArray = (jobjectArray) (*env)->CallObjectMethod(env, - pyjob->clazz, - classGetFields); - if(process_java_exception(env) || !fieldArray) - goto EXIT_ERROR; - - - // for each field, create a pyjfield object and - // add to the internal members list. - len = (*env)->GetArrayLength(env, fieldArray); - for(i = 0; i < len; i++) { - jobject rfield = NULL; - PyJfield_Object *pyjfield = NULL; - - rfield = (*env)->GetObjectArrayElement(env, - fieldArray, - i); - - pyjfield = pyjfield_new(env, rfield, pyjob); - - if(!pyjfield) - continue; - - if(pyjfield->pyFieldName && PyString_Check(pyjfield->pyFieldName)) { - if(PyObject_SetAttr((PyObject *) pyjob, - pyjfield->pyFieldName, - (PyObject *) pyjfield) != 0) { - printf("WARNING: couldn't add field.\n"); - } - else - pyjobject_addfield(pyjob, pyjfield->pyFieldName); - } - - Py_DECREF(pyjfield); - (*env)->DeleteLocalRef(env, rfield); - } - (*env)->DeleteLocalRef(env, fieldArray); - - // we've finished the object. - pyjob->finishAttr = 1; - (*env)->PopLocalFrame(env, NULL); - return 1; - - -EXIT_ERROR: - (*env)->PopLocalFrame(env, NULL); - - if(PyErr_Occurred()) { // java exceptions translated by this time - if(pyjob) - pyjobject_dealloc(pyjob); - } - - return 0; -} - - -static void pyjobject_dealloc(PyJobject_Object *self) { -#if USE_DEALLOC - JNIEnv *env = pyembed_get_env(); - if(env) { - if(self->object) - (*env)->DeleteGlobalRef(env, self->object); - if(self->clazz) - (*env)->DeleteGlobalRef(env, self->clazz); - - Py_DECREF(self->attr); - Py_DECREF(self->methods); - Py_DECREF(self->fields); - Py_DECREF(self->jclassname); // added by njensen - if(self->pyjclass) - Py_DECREF(self->pyjclass); - } - - PyObject_Del(self); -#endif -} - - -static PyObject* pyjobject_call(PyJobject_Object *self, - PyObject *args, - PyObject *keywords) { - - if(!self->pyjclass) { - PyErr_Format(PyExc_RuntimeError, "Not a class."); - return NULL; - } - - return pyjclass_call(self->pyjclass, args, keywords); -} - - -int pyjobject_check(PyObject *obj) { - if(PyObject_TypeCheck(obj, &PyJobject_Type)) - return 1; - return 0; -} - - -// add a method name to obj->methods list -static void pyjobject_addmethod(PyJobject_Object *obj, PyObject *name) { - if(!PyString_Check(name)) - return; - if(!PyList_Check(obj->methods)) - return; - - PyList_Append(obj->methods, name); -} - - -static void pyjobject_addfield(PyJobject_Object *obj, PyObject *name) { - if(!PyString_Check(name)) - return; - if(!PyList_Check(obj->fields)) - return; - - PyList_Append(obj->fields, name); -} - - -// find and call a method on this object that matches the python args. -// typically called by way of pyjmethod when python invokes __call__. -// -// steals reference to self, methodname and args. -PyObject* find_method(JNIEnv *env, - PyJobject_Object *self, - PyObject *methodName, - int methodCount, - PyObject *attr, - PyObject *args) { - // all possible method candidates - PyJmethod_Object **cand = NULL; - int pos, i, listSize, argsSize; - - pos = i = listSize = argsSize = 0; - - // not really likely if we were called from pyjmethod, but hey... - if(methodCount < 1) { - PyErr_Format(PyExc_RuntimeError, "I have no methods."); - return NULL; - } - - if(!attr || !PyList_CheckExact(attr)) { - PyErr_Format(PyExc_RuntimeError, "Invalid attr list."); - return NULL; - } - - cand = (PyJmethod_Object **) - PyMem_Malloc(sizeof(PyJmethod_Object*) * methodCount); - - // just for safety - for(i = 0; i < methodCount; i++) - cand[i] = NULL; - - listSize = PyList_GET_SIZE(attr); - for(i = 0; i < listSize; i++) { - PyObject *tuple = PyList_GetItem(attr, i); /* borrowed */ - - if(PyErr_Occurred()) - break; - - if(!tuple || tuple == Py_None || !PyTuple_CheckExact(tuple)) - continue; - - if(PyTuple_Size(tuple) == 2) { - PyObject *key = PyTuple_GetItem(tuple, 0); /* borrowed */ - - if(PyErr_Occurred()) - break; - - if(!key || !PyString_Check(key)) - continue; - - if(PyObject_Compare(key, methodName) == 0) { - PyObject *method = PyTuple_GetItem(tuple, 1); /* borrowed */ - if(pyjmethod_check(method)) - cand[pos++] = (PyJmethod_Object *) method; - } - } - } - - if(PyErr_Occurred()) - goto EXIT_ERROR; - - // makes more sense to work with... - pos--; - - if(pos < 0) { - // didn't find a method by that name.... - // that shouldn't happen unless the search above is broken. - PyErr_Format(PyExc_NameError, "No such method."); - goto EXIT_ERROR; - } - if(pos == 0) { - // we're done, call that one - PyObject *ret = pyjmethod_call_internal(cand[0], self, args); - PyMem_Free(cand); - return ret; - } - - // first, find out if there's only one method that - // has the correct number of args - argsSize = PyTuple_Size(args); - { - PyJmethod_Object *matching = NULL; - int count = 0; - - for(i = 0; i <= pos && cand[i]; i++) { - // make sure method is fully initialized - if(!cand[i]->parameters) { - if(!pyjmethod_init(env, cand[i])) { - // init failed, that's not good. - cand[i] = NULL; - PyErr_Warn(PyExc_Warning, "pyjmethod init failed."); - continue; - } - } - - if(cand[i]->lenParameters == argsSize) { - matching = cand[i]; - count++; - } - else - cand[i] = NULL; // eliminate non-matching - } - - if(matching && count == 1) { - PyMem_Free(cand); - return pyjmethod_call_internal(matching, self, args); - } - } // local scope - - for(i = 0; i <= pos; i++) { - int parmpos = 0; - - // already eliminated? - if(!cand[i]) - continue; - - // check if argument types match - (*env)->PushLocalFrame(env, 20); - for(parmpos = 0; parmpos < cand[i]->lenParameters; parmpos++) { - PyObject *param = PyTuple_GetItem(args, parmpos); - int paramTypeId = -1; - jclass pclazz; - jclass paramType = - (jclass) (*env)->GetObjectArrayElement(env, - cand[i]->parameters, - parmpos); - - if(process_java_exception(env) || !paramType) - break; - - pclazz = (*env)->GetObjectClass(env, paramType); - if(process_java_exception(env) || !pclazz) - break; - - paramTypeId = get_jtype(env, paramType, pclazz); - - if(pyarg_matches_jtype(env, param, paramType, paramTypeId)) { - if(PyErr_Occurred()) - break; - continue; - } - - // args don't match - break; - } - (*env)->PopLocalFrame(env, NULL); - - // this method matches? - if(parmpos == cand[i]->lenParameters) { - PyObject *ret = pyjmethod_call_internal(cand[i], self, args); - PyMem_Free(cand); - return ret; - } - } - - -EXIT_ERROR: - PyMem_Free(cand); - if(!PyErr_Occurred()) - PyErr_Format(PyExc_NameError, - "Matching overloaded method not found."); - return NULL; -} - - -// find and call a method on this object that matches the python args. -// typically called from pyjmethod when python invokes __call__. -// -// steals reference to self, methodname and args. -PyObject* pyjobject_find_method(PyJobject_Object *self, - PyObject *methodName, - PyObject *args) { - // util method does this for us - return find_method(pyembed_get_env(), - self, - methodName, - PyList_Size(self->methods), - self->attr, - args); -} - - -// call toString() on jobject. returns null on error. -// excpected to return new reference. -static PyObject* pyjobject_str(PyJobject_Object *self) { - PyObject *pyres = NULL; - JNIEnv *env; - - env = pyembed_get_env(); - pyres = jobject_topystring(env, self->object, self->clazz); - - if(process_java_exception(env)) - return NULL; - - // python doesn't like Py_None here... - if(pyres == NULL) - return Py_BuildValue("s", ""); - - return pyres; -} - - -// get attribute 'name' for object. -// uses obj->attr list of tuples for storage. -// returns new reference. -static PyObject* pyjobject_getattr(PyJobject_Object *obj, - char *name) { - PyObject *ret, *pyname, *methods, *members, *numpy; - int listSize, i, found; - - ret = pyname = methods = members = NULL; - listSize = i = found = 0; - - if(!name) { - Py_INCREF(Py_None); - return Py_None; - } - pyname = PyString_FromString(name); - methods = PyString_FromString("__methods__"); - members = PyString_FromString("__members__"); - - // numpy added by njensen - numpy = PyString_FromString("__numpy__"); - if(PyObject_Compare(pyname, numpy) == 0) { - Py_DECREF(pyname); - Py_DECREF(methods); - Py_DECREF(members); - Py_DECREF(numpy); - - return pyjobject_numpy(obj); - } - Py_DECREF(numpy); - - if(PyObject_Compare(pyname, methods) == 0) { - Py_DECREF(pyname); - Py_DECREF(methods); - Py_DECREF(members); - - Py_INCREF(obj->methods); - return obj->methods; - } - Py_DECREF(methods); - - if(PyObject_Compare(pyname, members) == 0) { - Py_DECREF(pyname); - Py_DECREF(members); - - Py_INCREF(obj->fields); - return obj->fields; - } - Py_DECREF(members); - - if(!PyList_Check(obj->attr)) { - Py_DECREF(pyname); - PyErr_Format(PyExc_RuntimeError, "Invalid attr list."); - return NULL; - } - - // util function fetches from attr list for us. - if(obj->attr == NULL) - { - printf("attribute list is null!\n"); - printf("name is %s\n", name); - } - ret = tuplelist_getitem(obj->attr, pyname); /* new reference */ - - Py_DECREF(pyname); - - // method optimizations by njensen - if(pyjmethod_check(ret)) - { - PyJmethodWrapper_Object* wrapper = pyjmethodwrapper_new(obj, (PyJmethod_Object*) ret); - Py_DECREF(ret); - Py_INCREF(wrapper); - ret = (PyObject *) wrapper; - } - - if(PyErr_Occurred() || ret == Py_None) { - PyErr_Format(PyExc_NameError, "Method not found %s", name); - return NULL; - } - - if(pyjfield_check(ret)) { - PyObject *t = pyjfield_get((PyJfield_Object *) ret); - Py_DECREF(ret); - return t; - } - - return ret; -} - - -// added by njensen -static PyObject* pyjobject_numpy(PyJobject_Object *obj) { - int i=0; - /* updated by bkowal */ - npy_intp *dims = NULL; - jfloat *dataFloat = NULL; - jbyte *dataByte = NULL; - jint *dataInt = NULL; - const char *message = NULL; - jobjectArray objarray = NULL; - PyObject *resultList = NULL; - jint xsize = 0; - jint ysize = 0; - jsize listSize =0; - - JNIEnv *env = pyembed_get_env(); - jclass numpyable = (*env)->FindClass(env, "jep/INumpyable"); - if((*env)->IsInstanceOf(env, obj->object, numpyable)) - { - xMethod = (*env)->GetMethodID(env, numpyable, "getNumpyX", "()I"); - xsize = (jint) (*env)->CallIntMethod(env, obj->object, xMethod); - - yMethod = (*env)->GetMethodID(env, numpyable, "getNumpyY", "()I"); - ysize = (jint) (*env)->CallIntMethod(env, obj->object, yMethod); - - dims = malloc(2 * sizeof(npy_intp)); - dims[0] = ysize; - dims[1] = xsize; - - getMethod = (*env)->GetMethodID(env, numpyable, "getNumPy", "()[Ljava/lang/Object;"); - objarray = (jobjectArray) (*env)->CallObjectMethod(env, obj->object, getMethod); - if(objarray == NULL) - { - Py_INCREF(Py_None); - return Py_None; - } - - listSize = (*env)->GetArrayLength(env, objarray); - - initNumpy(); - - resultList = PyList_New(listSize); - - floatarrayclass = (*env)->FindClass(env, "[F"); - bytearrayclass = (*env)->FindClass(env, "[B"); - intarrayclass = (*env)->FindClass(env, "[I"); - stringclass = (*env)->FindClass(env, "java/lang/String"); - - for(i=0; i < listSize; i=i+1) - { - PyObject *pyjob; - jobject jo = (*env)->GetObjectArrayElement(env, objarray, i); - if((*env)->IsInstanceOf(env, jo, floatarrayclass)) - { - pyjob = PyArray_SimpleNew(2, dims, NPY_FLOAT32); - dataFloat = (*env)->GetFloatArrayElements(env, jo, 0); - memcpy(((PyArrayObject *)pyjob)->data, - dataFloat, ysize * xsize * sizeof(float)); - (*env)->ReleaseFloatArrayElements(env, jo, dataFloat, 0); - } - else if((*env)->IsInstanceOf(env, jo, bytearrayclass)) - { - pyjob = PyArray_SimpleNew(2, dims, NPY_BYTE); - dataByte = (*env)->GetByteArrayElements(env, jo, 0); - memcpy(((PyArrayObject *)pyjob)->data, - dataByte, ysize * xsize * 1); - (*env)->ReleaseByteArrayElements(env, jo, dataByte, 0); - } - else if((*env)->IsInstanceOf(env, jo, intarrayclass)) - { - pyjob = PyArray_SimpleNew(2, dims, NPY_INT32); - dataInt = (*env)->GetIntArrayElements(env, jo, 0); - memcpy(((PyArrayObject *)pyjob)->data, - dataInt, ysize * xsize * sizeof(int)); - (*env)->ReleaseIntArrayElements(env, jo, dataInt, 0); - } - else if((*env)->IsInstanceOf(env, jo, stringclass)) - { - message = jstring2char(env, jo); - pyjob = PyString_FromString(message); - release_utf_char(env, jo, message); - } - else - { - pyjob = Py_None; - } - PyList_SetItem(resultList, i, pyjob); - (*env)->DeleteLocalRef(env, jo); - } - free(dims); - (*env)->DeleteLocalRef(env, objarray); - return resultList; - } - else - { - Py_INCREF(Py_None); - return Py_None; - } -} - -// added by njensen -static void initNumpy(void) -{ - if (!numpyInit) - { - import_array(); - numpyInit = 1; - } -} - -// set attribute v for object. -// uses obj->attr dictionary for storage. -static int pyjobject_setattr(PyJobject_Object *obj, - char *name, - PyObject *v) { - PyObject *pyname, *tuple; - - if(!name) { - PyErr_Format(PyExc_RuntimeError, "Invalid name: NULL."); - return -1; - } - - if(!PyList_Check(obj->attr)) { - PyErr_Format(PyExc_RuntimeError, "Invalid attr list."); - return -1; - } - - Py_INCREF(v); - - if(obj->finishAttr) { - PyObject *cur, *pyname; - int ret; - - // finished setting internal objects. - // don't allow python to add new, but do - // allow python script to change values on pyjfields - - pyname = PyString_FromString(name); - cur = tuplelist_getitem(obj->attr, pyname); /* new reference */ - Py_DECREF(pyname); - - if(PyErr_Occurred()) - return -1; - - if(cur == Py_None) { - PyErr_SetString(PyExc_RuntimeError, "No such field."); - return -1; - } - - if(!pyjfield_check(cur)) { - PyErr_SetString(PyExc_TypeError, "Not a pyjfield object."); - return -1; - } - - if(!PyList_Check(obj->attr)) { - Py_DECREF(pyname); - PyErr_SetString(PyExc_RuntimeError, "Invalid attr list."); - return -1; - } - - // now, just ask pyjfield to handle. - ret = pyjfield_set((PyJfield_Object *) cur, v); /* borrows ref */ - - Py_DECREF(cur); - Py_DECREF(v); - return ret; - } - - pyname = PyString_FromString((const char *) name); - tuple = PyTuple_New(2); - - Py_INCREF(pyname); - PyTuple_SetItem(tuple, 0, pyname); /* steals ref */ - PyTuple_SetItem(tuple, 1, v); /* steals ref */ - - // the docs don't mention this, but the source INCREFs tuple - // ... - // after much printf'ing. uhm. must decref it somewhere. - // ... - // doh. the docs suck. - - // Py_INCREF(tuple); - - PyList_Append(obj->attr, tuple); - - Py_DECREF(tuple); - Py_DECREF(pyname); - return 0; // success -} - - -static PyMethodDef pyjobject_methods[] = { - {NULL, NULL, 0, NULL} -}; - - -static PyTypeObject PyJobject_Type = { - PyObject_HEAD_INIT(0) - 0, /* ob_size */ - "PyJobject", /* tp_name */ - sizeof(PyJobject_Object), /* tp_basicsize */ - 0, /* tp_itemsize */ - (destructor) pyjobject_dealloc, /* tp_dealloc */ - 0, /* tp_print */ - (getattrfunc) pyjobject_getattr, /* tp_getattr */ - (setattrfunc) pyjobject_setattr, /* tp_setattr */ - 0, /* tp_compare */ - 0, /* tp_repr */ - 0, /* tp_as_number */ - 0, /* tp_as_sequence */ - 0, /* tp_as_mapping */ - 0, /* tp_hash */ - (ternaryfunc) pyjobject_call, /* tp_call */ - (reprfunc) pyjobject_str, /* tp_str */ - 0, /* tp_getattro */ - 0, /* tp_setattro */ - 0, /* tp_as_buffer */ - Py_TPFLAGS_DEFAULT, /* tp_flags */ - "jobject", /* tp_doc */ - 0, /* tp_traverse */ - 0, /* tp_clear */ - 0, /* tp_richcompare */ - 0, /* tp_weaklistoffset */ - 0, /* tp_iter */ - 0, /* tp_iternext */ - pyjobject_methods, /* tp_methods */ - 0, /* tp_members */ - 0, /* tp_getset */ - 0, /* tp_base */ - 0, /* tp_dict */ - 0, /* tp_descr_get */ - 0, /* tp_descr_set */ - 0, /* tp_dictoffset */ - 0, /* tp_init */ - 0, /* tp_alloc */ - NULL, /* tp_new */ -}; +/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 c-style: "K&R" -*- */ +/* + jep - Java Embedded Python + + Copyright (c) 2004 - 2008 Mike Johnson. + + This file is licenced under the the zlib/libpng License. + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any + damages arising from the use of this software. + + Permission is granted to anyone to use this software for any + purpose, including commercial applications, and to alter it and + redistribute it freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you + must not claim that you wrote the original software. If you use + this software in a product, an acknowledgment in the product + documentation would be appreciated but is not required. + + 2. Altered source versions must be plainly marked as such, and + must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ + +#ifdef WIN32 +# include "winconfig.h" +#endif + +#include /* added by bkowal */ + +#if HAVE_CONFIG_H +# include +#endif + +#if HAVE_UNISTD_H +# include +# include +#endif + +// shut up the compiler +#ifdef _POSIX_C_SOURCE +# undef _POSIX_C_SOURCE +#endif +#include + +// shut up the compiler +#ifdef _POSIX_C_SOURCE +# undef _POSIX_C_SOURCE +#endif +#ifdef _FILE_OFFSET_BITS +# undef _FILE_OFFSET_BITS +#endif +#include "Python.h" + +#include "pyembed.h" +#include "pyjobject.h" +#include "pyjmethod.h" +#include "pyjfield.h" +#include "pyjclass.h" +#include "util.h" + +// added by njensen +#include "numpy/arrayobject.h" +#include "pyjmethodwrapper.h" + +staticforward PyTypeObject PyJobject_Type; + +static int pyjobject_init(JNIEnv *env, PyJobject_Object*); +static int pyjobject_setattr(PyJobject_Object*, char*, PyObject*); +static void pyjobject_addmethod(PyJobject_Object*, PyObject*); +static void pyjobject_addfield(PyJobject_Object*, PyObject*); +static void pyjobject_dealloc(PyJobject_Object*); + +static jmethodID objectGetClass = 0; +static jmethodID classGetMethods = 0; +static jmethodID classGetFields = 0; + +static jmethodID xMethod = 0; +static jmethodID yMethod = 0; +static jmethodID getMethod = 0; + +// added by njensen +static jclass floatarrayclass = NULL; +static jclass bytearrayclass = NULL; +static jclass intarrayclass = NULL; +static jclass stringclass = NULL; + +// added by njensen +static jmethodID classGetName = 0; +static PyObject* classnamePyJMethodsDict = NULL; + +// called internally to make new PyJobject_Object instances +PyObject* pyjobject_new(JNIEnv *env, jobject obj) { + PyJobject_Object *pyjob; + + if(PyType_Ready(&PyJobject_Type) < 0) + return NULL; + if(!obj) { + PyErr_Format(PyExc_RuntimeError, "Invalid object."); + return NULL; + } + + pyjob = PyObject_NEW(PyJobject_Object, &PyJobject_Type); + pyjob->object = (*env)->NewGlobalRef(env, obj); + pyjob->clazz = (*env)->NewGlobalRef(env, (*env)->GetObjectClass(env, obj)); + pyjob->pyjclass = NULL; + pyjob->attr = PyList_New(0); + pyjob->methods = PyList_New(0); + pyjob->fields = PyList_New(0); + pyjob->finishAttr = 0; + + if(pyjobject_init(env, pyjob)) + return (PyObject *) pyjob; + return NULL; +} + + +PyObject* pyjobject_new_class(JNIEnv *env, jclass clazz) { + PyJobject_Object *pyjob; + + if(!clazz) { + PyErr_Format(PyExc_RuntimeError, "Invalid class object."); + return NULL; + } + + pyjob = PyObject_NEW(PyJobject_Object, &PyJobject_Type); + pyjob->object = NULL; + pyjob->clazz = (*env)->NewGlobalRef(env, clazz); + pyjob->attr = PyList_New(0); + pyjob->methods = PyList_New(0); + pyjob->fields = PyList_New(0); + pyjob->finishAttr = 0; + + pyjob->pyjclass = pyjclass_new(env, (PyObject *) pyjob); + + if(pyjobject_init(env, pyjob)) + return (PyObject *) pyjob; + return NULL; +} + + +static int pyjobject_init(JNIEnv *env, PyJobject_Object *pyjob) { + jobjectArray methodArray = NULL; + jobjectArray fieldArray = NULL; + int i, len = 0; + jobject langClass = NULL; + + // added by njensen + jstring jClassName = NULL; + const char * charJClassName; + PyObject * pyJClassName = NULL; + PyObject * pyAttrName = NULL; + PyObject * cachedMethodList = NULL; + jclass lock = NULL; + + + (*env)->PushLocalFrame(env, 20); + // ------------------------------ call Class.getMethods() + + + // well, first call getClass() + if(objectGetClass == 0) { + objectGetClass = (*env)->GetMethodID(env, + pyjob->clazz, + "getClass", + "()Ljava/lang/Class;"); + if(process_java_exception(env) || !objectGetClass) + goto EXIT_ERROR; + } + + langClass = (*env)->CallObjectMethod(env, pyjob->clazz, objectGetClass); + if(process_java_exception(env) || !langClass) + goto EXIT_ERROR; + + // then, get methodid for getMethods() + if(classGetMethods == 0) { + classGetMethods = (*env)->GetMethodID(env, + langClass, + "getMethods", + "()[Ljava/lang/reflect/Method;"); + if(process_java_exception(env) || !classGetMethods) + goto EXIT_ERROR; + } + + // added by njensen + if(classGetName == 0) + { + classGetName = (*env)->GetMethodID(env, + langClass, + "getName", + "()Ljava/lang/String;"); + } + jClassName = (*env)->CallObjectMethod(env, pyjob->clazz, classGetName); + charJClassName = jstring2char(env, jClassName); + pyJClassName = PyString_FromString(charJClassName); + release_utf_char(env, jClassName, charJClassName); + pyAttrName = PyString_FromString("jclassname"); + if(PyObject_SetAttr((PyObject *) pyjob, + pyAttrName, + pyJClassName) != 0) + { + PyErr_Format(PyExc_RuntimeError, "Couldn't add jclassname as attribute."); + } + PyList_Append(pyjob->fields, pyAttrName); + Py_DECREF(pyAttrName); + (*env)->DeleteLocalRef(env, jClassName); + pyjob->jclassname = pyJClassName; + // end of jclassname code + + // begin synchronized + lock = (*env)->FindClass(env, "java/lang/String"); + if((*env)->MonitorEnter(env, lock) != JNI_OK) + { + PyErr_Format(PyExc_RuntimeError, "Couldn't get synchronization lock on class method creation."); + } + if(classnamePyJMethodsDict == NULL) + { + classnamePyJMethodsDict = PyDict_New(); + } + + cachedMethodList = PyDict_GetItem(classnamePyJMethodsDict, pyJClassName); + if(cachedMethodList == NULL) + { + PyObject* pyjMethodList = NULL; + pyjMethodList = PyList_New(0); + + // njensen: I changed the architecture to speed it up so it caches + // pyjmethods for each Java Class object, then applies that method + // to the object in question. The cache is built here, then + // pyjobject_getattr associates the object with the method, and + // pyjmethod_call ensures it is passed along. + + + // - GetMethodID fails when you pass the clazz object, it expects + // a java.lang.Class jobject. + // - if you CallObjectMethod with the langClass jclass object, + // it'll return an array of methods, but they're methods of the + // java.lang.reflect.Method class -- not ->object. + // + // so what i did here was find the methodid using langClass, + // but then i call the method using clazz. methodIds for java + // classes are shared.... + + methodArray = (jobjectArray) (*env)->CallObjectMethod(env, + pyjob->clazz, + classGetMethods); + if(process_java_exception(env) || !methodArray) + goto EXIT_ERROR; + + // for each method, create a new pyjmethod object + // and add to the internal methods list. + len = (*env)->GetArrayLength(env, methodArray); + for(i = 0; i < len; i++) { + PyJmethod_Object *pymethod = NULL; + jobject rmethod = NULL; + + rmethod = (*env)->GetObjectArrayElement(env, + methodArray, + i); + + // make new PyJmethod_Object, linked to pyjob + if(pyjob->object) + pymethod = pyjmethod_new(env, rmethod, pyjob); + else + pymethod = pyjmethod_new_static(env, rmethod, pyjob); + + if(!pymethod) + continue; + + if(pymethod->pyMethodName && PyString_Check(pymethod->pyMethodName)) { + if(PyList_Append(pyjMethodList, (PyObject*) pymethod) != 0) + printf("WARNING: couldn't add method"); + } + + Py_DECREF(pymethod); + (*env)->DeleteLocalRef(env, rmethod); + } + PyDict_SetItem(classnamePyJMethodsDict, pyJClassName, pyjMethodList); + cachedMethodList = pyjMethodList; + (*env)->DeleteLocalRef(env, methodArray); + } // end of looping over available methods + if((*env)->MonitorExit(env, lock) != JNI_OK) + { + PyErr_Format(PyExc_RuntimeError, "Couldn't release synchronization lock on class method creation."); + } + // end of synchronization + + len = PyList_Size(cachedMethodList); + for(i = 0; i < len; i++) + { + PyJmethod_Object* pymethod = (PyJmethod_Object*) PyList_GetItem(cachedMethodList, i); + if(PyObject_SetAttr((PyObject *) pyjob, pymethod->pyMethodName, (PyObject*) pymethod) != 0) + { + PyErr_Format(PyExc_RuntimeError, "Couldn't add method as attribute."); + } + else + { + pyjobject_addmethod(pyjob, pymethod->pyMethodName); + } + } + // end of cached method optimizations + + + // ------------------------------ process fields + + if(classGetFields == 0) { + classGetFields = (*env)->GetMethodID(env, + langClass, + "getFields", + "()[Ljava/lang/reflect/Field;"); + if(process_java_exception(env) || !classGetFields) + goto EXIT_ERROR; + } + + fieldArray = (jobjectArray) (*env)->CallObjectMethod(env, + pyjob->clazz, + classGetFields); + if(process_java_exception(env) || !fieldArray) + goto EXIT_ERROR; + + + // for each field, create a pyjfield object and + // add to the internal members list. + len = (*env)->GetArrayLength(env, fieldArray); + for(i = 0; i < len; i++) { + jobject rfield = NULL; + PyJfield_Object *pyjfield = NULL; + + rfield = (*env)->GetObjectArrayElement(env, + fieldArray, + i); + + pyjfield = pyjfield_new(env, rfield, pyjob); + + if(!pyjfield) + continue; + + if(pyjfield->pyFieldName && PyString_Check(pyjfield->pyFieldName)) { + if(PyObject_SetAttr((PyObject *) pyjob, + pyjfield->pyFieldName, + (PyObject *) pyjfield) != 0) { + printf("WARNING: couldn't add field.\n"); + } + else + pyjobject_addfield(pyjob, pyjfield->pyFieldName); + } + + Py_DECREF(pyjfield); + (*env)->DeleteLocalRef(env, rfield); + } + (*env)->DeleteLocalRef(env, fieldArray); + + // we've finished the object. + pyjob->finishAttr = 1; + (*env)->PopLocalFrame(env, NULL); + return 1; + + +EXIT_ERROR: + (*env)->PopLocalFrame(env, NULL); + + if(PyErr_Occurred()) { // java exceptions translated by this time + if(pyjob) + pyjobject_dealloc(pyjob); + } + + return 0; +} + + +static void pyjobject_dealloc(PyJobject_Object *self) { +#if USE_DEALLOC + JNIEnv *env = pyembed_get_env(); + if(env) { + if(self->object) + (*env)->DeleteGlobalRef(env, self->object); + if(self->clazz) + (*env)->DeleteGlobalRef(env, self->clazz); + + Py_DECREF(self->attr); + Py_DECREF(self->methods); + Py_DECREF(self->fields); + Py_DECREF(self->jclassname); // added by njensen + if(self->pyjclass) + Py_DECREF(self->pyjclass); + } + + PyObject_Del(self); +#endif +} + + +static PyObject* pyjobject_call(PyJobject_Object *self, + PyObject *args, + PyObject *keywords) { + + if(!self->pyjclass) { + PyErr_Format(PyExc_RuntimeError, "Not a class."); + return NULL; + } + + return pyjclass_call(self->pyjclass, args, keywords); +} + + +int pyjobject_check(PyObject *obj) { + if(PyObject_TypeCheck(obj, &PyJobject_Type)) + return 1; + return 0; +} + + +// add a method name to obj->methods list +static void pyjobject_addmethod(PyJobject_Object *obj, PyObject *name) { + if(!PyString_Check(name)) + return; + if(!PyList_Check(obj->methods)) + return; + + PyList_Append(obj->methods, name); +} + + +static void pyjobject_addfield(PyJobject_Object *obj, PyObject *name) { + if(!PyString_Check(name)) + return; + if(!PyList_Check(obj->fields)) + return; + + PyList_Append(obj->fields, name); +} + + +// find and call a method on this object that matches the python args. +// typically called by way of pyjmethod when python invokes __call__. +// +// steals reference to self, methodname and args. +PyObject* find_method(JNIEnv *env, + PyJobject_Object *self, + PyObject *methodName, + int methodCount, + PyObject *attr, + PyObject *args) { + // all possible method candidates + PyJmethod_Object **cand = NULL; + int pos, i, listSize, argsSize; + + pos = i = listSize = argsSize = 0; + + // not really likely if we were called from pyjmethod, but hey... + if(methodCount < 1) { + PyErr_Format(PyExc_RuntimeError, "I have no methods."); + return NULL; + } + + if(!attr || !PyList_CheckExact(attr)) { + PyErr_Format(PyExc_RuntimeError, "Invalid attr list."); + return NULL; + } + + cand = (PyJmethod_Object **) + PyMem_Malloc(sizeof(PyJmethod_Object*) * methodCount); + + // just for safety + for(i = 0; i < methodCount; i++) + cand[i] = NULL; + + listSize = PyList_GET_SIZE(attr); + for(i = 0; i < listSize; i++) { + PyObject *tuple = PyList_GetItem(attr, i); /* borrowed */ + + if(PyErr_Occurred()) + break; + + if(!tuple || tuple == Py_None || !PyTuple_CheckExact(tuple)) + continue; + + if(PyTuple_Size(tuple) == 2) { + PyObject *key = PyTuple_GetItem(tuple, 0); /* borrowed */ + + if(PyErr_Occurred()) + break; + + if(!key || !PyString_Check(key)) + continue; + + if(PyObject_Compare(key, methodName) == 0) { + PyObject *method = PyTuple_GetItem(tuple, 1); /* borrowed */ + if(pyjmethod_check(method)) + cand[pos++] = (PyJmethod_Object *) method; + } + } + } + + if(PyErr_Occurred()) + goto EXIT_ERROR; + + // makes more sense to work with... + pos--; + + if(pos < 0) { + // didn't find a method by that name.... + // that shouldn't happen unless the search above is broken. + PyErr_Format(PyExc_NameError, "No such method."); + goto EXIT_ERROR; + } + if(pos == 0) { + // we're done, call that one + PyObject *ret = pyjmethod_call_internal(cand[0], self, args); + PyMem_Free(cand); + return ret; + } + + // first, find out if there's only one method that + // has the correct number of args + argsSize = PyTuple_Size(args); + { + PyJmethod_Object *matching = NULL; + int count = 0; + + for(i = 0; i <= pos && cand[i]; i++) { + // make sure method is fully initialized + if(!cand[i]->parameters) { + if(!pyjmethod_init(env, cand[i])) { + // init failed, that's not good. + cand[i] = NULL; + PyErr_Warn(PyExc_Warning, "pyjmethod init failed."); + continue; + } + } + + if(cand[i]->lenParameters == argsSize) { + matching = cand[i]; + count++; + } + else + cand[i] = NULL; // eliminate non-matching + } + + if(matching && count == 1) { + PyMem_Free(cand); + return pyjmethod_call_internal(matching, self, args); + } + } // local scope + + for(i = 0; i <= pos; i++) { + int parmpos = 0; + + // already eliminated? + if(!cand[i]) + continue; + + // check if argument types match + (*env)->PushLocalFrame(env, 20); + for(parmpos = 0; parmpos < cand[i]->lenParameters; parmpos++) { + PyObject *param = PyTuple_GetItem(args, parmpos); + int paramTypeId = -1; + jclass pclazz; + jclass paramType = + (jclass) (*env)->GetObjectArrayElement(env, + cand[i]->parameters, + parmpos); + + if(process_java_exception(env) || !paramType) + break; + + pclazz = (*env)->GetObjectClass(env, paramType); + if(process_java_exception(env) || !pclazz) + break; + + paramTypeId = get_jtype(env, paramType, pclazz); + + if(pyarg_matches_jtype(env, param, paramType, paramTypeId)) { + if(PyErr_Occurred()) + break; + continue; + } + + // args don't match + break; + } + (*env)->PopLocalFrame(env, NULL); + + // this method matches? + if(parmpos == cand[i]->lenParameters) { + PyObject *ret = pyjmethod_call_internal(cand[i], self, args); + PyMem_Free(cand); + return ret; + } + } + + +EXIT_ERROR: + PyMem_Free(cand); + if(!PyErr_Occurred()) + PyErr_Format(PyExc_NameError, + "Matching overloaded method not found."); + return NULL; +} + + +// find and call a method on this object that matches the python args. +// typically called from pyjmethod when python invokes __call__. +// +// steals reference to self, methodname and args. +PyObject* pyjobject_find_method(PyJobject_Object *self, + PyObject *methodName, + PyObject *args) { + // util method does this for us + return find_method(pyembed_get_env(), + self, + methodName, + PyList_Size(self->methods), + self->attr, + args); +} + + +// call toString() on jobject. returns null on error. +// excpected to return new reference. +static PyObject* pyjobject_str(PyJobject_Object *self) { + PyObject *pyres = NULL; + JNIEnv *env; + + env = pyembed_get_env(); + pyres = jobject_topystring(env, self->object, self->clazz); + + if(process_java_exception(env)) + return NULL; + + // python doesn't like Py_None here... + if(pyres == NULL) + return Py_BuildValue("s", ""); + + return pyres; +} + + +// get attribute 'name' for object. +// uses obj->attr list of tuples for storage. +// returns new reference. +static PyObject* pyjobject_getattr(PyJobject_Object *obj, + char *name) { + PyObject *ret, *pyname, *methods, *members, *numpy; + int listSize, i, found; + + ret = pyname = methods = members = NULL; + listSize = i = found = 0; + + if(!name) { + Py_INCREF(Py_None); + return Py_None; + } + pyname = PyString_FromString(name); + methods = PyString_FromString("__methods__"); + members = PyString_FromString("__members__"); + + // numpy added by njensen + numpy = PyString_FromString("__numpy__"); + if(PyObject_Compare(pyname, numpy) == 0) { + Py_DECREF(pyname); + Py_DECREF(methods); + Py_DECREF(members); + Py_DECREF(numpy); + + return pyjobject_numpy(obj); + } + Py_DECREF(numpy); + + if(PyObject_Compare(pyname, methods) == 0) { + Py_DECREF(pyname); + Py_DECREF(methods); + Py_DECREF(members); + + Py_INCREF(obj->methods); + return obj->methods; + } + Py_DECREF(methods); + + if(PyObject_Compare(pyname, members) == 0) { + Py_DECREF(pyname); + Py_DECREF(members); + + Py_INCREF(obj->fields); + return obj->fields; + } + Py_DECREF(members); + + if(!PyList_Check(obj->attr)) { + Py_DECREF(pyname); + PyErr_Format(PyExc_RuntimeError, "Invalid attr list."); + return NULL; + } + + // util function fetches from attr list for us. + if(obj->attr == NULL) + { + printf("attribute list is null!\n"); + printf("name is %s\n", name); + } + ret = tuplelist_getitem(obj->attr, pyname); /* new reference */ + + Py_DECREF(pyname); + + // method optimizations by njensen + if(pyjmethod_check(ret)) + { + PyJmethodWrapper_Object* wrapper = pyjmethodwrapper_new(obj, (PyJmethod_Object*) ret); + Py_DECREF(ret); + Py_INCREF(wrapper); + ret = (PyObject *) wrapper; + } + + if(PyErr_Occurred() || ret == Py_None) { + PyErr_Format(PyExc_NameError, "Method not found %s", name); + return NULL; + } + + if(pyjfield_check(ret)) { + PyObject *t = pyjfield_get((PyJfield_Object *) ret); + Py_DECREF(ret); + return t; + } + + return ret; +} + + +// added by njensen +static PyObject* pyjobject_numpy(PyJobject_Object *obj) { + int i=0; + /* updated by bkowal */ + npy_intp *dims = NULL; + jfloat *dataFloat = NULL; + jbyte *dataByte = NULL; + jint *dataInt = NULL; + const char *message = NULL; + jobjectArray objarray = NULL; + PyObject *resultList = NULL; + jint xsize = 0; + jint ysize = 0; + jsize listSize =0; + + JNIEnv *env = pyembed_get_env(); + jclass numpyable = (*env)->FindClass(env, "jep/INumpyable"); + if((*env)->IsInstanceOf(env, obj->object, numpyable)) + { + xMethod = (*env)->GetMethodID(env, numpyable, "getNumpyX", "()I"); + xsize = (jint) (*env)->CallIntMethod(env, obj->object, xMethod); + + yMethod = (*env)->GetMethodID(env, numpyable, "getNumpyY", "()I"); + ysize = (jint) (*env)->CallIntMethod(env, obj->object, yMethod); + + dims = malloc(2 * sizeof(npy_intp)); + dims[0] = ysize; + dims[1] = xsize; + + getMethod = (*env)->GetMethodID(env, numpyable, "getNumPy", "()[Ljava/lang/Object;"); + objarray = (jobjectArray) (*env)->CallObjectMethod(env, obj->object, getMethod); + if(objarray == NULL) + { + Py_INCREF(Py_None); + return Py_None; + } + + listSize = (*env)->GetArrayLength(env, objarray); + + initNumpy(); + + resultList = PyList_New(listSize); + + floatarrayclass = (*env)->FindClass(env, "[F"); + bytearrayclass = (*env)->FindClass(env, "[B"); + intarrayclass = (*env)->FindClass(env, "[I"); + stringclass = (*env)->FindClass(env, "java/lang/String"); + + for(i=0; i < listSize; i=i+1) + { + PyObject *pyjob; + jobject jo = (*env)->GetObjectArrayElement(env, objarray, i); + if((*env)->IsInstanceOf(env, jo, floatarrayclass)) + { + pyjob = PyArray_SimpleNew(2, dims, NPY_FLOAT32); + dataFloat = (*env)->GetFloatArrayElements(env, jo, 0); + memcpy(((PyArrayObject *)pyjob)->data, + dataFloat, ysize * xsize * sizeof(float)); + (*env)->ReleaseFloatArrayElements(env, jo, dataFloat, 0); + } + else if((*env)->IsInstanceOf(env, jo, bytearrayclass)) + { + pyjob = PyArray_SimpleNew(2, dims, NPY_BYTE); + dataByte = (*env)->GetByteArrayElements(env, jo, 0); + memcpy(((PyArrayObject *)pyjob)->data, + dataByte, ysize * xsize * 1); + (*env)->ReleaseByteArrayElements(env, jo, dataByte, 0); + } + else if((*env)->IsInstanceOf(env, jo, intarrayclass)) + { + pyjob = PyArray_SimpleNew(2, dims, NPY_INT32); + dataInt = (*env)->GetIntArrayElements(env, jo, 0); + memcpy(((PyArrayObject *)pyjob)->data, + dataInt, ysize * xsize * sizeof(int)); + (*env)->ReleaseIntArrayElements(env, jo, dataInt, 0); + } + else if((*env)->IsInstanceOf(env, jo, stringclass)) + { + message = jstring2char(env, jo); + pyjob = PyString_FromString(message); + release_utf_char(env, jo, message); + } + else + { + pyjob = Py_None; + } + PyList_SetItem(resultList, i, pyjob); + (*env)->DeleteLocalRef(env, jo); + } + free(dims); + (*env)->DeleteLocalRef(env, objarray); + return resultList; + } + else + { + Py_INCREF(Py_None); + return Py_None; + } +} + +// added by njensen +static void initNumpy(void) +{ + if (!numpyInit) + { + import_array(); + numpyInit = 1; + } +} + +// set attribute v for object. +// uses obj->attr dictionary for storage. +static int pyjobject_setattr(PyJobject_Object *obj, + char *name, + PyObject *v) { + PyObject *pyname, *tuple; + + if(!name) { + PyErr_Format(PyExc_RuntimeError, "Invalid name: NULL."); + return -1; + } + + if(!PyList_Check(obj->attr)) { + PyErr_Format(PyExc_RuntimeError, "Invalid attr list."); + return -1; + } + + Py_INCREF(v); + + if(obj->finishAttr) { + PyObject *cur, *pyname; + int ret; + + // finished setting internal objects. + // don't allow python to add new, but do + // allow python script to change values on pyjfields + + pyname = PyString_FromString(name); + cur = tuplelist_getitem(obj->attr, pyname); /* new reference */ + Py_DECREF(pyname); + + if(PyErr_Occurred()) + return -1; + + if(cur == Py_None) { + PyErr_SetString(PyExc_RuntimeError, "No such field."); + return -1; + } + + if(!pyjfield_check(cur)) { + PyErr_SetString(PyExc_TypeError, "Not a pyjfield object."); + return -1; + } + + if(!PyList_Check(obj->attr)) { + Py_DECREF(pyname); + PyErr_SetString(PyExc_RuntimeError, "Invalid attr list."); + return -1; + } + + // now, just ask pyjfield to handle. + ret = pyjfield_set((PyJfield_Object *) cur, v); /* borrows ref */ + + Py_DECREF(cur); + Py_DECREF(v); + return ret; + } + + pyname = PyString_FromString((const char *) name); + tuple = PyTuple_New(2); + + Py_INCREF(pyname); + PyTuple_SetItem(tuple, 0, pyname); /* steals ref */ + PyTuple_SetItem(tuple, 1, v); /* steals ref */ + + // the docs don't mention this, but the source INCREFs tuple + // ... + // after much printf'ing. uhm. must decref it somewhere. + // ... + // doh. the docs suck. + + // Py_INCREF(tuple); + + PyList_Append(obj->attr, tuple); + + Py_DECREF(tuple); + Py_DECREF(pyname); + return 0; // success +} + + +static PyMethodDef pyjobject_methods[] = { + {NULL, NULL, 0, NULL} +}; + + +static PyTypeObject PyJobject_Type = { + PyObject_HEAD_INIT(0) + 0, /* ob_size */ + "PyJobject", /* tp_name */ + sizeof(PyJobject_Object), /* tp_basicsize */ + 0, /* tp_itemsize */ + (destructor) pyjobject_dealloc, /* tp_dealloc */ + 0, /* tp_print */ + (getattrfunc) pyjobject_getattr, /* tp_getattr */ + (setattrfunc) pyjobject_setattr, /* tp_setattr */ + 0, /* tp_compare */ + 0, /* tp_repr */ + 0, /* tp_as_number */ + 0, /* tp_as_sequence */ + 0, /* tp_as_mapping */ + 0, /* tp_hash */ + (ternaryfunc) pyjobject_call, /* tp_call */ + (reprfunc) pyjobject_str, /* tp_str */ + 0, /* tp_getattro */ + 0, /* tp_setattro */ + 0, /* tp_as_buffer */ + Py_TPFLAGS_DEFAULT, /* tp_flags */ + "jobject", /* tp_doc */ + 0, /* tp_traverse */ + 0, /* tp_clear */ + 0, /* tp_richcompare */ + 0, /* tp_weaklistoffset */ + 0, /* tp_iter */ + 0, /* tp_iternext */ + pyjobject_methods, /* tp_methods */ + 0, /* tp_members */ + 0, /* tp_getset */ + 0, /* tp_base */ + 0, /* tp_dict */ + 0, /* tp_descr_get */ + 0, /* tp_descr_set */ + 0, /* tp_dictoffset */ + 0, /* tp_init */ + 0, /* tp_alloc */ + NULL, /* tp_new */ +}; diff --git a/nativeLib/rary.cots.jepp/jepp-2.3/windows/py27-java16/BuildLog.htm b/nativeLib/rary.cots.jepp/jepp-2.3/windows/py27-java16/BuildLog.htm index 524b0f3d8f37316c14f53ce11d56bcdda060d5bf..c2b5d97422ba35d215fe6d05908d080e7832942b 100644 GIT binary patch delta 785 zcmZuvO=}ZT6ur}q6~@UVnbb^@X-rJUCXJ!mEF_4AqEcKa(t^0KwI*h?EvXGPQVLnP z5{UG;RL*eU28W zMa$Hn3Mu49HdU!kmCe-ClWyYFeo6ppw8G_e58k9zCNLEfvWeNef{j5P&+<_eq)J4g z3-pi{xp|$^bcLDsoUnXe!q&iZr1M2g%Bn}InF?KGz%rjI-S-HK?Ai2yNmmC36}suz zLvIdYPc5LN9uu~$7Coz?qw4HWiTJyrqO0k69Js`B9(#ciVb5x(*;?4pV#01~C2l;2 zoz#R=4yqEm$xjG{FN@da!(U`Zg)nL8ScsN=|6|nc*2~LA!Sl~}Hj39q#`nJ-@Jq4% zd^=|On08FV6YjSg8}@UVc)zY=DL&#)xfKufrtAbmcx#s3N%75G6U3LP1a3v9`d}!@ zU8kGWB>_5;`rs9Q{pasr<5jh&Deg4g;I+A1SfMp%^Z0e?gdz&=F30H(E1}66SmJVx zZ<{kMH;-^O2R%E?tB{R8<}SCgg$4u@^MRvd{aTgvv&su!KhV`?3DlTT7aiYa&441_ zX!bDptmQCdjbhx29#&Xae6W*<;I`GkwpIN1(}D`kxFX{D8$6{eCRX6j(I4pKDhz%P KUCz81OZ)|!Kh`z? delta 792 zcmYjPO-vI}5T2z46SKQ5rR~0L7u#;Z5>lXWFg*xuykQ7N0^uNF-8dekyzqHiI&L$7ZUivx}J}4+ozExLlF!d2ZN83KPVksKJD>a7aLdSkR=*2T? zw#irVs~U3SJ6^u1S)Tve^99zMd|l7Em@t-f;rSo+AZ z;JZY<(S!s)`2*_K22`a@!ZdYmg*vwiTe53YN(X}&!Y%EGIUW`~6A>SIcxp%R$PQ7t zQ`>ua}xDNmT diff --git a/nativeLib/rary.cots.jepp/rary.cots.jepp.ecl b/nativeLib/rary.cots.jepp/rary.cots.jepp.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/nativeLib/rary.cots.jna/rary.cots.jna.ecl b/nativeLib/rary.cots.jna/rary.cots.jna.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/nativeLib/rary.cots.postgresql/rary.cots.postgresql.ecl b/nativeLib/rary.cots.postgresql/rary.cots.postgresql.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/nativeLib/rary.empty.motif/rary.empty.motif.ecl b/nativeLib/rary.empty.motif/rary.empty.motif.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/nativeLib/rary.empty/rary.empty.ecl b/nativeLib/rary.empty/rary.empty.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/nativeLib/rary.meteorological/.cproject b/nativeLib/rary.meteorological/.cproject index f6b3129b77..9d280da42d 100644 --- a/nativeLib/rary.meteorological/.cproject +++ b/nativeLib/rary.meteorological/.cproject @@ -2,502 +2,503 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/nativeLib/rary.meteorological/.settings/org.eclipse.cdt.core.prefs b/nativeLib/rary.meteorological/.settings/org.eclipse.cdt.core.prefs index 62eb6fbd87..16f0337a29 100644 --- a/nativeLib/rary.meteorological/.settings/org.eclipse.cdt.core.prefs +++ b/nativeLib/rary.meteorological/.settings/org.eclipse.cdt.core.prefs @@ -1,3 +1,11 @@ -#Wed Dec 16 15:26:41 CST 2009 +#Wed Feb 01 17:07:12 CST 2012 eclipse.preferences.version=1 -environment/project/cdt.managedbuild.config.gnu.so.debug.630675783.1284293642=\n\n\n\n\n +environment/project/cdt.managedbuild.config.gnu.so.debug.630675783.1284293642= +environment/project/cdt.managedbuild.config.gnu.so.debug.630675783.1284293642/COMPILE_FILETYPE/delimiter=; +environment/project/cdt.managedbuild.config.gnu.so.debug.630675783.1284293642/COMPILE_FILETYPE/operation=append +environment/project/cdt.managedbuild.config.gnu.so.debug.630675783.1284293642/COMPILE_FILETYPE/value=../../tool.gluegen/etc +environment/project/cdt.managedbuild.config.gnu.so.debug.630675783.1284293642/PATH/delimiter=; +environment/project/cdt.managedbuild.config.gnu.so.debug.630675783.1284293642/PATH/operation=replace +environment/project/cdt.managedbuild.config.gnu.so.debug.630675783.1284293642/PATH/value=../../tool.gluegen/bin\:${env_var\:PATH} +environment/project/cdt.managedbuild.config.gnu.so.debug.630675783.1284293642/append=true +environment/project/cdt.managedbuild.config.gnu.so.debug.630675783.1284293642/appendContributed=true diff --git a/nativeLib/rary.meteorological/rary.meteorological.ecl b/nativeLib/rary.meteorological/rary.meteorological.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/nativeLib/rary.meteorological/windows/project/Debug/BuildLog.htm b/nativeLib/rary.meteorological/windows/project/Debug/BuildLog.htm index efe5870e666f59a4b436dfde6f92bf57c7f02d71..e05274e9fb95c1e85bf8ec3c45dd71c5cd252746 100644 GIT binary patch delta 991 zcmZXTUr1AN6vuyejcK=G)7caqwx+~fSDP!Qjk(744<)A1LxfR~nHj82(jMwTFDz}C z$mA>HLxfZ=6_MH%i5L+hB4UIPfyD61rvee_L42@&zk633?djh0J)iSE=XdV?&41Ix zzG}*U?|Voe860=% z9vA7cw_NLo*-^)zPve03(+DqOUm15#T)A}$BzcK_{%>b!}5rH@Fo>?xj4F3_P{ z0S%g|?3~wcioRSZ|J-?6cg*GfN#36B3 IOe~iD0USAXumAu6 delta 1214 zcmZuxT}+Z;6n??N1tJip27YR$bKeMzX=Fml5NP2~tGO;}HT<_t`|_u)ybvX0soA2F z)s@pt2Ckdd*Sw>(Wo>m~+0Rv7#MWGY*DkxT&ij49KporJInQ~XbI!;6p7+TIY2=f% z=--Bobdy2SOM1vLq9k%c;||h7+G!lrPnt!rA{7>Bt%O6;wWRDa=|>?Iy`9RVA_uub zE@ItwQcN0<+(nc;CpjvSDB+QG3hihpg!Xd=BM}o&wR4G~%5%abb}ZM1Z8_9)q!WKi zP{~-Z$UHDC)4_dN2`tK1S*qwDSFzV1GR>%^NDVnd>WGV6!u~WqkLqYomM(cthxd&*ls5=r_j^upl6tx3xmD(Z=9uehzGK0-OOS^?buv33^wPNxYF)= zPd#_y2<-!>JA?}`;-UXUs+#8Lw~JU`<2d^3jU3t)g%*aI z8qj;$R42rH_=1z}e7w#rUE_I({1`T(jRp3C$yXwHT4?o6p!dtS4{3@KvlIiXpGDi| zuS7fTpGM1GKa4gOc#Wj;F#}#E{?v^iy;F!~;C8{>I195r6ED3vQGoE|{1LP-<|`F+ z^_qpZqZs-kTG$;jVWu`jC&c~N()?*$-vN9qdT@aU;*SLMhc}SIMd}5j5mqDgzH*ZN I@Nhx*A7V3VDgXcg diff --git a/nativeLib/rary.meteorological/windows/project/meteolib.bat b/nativeLib/rary.meteorological/windows/project/meteolib.bat index e23f2831fc..7a46506574 100644 --- a/nativeLib/rary.meteorological/windows/project/meteolib.bat +++ b/nativeLib/rary.meteorological/windows/project/meteolib.bat @@ -1,46 +1,46 @@ -@echo OFF -REM This script will compile a Windows version of the meteolib library. -REM In order to compile the meteolib library, you will need to have -REM MinGW installed and the AWIPS II Runtime Environment. -REM -REM This script should work on both a 32-bit and a 64-bit Windows 7 -REM installation. - -SET CONTAINING_DIR=%~dp0 - -pushd . > NUL 2>&1 -cd %CONTAINING_DIR% -mingw32-make -f Makefile - -IF ERRORLEVEL 1 ( - echo ERROR: the meteolib compile has failed. - PAUSE && EXIT 1 -) -popd > NUL 2>&1 - -IF NOT EXIST "%CONTAINING_DIR%..\build" ( - MKDIR "%CONTAINING_DIR%..\build" -) - -REM Move the build artifacts to the build directory. -MOVE /Y "%CONTAINING_DIR%meteoLib.dll" ^ - "%CONTAINING_DIR%..\build" - -REM Cleanup the remaining non-essential build artifacts. -IF EXIST "%CONTAINING_DIR%\Meteolibrary_JNI.o" ( - echo Y | DEL "%CONTAINING_DIR%\Meteolibrary_JNI.o" -) -IF EXIST "%CONTAINING_DIR%\Meteolibrary_JNI.c" ( - echo Y | DEL "%CONTAINING_DIR%\Meteolibrary_JNI.c" -) -IF EXIST "%CONTAINING_DIR%\meteoLib.h" ( - echo Y | DEL "%CONTAINING_DIR%\meteoLib.h" -) -IF EXIST "%CONTAINING_DIR%\meteoLib_Java" ( - RMDIR /S /Q "%CONTAINING_DIR%\meteoLib_Java" -) - -echo. -echo. -echo The meteolib compile was successful. -PAUSE +@echo OFF +REM This script will compile a Windows version of the meteolib library. +REM In order to compile the meteolib library, you will need to have +REM MinGW installed and the AWIPS II Runtime Environment. +REM +REM This script should work on both a 32-bit and a 64-bit Windows 7 +REM installation. + +SET CONTAINING_DIR=%~dp0 + +pushd . > NUL 2>&1 +cd %CONTAINING_DIR% +mingw32-make -f Makefile + +IF ERRORLEVEL 1 ( + echo ERROR: the meteolib compile has failed. + PAUSE && EXIT 1 +) +popd > NUL 2>&1 + +IF NOT EXIST "%CONTAINING_DIR%..\build" ( + MKDIR "%CONTAINING_DIR%..\build" +) + +REM Move the build artifacts to the build directory. +MOVE /Y "%CONTAINING_DIR%meteoLib.dll" ^ + "%CONTAINING_DIR%..\build" + +REM Cleanup the remaining non-essential build artifacts. +IF EXIST "%CONTAINING_DIR%\Meteolibrary_JNI.o" ( + echo Y | DEL "%CONTAINING_DIR%\Meteolibrary_JNI.o" +) +IF EXIST "%CONTAINING_DIR%\Meteolibrary_JNI.c" ( + echo Y | DEL "%CONTAINING_DIR%\Meteolibrary_JNI.c" +) +IF EXIST "%CONTAINING_DIR%\meteoLib.h" ( + echo Y | DEL "%CONTAINING_DIR%\meteoLib.h" +) +IF EXIST "%CONTAINING_DIR%\meteoLib_Java" ( + RMDIR /S /Q "%CONTAINING_DIR%\meteoLib_Java" +) + +echo. +echo. +echo The meteolib compile was successful. +PAUSE diff --git a/nativeLib/rary.ohd.calb/rary.ohd.calb.ecl b/nativeLib/rary.ohd.calb/rary.ohd.calb.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/nativeLib/rary.ohd.ffg/rary.ohd.ffg.ecl b/nativeLib/rary.ohd.ffg/rary.ohd.ffg.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/nativeLib/rary.ohd.filesystem/awips/hydroapps/precip_proc/bin/launch_hpe b/nativeLib/rary.ohd.filesystem/awips/hydroapps/precip_proc/bin/launch_hpe index 84cddc3e58..f69b4937b5 100644 --- a/nativeLib/rary.ohd.filesystem/awips/hydroapps/precip_proc/bin/launch_hpe +++ b/nativeLib/rary.ohd.filesystem/awips/hydroapps/precip_proc/bin/launch_hpe @@ -6,5 +6,5 @@ RUN_FROM_DIR=`dirname $0` export PPROC_BIN=$(get_apps_defaults pproc_bin) -nohup ksh $PPROC_BIN/start_hpe >&1 > /dev/null & +nohup ksh $PPROC_BIN/start_hpe >/dev/null 2>&1 & exit 0 diff --git a/nativeLib/rary.ohd.filesystem/rary.ohd.filesystem.ecl b/nativeLib/rary.ohd.filesystem/rary.ohd.filesystem.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/nativeLib/rary.ohd.ifp/rary.ohd.ifp.ecl b/nativeLib/rary.ohd.ifp/rary.ohd.ifp.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/nativeLib/rary.ohd.ofs.db/rary.ohd.ofs.db.ecl b/nativeLib/rary.ohd.ofs.db/rary.ohd.ofs.db.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/nativeLib/rary.ohd.ofs.shared/rary.ohd.ofs.shared.ecl b/nativeLib/rary.ohd.ofs.shared/rary.ohd.ofs.shared.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/nativeLib/rary.ohd.ofs.shefpars.driv/rary.ohd.ofs.shefpars.driv.ecl b/nativeLib/rary.ohd.ofs.shefpars.driv/rary.ohd.ofs.shefpars.driv.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/nativeLib/rary.ohd.ofs/rary.ohd.ofs.ecl b/nativeLib/rary.ohd.ofs/rary.ohd.ofs.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/nativeLib/rary.ohd.pproc.gribit/rary.ohd.pproc.gribit.ecl b/nativeLib/rary.ohd.pproc.gribit/rary.ohd.pproc.gribit.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/nativeLib/rary.ohd.pproc.util/rary.ohd.pproc.util.ecl b/nativeLib/rary.ohd.pproc.util/rary.ohd.pproc.util.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/nativeLib/rary.ohd.pproc/rary.ohd.pproc.ecl b/nativeLib/rary.ohd.pproc/rary.ohd.pproc.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/nativeLib/rary.ohd.util/rary.ohd.util.ecl b/nativeLib/rary.ohd.util/rary.ohd.util.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/nativeLib/rary.ohd.whfs/rary.ohd.whfs.ecl b/nativeLib/rary.ohd.whfs/rary.ohd.whfs.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/nativeLib/rary.wfoapi.MonitorTestMode/rary.wfoapi.MonitorTestMode.ecl b/nativeLib/rary.wfoapi.MonitorTestMode/rary.wfoapi.MonitorTestMode.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/nativeLib/rary.wfoapi.common/rary.wfoapi.common.ecl b/nativeLib/rary.wfoapi.common/rary.wfoapi.common.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/nativeLib/rary.wfoapi.consoleUser/rary.wfoapi.consoleUser.ecl b/nativeLib/rary.wfoapi.consoleUser/rary.wfoapi.consoleUser.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/nativeLib/rary.wfoapi.getTestMode/rary.wfoapi.getTestMode.ecl b/nativeLib/rary.wfoapi.getTestMode/rary.wfoapi.getTestMode.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/nativeLib/rary.wfoapi.showBanner/rary.wfoapi.showBanner.ecl b/nativeLib/rary.wfoapi.showBanner/rary.wfoapi.showBanner.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/nativeLib/rary.wfoapi.temp/rary.wfoapi.temp.ecl b/nativeLib/rary.wfoapi.temp/rary.wfoapi.temp.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/nativeLib/rary.wfoapi.test_WorkstationTestMode/rary.wfoapi.test_WorkstationTestMode.ecl b/nativeLib/rary.wfoapi.test_WorkstationTestMode/rary.wfoapi.test_WorkstationTestMode.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/nativeLib/rary.wfoapi.tmb/rary.wfoapi.tmb.ecl b/nativeLib/rary.wfoapi.tmb/rary.wfoapi.tmb.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/nativeLib/rary.wfoapi.tmbRemoteCheck/rary.wfoapi.tmbRemoteCheck.ecl b/nativeLib/rary.wfoapi.tmbRemoteCheck/rary.wfoapi.tmbRemoteCheck.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/nativeLib/rary.wfoapi.tmb_exit/rary.wfoapi.tmb_exit.ecl b/nativeLib/rary.wfoapi.tmb_exit/rary.wfoapi.tmb_exit.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/nativeLib/rary.wfoapi.tmcp/rary.wfoapi.tmcp.ecl b/nativeLib/rary.wfoapi.tmcp/rary.wfoapi.tmcp.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/nativeLib/runy.cots.flex/runy.cots.flex.ecl b/nativeLib/runy.cots.flex/runy.cots.flex.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/nativeLib/runy.runso/runy.runso.ecl b/nativeLib/runy.runso/runy.runso.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/nativeLib/tool.cdbgen/tool.cdbgen.ecl b/nativeLib/tool.cdbgen/tool.cdbgen.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/nativeLib/tool.gluegen/tool.gluegen.ecl b/nativeLib/tool.gluegen/tool.gluegen.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/ncep/com.raytheon.uf.viz.ncep.core.feature/com.raytheon.uf.viz.ncep.core.feature.ecl b/ncep/com.raytheon.uf.viz.ncep.core.feature/com.raytheon.uf.viz.ncep.core.feature.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/ncep/com.raytheon.uf.viz.ncep.nsharp.feature/com.raytheon.uf.viz.ncep.nsharp.feature.ecl b/ncep/com.raytheon.uf.viz.ncep.nsharp.feature/com.raytheon.uf.viz.ncep.nsharp.feature.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/ncep/com.raytheon.uf.viz.ncep.perspective.feature/com.raytheon.uf.viz.ncep.perspective.feature.ecl b/ncep/com.raytheon.uf.viz.ncep.perspective.feature/com.raytheon.uf.viz.ncep.perspective.feature.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/ncep/edu.wisc.ssec.mcidas/edu.wisc.ssec.mcidas.ecl b/ncep/edu.wisc.ssec.mcidas/edu.wisc.ssec.mcidas.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/ncep/gov.noaa.nws.ncep.common.dataplugin.airmet/gov.noaa.nws.ncep.common.dataplugin.airmet.ecl b/ncep/gov.noaa.nws.ncep.common.dataplugin.airmet/gov.noaa.nws.ncep.common.dataplugin.airmet.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/ncep/gov.noaa.nws.ncep.common.dataplugin.airmet/src/gov/noaa/nws/ncep/common/dataplugin/airmet/AirmetLocation.java b/ncep/gov.noaa.nws.ncep.common.dataplugin.airmet/src/gov/noaa/nws/ncep/common/dataplugin/airmet/AirmetLocation.java index 38a2e80669..4ae554ab72 100644 --- a/ncep/gov.noaa.nws.ncep.common.dataplugin.airmet/src/gov/noaa/nws/ncep/common/dataplugin/airmet/AirmetLocation.java +++ b/ncep/gov.noaa.nws.ncep.common.dataplugin.airmet/src/gov/noaa/nws/ncep/common/dataplugin/airmet/AirmetLocation.java @@ -1,192 +1,192 @@ -/** - * AirmetLocation - * - * This java class defines the getters and setters for the - * airmet location table. - * - * HISTORY - * - * Date Ticket# Engineer Description - * ------------ ---------- ----------- -------------------------- - * 05/2009 39 L. Lin Initial creation - * 07/2009 39 L. Lin Migration to TO11 - * 09/2009 39 L. Lin Add latitude/longitude to location table - * 09/2011 Chin Chen changed to improve purge performance and - * removed xml serialization as well - * - * This code has been developed by the SIB for use in the AWIPS2 system. - */ - -package gov.noaa.nws.ncep.common.dataplugin.airmet; - -import java.io.Serializable; - -import javax.persistence.GeneratedValue; -import javax.persistence.Id; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.Table; - -import com.raytheon.uf.common.serialization.ISerializableObject; -import com.raytheon.uf.common.serialization.annotations.DynamicSerialize; -import com.raytheon.uf.common.serialization.annotations.DynamicSerializeElement; - -import gov.noaa.nws.ncep.common.tools.IDecoderConstantsN; - - -@Entity -@Table(name="airmet_location") -@DynamicSerialize -public class AirmetLocation implements Serializable, ISerializableObject { - - private static final long serialVersionUID = 1L; - - @Id - @GeneratedValue - private Integer recordId = null; - - - // Collection of locations - @Column(length=480) - @DynamicSerializeElement - private String locationLine; - - // Each location of a airmet forecast area - @Column(length=48) - @DynamicSerializeElement - private String location; - - // Each latitude of an airmet forecast area - @Column - @DynamicSerializeElement - private double latitude; - - // Each longitude of an airmet forecast area - @Column - @DynamicSerializeElement - private double longitude; - - // Index for the order of a complete location set - @Column - @DynamicSerializeElement - private Integer index; - - /** - * No-Arg Convstructor. - */ - public AirmetLocation() { - this.locationLine=""; - this.location=""; - this.index=IDecoderConstantsN.INTEGER_MISSING; - } - - - /** - * @return the serialVersionUID - */ - public static long getSerialVersionUID() { - return serialVersionUID; - } - - /** - * @return the parentID - * - public AirmetReport getParentID() { - return parentID; - }*/ - - /** - * @param parentID to set - * - public void setParentID(AirmetReport parentID) { - this.parentID = parentID; - }*/ - - /** - * @return the index - */ - public Integer getIndex() { - return index; - } - - /** - * @param index to set - */ - public void setIndex(Integer index) { - this.index = index; - } - - /** - * @return the locationLine - */ - public String getLocationLine() { - return locationLine; - } - - /** - * @param locationLine to set - */ - public void setLocationLine(String locationLine) { - this.locationLine = locationLine; - } - - /** - * @return the location - */ - public String getLocation() { - return location; - } - - /** - * @param location to set - */ - public void setLocation(String location) { - this.location = location; - } - - /** - * @return the latitude - */ - public double getLatitude() { - return latitude; - } - - /** - * @param latitude to set - */ - public void setLatitude(double latitude) { - this.latitude = latitude; - } - - /** - * @return the longitude - */ - public double getLongitude() { - return longitude; - } - - /** - * @param longitude to set - */ - public void setLongitude(double longitude) { - this.longitude = longitude; - } - - /** - * Get the record id. - * - * @return The recordId. If not set returns null. - */ - public Integer getRecordId() { - return recordId; - } - - /** - * Set the record id. - * @param record - */ - public void setRecordId(Integer recordId) { - this.recordId = recordId; - } - -} +/** + * AirmetLocation + * + * This java class defines the getters and setters for the + * airmet location table. + * + * HISTORY + * + * Date Ticket# Engineer Description + * ------------ ---------- ----------- -------------------------- + * 05/2009 39 L. Lin Initial creation + * 07/2009 39 L. Lin Migration to TO11 + * 09/2009 39 L. Lin Add latitude/longitude to location table + * 09/2011 Chin Chen changed to improve purge performance and + * removed xml serialization as well + * + * This code has been developed by the SIB for use in the AWIPS2 system. + */ + +package gov.noaa.nws.ncep.common.dataplugin.airmet; + +import java.io.Serializable; + +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Table; + +import com.raytheon.uf.common.serialization.ISerializableObject; +import com.raytheon.uf.common.serialization.annotations.DynamicSerialize; +import com.raytheon.uf.common.serialization.annotations.DynamicSerializeElement; + +import gov.noaa.nws.ncep.common.tools.IDecoderConstantsN; + + +@Entity +@Table(name="airmet_location") +@DynamicSerialize +public class AirmetLocation implements Serializable, ISerializableObject { + + private static final long serialVersionUID = 1L; + + @Id + @GeneratedValue + private Integer recordId = null; + + + // Collection of locations + @Column(length=480) + @DynamicSerializeElement + private String locationLine; + + // Each location of a airmet forecast area + @Column(length=48) + @DynamicSerializeElement + private String location; + + // Each latitude of an airmet forecast area + @Column + @DynamicSerializeElement + private double latitude; + + // Each longitude of an airmet forecast area + @Column + @DynamicSerializeElement + private double longitude; + + // Index for the order of a complete location set + @Column + @DynamicSerializeElement + private Integer index; + + /** + * No-Arg Convstructor. + */ + public AirmetLocation() { + this.locationLine=""; + this.location=""; + this.index=IDecoderConstantsN.INTEGER_MISSING; + } + + + /** + * @return the serialVersionUID + */ + public static long getSerialVersionUID() { + return serialVersionUID; + } + + /** + * @return the parentID + * + public AirmetReport getParentID() { + return parentID; + }*/ + + /** + * @param parentID to set + * + public void setParentID(AirmetReport parentID) { + this.parentID = parentID; + }*/ + + /** + * @return the index + */ + public Integer getIndex() { + return index; + } + + /** + * @param index to set + */ + public void setIndex(Integer index) { + this.index = index; + } + + /** + * @return the locationLine + */ + public String getLocationLine() { + return locationLine; + } + + /** + * @param locationLine to set + */ + public void setLocationLine(String locationLine) { + this.locationLine = locationLine; + } + + /** + * @return the location + */ + public String getLocation() { + return location; + } + + /** + * @param location to set + */ + public void setLocation(String location) { + this.location = location; + } + + /** + * @return the latitude + */ + public double getLatitude() { + return latitude; + } + + /** + * @param latitude to set + */ + public void setLatitude(double latitude) { + this.latitude = latitude; + } + + /** + * @return the longitude + */ + public double getLongitude() { + return longitude; + } + + /** + * @param longitude to set + */ + public void setLongitude(double longitude) { + this.longitude = longitude; + } + + /** + * Get the record id. + * + * @return The recordId. If not set returns null. + */ + public Integer getRecordId() { + return recordId; + } + + /** + * Set the record id. + * @param record + */ + public void setRecordId(Integer recordId) { + this.recordId = recordId; + } + +} diff --git a/ncep/gov.noaa.nws.ncep.common.dataplugin.airmet/src/gov/noaa/nws/ncep/common/dataplugin/airmet/AirmetRecord.java b/ncep/gov.noaa.nws.ncep.common.dataplugin.airmet/src/gov/noaa/nws/ncep/common/dataplugin/airmet/AirmetRecord.java index 543cccdc6c..68589209cf 100644 --- a/ncep/gov.noaa.nws.ncep.common.dataplugin.airmet/src/gov/noaa/nws/ncep/common/dataplugin/airmet/AirmetRecord.java +++ b/ncep/gov.noaa.nws.ncep.common.dataplugin.airmet/src/gov/noaa/nws/ncep/common/dataplugin/airmet/AirmetRecord.java @@ -1,322 +1,322 @@ -/** - * AirmetRecord - * - * This java class performs the mapping to the database table for AIRMET - * - * HISTORY - * - * Date Author Description - * ------------ ---------- ----------- -------------------------- - * 05/2009 L. Lin Initial creation - * - * This code has been developed by the SIB for use in the AWIPS2 system. - * - * Date Ticket# Engineer Description - * ------------ ---------- ----------- -------------------------- - * 05/2009 39 L. Lin Initial coding - * 07/2009 39 L. Lin Migration to TO11 - * 09/2011 Chin Chen changed to improve purge performance and - * removed xml serialization as well - * - * - * This code has been developed by the SIB for use in the AWIPS2 system. - */ - -package gov.noaa.nws.ncep.common.dataplugin.airmet; - -import java.util.Calendar; -import java.util.HashSet; -import java.util.Set; -import com.raytheon.uf.common.dataplugin.PluginDataObject; -import com.raytheon.uf.common.dataplugin.IDecoderGettable; - -import javax.persistence.CascadeType; -import javax.persistence.Column; - -import javax.persistence.Entity; -import javax.persistence.FetchType; -import javax.persistence.JoinColumn; -import javax.persistence.OneToMany; -import javax.persistence.Table; -import javax.persistence.UniqueConstraint; - -import org.hibernate.annotations.Index; - -import com.raytheon.uf.common.dataplugin.annotations.DataURI; -import com.raytheon.uf.common.serialization.annotations.DynamicSerialize; -import com.raytheon.uf.common.serialization.annotations.DynamicSerializeElement; - -@Entity -@Table(name = "airmet", uniqueConstraints = { @UniqueConstraint(columnNames = { "dataURI" }) }) -@DynamicSerialize - - -public class AirmetRecord extends PluginDataObject{ - - /** - * - */ - private static final long serialVersionUID = 1L; - - // reportType is AIRMET. - @Column(length=32) - @DynamicSerializeElement - private String reportType; - - // reportName will be SIERRA, TANGO, or ZULU - @Column(length=32) - @DataURI(position=1) - @DynamicSerializeElement - private String reportName; - - // WMO header - @Column(length=32) - @DataURI(position=2) - @DynamicSerializeElement - private String wmoHeader; - - // The issue office where the report from - @Column(length=32) - @DynamicSerializeElement - private String issueOffice; - - // Update number as: 1, 2, 3, ... - @Column - @DataURI(position=3) - @DynamicSerializeElement - private Integer updateNumber; - - // Issue time of the report - @Column - @DynamicSerializeElement - private Calendar issueTime; - - // The designator - @Column(length=8) - @DynamicSerializeElement - private String designatorBBB; - - // CorrectionFlag is a flag: 0 for normal, 1 for COR or CC, 2 for AMD, and 3 for TEST - /* - * CorrectionFlag is a flag: - * 0 for normal, 1 for COR or CC, 2 for AMD, 3 for TEST, and 4 for NIL report - */ - @Column - @DynamicSerializeElement - private Integer correctionFlag; - - // The entire report - @Column(length=15000) - @DynamicSerializeElement - private String bullMessage; - - - /** - * Airmet report - */ - @DynamicSerializeElement - @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER) - @JoinColumn(name = "parentID", nullable = false) - @Index(name = "airmetReport_parentid_idex") - private Set airmetReport = new HashSet(); - - - /** - * Default Convstructor - */ - public AirmetRecord() { - this.issueOffice=""; - this.wmoHeader=""; - this.bullMessage=""; - this.designatorBBB=""; - this.updateNumber=0; - this.reportType=""; - this.reportName=null; - this.correctionFlag=0; - } - - /** - * Convstructs an airmet record from a dataURI - * - * @param uri The dataURI - */ - public AirmetRecord(String uri) { - super(uri); - } - - - @Override - public IDecoderGettable getDecoderGettable() { - // TODO Auto-generated method stub - return null; - } - - /** - * @return the issueOffice - */ - public String getIssueOffice(){ - return issueOffice; - } - - /** - * @param issueOffice to set - */ - public void setIssueOffice(String issueOffice){ - this.issueOffice=issueOffice; - } - - /** - * @return the wmoHeader - */ - public String getWmoHeader(){ - return wmoHeader; - } - - /** - * @param wnoHeader to set - */ - public void setWmoHeader(String wmoHeader){ - this.wmoHeader=wmoHeader; - } - - /** - * @return the issueTime - */ - public Calendar getIssueTime(){ - return issueTime; - } - - /** - * @param issueTime to set - */ - public void setIssueTime(Calendar issueTime){ - this.issueTime=issueTime; - } - - /** - * @return the reportType - */ - public String getReportType() { - return reportType; - } - - /** - * @param reportType to set - */ - public void setReportType(String reportType) { - this.reportType = reportType; - } - - /** - * @return the designatorBBB - */ - public String getDesignatorBBB() { - return designatorBBB; - } - - /** - * @param designatorBBB to set - */ - public void setDesignatorBBB(String designatorBBB) { - this.designatorBBB = designatorBBB; - } - - /** - * @return the correctionFlag - */ - public Integer getCorrectionFlag() { - return correctionFlag; - } - - /** - * @param correctionFlag to set - */ - public void setCorrectionFlag(Integer correctionFlag) { - this.correctionFlag = correctionFlag; - } - - /** - * @return the updateNumber - */ - public Integer getUpdateNumber() { - return updateNumber; - } - - /** - * @param updateNumber to set - */ - public void setUpdateNumber(Integer updateNumber) { - this.updateNumber = updateNumber; - } - - /** - * @return the bullMessage - */ - public String getBullMessage() { - return bullMessage; - } - - /** - * @param bullMessage to set - */ - public void setBullMessage(String bullMessage) { - this.bullMessage = bullMessage; - } - - /** - * @return the reportName - */ - public String getReportName() { - return reportName; - } - - /** - * @param reportName to set - */ - public void setReportName(String reportName) { - this.reportName = reportName; - } - - /** - * @return the set of AIRMET report - */ - public Set getAirmetReport() { - return airmetReport; - } - - /** - * @param airmet the report to set - */ - public void setAirmetReport(Set curReport) { - this.airmetReport = curReport; - } - - /** - * @param add AirmetReport to set - */ - public void addAirmetReport(AirmetReport curReport){ - airmetReport.add(curReport); - //curReport.setParentID(this); - } - - /** - * Override existing set method to modify any - * classes that use the dataURI as a foreign key - */ - @Override - public void setIdentifier(Object dataURI) - { - - this.identifier = dataURI; - /* - if(this.getAirmetReport() != null && this.getAirmetReport().size() > 0) - { - for (Iterator iter = this.getAirmetReport().iterator(); iter.hasNext();) { - AirmetReport cs = iter.next(); - cs.setParentID(this); - } - }*/ - - } - -} +/** + * AirmetRecord + * + * This java class performs the mapping to the database table for AIRMET + * + * HISTORY + * + * Date Author Description + * ------------ ---------- ----------- -------------------------- + * 05/2009 L. Lin Initial creation + * + * This code has been developed by the SIB for use in the AWIPS2 system. + * + * Date Ticket# Engineer Description + * ------------ ---------- ----------- -------------------------- + * 05/2009 39 L. Lin Initial coding + * 07/2009 39 L. Lin Migration to TO11 + * 09/2011 Chin Chen changed to improve purge performance and + * removed xml serialization as well + * + * + * This code has been developed by the SIB for use in the AWIPS2 system. + */ + +package gov.noaa.nws.ncep.common.dataplugin.airmet; + +import java.util.Calendar; +import java.util.HashSet; +import java.util.Set; +import com.raytheon.uf.common.dataplugin.PluginDataObject; +import com.raytheon.uf.common.dataplugin.IDecoderGettable; + +import javax.persistence.CascadeType; +import javax.persistence.Column; + +import javax.persistence.Entity; +import javax.persistence.FetchType; +import javax.persistence.JoinColumn; +import javax.persistence.OneToMany; +import javax.persistence.Table; +import javax.persistence.UniqueConstraint; + +import org.hibernate.annotations.Index; + +import com.raytheon.uf.common.dataplugin.annotations.DataURI; +import com.raytheon.uf.common.serialization.annotations.DynamicSerialize; +import com.raytheon.uf.common.serialization.annotations.DynamicSerializeElement; + +@Entity +@Table(name = "airmet", uniqueConstraints = { @UniqueConstraint(columnNames = { "dataURI" }) }) +@DynamicSerialize + + +public class AirmetRecord extends PluginDataObject{ + + /** + * + */ + private static final long serialVersionUID = 1L; + + // reportType is AIRMET. + @Column(length=32) + @DynamicSerializeElement + private String reportType; + + // reportName will be SIERRA, TANGO, or ZULU + @Column(length=32) + @DataURI(position=1) + @DynamicSerializeElement + private String reportName; + + // WMO header + @Column(length=32) + @DataURI(position=2) + @DynamicSerializeElement + private String wmoHeader; + + // The issue office where the report from + @Column(length=32) + @DynamicSerializeElement + private String issueOffice; + + // Update number as: 1, 2, 3, ... + @Column + @DataURI(position=3) + @DynamicSerializeElement + private Integer updateNumber; + + // Issue time of the report + @Column + @DynamicSerializeElement + private Calendar issueTime; + + // The designator + @Column(length=8) + @DynamicSerializeElement + private String designatorBBB; + + // CorrectionFlag is a flag: 0 for normal, 1 for COR or CC, 2 for AMD, and 3 for TEST + /* + * CorrectionFlag is a flag: + * 0 for normal, 1 for COR or CC, 2 for AMD, 3 for TEST, and 4 for NIL report + */ + @Column + @DynamicSerializeElement + private Integer correctionFlag; + + // The entire report + @Column(length=15000) + @DynamicSerializeElement + private String bullMessage; + + + /** + * Airmet report + */ + @DynamicSerializeElement + @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER) + @JoinColumn(name = "parentID", nullable = false) + @Index(name = "airmetReport_parentid_idex") + private Set airmetReport = new HashSet(); + + + /** + * Default Convstructor + */ + public AirmetRecord() { + this.issueOffice=""; + this.wmoHeader=""; + this.bullMessage=""; + this.designatorBBB=""; + this.updateNumber=0; + this.reportType=""; + this.reportName=null; + this.correctionFlag=0; + } + + /** + * Convstructs an airmet record from a dataURI + * + * @param uri The dataURI + */ + public AirmetRecord(String uri) { + super(uri); + } + + + @Override + public IDecoderGettable getDecoderGettable() { + // TODO Auto-generated method stub + return null; + } + + /** + * @return the issueOffice + */ + public String getIssueOffice(){ + return issueOffice; + } + + /** + * @param issueOffice to set + */ + public void setIssueOffice(String issueOffice){ + this.issueOffice=issueOffice; + } + + /** + * @return the wmoHeader + */ + public String getWmoHeader(){ + return wmoHeader; + } + + /** + * @param wnoHeader to set + */ + public void setWmoHeader(String wmoHeader){ + this.wmoHeader=wmoHeader; + } + + /** + * @return the issueTime + */ + public Calendar getIssueTime(){ + return issueTime; + } + + /** + * @param issueTime to set + */ + public void setIssueTime(Calendar issueTime){ + this.issueTime=issueTime; + } + + /** + * @return the reportType + */ + public String getReportType() { + return reportType; + } + + /** + * @param reportType to set + */ + public void setReportType(String reportType) { + this.reportType = reportType; + } + + /** + * @return the designatorBBB + */ + public String getDesignatorBBB() { + return designatorBBB; + } + + /** + * @param designatorBBB to set + */ + public void setDesignatorBBB(String designatorBBB) { + this.designatorBBB = designatorBBB; + } + + /** + * @return the correctionFlag + */ + public Integer getCorrectionFlag() { + return correctionFlag; + } + + /** + * @param correctionFlag to set + */ + public void setCorrectionFlag(Integer correctionFlag) { + this.correctionFlag = correctionFlag; + } + + /** + * @return the updateNumber + */ + public Integer getUpdateNumber() { + return updateNumber; + } + + /** + * @param updateNumber to set + */ + public void setUpdateNumber(Integer updateNumber) { + this.updateNumber = updateNumber; + } + + /** + * @return the bullMessage + */ + public String getBullMessage() { + return bullMessage; + } + + /** + * @param bullMessage to set + */ + public void setBullMessage(String bullMessage) { + this.bullMessage = bullMessage; + } + + /** + * @return the reportName + */ + public String getReportName() { + return reportName; + } + + /** + * @param reportName to set + */ + public void setReportName(String reportName) { + this.reportName = reportName; + } + + /** + * @return the set of AIRMET report + */ + public Set getAirmetReport() { + return airmetReport; + } + + /** + * @param airmet the report to set + */ + public void setAirmetReport(Set curReport) { + this.airmetReport = curReport; + } + + /** + * @param add AirmetReport to set + */ + public void addAirmetReport(AirmetReport curReport){ + airmetReport.add(curReport); + //curReport.setParentID(this); + } + + /** + * Override existing set method to modify any + * classes that use the dataURI as a foreign key + */ + @Override + public void setIdentifier(Object dataURI) + { + + this.identifier = dataURI; + /* + if(this.getAirmetReport() != null && this.getAirmetReport().size() > 0) + { + for (Iterator iter = this.getAirmetReport().iterator(); iter.hasNext();) { + AirmetReport cs = iter.next(); + cs.setParentID(this); + } + }*/ + + } + +} diff --git a/ncep/gov.noaa.nws.ncep.common.dataplugin.airmet/src/gov/noaa/nws/ncep/common/dataplugin/airmet/AirmetReport.java b/ncep/gov.noaa.nws.ncep.common.dataplugin.airmet/src/gov/noaa/nws/ncep/common/dataplugin/airmet/AirmetReport.java index 723e4b8f76..d009582c88 100644 --- a/ncep/gov.noaa.nws.ncep.common.dataplugin.airmet/src/gov/noaa/nws/ncep/common/dataplugin/airmet/AirmetReport.java +++ b/ncep/gov.noaa.nws.ncep.common.dataplugin.airmet/src/gov/noaa/nws/ncep/common/dataplugin/airmet/AirmetReport.java @@ -1,328 +1,328 @@ -/** - * AirmetReport - * - * This java class defines the getters and setters for the - * AIRMET report table. - * - * HISTORY - * - * Date Author Description - * ------------ ---------- ----------- -------------------------- - * 05/2009 L. Lin Initial creation - * 09/2011 Chin Chen changed to improve purge performance and - * removed xml serialization as well - * - * This code has been developed by the SIB for use in the AWIPS2 system. - */ - -package gov.noaa.nws.ncep.common.dataplugin.airmet; - -import java.io.Serializable; - -import java.util.Calendar; -import java.util.HashSet; -import java.util.Set; - -import javax.persistence.CascadeType; -import javax.persistence.Column; -import javax.persistence.GeneratedValue; -import javax.persistence.Id; - -import javax.persistence.Entity; -import javax.persistence.FetchType; -import javax.persistence.JoinColumn; -import javax.persistence.OneToMany; -import javax.persistence.Table; - -import org.hibernate.annotations.Index; - -import com.raytheon.uf.common.serialization.ISerializableObject; -import com.raytheon.uf.common.serialization.annotations.DynamicSerialize; -import com.raytheon.uf.common.serialization.annotations.DynamicSerializeElement; - -@Entity -@Table(name="airmet_report") -@DynamicSerialize -public class AirmetReport implements Serializable, ISerializableObject { - - private static final long serialVersionUID = 1L; - - @Id - @GeneratedValue - private Integer recordId = null; - - // The AIRMET record this object belongs to - //@ManyToOne - //@JoinColumn(name="parentID", nullable=false) - // private AirmetRecord parentID; - - /* - * hazard type as: Instrument Flight Rules(IR), Mountain Obscuration(MO), - * Turbulence(TB), Icing(IC), Sustained SFC Winds(SW), - * Low Level Wind Shear(LLWS), or CANCEL. If a report is outlook, then - * an "OUTLOOK: will be added. - */ - @Column(length=40) - @DynamicSerializeElement - private String hazardType; - - //The report indicator will be AIRMET or OUTLOOK. - @Column(length=16) - @DynamicSerializeElement - private String reportIndicator; - - // Sequence ID of an AIRMET report - @Column(length=16) - @DynamicSerializeElement - private String sequenceID; - - // Start time of the report - @Column - @DynamicSerializeElement - private Calendar startTime; - - // End time of the report - @Column - @DynamicSerializeElement - private Calendar endTime; - - // Flight level 1 - @Column(length=16) - @DynamicSerializeElement - private String flightLevel1; - - // Flight level 2 - @Column(length=16) - @DynamicSerializeElement - private String flightLevel2; - - // cancelFlag is a flag indicating a cancellation (0 or 1) - @Column - @DynamicSerializeElement - private Integer cancelFlag; - - // The information of a complete report - @Column(length=1440) - @DynamicSerializeElement - private String segment; - - - /** - * Airmet location - */ - @DynamicSerializeElement - @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER) - @JoinColumn(name = "parentID", nullable = false) - @Index(name = "airmetLocation_parentid_idex") - private Set airmetLocation = new HashSet(); - - - /** - * No-Arg Convstructor - */ - public AirmetReport() { - this.flightLevel1 = null; - this.flightLevel2=null; - this.segment=null; - this.hazardType=null; - this.reportIndicator=null; - this.sequenceID=null; - this.cancelFlag=0; - } - - /** - * @return the serialVersionUID - */ - public static long getSerialVersionUID() { - return serialVersionUID; - } - - /** - * @return the sequenceID - */ - public String getSequenceID() { - return sequenceID; - - } - - /** - * @return the sequenceID - */ - public void setSequenceID(String sequenceID) { - this.sequenceID = sequenceID; - } - - /** - * @return the set of airmet location - */ - public Set getAirmetLocation() { - return airmetLocation; - } - - /** - * @param airmet the location to set - */ - public void setAirmetLocation(Set curLocation) { - this.airmetLocation = curLocation; - } - - /** - * @param add airmet location to set - */ - public void addAirmetLocation(AirmetLocation plocation){ - airmetLocation.add(plocation); - } - - /** - * @return the parentID - * - //public String getParentID() { - public AirmetRecord getParentID() { - - return parentID; - }*/ - - /** - * @param parentID the parentID to set - * - public void setParentID(AirmetRecord parentID) { - //this.parentID = parentID; - if(this.getAirmetLocation() != null && this.getAirmetLocation().size() > 0) - { - for (Iterator iter = this.getAirmetLocation().iterator(); iter.hasNext();) { - AirmetLocation cond = iter.next(); - cond.setParentID(this); - } - } - }*/ - - /** - * @return the report - */ - public String getSegment() { - return segment; - } - - /** - * @param segment to set - */ - public void setSegment(String segment) { - this.segment = segment; - } - - /** - * @return the startTime - */ - public Calendar getStartTime() { - return startTime; - } - - /** - * @param startTime to set - */ - public void setStartTime(Calendar startTime) { - this.startTime = startTime; - } - - /** - * @return the endTime - */ - public Calendar getEndTime() { - return endTime; - } - - /** - * @param endTIme to set - */ - public void setEndTime(Calendar endTime) { - this.endTime = endTime; - } - - /** - * @return the flightLevel1 - */ - public String getFlightLevel1() { - return flightLevel1; - } - - /** - * @param flightLevel1 to set - */ - public void setFlightLevel1(String flightLevel1) { - this.flightLevel1 = flightLevel1; - } - - /** - * @return the flightLevel2 - */ - public String getFlightLevel2() { - return flightLevel2; - } - - /** - * @param flightLevel2 to set - */ - public void setFlightLevel2(String flightLevel2) { - this.flightLevel2 = flightLevel2; - } - - /** - * Get the record id. - * - * @return The recordId. If not set returns null. - */ - public Integer getRecordId() { - return recordId; - } - - /** - * Set the record id. - * @param record - */ - public void setRecordId(Integer recordId) { - this.recordId = recordId; - } - - /** - * @return the cancelFlag - */ - public Integer getCancelFlag() { - return cancelFlag; - } - - /** - * @param cancelFlag to set - */ - public void setCancelFlag(Integer cancelFlag) { - this.cancelFlag = cancelFlag; - } - - /** - * @return the hazardType - */ - public String getHazardType() { - return hazardType; - } - - /** - * @param hazardType to set - */ - public void setHazardType(String hazardType) { - this.hazardType = hazardType; - } - - /** - * @return the reportIndicator - */ - public String getReportIndicator() { - return reportIndicator; - } - - /** - * @param reportIndicator to set - */ - public void setReportIndicator(String reportIndicator) { - this.reportIndicator = reportIndicator; - } - -} +/** + * AirmetReport + * + * This java class defines the getters and setters for the + * AIRMET report table. + * + * HISTORY + * + * Date Author Description + * ------------ ---------- ----------- -------------------------- + * 05/2009 L. Lin Initial creation + * 09/2011 Chin Chen changed to improve purge performance and + * removed xml serialization as well + * + * This code has been developed by the SIB for use in the AWIPS2 system. + */ + +package gov.noaa.nws.ncep.common.dataplugin.airmet; + +import java.io.Serializable; + +import java.util.Calendar; +import java.util.HashSet; +import java.util.Set; + +import javax.persistence.CascadeType; +import javax.persistence.Column; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; + +import javax.persistence.Entity; +import javax.persistence.FetchType; +import javax.persistence.JoinColumn; +import javax.persistence.OneToMany; +import javax.persistence.Table; + +import org.hibernate.annotations.Index; + +import com.raytheon.uf.common.serialization.ISerializableObject; +import com.raytheon.uf.common.serialization.annotations.DynamicSerialize; +import com.raytheon.uf.common.serialization.annotations.DynamicSerializeElement; + +@Entity +@Table(name="airmet_report") +@DynamicSerialize +public class AirmetReport implements Serializable, ISerializableObject { + + private static final long serialVersionUID = 1L; + + @Id + @GeneratedValue + private Integer recordId = null; + + // The AIRMET record this object belongs to + //@ManyToOne + //@JoinColumn(name="parentID", nullable=false) + // private AirmetRecord parentID; + + /* + * hazard type as: Instrument Flight Rules(IR), Mountain Obscuration(MO), + * Turbulence(TB), Icing(IC), Sustained SFC Winds(SW), + * Low Level Wind Shear(LLWS), or CANCEL. If a report is outlook, then + * an "OUTLOOK: will be added. + */ + @Column(length=40) + @DynamicSerializeElement + private String hazardType; + + //The report indicator will be AIRMET or OUTLOOK. + @Column(length=16) + @DynamicSerializeElement + private String reportIndicator; + + // Sequence ID of an AIRMET report + @Column(length=16) + @DynamicSerializeElement + private String sequenceID; + + // Start time of the report + @Column + @DynamicSerializeElement + private Calendar startTime; + + // End time of the report + @Column + @DynamicSerializeElement + private Calendar endTime; + + // Flight level 1 + @Column(length=16) + @DynamicSerializeElement + private String flightLevel1; + + // Flight level 2 + @Column(length=16) + @DynamicSerializeElement + private String flightLevel2; + + // cancelFlag is a flag indicating a cancellation (0 or 1) + @Column + @DynamicSerializeElement + private Integer cancelFlag; + + // The information of a complete report + @Column(length=1440) + @DynamicSerializeElement + private String segment; + + + /** + * Airmet location + */ + @DynamicSerializeElement + @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER) + @JoinColumn(name = "parentID", nullable = false) + @Index(name = "airmetLocation_parentid_idex") + private Set airmetLocation = new HashSet(); + + + /** + * No-Arg Convstructor + */ + public AirmetReport() { + this.flightLevel1 = null; + this.flightLevel2=null; + this.segment=null; + this.hazardType=null; + this.reportIndicator=null; + this.sequenceID=null; + this.cancelFlag=0; + } + + /** + * @return the serialVersionUID + */ + public static long getSerialVersionUID() { + return serialVersionUID; + } + + /** + * @return the sequenceID + */ + public String getSequenceID() { + return sequenceID; + + } + + /** + * @return the sequenceID + */ + public void setSequenceID(String sequenceID) { + this.sequenceID = sequenceID; + } + + /** + * @return the set of airmet location + */ + public Set getAirmetLocation() { + return airmetLocation; + } + + /** + * @param airmet the location to set + */ + public void setAirmetLocation(Set curLocation) { + this.airmetLocation = curLocation; + } + + /** + * @param add airmet location to set + */ + public void addAirmetLocation(AirmetLocation plocation){ + airmetLocation.add(plocation); + } + + /** + * @return the parentID + * + //public String getParentID() { + public AirmetRecord getParentID() { + + return parentID; + }*/ + + /** + * @param parentID the parentID to set + * + public void setParentID(AirmetRecord parentID) { + //this.parentID = parentID; + if(this.getAirmetLocation() != null && this.getAirmetLocation().size() > 0) + { + for (Iterator iter = this.getAirmetLocation().iterator(); iter.hasNext();) { + AirmetLocation cond = iter.next(); + cond.setParentID(this); + } + } + }*/ + + /** + * @return the report + */ + public String getSegment() { + return segment; + } + + /** + * @param segment to set + */ + public void setSegment(String segment) { + this.segment = segment; + } + + /** + * @return the startTime + */ + public Calendar getStartTime() { + return startTime; + } + + /** + * @param startTime to set + */ + public void setStartTime(Calendar startTime) { + this.startTime = startTime; + } + + /** + * @return the endTime + */ + public Calendar getEndTime() { + return endTime; + } + + /** + * @param endTIme to set + */ + public void setEndTime(Calendar endTime) { + this.endTime = endTime; + } + + /** + * @return the flightLevel1 + */ + public String getFlightLevel1() { + return flightLevel1; + } + + /** + * @param flightLevel1 to set + */ + public void setFlightLevel1(String flightLevel1) { + this.flightLevel1 = flightLevel1; + } + + /** + * @return the flightLevel2 + */ + public String getFlightLevel2() { + return flightLevel2; + } + + /** + * @param flightLevel2 to set + */ + public void setFlightLevel2(String flightLevel2) { + this.flightLevel2 = flightLevel2; + } + + /** + * Get the record id. + * + * @return The recordId. If not set returns null. + */ + public Integer getRecordId() { + return recordId; + } + + /** + * Set the record id. + * @param record + */ + public void setRecordId(Integer recordId) { + this.recordId = recordId; + } + + /** + * @return the cancelFlag + */ + public Integer getCancelFlag() { + return cancelFlag; + } + + /** + * @param cancelFlag to set + */ + public void setCancelFlag(Integer cancelFlag) { + this.cancelFlag = cancelFlag; + } + + /** + * @return the hazardType + */ + public String getHazardType() { + return hazardType; + } + + /** + * @param hazardType to set + */ + public void setHazardType(String hazardType) { + this.hazardType = hazardType; + } + + /** + * @return the reportIndicator + */ + public String getReportIndicator() { + return reportIndicator; + } + + /** + * @param reportIndicator to set + */ + public void setReportIndicator(String reportIndicator) { + this.reportIndicator = reportIndicator; + } + +} diff --git a/ncep/gov.noaa.nws.ncep.common.dataplugin.airmet/src/gov/noaa/nws/ncep/common/dataplugin/airmet/dao/package-info.java b/ncep/gov.noaa.nws.ncep.common.dataplugin.airmet/src/gov/noaa/nws/ncep/common/dataplugin/airmet/dao/package-info.java index a14f1d767a..9756d21d53 100644 --- a/ncep/gov.noaa.nws.ncep.common.dataplugin.airmet/src/gov/noaa/nws/ncep/common/dataplugin/airmet/dao/package-info.java +++ b/ncep/gov.noaa.nws.ncep.common.dataplugin.airmet/src/gov/noaa/nws/ncep/common/dataplugin/airmet/dao/package-info.java @@ -1,4 +1,4 @@ -/** -* Contains data access object for airmet data. -*/ -package gov.noaa.nws.ncep.common.dataplugin.airmet.dao; +/** +* Contains data access object for airmet data. +*/ +package gov.noaa.nws.ncep.common.dataplugin.airmet.dao; diff --git a/ncep/gov.noaa.nws.ncep.common.dataplugin.airmet/src/gov/noaa/nws/ncep/common/dataplugin/airmet/package-info.java b/ncep/gov.noaa.nws.ncep.common.dataplugin.airmet/src/gov/noaa/nws/ncep/common/dataplugin/airmet/package-info.java index 8841b360da..0834c431c0 100644 --- a/ncep/gov.noaa.nws.ncep.common.dataplugin.airmet/src/gov/noaa/nws/ncep/common/dataplugin/airmet/package-info.java +++ b/ncep/gov.noaa.nws.ncep.common.dataplugin.airmet/src/gov/noaa/nws/ncep/common/dataplugin/airmet/package-info.java @@ -1,4 +1,4 @@ -/** -* Contains table record for decoder plug-ins -*/ -package gov.noaa.nws.ncep.common.dataplugin.airmet; +/** +* Contains table record for decoder plug-ins +*/ +package gov.noaa.nws.ncep.common.dataplugin.airmet; diff --git a/ncep/gov.noaa.nws.ncep.common.dataplugin.atcf/gov.noaa.nws.ncep.common.dataplugin.atcf.ecl b/ncep/gov.noaa.nws.ncep.common.dataplugin.atcf/gov.noaa.nws.ncep.common.dataplugin.atcf.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/ncep/gov.noaa.nws.ncep.common.dataplugin.atcf/src/gov/noaa/nws/ncep/common/dataplugin/atcf/dao/AtcfDao.java b/ncep/gov.noaa.nws.ncep.common.dataplugin.atcf/src/gov/noaa/nws/ncep/common/dataplugin/atcf/dao/AtcfDao.java index b8a7dd66b9..a2dbda62eb 100644 --- a/ncep/gov.noaa.nws.ncep.common.dataplugin.atcf/src/gov/noaa/nws/ncep/common/dataplugin/atcf/dao/AtcfDao.java +++ b/ncep/gov.noaa.nws.ncep.common.dataplugin.atcf/src/gov/noaa/nws/ncep/common/dataplugin/atcf/dao/AtcfDao.java @@ -12,64 +12,64 @@ * * @author fjyen * @version 1.0 - **/ -package gov.noaa.nws.ncep.common.dataplugin.atcf.dao; - -import java.util.List; - -import gov.noaa.nws.ncep.common.dataplugin.atcf.AtcfRecord; + **/ +package gov.noaa.nws.ncep.common.dataplugin.atcf.dao; + +import java.util.List; + +import gov.noaa.nws.ncep.common.dataplugin.atcf.AtcfRecord; import gov.noaa.nws.ncep.edex.common.dao.NcepDefaultPluginDao; -import com.raytheon.uf.common.dataplugin.PluginException; +import com.raytheon.uf.common.dataplugin.PluginException; import com.raytheon.uf.edex.database.DataAccessLayerException; - -public class AtcfDao extends NcepDefaultPluginDao { - - - /** - * Creates a new ReccoDao - * @throws PluginException - */ - public AtcfDao(String pluginName) throws PluginException { - super(pluginName); - } - - /** - * Retrieves a atcf report using the datauri . - * - * @param dataURI - * The dataURI to match against. - * @return The report record if it exists. - */ - public AtcfRecord queryByDataURI(String dataURI) { - AtcfRecord report = null; - List obs = null; - try { - obs = queryBySingleCriteria("dataURI", dataURI); - } catch (DataAccessLayerException e) { - e.printStackTrace(); - } - if((obs != null)&&(obs.size() > 0)) { - report = (AtcfRecord) obs.get(0); - } - return report; - } - - /** - * Queries for to determine if a given data uri exists on the ATCF table. - * - * @param dataUri - * The DataURI to find. - * @return An array of objects. If not null, there should only be a single - * element. - */ - public Object[] queryDataUriColumn(final String dataUri) { - - String sql = "select datauri from awips.atcf where datauri='" - + dataUri + "';"; - - Object[] results = executeSQLQuery(sql); - - return results; - } -} + +public class AtcfDao extends NcepDefaultPluginDao { + + + /** + * Creates a new ReccoDao + * @throws PluginException + */ + public AtcfDao(String pluginName) throws PluginException { + super(pluginName); + } + + /** + * Retrieves a atcf report using the datauri . + * + * @param dataURI + * The dataURI to match against. + * @return The report record if it exists. + */ + public AtcfRecord queryByDataURI(String dataURI) { + AtcfRecord report = null; + List obs = null; + try { + obs = queryBySingleCriteria("dataURI", dataURI); + } catch (DataAccessLayerException e) { + e.printStackTrace(); + } + if((obs != null)&&(obs.size() > 0)) { + report = (AtcfRecord) obs.get(0); + } + return report; + } + + /** + * Queries for to determine if a given data uri exists on the ATCF table. + * + * @param dataUri + * The DataURI to find. + * @return An array of objects. If not null, there should only be a single + * element. + */ + public Object[] queryDataUriColumn(final String dataUri) { + + String sql = "select datauri from awips.atcf where datauri='" + + dataUri + "';"; + + Object[] results = executeSQLQuery(sql); + + return results; + } +} diff --git a/ncep/gov.noaa.nws.ncep.common.dataplugin.aww/gov.noaa.nws.ncep.common.dataplugin.aww.ecl b/ncep/gov.noaa.nws.ncep.common.dataplugin.aww/gov.noaa.nws.ncep.common.dataplugin.aww.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/ncep/gov.noaa.nws.ncep.common.dataplugin.convsigmet/gov.noaa.nws.ncep.common.dataplugin.convsigmet.ecl b/ncep/gov.noaa.nws.ncep.common.dataplugin.convsigmet/gov.noaa.nws.ncep.common.dataplugin.convsigmet.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/ncep/gov.noaa.nws.ncep.common.dataplugin.convsigmet/src/gov/noaa/nws/ncep/common/dataplugin/convsigmet/ConvSigmetLocation.java b/ncep/gov.noaa.nws.ncep.common.dataplugin.convsigmet/src/gov/noaa/nws/ncep/common/dataplugin/convsigmet/ConvSigmetLocation.java index 4a900182ec..697d6ec734 100644 --- a/ncep/gov.noaa.nws.ncep.common.dataplugin.convsigmet/src/gov/noaa/nws/ncep/common/dataplugin/convsigmet/ConvSigmetLocation.java +++ b/ncep/gov.noaa.nws.ncep.common.dataplugin.convsigmet/src/gov/noaa/nws/ncep/common/dataplugin/convsigmet/ConvSigmetLocation.java @@ -1,178 +1,178 @@ -/** - * ConvsigmetLocation - * - * This java class defines the getters and setters for the - * convective sigmet location table. - * - * HISTORY - * - * Date Ticket# Engineer Description - * ------------ ---------- ----------- -------------------------- - * 03/2009 87/114 L. Lin Initial coding - * 06/2009 87/114 L. Lin Enlarge size of locationLine and location. - * 07/2009 87/114 L. Lin Migration to TO11 - * 09/2009 87/114 L. Lin Add latitude/longitude to location table - * 09/2011 Chin Chen changed to improve purge performance and - * removed xml serialization as well - * - * - * This code has been developed by the SIB for use in the AWIPS2 system. - */ -package gov.noaa.nws.ncep.common.dataplugin.convsigmet; - -import java.io.Serializable; - -import javax.persistence.GeneratedValue; -import javax.persistence.Id; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.Table; -import com.raytheon.uf.common.serialization.ISerializableObject; -import com.raytheon.uf.common.serialization.annotations.DynamicSerialize; -import com.raytheon.uf.common.serialization.annotations.DynamicSerializeElement; -import gov.noaa.nws.ncep.common.tools.IDecoderConstantsN; - -@Entity -@Table(name="convsigmet_location") -@DynamicSerialize -public class ConvSigmetLocation implements Serializable, ISerializableObject { - - private static final long serialVersionUID = 1L; - - @Id - @GeneratedValue - private Integer recordId = null; - - - // Collection of locations - @Column(length=480) - @DynamicSerializeElement - private String locationLine; - - // Each location of a convective sigmet forecast area - @Column(length=48) - @DynamicSerializeElement - private String location; - - // Each latitude of a convective sigmet forecast area - @Column - @DynamicSerializeElement - private double latitude; - - // Each longitude of a convective sigmet forecast area - @Column - @DynamicSerializeElement - private double longitude; - - // Index for the order of a complete location set - @Column - @DynamicSerializeElement - private Integer index; - - /** - * No-Arg Convstructor. - */ - public ConvSigmetLocation() { - this.locationLine=""; - this.location=""; - this.index=IDecoderConstantsN.INTEGER_MISSING; - } - - - /** - * @return the serialVersionUID - */ - public static long getSerialVersionUID() { - return serialVersionUID; - } - - - /** - * @return the index - */ - public Integer getIndex() { - return index; - } - - /** - * @param index to set - */ - public void setIndex(Integer index) { - this.index = index; - } - - /** - * @return the locationLine - */ - public String getLocationLine() { - return locationLine; - } - - /** - * @param locationLine to set - */ - public void setLocationLine(String locationLine) { - this.locationLine = locationLine; - } - - /** - * @return the location - */ - public String getLocation() { - return location; - } - - /** - * @param location to set - */ - public void setLocation(String location) { - this.location = location; - } - - /** - * @return the latitude - */ - public double getLatitude() { - return latitude; - } - - /** - * @param latitude to set - */ - public void setLatitude(double latitude) { - this.latitude = latitude; - } - - /** - * @return the longitude - */ - public double getLongitude() { - return longitude; - } - - /** - * @param longitude to set - */ - public void setLongitude(double longitude) { - this.longitude = longitude; - } - - - /** - * Get the record id. - * - * @return The recordId. If not set returns null. - */ - public Integer getRecordId() { - return recordId; - } - - /** - * Set the record id. - * @param record - */ - public void setRecordId(Integer recordId) { - this.recordId = recordId; - } - -} +/** + * ConvsigmetLocation + * + * This java class defines the getters and setters for the + * convective sigmet location table. + * + * HISTORY + * + * Date Ticket# Engineer Description + * ------------ ---------- ----------- -------------------------- + * 03/2009 87/114 L. Lin Initial coding + * 06/2009 87/114 L. Lin Enlarge size of locationLine and location. + * 07/2009 87/114 L. Lin Migration to TO11 + * 09/2009 87/114 L. Lin Add latitude/longitude to location table + * 09/2011 Chin Chen changed to improve purge performance and + * removed xml serialization as well + * + * + * This code has been developed by the SIB for use in the AWIPS2 system. + */ +package gov.noaa.nws.ncep.common.dataplugin.convsigmet; + +import java.io.Serializable; + +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Table; +import com.raytheon.uf.common.serialization.ISerializableObject; +import com.raytheon.uf.common.serialization.annotations.DynamicSerialize; +import com.raytheon.uf.common.serialization.annotations.DynamicSerializeElement; +import gov.noaa.nws.ncep.common.tools.IDecoderConstantsN; + +@Entity +@Table(name="convsigmet_location") +@DynamicSerialize +public class ConvSigmetLocation implements Serializable, ISerializableObject { + + private static final long serialVersionUID = 1L; + + @Id + @GeneratedValue + private Integer recordId = null; + + + // Collection of locations + @Column(length=480) + @DynamicSerializeElement + private String locationLine; + + // Each location of a convective sigmet forecast area + @Column(length=48) + @DynamicSerializeElement + private String location; + + // Each latitude of a convective sigmet forecast area + @Column + @DynamicSerializeElement + private double latitude; + + // Each longitude of a convective sigmet forecast area + @Column + @DynamicSerializeElement + private double longitude; + + // Index for the order of a complete location set + @Column + @DynamicSerializeElement + private Integer index; + + /** + * No-Arg Convstructor. + */ + public ConvSigmetLocation() { + this.locationLine=""; + this.location=""; + this.index=IDecoderConstantsN.INTEGER_MISSING; + } + + + /** + * @return the serialVersionUID + */ + public static long getSerialVersionUID() { + return serialVersionUID; + } + + + /** + * @return the index + */ + public Integer getIndex() { + return index; + } + + /** + * @param index to set + */ + public void setIndex(Integer index) { + this.index = index; + } + + /** + * @return the locationLine + */ + public String getLocationLine() { + return locationLine; + } + + /** + * @param locationLine to set + */ + public void setLocationLine(String locationLine) { + this.locationLine = locationLine; + } + + /** + * @return the location + */ + public String getLocation() { + return location; + } + + /** + * @param location to set + */ + public void setLocation(String location) { + this.location = location; + } + + /** + * @return the latitude + */ + public double getLatitude() { + return latitude; + } + + /** + * @param latitude to set + */ + public void setLatitude(double latitude) { + this.latitude = latitude; + } + + /** + * @return the longitude + */ + public double getLongitude() { + return longitude; + } + + /** + * @param longitude to set + */ + public void setLongitude(double longitude) { + this.longitude = longitude; + } + + + /** + * Get the record id. + * + * @return The recordId. If not set returns null. + */ + public Integer getRecordId() { + return recordId; + } + + /** + * Set the record id. + * @param record + */ + public void setRecordId(Integer recordId) { + this.recordId = recordId; + } + +} diff --git a/ncep/gov.noaa.nws.ncep.common.dataplugin.convsigmet/src/gov/noaa/nws/ncep/common/dataplugin/convsigmet/ConvSigmetRecord.java b/ncep/gov.noaa.nws.ncep.common.dataplugin.convsigmet/src/gov/noaa/nws/ncep/common/dataplugin/convsigmet/ConvSigmetRecord.java index 2e720ca28a..cc2cd3b18e 100644 --- a/ncep/gov.noaa.nws.ncep.common.dataplugin.convsigmet/src/gov/noaa/nws/ncep/common/dataplugin/convsigmet/ConvSigmetRecord.java +++ b/ncep/gov.noaa.nws.ncep.common.dataplugin.convsigmet/src/gov/noaa/nws/ncep/common/dataplugin/convsigmet/ConvSigmetRecord.java @@ -1,287 +1,287 @@ -/** - * ConvsigmetRecord - * - * This java class performs the mapping to the database table for CONVSIGMET - * - * HISTORY - * - * Date Ticket# Engineer Description - * ------------ ---------- ----------- -------------------------- - * 03/2009 87/114 L. Lin Initial coding - * 07/2009 87/114 L. Lin Migration to TO11 - * 09/2011 Chin Chen changed to improve purge performance and - * removed xml serialization as well - * - * - * This code has been developed by the SIB for use in the AWIPS2 system. - */ - -package gov.noaa.nws.ncep.common.dataplugin.convsigmet; - -import java.util.Calendar; -import java.util.HashSet; -import java.util.Set; -import com.raytheon.uf.common.dataplugin.PluginDataObject; -import com.raytheon.uf.common.dataplugin.IDecoderGettable; - -import gov.noaa.nws.ncep.common.tools.IDecoderConstantsN; - -import javax.persistence.CascadeType; -import javax.persistence.Column; - -import javax.persistence.Entity; -import javax.persistence.FetchType; -import javax.persistence.JoinColumn; -import javax.persistence.OneToMany; -import javax.persistence.Table; -import javax.persistence.UniqueConstraint; - -import org.hibernate.annotations.Index; - -import com.raytheon.uf.common.dataplugin.annotations.DataURI; -import com.raytheon.uf.common.serialization.annotations.DynamicSerialize; -import com.raytheon.uf.common.serialization.annotations.DynamicSerializeElement; - -@Entity -@Table(name = "convsigmet", uniqueConstraints = { @UniqueConstraint(columnNames = { "dataURI" }) }) -@DynamicSerialize - - -public class ConvSigmetRecord extends PluginDataObject{ - - /** - * - */ - private static final long serialVersionUID = 1L; - - // reportType is "convective sigmet". - @Column(length=32) - @DataURI(position=1) - @DynamicSerializeElement - private String reportType; - - // WMO header - @Column(length=32) - @DataURI(position=2) - @DynamicSerializeElement - private String wmoHeader; - - // forecastRegion as: SIGW, SIGC, or SIGE - @Column(length=8) - @DataURI(position=3) - @DynamicSerializeElement - private String forecastRegion; - - // The issue office where the report from - @Column(length=32) - @DynamicSerializeElement - private String issueOffice; - - // Issue time of the report - @Column - @DynamicSerializeElement - private Calendar issueTime; - - // The designator - @Column(length=8) - @DynamicSerializeElement - private String designatorBBB; - - // CorrectionFlag is a flag indicating a cancellation (0 or 1) - @Column - @DynamicSerializeElement - private Integer correctionFlag; - - // The entire report - @Column(length=15000) - @DynamicSerializeElement - private String bullMessage; - - - /** - * Convsigmet section - */ - @DynamicSerializeElement - @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER) - @JoinColumn(name = "parentID", nullable = false) - @Index(name = "convSigmetSection_parentid_idex") - private Set convSigmetSection = new HashSet(); - - - /** - * Default Convstructor - */ - public ConvSigmetRecord() { - this.issueOffice=""; - this.wmoHeader=""; - this.bullMessage=""; - this.designatorBBB=""; - this.forecastRegion=""; - this.reportType=""; - this.correctionFlag=IDecoderConstantsN.INTEGER_MISSING; - } - - /** - * Convstructs a consigmet record from a dataURI - * - * @param uri The dataURI - */ - public ConvSigmetRecord(String uri) { - super(uri); - } - - - @Override - public IDecoderGettable getDecoderGettable() { - // TODO Auto-generated method stub - return null; - } - - /** - * @return the issueOffice - */ - public String getIssueOffice(){ - return issueOffice; - } - - /** - * @param issueOffice to set - */ - public void setIssueOffice(String issueOffice){ - this.issueOffice=issueOffice; - } - - /** - * @return the wmoHeader - */ - public String getWmoHeader(){ - return wmoHeader; - } - - /** - * @param wnoHeader to set - */ - public void setWmoHeader(String wmoHeader){ - this.wmoHeader=wmoHeader; - } - - /** - * @return the issueTime - */ - public Calendar getIssueTime(){ - return issueTime; - } - - /** - * @param issueTime to set - */ - public void setIssueTime(Calendar issueTime){ - this.issueTime=issueTime; - } - - /** - * @return the reportType - */ - public String getReportType() { - return reportType; - } - - /** - * @param reportType to set - */ - public void setReportType(String reportType) { - this.reportType = reportType; - } - - /** - * @return the designatorBBB - */ - public String getDesignatorBBB() { - return designatorBBB; - } - - /** - * @param designatorBBB to set - */ - public void setDesignatorBBB(String designatorBBB) { - this.designatorBBB = designatorBBB; - } - - /** - * @return the correctionFlag - */ - public Integer getCorrectionFlag() { - return correctionFlag; - } - - /** - * @param correctionFlag to set - */ - public void setCorrectionFlag(Integer correctionFlag) { - this.correctionFlag = correctionFlag; - } - - /** - * @return the forecastRegion - */ - public String getForecastRegion() { - return forecastRegion; - } - - /** - * @param forecastRegion to set - */ - public void setForecastRegion(String forecastRegion) { - this.forecastRegion = forecastRegion; - } - - /** - * @return the bullMessage - */ - public String getBullMessage() { - return bullMessage; - } - - /** - * @param bullMessage to set - */ - public void setBullMessage(String bullMessage) { - this.bullMessage = bullMessage; - } - - - /** - * @return the set of convective Sigmet section - */ - public Set getConvSigmetSection() { - return convSigmetSection; - } - - /** - * @param convsigmet the section to set - */ - public void setConvSigmetSection(Set convSection) { - this.convSigmetSection = convSection; - } - - /** - * @param add convective Sigmet Section to set - */ - public void addConvSigmetSection(ConvSigmetSection psection){ - convSigmetSection.add(psection); - - } - - /** - * Override existing set method to modify any - * classes that use the dataURI as a foreign key - */ - @Override - public void setIdentifier(Object dataURI) - { - - this.identifier = dataURI; - - } - -} +/** + * ConvsigmetRecord + * + * This java class performs the mapping to the database table for CONVSIGMET + * + * HISTORY + * + * Date Ticket# Engineer Description + * ------------ ---------- ----------- -------------------------- + * 03/2009 87/114 L. Lin Initial coding + * 07/2009 87/114 L. Lin Migration to TO11 + * 09/2011 Chin Chen changed to improve purge performance and + * removed xml serialization as well + * + * + * This code has been developed by the SIB for use in the AWIPS2 system. + */ + +package gov.noaa.nws.ncep.common.dataplugin.convsigmet; + +import java.util.Calendar; +import java.util.HashSet; +import java.util.Set; +import com.raytheon.uf.common.dataplugin.PluginDataObject; +import com.raytheon.uf.common.dataplugin.IDecoderGettable; + +import gov.noaa.nws.ncep.common.tools.IDecoderConstantsN; + +import javax.persistence.CascadeType; +import javax.persistence.Column; + +import javax.persistence.Entity; +import javax.persistence.FetchType; +import javax.persistence.JoinColumn; +import javax.persistence.OneToMany; +import javax.persistence.Table; +import javax.persistence.UniqueConstraint; + +import org.hibernate.annotations.Index; + +import com.raytheon.uf.common.dataplugin.annotations.DataURI; +import com.raytheon.uf.common.serialization.annotations.DynamicSerialize; +import com.raytheon.uf.common.serialization.annotations.DynamicSerializeElement; + +@Entity +@Table(name = "convsigmet", uniqueConstraints = { @UniqueConstraint(columnNames = { "dataURI" }) }) +@DynamicSerialize + + +public class ConvSigmetRecord extends PluginDataObject{ + + /** + * + */ + private static final long serialVersionUID = 1L; + + // reportType is "convective sigmet". + @Column(length=32) + @DataURI(position=1) + @DynamicSerializeElement + private String reportType; + + // WMO header + @Column(length=32) + @DataURI(position=2) + @DynamicSerializeElement + private String wmoHeader; + + // forecastRegion as: SIGW, SIGC, or SIGE + @Column(length=8) + @DataURI(position=3) + @DynamicSerializeElement + private String forecastRegion; + + // The issue office where the report from + @Column(length=32) + @DynamicSerializeElement + private String issueOffice; + + // Issue time of the report + @Column + @DynamicSerializeElement + private Calendar issueTime; + + // The designator + @Column(length=8) + @DynamicSerializeElement + private String designatorBBB; + + // CorrectionFlag is a flag indicating a cancellation (0 or 1) + @Column + @DynamicSerializeElement + private Integer correctionFlag; + + // The entire report + @Column(length=15000) + @DynamicSerializeElement + private String bullMessage; + + + /** + * Convsigmet section + */ + @DynamicSerializeElement + @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER) + @JoinColumn(name = "parentID", nullable = false) + @Index(name = "convSigmetSection_parentid_idex") + private Set convSigmetSection = new HashSet(); + + + /** + * Default Convstructor + */ + public ConvSigmetRecord() { + this.issueOffice=""; + this.wmoHeader=""; + this.bullMessage=""; + this.designatorBBB=""; + this.forecastRegion=""; + this.reportType=""; + this.correctionFlag=IDecoderConstantsN.INTEGER_MISSING; + } + + /** + * Convstructs a consigmet record from a dataURI + * + * @param uri The dataURI + */ + public ConvSigmetRecord(String uri) { + super(uri); + } + + + @Override + public IDecoderGettable getDecoderGettable() { + // TODO Auto-generated method stub + return null; + } + + /** + * @return the issueOffice + */ + public String getIssueOffice(){ + return issueOffice; + } + + /** + * @param issueOffice to set + */ + public void setIssueOffice(String issueOffice){ + this.issueOffice=issueOffice; + } + + /** + * @return the wmoHeader + */ + public String getWmoHeader(){ + return wmoHeader; + } + + /** + * @param wnoHeader to set + */ + public void setWmoHeader(String wmoHeader){ + this.wmoHeader=wmoHeader; + } + + /** + * @return the issueTime + */ + public Calendar getIssueTime(){ + return issueTime; + } + + /** + * @param issueTime to set + */ + public void setIssueTime(Calendar issueTime){ + this.issueTime=issueTime; + } + + /** + * @return the reportType + */ + public String getReportType() { + return reportType; + } + + /** + * @param reportType to set + */ + public void setReportType(String reportType) { + this.reportType = reportType; + } + + /** + * @return the designatorBBB + */ + public String getDesignatorBBB() { + return designatorBBB; + } + + /** + * @param designatorBBB to set + */ + public void setDesignatorBBB(String designatorBBB) { + this.designatorBBB = designatorBBB; + } + + /** + * @return the correctionFlag + */ + public Integer getCorrectionFlag() { + return correctionFlag; + } + + /** + * @param correctionFlag to set + */ + public void setCorrectionFlag(Integer correctionFlag) { + this.correctionFlag = correctionFlag; + } + + /** + * @return the forecastRegion + */ + public String getForecastRegion() { + return forecastRegion; + } + + /** + * @param forecastRegion to set + */ + public void setForecastRegion(String forecastRegion) { + this.forecastRegion = forecastRegion; + } + + /** + * @return the bullMessage + */ + public String getBullMessage() { + return bullMessage; + } + + /** + * @param bullMessage to set + */ + public void setBullMessage(String bullMessage) { + this.bullMessage = bullMessage; + } + + + /** + * @return the set of convective Sigmet section + */ + public Set getConvSigmetSection() { + return convSigmetSection; + } + + /** + * @param convsigmet the section to set + */ + public void setConvSigmetSection(Set convSection) { + this.convSigmetSection = convSection; + } + + /** + * @param add convective Sigmet Section to set + */ + public void addConvSigmetSection(ConvSigmetSection psection){ + convSigmetSection.add(psection); + + } + + /** + * Override existing set method to modify any + * classes that use the dataURI as a foreign key + */ + @Override + public void setIdentifier(Object dataURI) + { + + this.identifier = dataURI; + + } + +} diff --git a/ncep/gov.noaa.nws.ncep.common.dataplugin.convsigmet/src/gov/noaa/nws/ncep/common/dataplugin/convsigmet/ConvSigmetSection.java b/ncep/gov.noaa.nws.ncep.common.dataplugin.convsigmet/src/gov/noaa/nws/ncep/common/dataplugin/convsigmet/ConvSigmetSection.java index 0a508f87f2..ad56e04667 100644 --- a/ncep/gov.noaa.nws.ncep.common.dataplugin.convsigmet/src/gov/noaa/nws/ncep/common/dataplugin/convsigmet/ConvSigmetSection.java +++ b/ncep/gov.noaa.nws.ncep.common.dataplugin.convsigmet/src/gov/noaa/nws/ncep/common/dataplugin/convsigmet/ConvSigmetSection.java @@ -1,343 +1,343 @@ -/** - * ConvsigmetSection - * - * This java class defines the getters and setters for the - * convective sigmet section table. - * - * HISTORY - * - * Date Ticket# Engineer Description - * ------------ ---------- ----------- -------------------------- - * 03/2009 87/114 L. Lin Initial coding - * 07/2009 87/114 L. Lin Migration to TO11 - * 09/2011 Chin Chen changed to improve purge performance and - * removed xml serialization as well - * - * - * This code has been developed by the SIB for use in the AWIPS2 system. - */ - -package gov.noaa.nws.ncep.common.dataplugin.convsigmet; - -import java.io.Serializable; - -import java.util.Calendar; -import java.util.HashSet; -import java.util.Set; - -import javax.persistence.CascadeType; -import javax.persistence.Column; -import javax.persistence.GeneratedValue; -import javax.persistence.Id; - -import javax.persistence.Entity; -import javax.persistence.FetchType; -import javax.persistence.JoinColumn; -import javax.persistence.OneToMany; -import javax.persistence.Table; -import org.hibernate.annotations.Index; -import com.raytheon.uf.common.serialization.ISerializableObject; -import com.raytheon.uf.common.serialization.annotations.DynamicSerialize; -import com.raytheon.uf.common.serialization.annotations.DynamicSerializeElement; -import gov.noaa.nws.ncep.common.tools.IDecoderConstantsN; - -@Entity -@Table(name="convsigmet_section") -@DynamicSerialize -public class ConvSigmetSection implements Serializable, ISerializableObject { - - private static final long serialVersionUID = 1L; - - @Id - @GeneratedValue - private Integer recordId = null; - - - // Class type such as: LINE, AREA, ISOL, CS, and OUTLOOK - @Column(length=8) - @DynamicSerializeElement - private String classType; - - // Sequence ID of a convective sigmet report - @Column(length=16) - @DynamicSerializeElement - private String sequenceID; - - // Start time of the report - @Column - @DynamicSerializeElement - private Calendar startTime; - - // End time of the report - @Column - @DynamicSerializeElement - private Calendar endTime; - - /* - * Intensity is DMSHG (weakening), DSIPTG (ending) - * INTSFYG (strengthening), DVLPG (beginning/growing) - */ - @Column(length=32) - @DynamicSerializeElement - private String intensity; - - // To where flight level from tops - @Column - @DynamicSerializeElement - private int flightLevel; - - // TOPS TO or TOPS ABV for flight level - @Column(length=16) - @DynamicSerializeElement - private String cloudTop; - - // Direction of weather report heads to - @Column - @DynamicSerializeElement - private int direction; - - // wind speed in knots - @Column - @DynamicSerializeElement - private int speed; - - // Distance is the Distance or Area diameter of the area or line - @Column - @DynamicSerializeElement - private int distance; - - // The information of a complete section - @Column(length=720) - @DynamicSerializeElement - private String segment; - - - /** - * Convsigmet location - */ - @DynamicSerializeElement - @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER) - @JoinColumn(name = "parentID", nullable = false) - @Index(name = "convSigmetLocation_parentid_idex") - private Set convSigmetLocation = new HashSet(); - - - /** - * No-Arg Convstructor - */ - public ConvSigmetSection() { - this.intensity = null; - this.cloudTop=null; - this.segment=null; - this.classType=null; - this.sequenceID=null; - - this.direction=IDecoderConstantsN.INTEGER_MISSING; - this.speed=IDecoderConstantsN.INTEGER_MISSING; - this.distance=IDecoderConstantsN.INTEGER_MISSING; - this.flightLevel=IDecoderConstantsN.INTEGER_MISSING; - } - - /** - * @return the serialVersionUID - */ - public static long getSerialVersionUID() { - return serialVersionUID; - } - - /** - * @return the sequenceID - */ - public String getSequenceID() { - return sequenceID; - - } - - /** - * @return the sequenceID - */ - public void setSequenceID(String sequenceID) { - this.sequenceID = sequenceID; - } - - /** - * @return the intensity - */ - public String getIntensity() { - return intensity; - } - - /** - * @param intensity to set - */ - public void setIntensity(String intensity) { - this.intensity = intensity; - } - - /** - * @return the direction - */ - public int getDirection() { - return direction; - } - - /** - * @param direction to set - */ - public void setDirection(int direction) { - this.direction = direction; - } - - /** - * @return the speed - */ - public int getSpeed() { - return speed; - } - - /** - * @param speed to set - */ - public void setSpeed(int speed) { - this.speed = speed; - } - - /** - * @return the distance - */ - public int getDistance() { - return distance; - } - - /** - * @param distance to set - */ - public void setDistance(int distance) { - this.distance = distance; - } - - /** - * @return the set of convective sigmet location - */ - public Set getConvSigmetLocation() { - return convSigmetLocation; - } - - /** - * @param convsigmet the location to set - */ - public void setConvSigmetLocation(Set convLocation) { - this.convSigmetLocation = convLocation; - } - - /** - * @param add conv Sigmet location to set - */ - public void addConvSigmetLocation(ConvSigmetLocation plocation){ - convSigmetLocation.add(plocation); - } - - - - /** - * @return the classType - */ - public String getClassType() { - return classType; - } - - /** - * @param classType to set - */ - public void setClassType(String classType) { - this.classType = classType; - } - - /** - * @return the section - */ - public String getSegment() { - return segment; - } - - /** - * @param segment to set - */ - public void setSegment(String segment) { - this.segment = segment; - } - - /** - * @return the startTime - */ - public Calendar getStartTime() { - return startTime; - } - - /** - * @param startTime to set - */ - public void setStartTime(Calendar startTime) { - this.startTime = startTime; - } - - /** - * @return the endTime - */ - public Calendar getEndTime() { - return endTime; - } - - /** - * @param endTIme to set - */ - public void setEndTime(Calendar endTime) { - this.endTime = endTime; - } - - /** - * @return the cloudTop - */ - public String getCloudTop() { - return cloudTop; - } - - /** - * @param cloudTop to set - */ - public void setCloudTop(String cloudTop) { - this.cloudTop = cloudTop; - } - - /** - * @return the flightLevel - */ - public int getFlightLevel() { - return flightLevel; - } - - /** - * @param flightLevel to set - */ - public void setFlightLevel(int flightLevel) { - this.flightLevel = flightLevel; - } - - /** - * Get the record id. - * - * @return The recordId. If not set returns null. - */ - public Integer getRecordId() { - return recordId; - } - - /** - * Set the record id. - * @param record - */ - public void setRecordId(Integer recordId) { - this.recordId = recordId; - } - -} +/** + * ConvsigmetSection + * + * This java class defines the getters and setters for the + * convective sigmet section table. + * + * HISTORY + * + * Date Ticket# Engineer Description + * ------------ ---------- ----------- -------------------------- + * 03/2009 87/114 L. Lin Initial coding + * 07/2009 87/114 L. Lin Migration to TO11 + * 09/2011 Chin Chen changed to improve purge performance and + * removed xml serialization as well + * + * + * This code has been developed by the SIB for use in the AWIPS2 system. + */ + +package gov.noaa.nws.ncep.common.dataplugin.convsigmet; + +import java.io.Serializable; + +import java.util.Calendar; +import java.util.HashSet; +import java.util.Set; + +import javax.persistence.CascadeType; +import javax.persistence.Column; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; + +import javax.persistence.Entity; +import javax.persistence.FetchType; +import javax.persistence.JoinColumn; +import javax.persistence.OneToMany; +import javax.persistence.Table; +import org.hibernate.annotations.Index; +import com.raytheon.uf.common.serialization.ISerializableObject; +import com.raytheon.uf.common.serialization.annotations.DynamicSerialize; +import com.raytheon.uf.common.serialization.annotations.DynamicSerializeElement; +import gov.noaa.nws.ncep.common.tools.IDecoderConstantsN; + +@Entity +@Table(name="convsigmet_section") +@DynamicSerialize +public class ConvSigmetSection implements Serializable, ISerializableObject { + + private static final long serialVersionUID = 1L; + + @Id + @GeneratedValue + private Integer recordId = null; + + + // Class type such as: LINE, AREA, ISOL, CS, and OUTLOOK + @Column(length=8) + @DynamicSerializeElement + private String classType; + + // Sequence ID of a convective sigmet report + @Column(length=16) + @DynamicSerializeElement + private String sequenceID; + + // Start time of the report + @Column + @DynamicSerializeElement + private Calendar startTime; + + // End time of the report + @Column + @DynamicSerializeElement + private Calendar endTime; + + /* + * Intensity is DMSHG (weakening), DSIPTG (ending) + * INTSFYG (strengthening), DVLPG (beginning/growing) + */ + @Column(length=32) + @DynamicSerializeElement + private String intensity; + + // To where flight level from tops + @Column + @DynamicSerializeElement + private int flightLevel; + + // TOPS TO or TOPS ABV for flight level + @Column(length=16) + @DynamicSerializeElement + private String cloudTop; + + // Direction of weather report heads to + @Column + @DynamicSerializeElement + private int direction; + + // wind speed in knots + @Column + @DynamicSerializeElement + private int speed; + + // Distance is the Distance or Area diameter of the area or line + @Column + @DynamicSerializeElement + private int distance; + + // The information of a complete section + @Column(length=720) + @DynamicSerializeElement + private String segment; + + + /** + * Convsigmet location + */ + @DynamicSerializeElement + @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER) + @JoinColumn(name = "parentID", nullable = false) + @Index(name = "convSigmetLocation_parentid_idex") + private Set convSigmetLocation = new HashSet(); + + + /** + * No-Arg Convstructor + */ + public ConvSigmetSection() { + this.intensity = null; + this.cloudTop=null; + this.segment=null; + this.classType=null; + this.sequenceID=null; + + this.direction=IDecoderConstantsN.INTEGER_MISSING; + this.speed=IDecoderConstantsN.INTEGER_MISSING; + this.distance=IDecoderConstantsN.INTEGER_MISSING; + this.flightLevel=IDecoderConstantsN.INTEGER_MISSING; + } + + /** + * @return the serialVersionUID + */ + public static long getSerialVersionUID() { + return serialVersionUID; + } + + /** + * @return the sequenceID + */ + public String getSequenceID() { + return sequenceID; + + } + + /** + * @return the sequenceID + */ + public void setSequenceID(String sequenceID) { + this.sequenceID = sequenceID; + } + + /** + * @return the intensity + */ + public String getIntensity() { + return intensity; + } + + /** + * @param intensity to set + */ + public void setIntensity(String intensity) { + this.intensity = intensity; + } + + /** + * @return the direction + */ + public int getDirection() { + return direction; + } + + /** + * @param direction to set + */ + public void setDirection(int direction) { + this.direction = direction; + } + + /** + * @return the speed + */ + public int getSpeed() { + return speed; + } + + /** + * @param speed to set + */ + public void setSpeed(int speed) { + this.speed = speed; + } + + /** + * @return the distance + */ + public int getDistance() { + return distance; + } + + /** + * @param distance to set + */ + public void setDistance(int distance) { + this.distance = distance; + } + + /** + * @return the set of convective sigmet location + */ + public Set getConvSigmetLocation() { + return convSigmetLocation; + } + + /** + * @param convsigmet the location to set + */ + public void setConvSigmetLocation(Set convLocation) { + this.convSigmetLocation = convLocation; + } + + /** + * @param add conv Sigmet location to set + */ + public void addConvSigmetLocation(ConvSigmetLocation plocation){ + convSigmetLocation.add(plocation); + } + + + + /** + * @return the classType + */ + public String getClassType() { + return classType; + } + + /** + * @param classType to set + */ + public void setClassType(String classType) { + this.classType = classType; + } + + /** + * @return the section + */ + public String getSegment() { + return segment; + } + + /** + * @param segment to set + */ + public void setSegment(String segment) { + this.segment = segment; + } + + /** + * @return the startTime + */ + public Calendar getStartTime() { + return startTime; + } + + /** + * @param startTime to set + */ + public void setStartTime(Calendar startTime) { + this.startTime = startTime; + } + + /** + * @return the endTime + */ + public Calendar getEndTime() { + return endTime; + } + + /** + * @param endTIme to set + */ + public void setEndTime(Calendar endTime) { + this.endTime = endTime; + } + + /** + * @return the cloudTop + */ + public String getCloudTop() { + return cloudTop; + } + + /** + * @param cloudTop to set + */ + public void setCloudTop(String cloudTop) { + this.cloudTop = cloudTop; + } + + /** + * @return the flightLevel + */ + public int getFlightLevel() { + return flightLevel; + } + + /** + * @param flightLevel to set + */ + public void setFlightLevel(int flightLevel) { + this.flightLevel = flightLevel; + } + + /** + * Get the record id. + * + * @return The recordId. If not set returns null. + */ + public Integer getRecordId() { + return recordId; + } + + /** + * Set the record id. + * @param record + */ + public void setRecordId(Integer recordId) { + this.recordId = recordId; + } + +} diff --git a/ncep/gov.noaa.nws.ncep.common.dataplugin.convsigmet/src/gov/noaa/nws/ncep/common/dataplugin/convsigmet/package-info.java b/ncep/gov.noaa.nws.ncep.common.dataplugin.convsigmet/src/gov/noaa/nws/ncep/common/dataplugin/convsigmet/package-info.java index a50a714f00..f6e6ae41a7 100644 --- a/ncep/gov.noaa.nws.ncep.common.dataplugin.convsigmet/src/gov/noaa/nws/ncep/common/dataplugin/convsigmet/package-info.java +++ b/ncep/gov.noaa.nws.ncep.common.dataplugin.convsigmet/src/gov/noaa/nws/ncep/common/dataplugin/convsigmet/package-info.java @@ -1,4 +1,4 @@ -/** -* Contains table record for decoder plug-ins -*/ -package gov.noaa.nws.ncep.common.dataplugin.convsigmet; +/** +* Contains table record for decoder plug-ins +*/ +package gov.noaa.nws.ncep.common.dataplugin.convsigmet; diff --git a/ncep/gov.noaa.nws.ncep.common.dataplugin.ffg/gov.noaa.nws.ncep.common.dataplugin.ffg.ecl b/ncep/gov.noaa.nws.ncep.common.dataplugin.ffg/gov.noaa.nws.ncep.common.dataplugin.ffg.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/ncep/gov.noaa.nws.ncep.common.dataplugin.ffg/src/gov/noaa/nws/ncep/common/dataplugin/ffg/package-info.java b/ncep/gov.noaa.nws.ncep.common.dataplugin.ffg/src/gov/noaa/nws/ncep/common/dataplugin/ffg/package-info.java index 87ecb1c61d..bed1d1531f 100644 --- a/ncep/gov.noaa.nws.ncep.common.dataplugin.ffg/src/gov/noaa/nws/ncep/common/dataplugin/ffg/package-info.java +++ b/ncep/gov.noaa.nws.ncep.common.dataplugin.ffg/src/gov/noaa/nws/ncep/common/dataplugin/ffg/package-info.java @@ -1,4 +1,4 @@ -/** -* Contains table record for decoder plug-ins -*/ -package gov.noaa.nws.ncep.common.dataplugin.ffg; +/** +* Contains table record for decoder plug-ins +*/ +package gov.noaa.nws.ncep.common.dataplugin.ffg; diff --git a/ncep/gov.noaa.nws.ncep.common.dataplugin.idft/gov.noaa.nws.ncep.common.dataplugin.idft.ecl b/ncep/gov.noaa.nws.ncep.common.dataplugin.idft/gov.noaa.nws.ncep.common.dataplugin.idft.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/ncep/gov.noaa.nws.ncep.common.dataplugin.idft/src/gov/noaa/nws/ncep/common/dataplugin/idft/dao/IdftDao.java b/ncep/gov.noaa.nws.ncep.common.dataplugin.idft/src/gov/noaa/nws/ncep/common/dataplugin/idft/dao/IdftDao.java index 1f3ca5dd41..bb6d27b6f3 100644 --- a/ncep/gov.noaa.nws.ncep.common.dataplugin.idft/src/gov/noaa/nws/ncep/common/dataplugin/idft/dao/IdftDao.java +++ b/ncep/gov.noaa.nws.ncep.common.dataplugin.idft/src/gov/noaa/nws/ncep/common/dataplugin/idft/dao/IdftDao.java @@ -12,64 +12,64 @@ * * @author fjyen * @version 1.0 - **/ -package gov.noaa.nws.ncep.common.dataplugin.idft.dao; - -import java.util.List; - -import gov.noaa.nws.ncep.common.dataplugin.idft.IdftRecord; + **/ +package gov.noaa.nws.ncep.common.dataplugin.idft.dao; + +import java.util.List; + +import gov.noaa.nws.ncep.common.dataplugin.idft.IdftRecord; import gov.noaa.nws.ncep.edex.common.dao.NcepDefaultPluginDao; -import com.raytheon.uf.common.dataplugin.PluginException; +import com.raytheon.uf.common.dataplugin.PluginException; import com.raytheon.uf.edex.database.DataAccessLayerException; - -public class IdftDao extends NcepDefaultPluginDao { - - - /** - * Creates a new ReccoDao - * @throws PluginException - */ - public IdftDao(String pluginName) throws PluginException { - super(pluginName); - } - - /** - * Retrieves a idft report using the datauri . - * - * @param dataURI - * The dataURI to match against. - * @return The report record if it exists. - */ - public IdftRecord queryByDataURI(String dataURI) { - IdftRecord report = null; - List obs = null; - try { - obs = queryBySingleCriteria("dataURI", dataURI); - } catch (DataAccessLayerException e) { - e.printStackTrace(); - } - if((obs != null)&&(obs.size() > 0)) { - report = (IdftRecord) obs.get(0); - } - return report; - } - - /** - * Queries for to determine if a given data uri exists on the IDFT table. - * - * @param dataUri - * The DataURI to find. - * @return An array of objects. If not null, there should only be a single - * element. - */ - public Object[] queryDataUriColumn(final String dataUri) { - - String sql = "select datauri from awips.idft where datauri='" - + dataUri + "';"; - - Object[] results = executeSQLQuery(sql); - - return results; - } -} + +public class IdftDao extends NcepDefaultPluginDao { + + + /** + * Creates a new ReccoDao + * @throws PluginException + */ + public IdftDao(String pluginName) throws PluginException { + super(pluginName); + } + + /** + * Retrieves a idft report using the datauri . + * + * @param dataURI + * The dataURI to match against. + * @return The report record if it exists. + */ + public IdftRecord queryByDataURI(String dataURI) { + IdftRecord report = null; + List obs = null; + try { + obs = queryBySingleCriteria("dataURI", dataURI); + } catch (DataAccessLayerException e) { + e.printStackTrace(); + } + if((obs != null)&&(obs.size() > 0)) { + report = (IdftRecord) obs.get(0); + } + return report; + } + + /** + * Queries for to determine if a given data uri exists on the IDFT table. + * + * @param dataUri + * The DataURI to find. + * @return An array of objects. If not null, there should only be a single + * element. + */ + public Object[] queryDataUriColumn(final String dataUri) { + + String sql = "select datauri from awips.idft where datauri='" + + dataUri + "';"; + + Object[] results = executeSQLQuery(sql); + + return results; + } +} diff --git a/ncep/gov.noaa.nws.ncep.common.dataplugin.intlsigmet/gov.noaa.nws.ncep.common.dataplugin.intlsigmet.ecl b/ncep/gov.noaa.nws.ncep.common.dataplugin.intlsigmet/gov.noaa.nws.ncep.common.dataplugin.intlsigmet.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/ncep/gov.noaa.nws.ncep.common.dataplugin.intlsigmet/src/gov/noaa/nws/ncep/common/dataplugin/intlsigmet/IntlSigmetLocation.java b/ncep/gov.noaa.nws.ncep.common.dataplugin.intlsigmet/src/gov/noaa/nws/ncep/common/dataplugin/intlsigmet/IntlSigmetLocation.java index 8d41fb86ee..4e26497645 100644 --- a/ncep/gov.noaa.nws.ncep.common.dataplugin.intlsigmet/src/gov/noaa/nws/ncep/common/dataplugin/intlsigmet/IntlSigmetLocation.java +++ b/ncep/gov.noaa.nws.ncep.common.dataplugin.intlsigmet/src/gov/noaa/nws/ncep/common/dataplugin/intlsigmet/IntlSigmetLocation.java @@ -1,179 +1,179 @@ -/** - * IntlsigmetLocation - * - * This java class defines the getters and setters for the - * international sigmet location table. - * - * HISTORY - * - * Date Ticket# Engineer Description - * ------------ ---------- ----------- -------------------------- - * 05/2009 113 L. Lin Initial creation - * 07/2009 113 L. Lin Migration to TO11 - * 09/2009 113 L. Lin modify lat/lon float to latitude/longitude double - * 09/2011 Chin Chen changed to improve purge performance and - * removed xml serialization as well - * - * - * This code has been developed by the SIB for use in the AWIPS2 system. - */ - -package gov.noaa.nws.ncep.common.dataplugin.intlsigmet; - -import java.io.Serializable; - -import javax.persistence.GeneratedValue; -import javax.persistence.Id; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.Table; -import com.raytheon.uf.common.serialization.ISerializableObject; -import com.raytheon.uf.common.serialization.annotations.DynamicSerialize; -import com.raytheon.uf.common.serialization.annotations.DynamicSerializeElement; -import gov.noaa.nws.ncep.common.tools.IDecoderConstantsN; - -@Entity -@Table(name="intlsigmet_location") -@DynamicSerialize -public class IntlSigmetLocation implements Serializable, ISerializableObject { - - private static final long serialVersionUID = 1L; - - @Id - @GeneratedValue - private Integer recordId = null; - - - // Collection of locations - @Column(length=480) - @DynamicSerializeElement - private String locationLine; - - // Each location of an international sigmet forecast area - @Column(length=48) - @DynamicSerializeElement - private String locationName; - - // Each latitude of an international sigmet forecast area - @Column - @DynamicSerializeElement - private double latitude; - - // Each longitude of an international sigmet forecast area - @Column - @DynamicSerializeElement - private double longitude; - - // Index for the order of a complete location set - @Column - @DynamicSerializeElement - private Integer index; - - /** - * No-Arg Convstructor. - */ - public IntlSigmetLocation() { - this.locationLine=null; - this.locationName=null; - this.latitude=IDecoderConstantsN.FLOAT_MISSING; - this.longitude=IDecoderConstantsN.FLOAT_MISSING; - this.index=IDecoderConstantsN.INTEGER_MISSING; - } - - - /** - * @return the serialVersionUID - */ - public static long getSerialVersionUID() { - return serialVersionUID; - } - - - /** - * @return the index - */ - public Integer getIndex() { - return index; - } - - /** - * @param index to set - */ - public void setIndex(Integer index) { - this.index = index; - } - - /** - * @return the locationLine - */ - public String getLocationLine() { - return locationLine; - } - - /** - * @param locationLine to set - */ - public void setLocationLine(String locationLine) { - this.locationLine = locationLine; - } - - /** - * @return the location - */ - public String getLocationName() { - return locationName; - } - - /** - * @param location to set - */ - public void setLocationName(String location) { - this.locationName = location; - } - - /** - * Get the record id. - * - * @return The recordId. If not set returns null. - */ - public Integer getRecordId() { - return recordId; - } - - /** - * Set the record id. - * @param record - */ - public void setRecordId(Integer recordId) { - this.recordId = recordId; - } - - /** - * @return the latitude - */ - public double getLatitude() { - return latitude; - } - - /** - * @param latitude to set - */ - public void setLatitude(double latitude) { - this.latitude = latitude; - } - - /** - * @return the longitude - */ - public double getLongitude() { - return longitude; - } - - /** - * @param longitude to set - */ - public void setLongitude(double longitude) { - this.longitude = longitude; - } - -} +/** + * IntlsigmetLocation + * + * This java class defines the getters and setters for the + * international sigmet location table. + * + * HISTORY + * + * Date Ticket# Engineer Description + * ------------ ---------- ----------- -------------------------- + * 05/2009 113 L. Lin Initial creation + * 07/2009 113 L. Lin Migration to TO11 + * 09/2009 113 L. Lin modify lat/lon float to latitude/longitude double + * 09/2011 Chin Chen changed to improve purge performance and + * removed xml serialization as well + * + * + * This code has been developed by the SIB for use in the AWIPS2 system. + */ + +package gov.noaa.nws.ncep.common.dataplugin.intlsigmet; + +import java.io.Serializable; + +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Table; +import com.raytheon.uf.common.serialization.ISerializableObject; +import com.raytheon.uf.common.serialization.annotations.DynamicSerialize; +import com.raytheon.uf.common.serialization.annotations.DynamicSerializeElement; +import gov.noaa.nws.ncep.common.tools.IDecoderConstantsN; + +@Entity +@Table(name="intlsigmet_location") +@DynamicSerialize +public class IntlSigmetLocation implements Serializable, ISerializableObject { + + private static final long serialVersionUID = 1L; + + @Id + @GeneratedValue + private Integer recordId = null; + + + // Collection of locations + @Column(length=480) + @DynamicSerializeElement + private String locationLine; + + // Each location of an international sigmet forecast area + @Column(length=48) + @DynamicSerializeElement + private String locationName; + + // Each latitude of an international sigmet forecast area + @Column + @DynamicSerializeElement + private double latitude; + + // Each longitude of an international sigmet forecast area + @Column + @DynamicSerializeElement + private double longitude; + + // Index for the order of a complete location set + @Column + @DynamicSerializeElement + private Integer index; + + /** + * No-Arg Convstructor. + */ + public IntlSigmetLocation() { + this.locationLine=null; + this.locationName=null; + this.latitude=IDecoderConstantsN.FLOAT_MISSING; + this.longitude=IDecoderConstantsN.FLOAT_MISSING; + this.index=IDecoderConstantsN.INTEGER_MISSING; + } + + + /** + * @return the serialVersionUID + */ + public static long getSerialVersionUID() { + return serialVersionUID; + } + + + /** + * @return the index + */ + public Integer getIndex() { + return index; + } + + /** + * @param index to set + */ + public void setIndex(Integer index) { + this.index = index; + } + + /** + * @return the locationLine + */ + public String getLocationLine() { + return locationLine; + } + + /** + * @param locationLine to set + */ + public void setLocationLine(String locationLine) { + this.locationLine = locationLine; + } + + /** + * @return the location + */ + public String getLocationName() { + return locationName; + } + + /** + * @param location to set + */ + public void setLocationName(String location) { + this.locationName = location; + } + + /** + * Get the record id. + * + * @return The recordId. If not set returns null. + */ + public Integer getRecordId() { + return recordId; + } + + /** + * Set the record id. + * @param record + */ + public void setRecordId(Integer recordId) { + this.recordId = recordId; + } + + /** + * @return the latitude + */ + public double getLatitude() { + return latitude; + } + + /** + * @param latitude to set + */ + public void setLatitude(double latitude) { + this.latitude = latitude; + } + + /** + * @return the longitude + */ + public double getLongitude() { + return longitude; + } + + /** + * @param longitude to set + */ + public void setLongitude(double longitude) { + this.longitude = longitude; + } + +} diff --git a/ncep/gov.noaa.nws.ncep.common.dataplugin.intlsigmet/src/gov/noaa/nws/ncep/common/dataplugin/intlsigmet/IntlSigmetRecord.java b/ncep/gov.noaa.nws.ncep.common.dataplugin.intlsigmet/src/gov/noaa/nws/ncep/common/dataplugin/intlsigmet/IntlSigmetRecord.java index 96ce811903..ef56c04545 100644 --- a/ncep/gov.noaa.nws.ncep.common.dataplugin.intlsigmet/src/gov/noaa/nws/ncep/common/dataplugin/intlsigmet/IntlSigmetRecord.java +++ b/ncep/gov.noaa.nws.ncep.common.dataplugin.intlsigmet/src/gov/noaa/nws/ncep/common/dataplugin/intlsigmet/IntlSigmetRecord.java @@ -1,558 +1,558 @@ -/** - * IntlsigmetRecord - * - * This java class performs the mapping to the database table for ITNLSIGMET - * - * HISTORY - * - * This code has been developed by the SIB for use in the AWIPS2 system. - * Date Ticket# Engineer Description - * ------------ ---------- ----------- -------------------------- - * 06/2009 113 L. Lin Initial coding - * 07/2009 113 L. Lin Migration to TO11 - * 05/2010 113 L. Lin Migration to TO11DR11 - * 09/2011 Chin Chen changed to improve purge performance and - * removed xml serialization as well - * - * - * This code has been developed by the SIB for use in the AWIPS2 system. - */ - -package gov.noaa.nws.ncep.common.dataplugin.intlsigmet; - -import java.util.Calendar; -import java.util.HashSet; -import java.util.Set; -import com.raytheon.uf.common.dataplugin.PluginDataObject; -import com.raytheon.uf.common.dataplugin.IDecoderGettable; -import gov.noaa.nws.ncep.common.tools.IDecoderConstantsN; - -import javax.persistence.CascadeType; -import javax.persistence.Column; - -import javax.persistence.Entity; -import javax.persistence.FetchType; -import javax.persistence.JoinColumn; -import javax.persistence.OneToMany; -import javax.persistence.Table; -import javax.persistence.UniqueConstraint; - -import org.hibernate.annotations.Index; -import com.raytheon.uf.common.dataplugin.annotations.DataURI; -import com.raytheon.uf.common.serialization.annotations.DynamicSerialize; -import com.raytheon.uf.common.serialization.annotations.DynamicSerializeElement; - -@Entity -@Table(name = "intlsigmet", uniqueConstraints = { @UniqueConstraint(columnNames = { "dataURI" }) }) -@DynamicSerialize - - -public class IntlSigmetRecord extends PluginDataObject{ - - /** - * - */ - private static final long serialVersionUID = 1L; - - // reportType is "international sigmet". - @Column(length=32) - @DataURI(position=1) - @DynamicSerializeElement - private String reportType; - - // hazardType is weather phenomena. - @Column(length=48) - @DataURI(position=2) - @DynamicSerializeElement - private String hazardType; - - // WMO header - @Column(length=32) - @DynamicSerializeElement - private String wmoHeader; - - // The issue office where the report from - @Column(length=32) - @DynamicSerializeElement - private String issueOffice; - - // Issue time of the report - @Column - @DynamicSerializeElement - private Calendar issueTime; - - // Start time of the report - @Column - @DynamicSerializeElement - private Calendar startTime; - - // End time of the report - @Column - @DynamicSerializeElement - private Calendar endTime; - - // The message ID - @Column(length=16) - @DataURI(position=3) - @DynamicSerializeElement - private String messageID; - - // The sequence number - @Column(length=8) - @DataURI(position=4) - @DynamicSerializeElement - private String sequenceNumber; - - // The air traffic services unit - @Column(length=16) - @DynamicSerializeElement - private String atsu; - - // The location indicator of the meteorological watch office originator - @Column(length=16) - @DynamicSerializeElement - private String omwo; - - // Flight level 1 - @Column - @DynamicSerializeElement - private Integer flightlevel1; - - // Flight level 2 - @Column - @DynamicSerializeElement - private Integer flightlevel2; - - // Distance - @Column - @DynamicSerializeElement - private Integer distance; - - // Direction - @Column(length=16) - @DynamicSerializeElement - private String direction; - - // Speed - @Column - @DynamicSerializeElement - private Integer speed; - - /* - * the name of the storm, where applicable, or location of the - * volcano, where applicable, or the word, OTHER, for reports - * not from CONUS, Hawaii, Guam, Japan, UK, Tahiti, and Cuba - - */ - @Column(length=48) - @DynamicSerializeElement - private String nameLocation; - - /* - * remarks such as: correction, remarks, ...etc. - */ - @Column(length=32) - @DynamicSerializeElement - private String remarks; - - // The changes in intensity; using as "INTSF", "WKN", or "NC". - @Column(length=16) - @DynamicSerializeElement - private String intensity; - - // The polygon indicator as "WI", "WTN", "EITHER SIDE", or "E OF". - @Column(length=16) - @DynamicSerializeElement - private String polygonExtent; - - // The entire report - @Column(length=5000) - @DynamicSerializeElement - private String bullMessage; - - - /** - * Intlsigmet location - */ - @DynamicSerializeElement - @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER) - @JoinColumn(name = "parentID", nullable = false) - @Index(name = "intlSigmetLocation_parentid_idex") - private Set intlSigmetLocation = new HashSet(); - - - /** - * Default Convstructor - */ - public IntlSigmetRecord() { - this.issueOffice=null; - this.wmoHeader=null; - this.bullMessage=null; - this.hazardType=null; - this.messageID=null; - this.reportType="INTLSIGMET"; - this.sequenceNumber=null; - this.atsu=null; - this.omwo=null; - this.nameLocation=null; - this.intensity=null; - this.remarks=null; - this.flightlevel1=IDecoderConstantsN.INTEGER_MISSING; - this.flightlevel2=IDecoderConstantsN.INTEGER_MISSING; - this.direction=null; - this.distance=IDecoderConstantsN.INTEGER_MISSING; - this.speed=IDecoderConstantsN.INTEGER_MISSING; - this.polygonExtent=null; - } - - /** - * Convstructs a consigmet record from a dataURI - * - * @param uri The dataURI - */ - public IntlSigmetRecord(String uri) { - super(uri); - } - - - @Override - public IDecoderGettable getDecoderGettable() { - // TODO Auto-generated method stub - return null; - } - - /** - * @return the issueOffice - */ - public String getIssueOffice(){ - return issueOffice; - } - - /** - * @param issueOffice to set - */ - public void setIssueOffice(String issueOffice){ - this.issueOffice=issueOffice; - } - - /** - * @return the wmoHeader - */ - public String getWmoHeader(){ - return wmoHeader; - } - - /** - * @param wnoHeader to set - */ - public void setWmoHeader(String wmoHeader){ - this.wmoHeader=wmoHeader; - } - - /** - * @return the issueTime - */ - public Calendar getIssueTime(){ - return issueTime; - } - - /** - * @param issueTime to set - */ - public void setIssueTime(Calendar issueTime){ - this.issueTime=issueTime; - } - - /** - * @return the reportType - */ - public String getReportType() { - return reportType; - } - - /** - * @param reportType to set - */ - public void setReportType(String reportType) { - this.reportType = reportType; - } - - /** - * @return the bullMessage - */ - public String getBullMessage() { - return bullMessage; - } - - /** - * @param bullMessage to set - */ - public void setBullMessage(String bullMessage) { - this.bullMessage = bullMessage; - } - - /** - * @return the set of hazard - */ - public String getHazardType() { - return hazardType; - } - - /** - * @param hazardType to set - */ - public void setHazardType(String hazardType) { - this.hazardType = hazardType; - } - - /** - * @return the startTime - */ - public Calendar getStartTime() { - return startTime; - } - - /** - * @param startTime to set - */ - public void setStartTime(Calendar startTime) { - this.startTime = startTime; - } - - /** - * @return the endTime - */ - public Calendar getEndTime() { - return endTime; - } - - /** - * @param endTime to set - */ - public void setEndTime(Calendar endTime) { - this.endTime = endTime; - } - - public String getMessageID() { - return messageID; - } - - /** - * @param messageID to set - */ - public void setMessageID(String messageID) { - this.messageID = messageID; - } - - /** - * @return the sequenceNumber - */ - public String getSequenceNumber() { - return sequenceNumber; - } - - /** - * @param sequenceNumber to set - */ - public void setSequenceNumber(String sequenceNumber) { - this.sequenceNumber = sequenceNumber; - } - - /** - * @return the atsu - */ - public String getAtsu() { - return atsu; - } - - /** - * @param atsu to set - */ - public void setAtsu(String atsu) { - this.atsu = atsu; - } - - /** - * @return the omwo - */ - public String getOmwo() { - return omwo; - } - - /** - * @param omwo to set - */ - public void setOmwo(String omwo) { - this.omwo = omwo; - } - - /** - * @return the flightLevel1 - */ - public Integer getFlightlevel1() { - return flightlevel1; - } - - /** - * @param flightLevel1 to set - */ - public void setFlightlevel1(Integer flightlevel1) { - this.flightlevel1 = flightlevel1; - } - - /** - * @return flightLevel2 - */ - public Integer getFlightlevel2() { - return flightlevel2; - } - - /** - * @param flightLevel2 to set - */ - public void setFlightlevel2(Integer flightlevel2) { - this.flightlevel2 = flightlevel2; - } - - /** - * @return distacne - */ - public Integer getDistance() { - return distance; - } - - /** - * @param distance to set - */ - public void setDistance(Integer distance) { - this.distance = distance; - } - - /** - * @return direction - */ - public String getDirection() { - return direction; - } - - /** - * @param direction to set - */ - public void setDirection(String direction) { - this.direction = direction; - } - - /** - * @return the speed - */ - public Integer getSpeed() { - return speed; - } - - /** - * @param speed to set - */ - public void setSpeed(Integer speed) { - this.speed = speed; - } - - /** - * @return the nameLocation - */ - public String getNameLocation() { - return nameLocation; - } - - /** - * @param nameLocation to set - */ - public void setNameLocation(String nameLocation) { - this.nameLocation = nameLocation; - } - - /** - * @return the remarks - */ - public String getRemarks() { - return remarks; - } - - /** - * @param remarks to set - */ - public void setRemarks(String remarks) { - this.remarks = remarks; - } - - /** - * @return the intensity - */ - public String getIntensity() { - return intensity; - } - - /** - * @param intensity to set - */ - public void setIntensity(String intensity) { - this.intensity = intensity; - } - - /** - * @return the polygonExtent - */ - public String getPolygonExtent() { - return polygonExtent; - } - - /** - * @param polygonExtent to set - */ - public void setPolygonExtent(String polygonExtent) { - this.polygonExtent = polygonExtent; - } - - /** - * @return the intlSigmetLocation - */ - public Set getIntlSigmetLocation() { - return intlSigmetLocation; - } - - /** - * @param intlSigmetLocation to set - */ - public void setIntlSigmetLocation(Set intlSigmetLocation) { - this.intlSigmetLocation = intlSigmetLocation; - } - - /** - * @return the serialVersionUID - */ - public static long getSerialVersionUID() { - return serialVersionUID; - } - - /** - * @param add international sigmet Location to set - */ - public void addIntlSigmetLocation(IntlSigmetLocation psection){ - intlSigmetLocation.add(psection); - - } - - /** - * Override existing set method to modify any - * classes that use the dataURI as a foreign key - */ - @Override - public void setIdentifier(Object dataURI) - { - - this.identifier = dataURI; - - - - } - -} +/** + * IntlsigmetRecord + * + * This java class performs the mapping to the database table for ITNLSIGMET + * + * HISTORY + * + * This code has been developed by the SIB for use in the AWIPS2 system. + * Date Ticket# Engineer Description + * ------------ ---------- ----------- -------------------------- + * 06/2009 113 L. Lin Initial coding + * 07/2009 113 L. Lin Migration to TO11 + * 05/2010 113 L. Lin Migration to TO11DR11 + * 09/2011 Chin Chen changed to improve purge performance and + * removed xml serialization as well + * + * + * This code has been developed by the SIB for use in the AWIPS2 system. + */ + +package gov.noaa.nws.ncep.common.dataplugin.intlsigmet; + +import java.util.Calendar; +import java.util.HashSet; +import java.util.Set; +import com.raytheon.uf.common.dataplugin.PluginDataObject; +import com.raytheon.uf.common.dataplugin.IDecoderGettable; +import gov.noaa.nws.ncep.common.tools.IDecoderConstantsN; + +import javax.persistence.CascadeType; +import javax.persistence.Column; + +import javax.persistence.Entity; +import javax.persistence.FetchType; +import javax.persistence.JoinColumn; +import javax.persistence.OneToMany; +import javax.persistence.Table; +import javax.persistence.UniqueConstraint; + +import org.hibernate.annotations.Index; +import com.raytheon.uf.common.dataplugin.annotations.DataURI; +import com.raytheon.uf.common.serialization.annotations.DynamicSerialize; +import com.raytheon.uf.common.serialization.annotations.DynamicSerializeElement; + +@Entity +@Table(name = "intlsigmet", uniqueConstraints = { @UniqueConstraint(columnNames = { "dataURI" }) }) +@DynamicSerialize + + +public class IntlSigmetRecord extends PluginDataObject{ + + /** + * + */ + private static final long serialVersionUID = 1L; + + // reportType is "international sigmet". + @Column(length=32) + @DataURI(position=1) + @DynamicSerializeElement + private String reportType; + + // hazardType is weather phenomena. + @Column(length=48) + @DataURI(position=2) + @DynamicSerializeElement + private String hazardType; + + // WMO header + @Column(length=32) + @DynamicSerializeElement + private String wmoHeader; + + // The issue office where the report from + @Column(length=32) + @DynamicSerializeElement + private String issueOffice; + + // Issue time of the report + @Column + @DynamicSerializeElement + private Calendar issueTime; + + // Start time of the report + @Column + @DynamicSerializeElement + private Calendar startTime; + + // End time of the report + @Column + @DynamicSerializeElement + private Calendar endTime; + + // The message ID + @Column(length=16) + @DataURI(position=3) + @DynamicSerializeElement + private String messageID; + + // The sequence number + @Column(length=8) + @DataURI(position=4) + @DynamicSerializeElement + private String sequenceNumber; + + // The air traffic services unit + @Column(length=16) + @DynamicSerializeElement + private String atsu; + + // The location indicator of the meteorological watch office originator + @Column(length=16) + @DynamicSerializeElement + private String omwo; + + // Flight level 1 + @Column + @DynamicSerializeElement + private Integer flightlevel1; + + // Flight level 2 + @Column + @DynamicSerializeElement + private Integer flightlevel2; + + // Distance + @Column + @DynamicSerializeElement + private Integer distance; + + // Direction + @Column(length=16) + @DynamicSerializeElement + private String direction; + + // Speed + @Column + @DynamicSerializeElement + private Integer speed; + + /* + * the name of the storm, where applicable, or location of the + * volcano, where applicable, or the word, OTHER, for reports + * not from CONUS, Hawaii, Guam, Japan, UK, Tahiti, and Cuba + + */ + @Column(length=48) + @DynamicSerializeElement + private String nameLocation; + + /* + * remarks such as: correction, remarks, ...etc. + */ + @Column(length=32) + @DynamicSerializeElement + private String remarks; + + // The changes in intensity; using as "INTSF", "WKN", or "NC". + @Column(length=16) + @DynamicSerializeElement + private String intensity; + + // The polygon indicator as "WI", "WTN", "EITHER SIDE", or "E OF". + @Column(length=16) + @DynamicSerializeElement + private String polygonExtent; + + // The entire report + @Column(length=5000) + @DynamicSerializeElement + private String bullMessage; + + + /** + * Intlsigmet location + */ + @DynamicSerializeElement + @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER) + @JoinColumn(name = "parentID", nullable = false) + @Index(name = "intlSigmetLocation_parentid_idex") + private Set intlSigmetLocation = new HashSet(); + + + /** + * Default Convstructor + */ + public IntlSigmetRecord() { + this.issueOffice=null; + this.wmoHeader=null; + this.bullMessage=null; + this.hazardType=null; + this.messageID=null; + this.reportType="INTLSIGMET"; + this.sequenceNumber=null; + this.atsu=null; + this.omwo=null; + this.nameLocation=null; + this.intensity=null; + this.remarks=null; + this.flightlevel1=IDecoderConstantsN.INTEGER_MISSING; + this.flightlevel2=IDecoderConstantsN.INTEGER_MISSING; + this.direction=null; + this.distance=IDecoderConstantsN.INTEGER_MISSING; + this.speed=IDecoderConstantsN.INTEGER_MISSING; + this.polygonExtent=null; + } + + /** + * Convstructs a consigmet record from a dataURI + * + * @param uri The dataURI + */ + public IntlSigmetRecord(String uri) { + super(uri); + } + + + @Override + public IDecoderGettable getDecoderGettable() { + // TODO Auto-generated method stub + return null; + } + + /** + * @return the issueOffice + */ + public String getIssueOffice(){ + return issueOffice; + } + + /** + * @param issueOffice to set + */ + public void setIssueOffice(String issueOffice){ + this.issueOffice=issueOffice; + } + + /** + * @return the wmoHeader + */ + public String getWmoHeader(){ + return wmoHeader; + } + + /** + * @param wnoHeader to set + */ + public void setWmoHeader(String wmoHeader){ + this.wmoHeader=wmoHeader; + } + + /** + * @return the issueTime + */ + public Calendar getIssueTime(){ + return issueTime; + } + + /** + * @param issueTime to set + */ + public void setIssueTime(Calendar issueTime){ + this.issueTime=issueTime; + } + + /** + * @return the reportType + */ + public String getReportType() { + return reportType; + } + + /** + * @param reportType to set + */ + public void setReportType(String reportType) { + this.reportType = reportType; + } + + /** + * @return the bullMessage + */ + public String getBullMessage() { + return bullMessage; + } + + /** + * @param bullMessage to set + */ + public void setBullMessage(String bullMessage) { + this.bullMessage = bullMessage; + } + + /** + * @return the set of hazard + */ + public String getHazardType() { + return hazardType; + } + + /** + * @param hazardType to set + */ + public void setHazardType(String hazardType) { + this.hazardType = hazardType; + } + + /** + * @return the startTime + */ + public Calendar getStartTime() { + return startTime; + } + + /** + * @param startTime to set + */ + public void setStartTime(Calendar startTime) { + this.startTime = startTime; + } + + /** + * @return the endTime + */ + public Calendar getEndTime() { + return endTime; + } + + /** + * @param endTime to set + */ + public void setEndTime(Calendar endTime) { + this.endTime = endTime; + } + + public String getMessageID() { + return messageID; + } + + /** + * @param messageID to set + */ + public void setMessageID(String messageID) { + this.messageID = messageID; + } + + /** + * @return the sequenceNumber + */ + public String getSequenceNumber() { + return sequenceNumber; + } + + /** + * @param sequenceNumber to set + */ + public void setSequenceNumber(String sequenceNumber) { + this.sequenceNumber = sequenceNumber; + } + + /** + * @return the atsu + */ + public String getAtsu() { + return atsu; + } + + /** + * @param atsu to set + */ + public void setAtsu(String atsu) { + this.atsu = atsu; + } + + /** + * @return the omwo + */ + public String getOmwo() { + return omwo; + } + + /** + * @param omwo to set + */ + public void setOmwo(String omwo) { + this.omwo = omwo; + } + + /** + * @return the flightLevel1 + */ + public Integer getFlightlevel1() { + return flightlevel1; + } + + /** + * @param flightLevel1 to set + */ + public void setFlightlevel1(Integer flightlevel1) { + this.flightlevel1 = flightlevel1; + } + + /** + * @return flightLevel2 + */ + public Integer getFlightlevel2() { + return flightlevel2; + } + + /** + * @param flightLevel2 to set + */ + public void setFlightlevel2(Integer flightlevel2) { + this.flightlevel2 = flightlevel2; + } + + /** + * @return distacne + */ + public Integer getDistance() { + return distance; + } + + /** + * @param distance to set + */ + public void setDistance(Integer distance) { + this.distance = distance; + } + + /** + * @return direction + */ + public String getDirection() { + return direction; + } + + /** + * @param direction to set + */ + public void setDirection(String direction) { + this.direction = direction; + } + + /** + * @return the speed + */ + public Integer getSpeed() { + return speed; + } + + /** + * @param speed to set + */ + public void setSpeed(Integer speed) { + this.speed = speed; + } + + /** + * @return the nameLocation + */ + public String getNameLocation() { + return nameLocation; + } + + /** + * @param nameLocation to set + */ + public void setNameLocation(String nameLocation) { + this.nameLocation = nameLocation; + } + + /** + * @return the remarks + */ + public String getRemarks() { + return remarks; + } + + /** + * @param remarks to set + */ + public void setRemarks(String remarks) { + this.remarks = remarks; + } + + /** + * @return the intensity + */ + public String getIntensity() { + return intensity; + } + + /** + * @param intensity to set + */ + public void setIntensity(String intensity) { + this.intensity = intensity; + } + + /** + * @return the polygonExtent + */ + public String getPolygonExtent() { + return polygonExtent; + } + + /** + * @param polygonExtent to set + */ + public void setPolygonExtent(String polygonExtent) { + this.polygonExtent = polygonExtent; + } + + /** + * @return the intlSigmetLocation + */ + public Set getIntlSigmetLocation() { + return intlSigmetLocation; + } + + /** + * @param intlSigmetLocation to set + */ + public void setIntlSigmetLocation(Set intlSigmetLocation) { + this.intlSigmetLocation = intlSigmetLocation; + } + + /** + * @return the serialVersionUID + */ + public static long getSerialVersionUID() { + return serialVersionUID; + } + + /** + * @param add international sigmet Location to set + */ + public void addIntlSigmetLocation(IntlSigmetLocation psection){ + intlSigmetLocation.add(psection); + + } + + /** + * Override existing set method to modify any + * classes that use the dataURI as a foreign key + */ + @Override + public void setIdentifier(Object dataURI) + { + + this.identifier = dataURI; + + + + } + +} diff --git a/ncep/gov.noaa.nws.ncep.common.dataplugin.intlsigmet/src/gov/noaa/nws/ncep/common/dataplugin/intlsigmet/package-info.java b/ncep/gov.noaa.nws.ncep.common.dataplugin.intlsigmet/src/gov/noaa/nws/ncep/common/dataplugin/intlsigmet/package-info.java index 2062041916..109d80eeaf 100644 --- a/ncep/gov.noaa.nws.ncep.common.dataplugin.intlsigmet/src/gov/noaa/nws/ncep/common/dataplugin/intlsigmet/package-info.java +++ b/ncep/gov.noaa.nws.ncep.common.dataplugin.intlsigmet/src/gov/noaa/nws/ncep/common/dataplugin/intlsigmet/package-info.java @@ -1,4 +1,4 @@ -/** -* Contains table record for decoder plug-ins -*/ -package gov.noaa.nws.ncep.common.dataplugin.intlsigmet; +/** +* Contains table record for decoder plug-ins +*/ +package gov.noaa.nws.ncep.common.dataplugin.intlsigmet; diff --git a/ncep/gov.noaa.nws.ncep.common.dataplugin.mcidas/gov.noaa.nws.ncep.common.dataplugin.mcidas.ecl b/ncep/gov.noaa.nws.ncep.common.dataplugin.mcidas/gov.noaa.nws.ncep.common.dataplugin.mcidas.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/ncep/gov.noaa.nws.ncep.common.dataplugin.mcidas/src/gov/noaa/nws/ncep/common/dataplugin/mcidas/McidasRecord.java b/ncep/gov.noaa.nws.ncep.common.dataplugin.mcidas/src/gov/noaa/nws/ncep/common/dataplugin/mcidas/McidasRecord.java index 67ba6ebd83..c18ab15b11 100644 --- a/ncep/gov.noaa.nws.ncep.common.dataplugin.mcidas/src/gov/noaa/nws/ncep/common/dataplugin/mcidas/McidasRecord.java +++ b/ncep/gov.noaa.nws.ncep.common.dataplugin.mcidas/src/gov/noaa/nws/ncep/common/dataplugin/mcidas/McidasRecord.java @@ -19,53 +19,53 @@ * @version 1 */ -package gov.noaa.nws.ncep.common.dataplugin.mcidas; - -import java.util.Calendar; +package gov.noaa.nws.ncep.common.dataplugin.mcidas; + +import java.util.Calendar; import java.util.Date; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.ManyToOne; -import javax.persistence.PrimaryKeyJoinColumn; -import javax.persistence.Table; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.ManyToOne; +import javax.persistence.PrimaryKeyJoinColumn; +import javax.persistence.Table; import javax.persistence.Transient; -import javax.persistence.UniqueConstraint; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlAttribute; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; +import javax.persistence.UniqueConstraint; +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlAttribute; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; import org.hibernate.annotations.Cache; import org.hibernate.annotations.CacheConcurrencyStrategy; -import com.raytheon.uf.common.dataplugin.IDecoderGettable; -import com.raytheon.uf.common.dataplugin.annotations.DataURI; -import com.raytheon.uf.common.dataplugin.persist.IPersistable; -import com.raytheon.uf.common.dataplugin.persist.PersistablePluginDataObject; +import com.raytheon.uf.common.dataplugin.IDecoderGettable; +import com.raytheon.uf.common.dataplugin.annotations.DataURI; +import com.raytheon.uf.common.dataplugin.persist.IPersistable; +import com.raytheon.uf.common.dataplugin.persist.PersistablePluginDataObject; import com.raytheon.uf.common.geospatial.ISpatialEnabled; -import com.raytheon.uf.common.serialization.annotations.DynamicSerialize; +import com.raytheon.uf.common.serialization.annotations.DynamicSerialize; import com.raytheon.uf.common.serialization.annotations.DynamicSerializeElement; import gov.noaa.nws.ncep.common.dataplugin.mcidas.McidasMapCoverage; - -@Entity + +@Entity @Table(name = "mcidas", uniqueConstraints = { @UniqueConstraint(columnNames = { "dataURI" }) }) -@Cache(usage = CacheConcurrencyStrategy.TRANSACTIONAL) -@XmlRootElement -@XmlAccessorType(XmlAccessType.NONE) -@DynamicSerialize -public class McidasRecord extends PersistablePluginDataObject implements - IPersistable, ISpatialEnabled { - - private static final long serialVersionUID = 1L; - - /** The satellite name */ - @Column(length = 32) - @DataURI(position = 1) - @XmlAttribute - @DynamicSerializeElement - private String satelliteName; +@Cache(usage = CacheConcurrencyStrategy.TRANSACTIONAL) +@XmlRootElement +@XmlAccessorType(XmlAccessType.NONE) +@DynamicSerialize +public class McidasRecord extends PersistablePluginDataObject implements + IPersistable, ISpatialEnabled { + + private static final long serialVersionUID = 1L; + + /** The satellite name */ + @Column(length = 32) + @DataURI(position = 1) + @XmlAttribute + @DynamicSerializeElement + private String satelliteName; /** The area name */ @Column(length = 64) @@ -95,29 +95,29 @@ public class McidasRecord extends PersistablePluginDataObject implements @XmlAttribute @DynamicSerializeElement private Calendar creationTime; - - /** - * The image time - */ - @Column - @XmlAttribute - @DynamicSerializeElement - private Calendar imageTime; + + /** + * The image time + */ + @Column + @XmlAttribute + @DynamicSerializeElement + private Calendar imageTime; - /** - * Size of logical records in bytes for product. - */ - @Column - @XmlAttribute - @DynamicSerializeElement - private Integer sizeRecords; - - /** Satellite projection */ + /** + * Size of logical records in bytes for product. + */ + @Column + @XmlAttribute + @DynamicSerializeElement + private Integer sizeRecords; + + /** Satellite projection */ @Column(length=16) @XmlAttribute - @DynamicSerializeElement - private String projection; - + @DynamicSerializeElement + private String projection; + /** The report type */ @Column(length=16) @XmlAttribute @@ -157,53 +157,53 @@ public class McidasRecord extends PersistablePluginDataObject implements * File name ingested to the end point. */ private String inputFileName; - - @ManyToOne - @PrimaryKeyJoinColumn - @XmlElement - @DynamicSerializeElement + + @ManyToOne + @PrimaryKeyJoinColumn + @XmlElement + @DynamicSerializeElement private McidasMapCoverage coverage; - + /** Area file header block */ @Transient private byte[] headerBlock; - - @Override - public McidasMapCoverage getSpatialObject() { - return coverage; - } - - public McidasMapCoverage getCoverage() { - return coverage; - } - - public void setCoverage(McidasMapCoverage coverage) { - this.coverage = coverage; - } - - /** - * No-arg constructor. - */ + + @Override + public McidasMapCoverage getSpatialObject() { + return coverage; + } + + public McidasMapCoverage getCoverage() { + return coverage; + } + + public void setCoverage(McidasMapCoverage coverage) { + this.coverage = coverage; + } + + /** + * No-arg constructor. + */ public McidasRecord() { satelliteName = null; imageType = null; resolution = null; projection = null; imageTime = null; - areaName = null; - } - - /** - * Constructs a McIDAS satellite record from a dataURI - * - * @param uri - * The dataURI - */ - public McidasRecord(String uri) { - super(uri); - } - - + areaName = null; + } + + /** + * Constructs a McIDAS satellite record from a dataURI + * + * @param uri + * The dataURI + */ + public McidasRecord(String uri) { + super(uri); + } + + /** * Get the time to use for persisting this data. * @@ -218,48 +218,48 @@ public class McidasRecord extends PersistablePluginDataObject implements return c.getTime(); } - - /** - * Set the time to be used for the persistence time for this object. - * - * @param persistTime - * The persistence time to be used. - */ - public void setPersistenceTime(Calendar persistTime) { - setInsertTime(persistTime); - } - - public Integer getSizeRecords() { - return sizeRecords; - } - - public void setSizeRecords(Integer sizeRecords) { - this.sizeRecords = sizeRecords; - } - - /** - * Get the IDecoderGettable reference for this record. - * - * @return The IDecoderGettable reference for this record. Null for this - * class. - */ - @Override - public IDecoderGettable getDecoderGettable() { - return null; - } - - public String getReportType() { - return reportType; - } - - public void setReportType(String reportType) { - this.reportType = reportType; - } - - public String getSatelliteName() { - return satelliteName; - } - + + /** + * Set the time to be used for the persistence time for this object. + * + * @param persistTime + * The persistence time to be used. + */ + public void setPersistenceTime(Calendar persistTime) { + setInsertTime(persistTime); + } + + public Integer getSizeRecords() { + return sizeRecords; + } + + public void setSizeRecords(Integer sizeRecords) { + this.sizeRecords = sizeRecords; + } + + /** + * Get the IDecoderGettable reference for this record. + * + * @return The IDecoderGettable reference for this record. Null for this + * class. + */ + @Override + public IDecoderGettable getDecoderGettable() { + return null; + } + + public String getReportType() { + return reportType; + } + + public void setReportType(String reportType) { + this.reportType = reportType; + } + + public String getSatelliteName() { + return satelliteName; + } + public Calendar getCreationTime() { return creationTime; } @@ -284,17 +284,17 @@ public class McidasRecord extends PersistablePluginDataObject implements this.projection = projection; } - public void setSatelliteName(String satelliteName) { - this.satelliteName = satelliteName; - } - - public String getImageType() { - return imageType; - } - - public void setImageType(String imageType) { - this.imageType = imageType; - } + public void setSatelliteName(String satelliteName) { + this.satelliteName = satelliteName; + } + + public String getImageType() { + return imageType; + } + + public void setImageType(String imageType) { + this.imageType = imageType; + } public Integer getResolution() { return resolution; @@ -372,5 +372,5 @@ public class McidasRecord extends PersistablePluginDataObject implements public void setPersistenceTime(Date persistTime) { // TODO Auto-generated method stub - } + } } \ No newline at end of file diff --git a/ncep/gov.noaa.nws.ncep.common.dataplugin.ncairep/gov.noaa.nws.ncep.common.dataplugin.ncairep.ecl b/ncep/gov.noaa.nws.ncep.common.dataplugin.ncairep/gov.noaa.nws.ncep.common.dataplugin.ncairep.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/ncep/gov.noaa.nws.ncep.common.dataplugin.ncccfp/gov.noaa.nws.ncep.common.dataplugin.ncccfp.ecl b/ncep/gov.noaa.nws.ncep.common.dataplugin.ncccfp/gov.noaa.nws.ncep.common.dataplugin.ncccfp.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/ncep/gov.noaa.nws.ncep.common.dataplugin.ncccfp/src/gov/noaa/nws/ncep/common/dataplugin/ncccfp/dao/NcccfpDao.java b/ncep/gov.noaa.nws.ncep.common.dataplugin.ncccfp/src/gov/noaa/nws/ncep/common/dataplugin/ncccfp/dao/NcccfpDao.java index d8f8117a29..d222125aea 100644 --- a/ncep/gov.noaa.nws.ncep.common.dataplugin.ncccfp/src/gov/noaa/nws/ncep/common/dataplugin/ncccfp/dao/NcccfpDao.java +++ b/ncep/gov.noaa.nws.ncep.common.dataplugin.ncccfp/src/gov/noaa/nws/ncep/common/dataplugin/ncccfp/dao/NcccfpDao.java @@ -12,64 +12,64 @@ * * @author fjyen * @version 1.0 - **/ -package gov.noaa.nws.ncep.common.dataplugin.ncccfp.dao; - -import java.util.List; - -import gov.noaa.nws.ncep.common.dataplugin.ncccfp.NcccfpRecord; + **/ +package gov.noaa.nws.ncep.common.dataplugin.ncccfp.dao; + +import java.util.List; + +import gov.noaa.nws.ncep.common.dataplugin.ncccfp.NcccfpRecord; import gov.noaa.nws.ncep.edex.common.dao.NcepDefaultPluginDao; -import com.raytheon.uf.common.dataplugin.PluginException; +import com.raytheon.uf.common.dataplugin.PluginException; import com.raytheon.uf.edex.database.DataAccessLayerException; - -public class NcccfpDao extends NcepDefaultPluginDao { - - - /** - * Creates a new ReccoDao - * @throws PluginException - */ - public NcccfpDao(String pluginName) throws PluginException { - super(pluginName); - } - - /** - * Retrieves a NCCCFP report using the datauri . - * - * @param dataURI - * The dataURI to match against. - * @return The report record if it exists. - */ - public NcccfpRecord queryByDataURI(String dataURI) { - NcccfpRecord report = null; - List obs = null; - try { - obs = queryBySingleCriteria("dataURI", dataURI); - } catch (DataAccessLayerException e) { - e.printStackTrace(); - } - if((obs != null)&&(obs.size() > 0)) { - report = (NcccfpRecord) obs.get(0); - } - return report; - } - - /** - * Queries for to determine if a given data uri exists on the NCCCFP table. - * - * @param dataUri - * The DataURI to find. - * @return An array of objects. If not null, there should only be a single - * element. - */ - public Object[] queryDataUriColumn(final String dataUri) { - - String sql = "select datauri from awips.ncccfp where datauri='" - + dataUri + "';"; - - Object[] results = executeSQLQuery(sql); - - return results; - } -} + +public class NcccfpDao extends NcepDefaultPluginDao { + + + /** + * Creates a new ReccoDao + * @throws PluginException + */ + public NcccfpDao(String pluginName) throws PluginException { + super(pluginName); + } + + /** + * Retrieves a NCCCFP report using the datauri . + * + * @param dataURI + * The dataURI to match against. + * @return The report record if it exists. + */ + public NcccfpRecord queryByDataURI(String dataURI) { + NcccfpRecord report = null; + List obs = null; + try { + obs = queryBySingleCriteria("dataURI", dataURI); + } catch (DataAccessLayerException e) { + e.printStackTrace(); + } + if((obs != null)&&(obs.size() > 0)) { + report = (NcccfpRecord) obs.get(0); + } + return report; + } + + /** + * Queries for to determine if a given data uri exists on the NCCCFP table. + * + * @param dataUri + * The DataURI to find. + * @return An array of objects. If not null, there should only be a single + * element. + */ + public Object[] queryDataUriColumn(final String dataUri) { + + String sql = "select datauri from awips.ncccfp where datauri='" + + dataUri + "';"; + + Object[] results = executeSQLQuery(sql); + + return results; + } +} diff --git a/ncep/gov.noaa.nws.ncep.common.dataplugin.ncgrib/gov.noaa.nws.ncep.common.dataplugin.ncgrib.ecl b/ncep/gov.noaa.nws.ncep.common.dataplugin.ncgrib/gov.noaa.nws.ncep.common.dataplugin.ncgrib.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/ncep/gov.noaa.nws.ncep.common.dataplugin.ncgrib/src/gov/noaa/nws/ncep/common/dataplugin/ncgrib/NcGenProcess.java b/ncep/gov.noaa.nws.ncep.common.dataplugin.ncgrib/src/gov/noaa/nws/ncep/common/dataplugin/ncgrib/NcGenProcess.java index b42e2bd75b..d84ed37d7e 100644 --- a/ncep/gov.noaa.nws.ncep.common.dataplugin.ncgrib/src/gov/noaa/nws/ncep/common/dataplugin/ncgrib/NcGenProcess.java +++ b/ncep/gov.noaa.nws.ncep.common.dataplugin.ncgrib/src/gov/noaa/nws/ncep/common/dataplugin/ncgrib/NcGenProcess.java @@ -1,19 +1,19 @@ /** * This software was developed and / or modified by Raytheon Company, - * pursuant to Contract DG133W-05-CQ-1067 with the US Government. - * - * U.S. EXPORT CONTROLLED TECHNICAL DATA + * pursuant to Contract DG133W-05-CQ-1067 with the US Government. + * + * U.S. EXPORT CONTROLLED TECHNICAL DATA * This software product contains export-restricted data whose * export/transfer/disclosure is restricted by U.S. law. Dissemination * to non-U.S. persons whether in the United States or abroad requires * an export license or other authorization. * - * Contractor Name: Raytheon Company - * Contractor Address: 6825 Pine Street, Suite 340 - * Mail Stop B8 - * Omaha, NE 68106 - * 402.291.0100 - * + * Contractor Name: Raytheon Company + * Contractor Address: 6825 Pine Street, Suite 340 + * Mail Stop B8 + * Omaha, NE 68106 + * 402.291.0100 + * * See the AWIPS II Master Rights File ("Master Rights File.pdf") for * further licensing information. **/ diff --git a/ncep/gov.noaa.nws.ncep.common.dataplugin.ncgrib/src/gov/noaa/nws/ncep/common/dataplugin/ncgrib/request/GetNcCoverageRequest.java b/ncep/gov.noaa.nws.ncep.common.dataplugin.ncgrib/src/gov/noaa/nws/ncep/common/dataplugin/ncgrib/request/GetNcCoverageRequest.java index c92c758c2b..5fd344c78d 100644 --- a/ncep/gov.noaa.nws.ncep.common.dataplugin.ncgrib/src/gov/noaa/nws/ncep/common/dataplugin/ncgrib/request/GetNcCoverageRequest.java +++ b/ncep/gov.noaa.nws.ncep.common.dataplugin.ncgrib/src/gov/noaa/nws/ncep/common/dataplugin/ncgrib/request/GetNcCoverageRequest.java @@ -1,19 +1,19 @@ /** * This software was developed and / or modified by Raytheon Company, - * pursuant to Contract DG133W-05-CQ-1067 with the US Government. - * - * U.S. EXPORT CONTROLLED TECHNICAL DATA + * pursuant to Contract DG133W-05-CQ-1067 with the US Government. + * + * U.S. EXPORT CONTROLLED TECHNICAL DATA * This software product contains export-restricted data whose * export/transfer/disclosure is restricted by U.S. law. Dissemination * to non-U.S. persons whether in the United States or abroad requires * an export license or other authorization. * - * Contractor Name: Raytheon Company - * Contractor Address: 6825 Pine Street, Suite 340 - * Mail Stop B8 - * Omaha, NE 68106 - * 402.291.0100 - * + * Contractor Name: Raytheon Company + * Contractor Address: 6825 Pine Street, Suite 340 + * Mail Stop B8 + * Omaha, NE 68106 + * 402.291.0100 + * * See the AWIPS II Master Rights File ("Master Rights File.pdf") for * further licensing information. **/ diff --git a/ncep/gov.noaa.nws.ncep.common.dataplugin.ncgrib/src/gov/noaa/nws/ncep/common/dataplugin/ncgrib/util/NcgridModel.java b/ncep/gov.noaa.nws.ncep.common.dataplugin.ncgrib/src/gov/noaa/nws/ncep/common/dataplugin/ncgrib/util/NcgridModel.java index 29d5944068..f54b5c40bb 100644 --- a/ncep/gov.noaa.nws.ncep.common.dataplugin.ncgrib/src/gov/noaa/nws/ncep/common/dataplugin/ncgrib/util/NcgridModel.java +++ b/ncep/gov.noaa.nws.ncep.common.dataplugin.ncgrib/src/gov/noaa/nws/ncep/common/dataplugin/ncgrib/util/NcgridModel.java @@ -1,19 +1,19 @@ /** * This software was developed and / or modified by Raytheon Company, - * pursuant to Contract DG133W-05-CQ-1067 with the US Government. - * - * U.S. EXPORT CONTROLLED TECHNICAL DATA + * pursuant to Contract DG133W-05-CQ-1067 with the US Government. + * + * U.S. EXPORT CONTROLLED TECHNICAL DATA * This software product contains export-restricted data whose * export/transfer/disclosure is restricted by U.S. law. Dissemination * to non-U.S. persons whether in the United States or abroad requires * an export license or other authorization. * - * Contractor Name: Raytheon Company - * Contractor Address: 6825 Pine Street, Suite 340 - * Mail Stop B8 - * Omaha, NE 68106 - * 402.291.0100 - * + * Contractor Name: Raytheon Company + * Contractor Address: 6825 Pine Street, Suite 340 + * Mail Stop B8 + * Omaha, NE 68106 + * 402.291.0100 + * * See the AWIPS II Master Rights File ("Master Rights File.pdf") for * further licensing information. **/ diff --git a/ncep/gov.noaa.nws.ncep.common.dataplugin.ncpafm/gov.noaa.nws.ncep.common.dataplugin.ncpafm.ecl b/ncep/gov.noaa.nws.ncep.common.dataplugin.ncpafm/gov.noaa.nws.ncep.common.dataplugin.ncpafm.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/ncep/gov.noaa.nws.ncep.common.dataplugin.ncpafm/src/gov/noaa/nws/ncep/common/dataplugin/ncpafm/dao/NcPafmDao.java b/ncep/gov.noaa.nws.ncep.common.dataplugin.ncpafm/src/gov/noaa/nws/ncep/common/dataplugin/ncpafm/dao/NcPafmDao.java index e5c753695e..bc9555cf91 100644 --- a/ncep/gov.noaa.nws.ncep.common.dataplugin.ncpafm/src/gov/noaa/nws/ncep/common/dataplugin/ncpafm/dao/NcPafmDao.java +++ b/ncep/gov.noaa.nws.ncep.common.dataplugin.ncpafm/src/gov/noaa/nws/ncep/common/dataplugin/ncpafm/dao/NcPafmDao.java @@ -12,72 +12,72 @@ * * @author fjyen * @version 1.0 - **/ -package gov.noaa.nws.ncep.common.dataplugin.ncpafm.dao; - -import java.util.List; + **/ +package gov.noaa.nws.ncep.common.dataplugin.ncpafm.dao; + +import java.util.List; import javax.xml.bind.JAXBException; - + import gov.noaa.nws.ncep.common.dataplugin.ncpafm.NcPafmRecord; import gov.noaa.nws.ncep.edex.common.dao.NcepDefaultPluginDao; -import com.raytheon.uf.common.dataplugin.PluginException; +import com.raytheon.uf.common.dataplugin.PluginException; import com.raytheon.uf.common.pointdata.PointDataDescription; import com.raytheon.uf.edex.database.DataAccessLayerException; import com.raytheon.uf.edex.pointdata.PointDataPluginDao; - -public class NcPafmDao extends PointDataPluginDao { + +public class NcPafmDao extends PointDataPluginDao { private PointDataDescription pdd; - - - /** - * Creates a new ReccoDao - * @throws PluginException - */ - public NcPafmDao(String pluginName) throws PluginException { - super(pluginName); - } - - /** - * Retrieves a pafm report using the datauri . - * - * @param dataURI - * The dataURI to match against. - * @return The report record if it exists. - */ - public NcPafmRecord queryByDataURI(String dataURI) { - NcPafmRecord report = null; - List obs = null; - try { - obs = queryBySingleCriteria("dataURI", dataURI); - } catch (DataAccessLayerException e) { - e.printStackTrace(); - } - if((obs != null)&&(obs.size() > 0)) { - report = (NcPafmRecord) obs.get(0); - } - return report; - } - - /** - * Queries for to determine if a given data uri exists on the PAFM table. - * - * @param dataUri - * The DataURI to find. - * @return An array of objects. If not null, there should only be a single - * element. - */ - public Object[] queryDataUriColumn(final String dataUri) { - - String sql = "select datauri from awips.ncpafm where datauri='" - + dataUri + "';"; - - Object[] results = executeSQLQuery(sql); - - return results; - } + + + /** + * Creates a new ReccoDao + * @throws PluginException + */ + public NcPafmDao(String pluginName) throws PluginException { + super(pluginName); + } + + /** + * Retrieves a pafm report using the datauri . + * + * @param dataURI + * The dataURI to match against. + * @return The report record if it exists. + */ + public NcPafmRecord queryByDataURI(String dataURI) { + NcPafmRecord report = null; + List obs = null; + try { + obs = queryBySingleCriteria("dataURI", dataURI); + } catch (DataAccessLayerException e) { + e.printStackTrace(); + } + if((obs != null)&&(obs.size() > 0)) { + report = (NcPafmRecord) obs.get(0); + } + return report; + } + + /** + * Queries for to determine if a given data uri exists on the PAFM table. + * + * @param dataUri + * The DataURI to find. + * @return An array of objects. If not null, there should only be a single + * element. + */ + public Object[] queryDataUriColumn(final String dataUri) { + + String sql = "select datauri from awips.ncpafm where datauri='" + + dataUri + "';"; + + Object[] results = executeSQLQuery(sql); + + return results; + } @Override public String[] getKeysRequiredForFileName() { //TODO: See if this is correct/complete @@ -115,4 +115,4 @@ public class NcPafmDao extends PointDataPluginDao { } return pdd; } -} +} diff --git a/ncep/gov.noaa.nws.ncep.common.dataplugin.ncpirep/gov.noaa.nws.ncep.common.dataplugin.ncpirep.ecl b/ncep/gov.noaa.nws.ncep.common.dataplugin.ncpirep/gov.noaa.nws.ncep.common.dataplugin.ncpirep.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/ncep/gov.noaa.nws.ncep.common.dataplugin.ncscat/gov.noaa.nws.ncep.common.dataplugin.ncscat.ecl b/ncep/gov.noaa.nws.ncep.common.dataplugin.ncscat/gov.noaa.nws.ncep.common.dataplugin.ncscat.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/ncep/gov.noaa.nws.ncep.common.dataplugin.ncscat/src/gov/noaa/nws/ncep/common/dataplugin/ncscat/dao/package-info.java b/ncep/gov.noaa.nws.ncep.common.dataplugin.ncscat/src/gov/noaa/nws/ncep/common/dataplugin/ncscat/dao/package-info.java index 82e6dddf92..b8855f6780 100644 --- a/ncep/gov.noaa.nws.ncep.common.dataplugin.ncscat/src/gov/noaa/nws/ncep/common/dataplugin/ncscat/dao/package-info.java +++ b/ncep/gov.noaa.nws.ncep.common.dataplugin.ncscat/src/gov/noaa/nws/ncep/common/dataplugin/ncscat/dao/package-info.java @@ -1,4 +1,4 @@ -/** -* Contains data access object for airmet data. -*/ -package gov.noaa.nws.ncep.common.dataplugin.ncscat.dao; +/** +* Contains data access object for airmet data. +*/ +package gov.noaa.nws.ncep.common.dataplugin.ncscat.dao; diff --git a/ncep/gov.noaa.nws.ncep.common.dataplugin.ncscd/gov.noaa.nws.ncep.common.dataplugin.ncscd.ecl b/ncep/gov.noaa.nws.ncep.common.dataplugin.ncscd/gov.noaa.nws.ncep.common.dataplugin.ncscd.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/ncep/gov.noaa.nws.ncep.common.dataplugin.nctaf/gov.noaa.nws.ncep.common.dataplugin.nctaf.ecl b/ncep/gov.noaa.nws.ncep.common.dataplugin.nctaf/gov.noaa.nws.ncep.common.dataplugin.nctaf.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/ncep/gov.noaa.nws.ncep.common.dataplugin.nctaf/src/gov/noaa/nws/ncep/common/dataplugin/nctaf/NcTafSkyCover.java b/ncep/gov.noaa.nws.ncep.common.dataplugin.nctaf/src/gov/noaa/nws/ncep/common/dataplugin/nctaf/NcTafSkyCover.java index 2fcf4c1a81..815f78936a 100644 --- a/ncep/gov.noaa.nws.ncep.common.dataplugin.nctaf/src/gov/noaa/nws/ncep/common/dataplugin/nctaf/NcTafSkyCover.java +++ b/ncep/gov.noaa.nws.ncep.common.dataplugin.nctaf/src/gov/noaa/nws/ncep/common/dataplugin/nctaf/NcTafSkyCover.java @@ -25,9 +25,9 @@ import com.raytheon.uf.common.serialization.annotations.DynamicSerializeElement; * *
  * 
- * SOFTWARE HISTORY
- * 
- * Date         Ticket#     Engineer    Description
+ * SOFTWARE HISTORY
+ * 
+ * Date         Ticket#     Engineer    Description
  * ------------ ----------  ----------- --------------------------
  * 09/09/2011   458			sgurung	    Initial Creation from Raytheon's taf plugin
  * 09/23/2011   458			sgurung	    Converted to HDF5
@@ -65,7 +65,7 @@ public class NcTafSkyCover extends PersistableDataObject implements
     @XmlElement
     private Integer height;
 
-    // For convective low level cloud - CB
+    // For convective low level cloud - CB
     @DynamicSerializeElement
     @XmlElement
     private String genus;
diff --git a/ncep/gov.noaa.nws.ncep.common.dataplugin.nctaf/src/gov/noaa/nws/ncep/common/dataplugin/nctaf/NcTafWeatherCondition.java b/ncep/gov.noaa.nws.ncep.common.dataplugin.nctaf/src/gov/noaa/nws/ncep/common/dataplugin/nctaf/NcTafWeatherCondition.java
index 3157051249..83bac42e73 100644
--- a/ncep/gov.noaa.nws.ncep.common.dataplugin.nctaf/src/gov/noaa/nws/ncep/common/dataplugin/nctaf/NcTafWeatherCondition.java
+++ b/ncep/gov.noaa.nws.ncep.common.dataplugin.nctaf/src/gov/noaa/nws/ncep/common/dataplugin/nctaf/NcTafWeatherCondition.java
@@ -31,9 +31,9 @@ import com.raytheon.uf.common.serialization.annotations.DynamicSerializeElement;
  * 
  * 
  * 
- *  SOFTWARE HISTORY
- * 
- *  Date        Ticket#     Engineer    Description
+ *  SOFTWARE HISTORY
+ * 
+ *  Date        Ticket#     Engineer    Description
  *  ------------    ----------  ----------- --------------------------
  * 09/09/2011   458			sgurung	    Initial Creation from Raytheon's taf plugin
  * 09/23/2011   458			sgurung	    Converted to HDF5
@@ -289,8 +289,8 @@ public class NcTafWeatherCondition extends PersistableDataObject implements
         if (buffer == null) {
             buffer = new StringBuilder();
         }
-        // buffer.append(parentID);
-        // buffer.append(":");
+        // buffer.append(parentID);
+        // buffer.append(":");
         buffer.append((sequenceId != null) ? sequenceId : "--");
         buffer.append(":");
         buffer.append((intensityProximity != null) ? intensityProximity : "_");
diff --git a/ncep/gov.noaa.nws.ncep.common.dataplugin.nctaf/src/gov/noaa/nws/ncep/common/dataplugin/nctaf/dao/NcTafDao.java b/ncep/gov.noaa.nws.ncep.common.dataplugin.nctaf/src/gov/noaa/nws/ncep/common/dataplugin/nctaf/dao/NcTafDao.java
index 1822c8f27b..b5ddcd2190 100644
--- a/ncep/gov.noaa.nws.ncep.common.dataplugin.nctaf/src/gov/noaa/nws/ncep/common/dataplugin/nctaf/dao/NcTafDao.java
+++ b/ncep/gov.noaa.nws.ncep.common.dataplugin.nctaf/src/gov/noaa/nws/ncep/common/dataplugin/nctaf/dao/NcTafDao.java
@@ -2,18 +2,18 @@
  * This software was modified from Raytheon's taf plugin by
  * NOAA/NWS/NCEP/NCO in order to output point data in HDF5.
  **/
-package gov.noaa.nws.ncep.common.dataplugin.nctaf.dao;
-
+package gov.noaa.nws.ncep.common.dataplugin.nctaf.dao;
+
 import java.io.InputStream;
 import java.util.ArrayList;
-import java.util.List;
+import java.util.List;
 
 import javax.xml.bind.JAXBException;
 
 import gov.noaa.nws.ncep.common.dataplugin.nctaf.NcTafRecord;
 
 import com.raytheon.edex.db.dao.spatial.ObStationDao;
-import com.raytheon.uf.common.dataplugin.PluginException;
+import com.raytheon.uf.common.dataplugin.PluginException;
 import com.raytheon.uf.common.dataplugin.persist.IPersistable;
 import com.raytheon.uf.common.dataquery.db.QueryParam;
 import com.raytheon.uf.common.datastorage.IDataStore;
@@ -23,15 +23,15 @@ import com.raytheon.uf.edex.pointdata.PointDataDbDescription;
 import com.raytheon.uf.edex.pointdata.PointDataPluginDao;
 import com.raytheon.uf.common.pointdata.PointDataDescription;
 import com.raytheon.uf.common.pointdata.spatial.ObStation;
-
-/**
- * Set of DAO methods for TAF data.
- * 
- * 
- *
- * SOFTWARE HISTORY
- *
- * Date         Ticket#    Engineer    Description
+
+/**
+ * Set of DAO methods for TAF data.
+ * 
+ * 
+ *
+ * SOFTWARE HISTORY
+ *
+ * Date         Ticket#    Engineer    Description
  * ------------ ---------- ----------- --------------------------
  * 09/09/2011   458			sgurung	   Initial Creation from Raytheon's taf plugin
  * 09/23/2011   458			sgurung	   Converted to HDF5
@@ -40,20 +40,20 @@ import com.raytheon.uf.common.pointdata.spatial.ObStation;
  * 
  * @author sgurung
  * @version 1.0
- */
-
-public class NcTafDao extends PointDataPluginDao {
-
+ */
+
+public class NcTafDao extends PointDataPluginDao {
+
 	/** The station dao */
     private ObStationDao obDao = new ObStationDao();
-      
-    /**
-     * Creates a new NcTafDao
-     * @throws PluginException 
-     */
-    public NcTafDao(String pluginName) throws PluginException {
-        super(pluginName);
-    }
+      
+    /**
+     * Creates a new NcTafDao
+     * @throws PluginException 
+     */
+    public NcTafDao(String pluginName) throws PluginException {
+        super(pluginName);
+    }
 
     @Override
     protected IDataStore populateDataStore(IDataStore dataStore,
@@ -96,44 +96,44 @@ public class NcTafDao extends PointDataPluginDao {
                 QueryParam.QueryOperand.IN);
         return queryByCriteria(query);
     } 
-    
-    /**
-     * Retrieves an nctaf report using the datauri .
-     * 
-     * @param dataURI
-     *            The dataURI to match against.
-     * @return The report record if it exists.
-     */
-    public NcTafRecord queryByDataURI(String dataURI) {
-    	NcTafRecord report = null;
-        List obs = null;
-        try {
-            obs = queryBySingleCriteria("dataURI", dataURI);
-        } catch (DataAccessLayerException e) {
-            e.printStackTrace();
-        }
-        if((obs != null)&&(obs.size() > 0)) {
-            report = (NcTafRecord) obs.get(0);
-        }
-        return report;
-    }
-    
-    /**
-     * Queries for to determine if a given data uri exists on the nctaf table.
-     * 
-     * @param dataUri
-     *            The DataURI to find.
-     * @return An array of objects. If not null, there should only be a single
-     * element.
-     */
-    public Object[] queryDataUriColumn(final String dataUri) {
-
-        String sql = "select datauri from awips.nctaf where datauri='"
-                + dataUri + "';";
-
-        Object[] results = executeSQLQuery(sql);
-
-        return results;
+    
+    /**
+     * Retrieves an nctaf report using the datauri .
+     * 
+     * @param dataURI
+     *            The dataURI to match against.
+     * @return The report record if it exists.
+     */
+    public NcTafRecord queryByDataURI(String dataURI) {
+    	NcTafRecord report = null;
+        List obs = null;
+        try {
+            obs = queryBySingleCriteria("dataURI", dataURI);
+        } catch (DataAccessLayerException e) {
+            e.printStackTrace();
+        }
+        if((obs != null)&&(obs.size() > 0)) {
+            report = (NcTafRecord) obs.get(0);
+        }
+        return report;
+    }
+    
+    /**
+     * Queries for to determine if a given data uri exists on the nctaf table.
+     * 
+     * @param dataUri
+     *            The DataURI to find.
+     * @return An array of objects. If not null, there should only be a single
+     * element.
+     */
+    public Object[] queryDataUriColumn(final String dataUri) {
+
+        String sql = "select datauri from awips.nctaf where datauri='"
+                + dataUri + "';";
+
+        Object[] results = executeSQLQuery(sql);
+
+        return results;
     }
     
     public ObStationDao getObDao() {
@@ -186,5 +186,5 @@ public class NcTafDao extends PointDataPluginDao {
         return dbDataDescription;
     }
     
-
-}
+
+}
diff --git a/ncep/gov.noaa.nws.ncep.common.dataplugin.ncuair/component-deploy.xml b/ncep/gov.noaa.nws.ncep.common.dataplugin.ncuair/component-deploy.xml
index 4d38e9428d..22d3719f14 100644
--- a/ncep/gov.noaa.nws.ncep.common.dataplugin.ncuair/component-deploy.xml
+++ b/ncep/gov.noaa.nws.ncep.common.dataplugin.ncuair/component-deploy.xml
@@ -1,11 +1,11 @@
-
-    
-    
-
-	
-
+
+    
+    
+
+	
+
 
\ No newline at end of file
diff --git a/ncep/gov.noaa.nws.ncep.common.dataplugin.ncuair/gov.noaa.nws.ncep.common.dataplugin.ncuair.ecl b/ncep/gov.noaa.nws.ncep.common.dataplugin.ncuair/gov.noaa.nws.ncep.common.dataplugin.ncuair.ecl
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/ncep/gov.noaa.nws.ncep.common.dataplugin.ncuair/src/gov/noaa/nws/ncep/common/dataplugin/ncuair/NcUairLiftedIndex.java b/ncep/gov.noaa.nws.ncep.common.dataplugin.ncuair/src/gov/noaa/nws/ncep/common/dataplugin/ncuair/NcUairLiftedIndex.java
index 20dc53a9c8..e2b6ea04ef 100644
--- a/ncep/gov.noaa.nws.ncep.common.dataplugin.ncuair/src/gov/noaa/nws/ncep/common/dataplugin/ncuair/NcUairLiftedIndex.java
+++ b/ncep/gov.noaa.nws.ncep.common.dataplugin.ncuair/src/gov/noaa/nws/ncep/common/dataplugin/ncuair/NcUairLiftedIndex.java
@@ -1,134 +1,134 @@
-/**
- * NcUairLiftedIndex
- * 
- * This java class defines the getters and setters for the Lifted Index
- * and low-level and high-level wind shear data in TTAA of an upper air
- * sounding.
- *      
- * 
- * HISTORY
- *
- * Date         Ticket#         Engineer    Description
- * ------------ ----------      ----------- --------------------------
- * 03/2010      210				L. Lin  	Initial coding
- * 04/2011		210				T. Lee		Removed table entity for H5
- * 09/2011      457             S. Gurung   Renamed H5 to Nc and h5 to nc
- * 09/2011                   	Chin Chen   support batch decoding methods for better performance and
- * 											remove xml serialization as well
- * 
- * - * This code has been developed by the SIB for use in the AWIPS2 system. - * @author L. Lin - * @version 1.0 - */ - -package gov.noaa.nws.ncep.common.dataplugin.ncuair; - -import java.io.Serializable; - -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; - -import com.raytheon.uf.common.serialization.ISerializableObject; -import com.raytheon.uf.common.serialization.annotations.DynamicSerialize; -import com.raytheon.uf.common.serialization.annotations.DynamicSerializeElement; -import gov.noaa.nws.ncep.common.tools.IDecoderConstantsN; - -@XmlAccessorType(XmlAccessType.NONE) -@DynamicSerialize -public class NcUairLiftedIndex implements ISerializableObject { - -// private static final long serialVersionUID = 1L; - - // Observation pressure in Pascals - - /** - * - */ - private static final long serialVersionUID = 5454992542008085989L; - - @DynamicSerializeElement - private float liTemp; - - // - - @DynamicSerializeElement - private float loDrct; - - // - // Decimal(5,2) - - @DynamicSerializeElement - private float loSped; - - // - - @DynamicSerializeElement - private float hiDrct; - - // - // Decimal(5,2) - - @DynamicSerializeElement - private float hiSped; - - /** - * No-Arg Convstructor - */ - public NcUairLiftedIndex() { - liTemp = IDecoderConstantsN.UAIR_FLOAT_MISSING; - loDrct = IDecoderConstantsN.UAIR_FLOAT_MISSING; - loSped = IDecoderConstantsN.UAIR_FLOAT_MISSING; - hiDrct = IDecoderConstantsN.UAIR_FLOAT_MISSING; - loSped = IDecoderConstantsN.UAIR_FLOAT_MISSING; - } - - /** - * @return the serialVersionUID - */ - public static long getSerialVersionUID() { - return serialVersionUID; - } - - - public float getLiTemp() { - return liTemp; - } - - public void setLiTemp(float liTemp) { - this.liTemp = liTemp; - } - - public float getLoDrct() { - return loDrct; - } - - public void setLoDrct(float loDrct) { - this.loDrct = loDrct; - } - - public float getLoSped() { - return loSped; - } - - public void setLoSped(float loSped) { - this.loSped = loSped; - } - - public float getHiDrct() { - return hiDrct; - } - - public void setHiDrct(float hiDrct) { - this.hiDrct = hiDrct; - } - - public float getHiSped() { - return hiSped; - } - - public void setHiSped(float hiSped) { - this.hiSped = hiSped; - } - -} +/** + * NcUairLiftedIndex + * + * This java class defines the getters and setters for the Lifted Index + * and low-level and high-level wind shear data in TTAA of an upper air + * sounding. + * + * + * HISTORY + * + * Date Ticket# Engineer Description + * ------------ ---------- ----------- -------------------------- + * 03/2010 210 L. Lin Initial coding + * 04/2011 210 T. Lee Removed table entity for H5 + * 09/2011 457 S. Gurung Renamed H5 to Nc and h5 to nc + * 09/2011 Chin Chen support batch decoding methods for better performance and + * remove xml serialization as well + *
+ * + * This code has been developed by the SIB for use in the AWIPS2 system. + * @author L. Lin + * @version 1.0 + */ + +package gov.noaa.nws.ncep.common.dataplugin.ncuair; + +import java.io.Serializable; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; + +import com.raytheon.uf.common.serialization.ISerializableObject; +import com.raytheon.uf.common.serialization.annotations.DynamicSerialize; +import com.raytheon.uf.common.serialization.annotations.DynamicSerializeElement; +import gov.noaa.nws.ncep.common.tools.IDecoderConstantsN; + +@XmlAccessorType(XmlAccessType.NONE) +@DynamicSerialize +public class NcUairLiftedIndex implements ISerializableObject { + +// private static final long serialVersionUID = 1L; + + // Observation pressure in Pascals + + /** + * + */ + private static final long serialVersionUID = 5454992542008085989L; + + @DynamicSerializeElement + private float liTemp; + + // + + @DynamicSerializeElement + private float loDrct; + + // + // Decimal(5,2) + + @DynamicSerializeElement + private float loSped; + + // + + @DynamicSerializeElement + private float hiDrct; + + // + // Decimal(5,2) + + @DynamicSerializeElement + private float hiSped; + + /** + * No-Arg Convstructor + */ + public NcUairLiftedIndex() { + liTemp = IDecoderConstantsN.UAIR_FLOAT_MISSING; + loDrct = IDecoderConstantsN.UAIR_FLOAT_MISSING; + loSped = IDecoderConstantsN.UAIR_FLOAT_MISSING; + hiDrct = IDecoderConstantsN.UAIR_FLOAT_MISSING; + loSped = IDecoderConstantsN.UAIR_FLOAT_MISSING; + } + + /** + * @return the serialVersionUID + */ + public static long getSerialVersionUID() { + return serialVersionUID; + } + + + public float getLiTemp() { + return liTemp; + } + + public void setLiTemp(float liTemp) { + this.liTemp = liTemp; + } + + public float getLoDrct() { + return loDrct; + } + + public void setLoDrct(float loDrct) { + this.loDrct = loDrct; + } + + public float getLoSped() { + return loSped; + } + + public void setLoSped(float loSped) { + this.loSped = loSped; + } + + public float getHiDrct() { + return hiDrct; + } + + public void setHiDrct(float hiDrct) { + this.hiDrct = hiDrct; + } + + public float getHiSped() { + return hiSped; + } + + public void setHiSped(float hiSped) { + this.hiSped = hiSped; + } + +} diff --git a/ncep/gov.noaa.nws.ncep.common.dataplugin.ncuair/src/gov/noaa/nws/ncep/common/dataplugin/ncuair/NcUairMaxWind.java b/ncep/gov.noaa.nws.ncep.common.dataplugin.ncuair/src/gov/noaa/nws/ncep/common/dataplugin/ncuair/NcUairMaxWind.java index b0013a7dd8..ceef304ec5 100644 --- a/ncep/gov.noaa.nws.ncep.common.dataplugin.ncuair/src/gov/noaa/nws/ncep/common/dataplugin/ncuair/NcUairMaxWind.java +++ b/ncep/gov.noaa.nws.ncep.common.dataplugin.ncuair/src/gov/noaa/nws/ncep/common/dataplugin/ncuair/NcUairMaxWind.java @@ -1,175 +1,175 @@ -/** - * NcUairMaxWind - * - * This java class defines the getters and setters for the maximum wind - * data in TTAA of an upper air sounding. - * - * HISTORY - * - * Date Ticket# Engineer Description - * ------------ ---------- ----------- -------------------------- - * 03/2010 210 L. Lin Initial coding - * 04/2011 210 T. Lee Removed table entity for H5 - * 09/2011 457 S. Gurung Renamed H5 to Nc and h5 to nc - * 09/2011 Chin Chen support batch decoding methods for better performance and - * remove xml serialization as well - *
- * - * This code has been developed by the SIB for use in the AWIPS2 system. - * @author L. Lin - * @version 1.0 - */ - -package gov.noaa.nws.ncep.common.dataplugin.ncuair; - -import java.io.Serializable; - -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlAccessType; -import com.raytheon.uf.common.serialization.ISerializableObject; -import com.raytheon.uf.common.serialization.annotations.DynamicSerialize; -import com.raytheon.uf.common.serialization.annotations.DynamicSerializeElement; -import gov.noaa.nws.ncep.common.tools.IDecoderConstantsN; -@XmlAccessorType(XmlAccessType.NONE) -@DynamicSerialize -public class NcUairMaxWind implements ISerializableObject { - -/** - * - */ - private static final long serialVersionUID = 3322911349013884198L; - - // Observation pressure in Pascals - - @DynamicSerializeElement - private float pres; - - // Observation wind direction in angular degrees. - - @DynamicSerializeElement - private float drct; - - // Observation wind speed in meters per second. - // Decimal(5,2) - - @DynamicSerializeElement - private float sped; - - // Observation wind shear low - - @DynamicSerializeElement - private float loShear; - - // Observation wind shear hegith - // Decimal(5,2) - - @DynamicSerializeElement - private float hiShear; - - /** - * No-Arg Constructor - */ - public NcUairMaxWind() { - sped = IDecoderConstantsN.UAIR_FLOAT_MISSING; - drct = IDecoderConstantsN.UAIR_FLOAT_MISSING; - pres = IDecoderConstantsN.UAIR_FLOAT_MISSING; - } - - /** - * @return the serialVersionUID - */ - public static long getSerialVersionUID() { - return serialVersionUID; - } - - /** - * Get the record id. - * - * @return The recordId. If not set returns null. - * - public Integer getRecordId() { - return recordId; - } -*/ - /** - * Set the record id. - * @param record - * - public void setRecordId(Integer recordId) { - this.recordId = recordId; - } -*/ - /** - * Get the level pres in Pascals. - * - * @return the pres - */ - public float getPres() { - return pres; - } - - /** - * Set the level pressure in Pascals. - * - * @param pres - * the pres to set - */ - public void setPres(float pres) { - this.pres = pres; - } - - /** - * Get the level wind direction in angular degrees. - * - * @return the drct - */ - public float getDrct() { - return drct; - } - - /** - * Set the level wind direction in angular degrees. - * - * @param drct - * the drct to set - */ - public void setDrct(float drct) { - this.drct = drct; - } - - /** - * Get the level wind speed in meters per second. - * - * @return the sped - */ - public float getSped() { - return sped; - } - - /** - * Set the level wind speed in meters per second. - * - * @param sped - * the sped to set - */ - public void setSped(float sped) { - this.sped = sped; - } - - public float getLoShear() { - return loShear; - } - - public void setLoShear(float loShear) { - this.loShear = loShear; - } - - public float getHiShear() { - return hiShear; - } - - public void setHiShear(float hiShear) { - this.hiShear = hiShear; - } - -} +/** + * NcUairMaxWind + * + * This java class defines the getters and setters for the maximum wind + * data in TTAA of an upper air sounding. + * + * HISTORY + * + * Date Ticket# Engineer Description + * ------------ ---------- ----------- -------------------------- + * 03/2010 210 L. Lin Initial coding + * 04/2011 210 T. Lee Removed table entity for H5 + * 09/2011 457 S. Gurung Renamed H5 to Nc and h5 to nc + * 09/2011 Chin Chen support batch decoding methods for better performance and + * remove xml serialization as well + *
+ * + * This code has been developed by the SIB for use in the AWIPS2 system. + * @author L. Lin + * @version 1.0 + */ + +package gov.noaa.nws.ncep.common.dataplugin.ncuair; + +import java.io.Serializable; + +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlAccessType; +import com.raytheon.uf.common.serialization.ISerializableObject; +import com.raytheon.uf.common.serialization.annotations.DynamicSerialize; +import com.raytheon.uf.common.serialization.annotations.DynamicSerializeElement; +import gov.noaa.nws.ncep.common.tools.IDecoderConstantsN; +@XmlAccessorType(XmlAccessType.NONE) +@DynamicSerialize +public class NcUairMaxWind implements ISerializableObject { + +/** + * + */ + private static final long serialVersionUID = 3322911349013884198L; + + // Observation pressure in Pascals + + @DynamicSerializeElement + private float pres; + + // Observation wind direction in angular degrees. + + @DynamicSerializeElement + private float drct; + + // Observation wind speed in meters per second. + // Decimal(5,2) + + @DynamicSerializeElement + private float sped; + + // Observation wind shear low + + @DynamicSerializeElement + private float loShear; + + // Observation wind shear hegith + // Decimal(5,2) + + @DynamicSerializeElement + private float hiShear; + + /** + * No-Arg Constructor + */ + public NcUairMaxWind() { + sped = IDecoderConstantsN.UAIR_FLOAT_MISSING; + drct = IDecoderConstantsN.UAIR_FLOAT_MISSING; + pres = IDecoderConstantsN.UAIR_FLOAT_MISSING; + } + + /** + * @return the serialVersionUID + */ + public static long getSerialVersionUID() { + return serialVersionUID; + } + + /** + * Get the record id. + * + * @return The recordId. If not set returns null. + * + public Integer getRecordId() { + return recordId; + } +*/ + /** + * Set the record id. + * @param record + * + public void setRecordId(Integer recordId) { + this.recordId = recordId; + } +*/ + /** + * Get the level pres in Pascals. + * + * @return the pres + */ + public float getPres() { + return pres; + } + + /** + * Set the level pressure in Pascals. + * + * @param pres + * the pres to set + */ + public void setPres(float pres) { + this.pres = pres; + } + + /** + * Get the level wind direction in angular degrees. + * + * @return the drct + */ + public float getDrct() { + return drct; + } + + /** + * Set the level wind direction in angular degrees. + * + * @param drct + * the drct to set + */ + public void setDrct(float drct) { + this.drct = drct; + } + + /** + * Get the level wind speed in meters per second. + * + * @return the sped + */ + public float getSped() { + return sped; + } + + /** + * Set the level wind speed in meters per second. + * + * @param sped + * the sped to set + */ + public void setSped(float sped) { + this.sped = sped; + } + + public float getLoShear() { + return loShear; + } + + public void setLoShear(float loShear) { + this.loShear = loShear; + } + + public float getHiShear() { + return hiShear; + } + + public void setHiShear(float hiShear) { + this.hiShear = hiShear; + } + +} diff --git a/ncep/gov.noaa.nws.ncep.common.dataplugin.ncuair/src/gov/noaa/nws/ncep/common/dataplugin/ncuair/NcUairObsLevels.java b/ncep/gov.noaa.nws.ncep.common.dataplugin.ncuair/src/gov/noaa/nws/ncep/common/dataplugin/ncuair/NcUairObsLevels.java index cb8488a652..0cb7955e93 100644 --- a/ncep/gov.noaa.nws.ncep.common.dataplugin.ncuair/src/gov/noaa/nws/ncep/common/dataplugin/ncuair/NcUairObsLevels.java +++ b/ncep/gov.noaa.nws.ncep.common.dataplugin.ncuair/src/gov/noaa/nws/ncep/common/dataplugin/ncuair/NcUairObsLevels.java @@ -1,211 +1,211 @@ -/** - * NcUairObsLevels - * - * This java class defines the getters and setters for the upper air - * parameters in TTAA of an upper air sounding. - * - * HISTORY - * - * Date Ticket# Engineer Description - * ------------ ---------- ----------- -------------------------- - * 03/2010 210 L. Lin Initial coding - * 04/2011 210 T. Lee Removed table entity for H5 - * 09/2011 457 S. Gurung Renamed H5 to Nc and h5 to nc - * 09/2011 Chin Chen support batch decoding methods for better performance and - * remove xml serialization as well - * - * - * This code has been developed by the SIB for use in the AWIPS2 system. - * @author L. Lin - * @version 1.0 - */ - -package gov.noaa.nws.ncep.common.dataplugin.ncuair; - - -import javax.persistence.GeneratedValue; -import javax.persistence.Id; -import javax.persistence.JoinColumn; -import javax.persistence.ManyToOne; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import com.raytheon.uf.common.serialization.ISerializableObject; -import com.raytheon.uf.common.serialization.annotations.DynamicSerialize; -import com.raytheon.uf.common.serialization.annotations.DynamicSerializeElement; -import gov.noaa.nws.ncep.common.tools.IDecoderConstantsN; - -@XmlAccessorType(XmlAccessType.NONE) -@DynamicSerialize -public class NcUairObsLevels implements ISerializableObject { - - /** - * - */ - private static final long serialVersionUID = 100852718286926645L; - - // Observation pressure in Pascals - @DynamicSerializeElement - private float pres; - - // Observation geopotential height in meters. - - @DynamicSerializeElement - private float hght; - - // Observation dry air temperature in degrees Kelvin. - - @DynamicSerializeElement - private float temp; - - // Observation dewpoint temperature in degrees Kelvin. - - @DynamicSerializeElement - private float dwpt; - - // Observation wind direction in angular degrees. - - @DynamicSerializeElement - private float drct; - - // Observation wind speed in meters per second. - // Decimal(5,2) - - @DynamicSerializeElement - private float Sped; - - /** - * No-Arg Constructor - */ - public NcUairObsLevels() { - Sped = IDecoderConstantsN.UAIR_FLOAT_MISSING; - drct = IDecoderConstantsN.UAIR_FLOAT_MISSING; - dwpt = IDecoderConstantsN.UAIR_FLOAT_MISSING; - temp = IDecoderConstantsN.UAIR_FLOAT_MISSING; - hght = IDecoderConstantsN.UAIR_FLOAT_MISSING; - pres = IDecoderConstantsN.UAIR_FLOAT_MISSING; - } - - /** - * @return the serialVersionUID - */ - public static long getSerialVersionUID() { - return serialVersionUID; - } - - - /** - * Get the level pressure in Pascals. - * - * @return the pres - */ - public float getPres() { - return pres; - } - - /** - * Set the level pressure in Pascals. - * - * @param pres - * the pres to set - */ - public void setPres(float pres) { - this.pres = pres; - } - - /** - * Get the level geopotential height in meters. - * - * @return the hght - */ - public float getHght() { - return hght; - } - - /** - * Set the level geopotential height in meters. - * - * @param hght - * the hght to set - */ - public void setHght(float hght) { - this.hght = hght; - } - - /** - * Get the level dry air temperature in degrees Kelvin. - * - * @return the temp - */ - public float getTemp() { - return temp; - } - - /** - * Set the level dry air temperature in degrees Kelvin. - * - * @param temp - * the temp to set - */ - public void setTemp(float temp) { - this.temp = temp; - } - - /** - * Get the level dewpoint temperature in degrees Kelvin. - * - * @return the dwpt - */ - public float getDwpt() { - return dwpt; - } - - /** - * Set the level dewpoint temperature in degrees Kelvin. - * - * @param dwpt - * the dwpt to set - */ - public void setDwpt(float dwpt) { - this.dwpt = dwpt; - } - - /** - * Get the level wind direction in angular degrees. - * - * @return the drct - */ - public float getDrct() { - return drct; - } - - /** - * Set the level wind direction in angular degrees. - * - * @param drct - * the drct to set - */ - public void setDrct(float drct) { - this.drct = drct; - } - - /** - * Get the level wind speed in meters per second. - * - * @return the Sped - */ - public float getSped() { - return Sped; - } - - /** - * Set the level wind speed in meters per second. - * - * @param Sped - * the Sped to set - */ - public void setSped(float Sped) { - this.Sped = Sped; - } - -} +/** + * NcUairObsLevels + * + * This java class defines the getters and setters for the upper air + * parameters in TTAA of an upper air sounding. + * + * HISTORY + * + * Date Ticket# Engineer Description + * ------------ ---------- ----------- -------------------------- + * 03/2010 210 L. Lin Initial coding + * 04/2011 210 T. Lee Removed table entity for H5 + * 09/2011 457 S. Gurung Renamed H5 to Nc and h5 to nc + * 09/2011 Chin Chen support batch decoding methods for better performance and + * remove xml serialization as well + * + * + * This code has been developed by the SIB for use in the AWIPS2 system. + * @author L. Lin + * @version 1.0 + */ + +package gov.noaa.nws.ncep.common.dataplugin.ncuair; + + +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.JoinColumn; +import javax.persistence.ManyToOne; +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import com.raytheon.uf.common.serialization.ISerializableObject; +import com.raytheon.uf.common.serialization.annotations.DynamicSerialize; +import com.raytheon.uf.common.serialization.annotations.DynamicSerializeElement; +import gov.noaa.nws.ncep.common.tools.IDecoderConstantsN; + +@XmlAccessorType(XmlAccessType.NONE) +@DynamicSerialize +public class NcUairObsLevels implements ISerializableObject { + + /** + * + */ + private static final long serialVersionUID = 100852718286926645L; + + // Observation pressure in Pascals + @DynamicSerializeElement + private float pres; + + // Observation geopotential height in meters. + + @DynamicSerializeElement + private float hght; + + // Observation dry air temperature in degrees Kelvin. + + @DynamicSerializeElement + private float temp; + + // Observation dewpoint temperature in degrees Kelvin. + + @DynamicSerializeElement + private float dwpt; + + // Observation wind direction in angular degrees. + + @DynamicSerializeElement + private float drct; + + // Observation wind speed in meters per second. + // Decimal(5,2) + + @DynamicSerializeElement + private float Sped; + + /** + * No-Arg Constructor + */ + public NcUairObsLevels() { + Sped = IDecoderConstantsN.UAIR_FLOAT_MISSING; + drct = IDecoderConstantsN.UAIR_FLOAT_MISSING; + dwpt = IDecoderConstantsN.UAIR_FLOAT_MISSING; + temp = IDecoderConstantsN.UAIR_FLOAT_MISSING; + hght = IDecoderConstantsN.UAIR_FLOAT_MISSING; + pres = IDecoderConstantsN.UAIR_FLOAT_MISSING; + } + + /** + * @return the serialVersionUID + */ + public static long getSerialVersionUID() { + return serialVersionUID; + } + + + /** + * Get the level pressure in Pascals. + * + * @return the pres + */ + public float getPres() { + return pres; + } + + /** + * Set the level pressure in Pascals. + * + * @param pres + * the pres to set + */ + public void setPres(float pres) { + this.pres = pres; + } + + /** + * Get the level geopotential height in meters. + * + * @return the hght + */ + public float getHght() { + return hght; + } + + /** + * Set the level geopotential height in meters. + * + * @param hght + * the hght to set + */ + public void setHght(float hght) { + this.hght = hght; + } + + /** + * Get the level dry air temperature in degrees Kelvin. + * + * @return the temp + */ + public float getTemp() { + return temp; + } + + /** + * Set the level dry air temperature in degrees Kelvin. + * + * @param temp + * the temp to set + */ + public void setTemp(float temp) { + this.temp = temp; + } + + /** + * Get the level dewpoint temperature in degrees Kelvin. + * + * @return the dwpt + */ + public float getDwpt() { + return dwpt; + } + + /** + * Set the level dewpoint temperature in degrees Kelvin. + * + * @param dwpt + * the dwpt to set + */ + public void setDwpt(float dwpt) { + this.dwpt = dwpt; + } + + /** + * Get the level wind direction in angular degrees. + * + * @return the drct + */ + public float getDrct() { + return drct; + } + + /** + * Set the level wind direction in angular degrees. + * + * @param drct + * the drct to set + */ + public void setDrct(float drct) { + this.drct = drct; + } + + /** + * Get the level wind speed in meters per second. + * + * @return the Sped + */ + public float getSped() { + return Sped; + } + + /** + * Set the level wind speed in meters per second. + * + * @param Sped + * the Sped to set + */ + public void setSped(float Sped) { + this.Sped = Sped; + } + +} diff --git a/ncep/gov.noaa.nws.ncep.common.dataplugin.ncuair/src/gov/noaa/nws/ncep/common/dataplugin/ncuair/NcUairRecord.java b/ncep/gov.noaa.nws.ncep.common.dataplugin.ncuair/src/gov/noaa/nws/ncep/common/dataplugin/ncuair/NcUairRecord.java index a6235c6ff5..8aeb6293ba 100644 --- a/ncep/gov.noaa.nws.ncep.common.dataplugin.ncuair/src/gov/noaa/nws/ncep/common/dataplugin/ncuair/NcUairRecord.java +++ b/ncep/gov.noaa.nws.ncep.common.dataplugin.ncuair/src/gov/noaa/nws/ncep/common/dataplugin/ncuair/NcUairRecord.java @@ -1,571 +1,571 @@ -/** - * NcUairRecord - * - * The java class defines the parameters in the postgres table and - * the for HDF5 dataset for the upper air data. - * - * Date Ticket# Engineer Description - * ------------ ---------- ----------- -------------------------- - * 03/2010 210 L. Lin Initial creation - * 4/2011 T. Lee Persist to HDF5 - * 09/2011 457 S. Gurung Renamed H5 to Nc and h5 to nc - * 09/2011 Chin Chen support batch decoding methods for better performance and - * remove xml serialization as well - * 10/2011 S. Gurung Replace slat/slon/selv with location of type SurfaceObsLocation - * - * - * - * This code has been developed by the SIB for use in the AWIPS2 system. - * @author L. Lin - * @version 1.0 - */ - -package gov.noaa.nws.ncep.common.dataplugin.ncuair; - -import java.util.Date; -import java.util.Calendar; -import java.util.Collection; -import java.util.HashSet; -import java.util.Iterator; -import java.util.Set; -import javax.persistence.Column; -import javax.persistence.Embedded; -import javax.persistence.Entity; -import javax.persistence.Table; -import javax.persistence.Transient; -import javax.persistence.UniqueConstraint; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlAttribute; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; -import com.raytheon.uf.common.dataplugin.PluginDataObject; -import com.raytheon.uf.common.dataplugin.annotations.DataURI; -import com.raytheon.uf.common.dataplugin.persist.IPersistable; -import com.raytheon.uf.common.geospatial.ISpatialEnabled; -import com.raytheon.uf.common.geospatial.ISpatialObject; -import com.raytheon.uf.common.pointdata.IPointData; -import com.raytheon.uf.common.pointdata.PointDataView; -import com.raytheon.uf.common.pointdata.spatial.SurfaceObsLocation; -import com.raytheon.uf.common.dataplugin.IDecoderGettable; -import com.raytheon.uf.common.serialization.annotations.DynamicSerialize; -import com.raytheon.uf.common.serialization.annotations.DynamicSerializeElement; -import com.vividsolutions.jts.geom.Geometry; - -@Entity -@Table(name = "ncuair", uniqueConstraints = { @UniqueConstraint(columnNames = { "dataURI" }) }) -@DynamicSerialize -public class NcUairRecord extends PluginDataObject implements ISpatialEnabled, - IDecoderGettable, IPointData, IPersistable { - - private static final long serialVersionUID = 1L; - public static final String PLUGIN_NAME = "ncuair"; - - // Time of the UTC - @DataURI(position = 4) - @Column - - @DynamicSerializeElement - private int UTC; - - // The observation report type. - @DataURI(position = 1) - @Column - - @DynamicSerializeElement - private String reportType; - - // Issue time for the bulletin - @Column - - @DynamicSerializeElement - private Calendar issueTime; - - // Observation time for the bulletin - @Column - - @DynamicSerializeElement - private Calendar obsTime; - - // Synoptic time for the bulletin - // Time of the observation to the nearest hour. - @Column - - @DynamicSerializeElement - private Calendar synopticTime; - - // Type of data such as TTAA/BB/CC/DD or PP... - @DataURI(position = 3) - @Column - - @DynamicSerializeElement - private String dataType; - - // Correction indicator from wmo header - @DataURI(position = 5) - @Column - - @DynamicSerializeElement - private String corr; - - // Text of the WMO header - @Column - - @DynamicSerializeElement - private String wmoHeader; - - // Station number - //@DataURI(position = 2) - @Column - - @DynamicSerializeElement - private String stnum; - - @Embedded - @DataURI(position = 2, embedded = true) - @XmlElement - @DynamicSerializeElement - private SurfaceObsLocation location; - - // Yes if report is a NIL. - @Column - - @DynamicSerializeElement - private Boolean nil; - - // bulletin message - @Transient - - @DynamicSerializeElement - private String bullMessage; - - /** - * Uair observation levels - */ - @DynamicSerializeElement - - @Transient - private Set obsLevels = new HashSet(); - - /** - * Uair tropopause data - */ - @DynamicSerializeElement - - @Transient - private Set tropopause = new HashSet(); - - /** - * Uair maxwind data - */ - @DynamicSerializeElement - - @Transient - private Set maxwind = new HashSet(); - - /** - * Uair lifted index data - */ - @DynamicSerializeElement - - @Transient - private Set liftedindex = new HashSet(); - - @Embedded - private PointDataView pdv; - private Integer hdfFileId; - - /** - * Empty constructor. - */ - public NcUairRecord() { - this.nil=false; - this.stnum=""; - this.wmoHeader=""; - //this.stid=""; - this.corr=""; - this.dataType=""; - } - - /** - * Constructor for DataURI construction through base class. This is used by - * the notification service. - * - * @param uri - * A data uri applicable to this class. - * @param tableDef - * The table definitions for this class. - */ - public NcUairRecord(String uri) { - super(uri); - if (location != null) { - String staId = location.getStationId(); - location.setStationId("null".equals(staId) ? null : staId); - } - } - - /** - * @return the wmoHeader - */ - public String getWmoHeader() { - return wmoHeader; - } - - /** - * @param wmoHeader - * the wmoHeader to set - */ - public void setWmoHeader(String wmoHeader) { - this.wmoHeader = wmoHeader; - } - - /** - * Get the report correction indicator. - * - * @return The corr - */ - public String getCorr() { - return corr; - } - - /** - * Set the report correction indicator. - * - * @param corr - * The corr. - */ - public void setCorr(String corr) { - this.corr = corr; - } - - /** - * Get the observation report type. - * - * @return the reportType - */ - public String getReportType() { - return reportType; - } - - /** - * Set the observation report type. - * - * @param reportType - * the reportType to set - */ - public void setReportType(String reportType) { - this.reportType = reportType; - } - - public String getStnum() { - return stnum; - } - - public void setStnum(String stnum) { - this.stnum = stnum; - } - - /* Get this observation's geometry. - * - * @return The geometry for this observation. - */ - public Geometry getGeometry() { - return location.getGeometry(); - } - - /** - * Get the geometry latitude. - * - * @return The geometry latitude. - */ - public double getLatitude() { - return location.getLatitude(); - } - - /** - * Get the geometry longitude. - * - * @return The geometry longitude. - */ - public double getLongitude() { - return location.getLongitude(); - } - - /** - * Get the station identifier for this observation. - * - * @return the stationId - */ - public String getStationId() { - return location.getStationId(); - } - - /** - * Get the elevation, in meters, of the observing platform or location. - * - * @return The observation elevation, in meters. - */ - public Integer getElevation() { - return location.getElevation(); - } - - /** - * Get whether the location for this observation is defined. - * - * @return Is this location defined. - */ - public Boolean getLocationDefined() { - return location.getLocationDefined(); - } - - - public Calendar getObsTime() { - return obsTime; - } - - public void setObsTime(Calendar obsTime) { - this.obsTime = obsTime; - } - - public Calendar getSynopticTime() { - return synopticTime; - } - - public void setSynopticTime(Calendar synopticTime) { - this.synopticTime = synopticTime; - } - - public String getBullMessage() { - return bullMessage; - } - - public void setBullMessage(String bullMessage) { - this.bullMessage = bullMessage; - } - - public Calendar getIssueTime() { - return issueTime; - } - - public void setIssueTime(Calendar issueTime) { - this.issueTime = issueTime; - } - - public String getDataType() { - return dataType; - } - - public void setDataType(String dataType) { - this.dataType = dataType; - } - - public int getUTC() { - return UTC; - } - - public void setUTC(int utc) { - UTC = utc; - } - - public Boolean getNil() { - return nil; - } - - public void setNil(Boolean nil) { - this.nil = nil; - } - - @Override - public IDecoderGettable getDecoderGettable() { - // TODO Auto-generated method stub - return null; - } - - /** - * @return the set of uair observation levels - */ - public Set getObsLevels() { - return obsLevels; - } - - /** - * @param uair observation levels to set - */ - public void setObsLevels(Set uairLevel) { - this.obsLevels = uairLevel; - } - - /** - * @param add uair observation levels to set - */ - public void addObsLevels(NcUairObsLevels plevel){ - obsLevels.add(plevel); - //plevel.setParentID(this); - } - - /** - * @return the set of uair observation levels - */ - public Set getTropopause() { - return tropopause; - } - - /** - * @param uair observation levels to set - */ - public void setTropopause(Set trop) { - this.tropopause = trop; - } - - /** - * @param add uair observation levels to set - */ - public void addTropopause(NcUairTropopause trop){ - tropopause.add(trop); - //trop.setParentID(this); - } - - /** - * @return the set of uair maximum wind - */ - public Set getMaxWind() { - return maxwind; - } - - /** - * @param uair maximum wind to set - */ - public void setMaxWind(Set mwind) { - this.maxwind = mwind; - } - - /** - * @param add uair maximum wind to set - */ - public void addMaxWind(NcUairMaxWind mwind){ - maxwind.add(mwind); - //mwind.setParentID(this); - } - - /** - * @return the set of uair lifted index - */ - public Set getLiftedIndex() { - return liftedindex; - } - - /** - * @param uair lifted index to set - */ - public void setLiftedIndex(Set li) { - this.liftedindex = li; - } - - /** - * @param add uair lifted index to set - */ - public void addLiftedIndex(NcUairLiftedIndex li){ - liftedindex.add(li); - //li.setParentID(this); - } - - /** - * Override existing set method to modify any - * classes that use the dataURI as a foreign key - */ - @Override - public void setIdentifier(Object dataURI) - { - - this.identifier = dataURI; - - - - } - - @Override - public SurfaceObsLocation getSpatialObject() { - return location; - } - - public SurfaceObsLocation getLocation() { - if (location == null) { - location = new SurfaceObsLocation(); - } - return location; - } - - public void setLocation(SurfaceObsLocation location) { - this.location = location; - } - - /* - * (non-Javadoc) - * - * @see com.raytheon.uf.common.pointdata.IPointData#getPointDataView() - */ - @Override - public PointDataView getPointDataView() { - return this.pdv; - } - - /* - * (non-Javadoc) - * - * @see - * com.raytheon.uf.common.pointdata.IPointData#setPointDataView(com.raytheon - * .uf.common.pointdata.PointDataView) - */ - @Override - public void setPointDataView(PointDataView pdv) { - this.pdv = pdv; - } - - @Override - public Integer getHdfFileId() { - return null; - } - - @Override - public Date getPersistenceTime() { -// return this.dataTime.getRefTime(); - return null; - } - - @Override - - public void setHdfFileId(Integer hdfFileId) { - this.hdfFileId = hdfFileId; - } - - @Override - public void setPersistenceTime(Date persistTime) { - // TODO Auto-generated method stub - - } - - @Override - public Amount getValue(String paramName) { - // TODO Auto-generated method stub - return null; - } - - @Override - public Collection getValues(String paramName) { - // TODO Auto-generated method stub - return null; - } - - @Override - public String getString(String paramName) { - // TODO Auto-generated method stub - return null; - } - - @Override - public String[] getStrings(String paramName) { - // TODO Auto-generated method stub - return null; - } - +/** + * NcUairRecord + * + * The java class defines the parameters in the postgres table and + * the for HDF5 dataset for the upper air data. + * + * Date Ticket# Engineer Description + * ------------ ---------- ----------- -------------------------- + * 03/2010 210 L. Lin Initial creation + * 4/2011 T. Lee Persist to HDF5 + * 09/2011 457 S. Gurung Renamed H5 to Nc and h5 to nc + * 09/2011 Chin Chen support batch decoding methods for better performance and + * remove xml serialization as well + * 10/2011 S. Gurung Replace slat/slon/selv with location of type SurfaceObsLocation + * + * + * + * This code has been developed by the SIB for use in the AWIPS2 system. + * @author L. Lin + * @version 1.0 + */ + +package gov.noaa.nws.ncep.common.dataplugin.ncuair; + +import java.util.Date; +import java.util.Calendar; +import java.util.Collection; +import java.util.HashSet; +import java.util.Iterator; +import java.util.Set; +import javax.persistence.Column; +import javax.persistence.Embedded; +import javax.persistence.Entity; +import javax.persistence.Table; +import javax.persistence.Transient; +import javax.persistence.UniqueConstraint; +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlAttribute; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; +import com.raytheon.uf.common.dataplugin.PluginDataObject; +import com.raytheon.uf.common.dataplugin.annotations.DataURI; +import com.raytheon.uf.common.dataplugin.persist.IPersistable; +import com.raytheon.uf.common.geospatial.ISpatialEnabled; +import com.raytheon.uf.common.geospatial.ISpatialObject; +import com.raytheon.uf.common.pointdata.IPointData; +import com.raytheon.uf.common.pointdata.PointDataView; +import com.raytheon.uf.common.pointdata.spatial.SurfaceObsLocation; +import com.raytheon.uf.common.dataplugin.IDecoderGettable; +import com.raytheon.uf.common.serialization.annotations.DynamicSerialize; +import com.raytheon.uf.common.serialization.annotations.DynamicSerializeElement; +import com.vividsolutions.jts.geom.Geometry; + +@Entity +@Table(name = "ncuair", uniqueConstraints = { @UniqueConstraint(columnNames = { "dataURI" }) }) +@DynamicSerialize +public class NcUairRecord extends PluginDataObject implements ISpatialEnabled, + IDecoderGettable, IPointData, IPersistable { + + private static final long serialVersionUID = 1L; + public static final String PLUGIN_NAME = "ncuair"; + + // Time of the UTC + @DataURI(position = 4) + @Column + + @DynamicSerializeElement + private int UTC; + + // The observation report type. + @DataURI(position = 1) + @Column + + @DynamicSerializeElement + private String reportType; + + // Issue time for the bulletin + @Column + + @DynamicSerializeElement + private Calendar issueTime; + + // Observation time for the bulletin + @Column + + @DynamicSerializeElement + private Calendar obsTime; + + // Synoptic time for the bulletin + // Time of the observation to the nearest hour. + @Column + + @DynamicSerializeElement + private Calendar synopticTime; + + // Type of data such as TTAA/BB/CC/DD or PP... + @DataURI(position = 3) + @Column + + @DynamicSerializeElement + private String dataType; + + // Correction indicator from wmo header + @DataURI(position = 5) + @Column + + @DynamicSerializeElement + private String corr; + + // Text of the WMO header + @Column + + @DynamicSerializeElement + private String wmoHeader; + + // Station number + //@DataURI(position = 2) + @Column + + @DynamicSerializeElement + private String stnum; + + @Embedded + @DataURI(position = 2, embedded = true) + @XmlElement + @DynamicSerializeElement + private SurfaceObsLocation location; + + // Yes if report is a NIL. + @Column + + @DynamicSerializeElement + private Boolean nil; + + // bulletin message + @Transient + + @DynamicSerializeElement + private String bullMessage; + + /** + * Uair observation levels + */ + @DynamicSerializeElement + + @Transient + private Set obsLevels = new HashSet(); + + /** + * Uair tropopause data + */ + @DynamicSerializeElement + + @Transient + private Set tropopause = new HashSet(); + + /** + * Uair maxwind data + */ + @DynamicSerializeElement + + @Transient + private Set maxwind = new HashSet(); + + /** + * Uair lifted index data + */ + @DynamicSerializeElement + + @Transient + private Set liftedindex = new HashSet(); + + @Embedded + private PointDataView pdv; + private Integer hdfFileId; + + /** + * Empty constructor. + */ + public NcUairRecord() { + this.nil=false; + this.stnum=""; + this.wmoHeader=""; + //this.stid=""; + this.corr=""; + this.dataType=""; + } + + /** + * Constructor for DataURI construction through base class. This is used by + * the notification service. + * + * @param uri + * A data uri applicable to this class. + * @param tableDef + * The table definitions for this class. + */ + public NcUairRecord(String uri) { + super(uri); + if (location != null) { + String staId = location.getStationId(); + location.setStationId("null".equals(staId) ? null : staId); + } + } + + /** + * @return the wmoHeader + */ + public String getWmoHeader() { + return wmoHeader; + } + + /** + * @param wmoHeader + * the wmoHeader to set + */ + public void setWmoHeader(String wmoHeader) { + this.wmoHeader = wmoHeader; + } + + /** + * Get the report correction indicator. + * + * @return The corr + */ + public String getCorr() { + return corr; + } + + /** + * Set the report correction indicator. + * + * @param corr + * The corr. + */ + public void setCorr(String corr) { + this.corr = corr; + } + + /** + * Get the observation report type. + * + * @return the reportType + */ + public String getReportType() { + return reportType; + } + + /** + * Set the observation report type. + * + * @param reportType + * the reportType to set + */ + public void setReportType(String reportType) { + this.reportType = reportType; + } + + public String getStnum() { + return stnum; + } + + public void setStnum(String stnum) { + this.stnum = stnum; + } + + /* Get this observation's geometry. + * + * @return The geometry for this observation. + */ + public Geometry getGeometry() { + return location.getGeometry(); + } + + /** + * Get the geometry latitude. + * + * @return The geometry latitude. + */ + public double getLatitude() { + return location.getLatitude(); + } + + /** + * Get the geometry longitude. + * + * @return The geometry longitude. + */ + public double getLongitude() { + return location.getLongitude(); + } + + /** + * Get the station identifier for this observation. + * + * @return the stationId + */ + public String getStationId() { + return location.getStationId(); + } + + /** + * Get the elevation, in meters, of the observing platform or location. + * + * @return The observation elevation, in meters. + */ + public Integer getElevation() { + return location.getElevation(); + } + + /** + * Get whether the location for this observation is defined. + * + * @return Is this location defined. + */ + public Boolean getLocationDefined() { + return location.getLocationDefined(); + } + + + public Calendar getObsTime() { + return obsTime; + } + + public void setObsTime(Calendar obsTime) { + this.obsTime = obsTime; + } + + public Calendar getSynopticTime() { + return synopticTime; + } + + public void setSynopticTime(Calendar synopticTime) { + this.synopticTime = synopticTime; + } + + public String getBullMessage() { + return bullMessage; + } + + public void setBullMessage(String bullMessage) { + this.bullMessage = bullMessage; + } + + public Calendar getIssueTime() { + return issueTime; + } + + public void setIssueTime(Calendar issueTime) { + this.issueTime = issueTime; + } + + public String getDataType() { + return dataType; + } + + public void setDataType(String dataType) { + this.dataType = dataType; + } + + public int getUTC() { + return UTC; + } + + public void setUTC(int utc) { + UTC = utc; + } + + public Boolean getNil() { + return nil; + } + + public void setNil(Boolean nil) { + this.nil = nil; + } + + @Override + public IDecoderGettable getDecoderGettable() { + // TODO Auto-generated method stub + return null; + } + + /** + * @return the set of uair observation levels + */ + public Set getObsLevels() { + return obsLevels; + } + + /** + * @param uair observation levels to set + */ + public void setObsLevels(Set uairLevel) { + this.obsLevels = uairLevel; + } + + /** + * @param add uair observation levels to set + */ + public void addObsLevels(NcUairObsLevels plevel){ + obsLevels.add(plevel); + //plevel.setParentID(this); + } + + /** + * @return the set of uair observation levels + */ + public Set getTropopause() { + return tropopause; + } + + /** + * @param uair observation levels to set + */ + public void setTropopause(Set trop) { + this.tropopause = trop; + } + + /** + * @param add uair observation levels to set + */ + public void addTropopause(NcUairTropopause trop){ + tropopause.add(trop); + //trop.setParentID(this); + } + + /** + * @return the set of uair maximum wind + */ + public Set getMaxWind() { + return maxwind; + } + + /** + * @param uair maximum wind to set + */ + public void setMaxWind(Set mwind) { + this.maxwind = mwind; + } + + /** + * @param add uair maximum wind to set + */ + public void addMaxWind(NcUairMaxWind mwind){ + maxwind.add(mwind); + //mwind.setParentID(this); + } + + /** + * @return the set of uair lifted index + */ + public Set getLiftedIndex() { + return liftedindex; + } + + /** + * @param uair lifted index to set + */ + public void setLiftedIndex(Set li) { + this.liftedindex = li; + } + + /** + * @param add uair lifted index to set + */ + public void addLiftedIndex(NcUairLiftedIndex li){ + liftedindex.add(li); + //li.setParentID(this); + } + + /** + * Override existing set method to modify any + * classes that use the dataURI as a foreign key + */ + @Override + public void setIdentifier(Object dataURI) + { + + this.identifier = dataURI; + + + + } + + @Override + public SurfaceObsLocation getSpatialObject() { + return location; + } + + public SurfaceObsLocation getLocation() { + if (location == null) { + location = new SurfaceObsLocation(); + } + return location; + } + + public void setLocation(SurfaceObsLocation location) { + this.location = location; + } + + /* + * (non-Javadoc) + * + * @see com.raytheon.uf.common.pointdata.IPointData#getPointDataView() + */ + @Override + public PointDataView getPointDataView() { + return this.pdv; + } + + /* + * (non-Javadoc) + * + * @see + * com.raytheon.uf.common.pointdata.IPointData#setPointDataView(com.raytheon + * .uf.common.pointdata.PointDataView) + */ + @Override + public void setPointDataView(PointDataView pdv) { + this.pdv = pdv; + } + + @Override + public Integer getHdfFileId() { + return null; + } + + @Override + public Date getPersistenceTime() { +// return this.dataTime.getRefTime(); + return null; + } + + @Override + + public void setHdfFileId(Integer hdfFileId) { + this.hdfFileId = hdfFileId; + } + + @Override + public void setPersistenceTime(Date persistTime) { + // TODO Auto-generated method stub + + } + + @Override + public Amount getValue(String paramName) { + // TODO Auto-generated method stub + return null; + } + + @Override + public Collection getValues(String paramName) { + // TODO Auto-generated method stub + return null; + } + + @Override + public String getString(String paramName) { + // TODO Auto-generated method stub + return null; + } + + @Override + public String[] getStrings(String paramName) { + // TODO Auto-generated method stub + return null; + } + } \ No newline at end of file diff --git a/ncep/gov.noaa.nws.ncep.common.dataplugin.ncuair/src/gov/noaa/nws/ncep/common/dataplugin/ncuair/NcUairTropopause.java b/ncep/gov.noaa.nws.ncep.common.dataplugin.ncuair/src/gov/noaa/nws/ncep/common/dataplugin/ncuair/NcUairTropopause.java index ab2b8a7e53..62211db38d 100644 --- a/ncep/gov.noaa.nws.ncep.common.dataplugin.ncuair/src/gov/noaa/nws/ncep/common/dataplugin/ncuair/NcUairTropopause.java +++ b/ncep/gov.noaa.nws.ncep.common.dataplugin.ncuair/src/gov/noaa/nws/ncep/common/dataplugin/ncuair/NcUairTropopause.java @@ -1,186 +1,186 @@ -/** - * H5Tropopouse - * - * This java class defines the getters and setters for the tropopause - * data in TTAA of an upper air sounding. - * - * HISTORY - * - * Date Ticket# Engineer Description - * ------------ ---------- ----------- -------------------------- - * 03/2010 210 L. Lin Initial coding - * 04/2011 210 T. Lee Removed table entity for H5 - * 09/2011 457 S. Gurung Renamed H5 to Nc and h5 to nc - * 09/2011 Chin Chen support batch decoding methods for better performance and - * remove xml serialization as well - * - * - * This code has been developed by the SIB for use in the AWIPS2 system. - * @author L. Lin - * @version 1.0 - */ - -package gov.noaa.nws.ncep.common.dataplugin.ncuair; - - -import javax.persistence.GeneratedValue; -import javax.persistence.Id; -import javax.persistence.JoinColumn; -import javax.persistence.ManyToOne; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import com.raytheon.uf.common.serialization.ISerializableObject; -import com.raytheon.uf.common.serialization.annotations.DynamicSerialize; -import com.raytheon.uf.common.serialization.annotations.DynamicSerializeElement; -import gov.noaa.nws.ncep.common.tools.IDecoderConstantsN; - -@XmlAccessorType(XmlAccessType.NONE) -@DynamicSerialize -public class NcUairTropopause implements ISerializableObject { - - /** - * - */ - private static final long serialVersionUID = 8451424934840570405L; - - @DynamicSerializeElement - private float pres; - - // Observation dry air temperature in degrees Kelvin. - - @DynamicSerializeElement - private float temp; - - // Observation dewpoint temperature in degrees Kelvin. - - @DynamicSerializeElement - private float dwpt; - - // Observation wind direction in angular degrees. - - @DynamicSerializeElement - private float drct; - - // Observation wind speed in meters per second. - // Decimal(5,2) - - @DynamicSerializeElement - private float sped; - - /** - * No-Arg Constructor - */ - public NcUairTropopause() { - sped = IDecoderConstantsN.UAIR_FLOAT_MISSING; - drct = IDecoderConstantsN.UAIR_FLOAT_MISSING; - dwpt = IDecoderConstantsN.UAIR_FLOAT_MISSING; - temp = IDecoderConstantsN.UAIR_FLOAT_MISSING; - pres = IDecoderConstantsN.UAIR_FLOAT_MISSING; - } - - /** - * @return the serialVersionUID - */ - public static long getSerialVersionUID() { - return serialVersionUID; - } - - - /** - * Get the level pressure in Pascals. - * - * @return the pres - */ - public float getPres() { - return pres; - } - - /** - * Set the level pressure in Pascals. - * - * @param pres - * the pres to set - */ - public void setPres(float pres) { - this.pres = pres; - } - - /** - * Get the level dry air temperature in degrees Kelvin. - * - * @return the temp - */ - public float getTemp() { - return temp; - } - - /** - * Set the level dry air temperature in degrees Kelvin. - * - * @param temp - * the temp to set - */ - public void setTemp(float temp) { - this.temp = temp; - } - - /** - * Get the level dewpoint temperature in degrees Kelvin. - * - * @return the dwpt - */ - public float getDwpt() { - return dwpt; - } - - /** - * Set the level dewpoint temperature in degrees Kelvin. - * - * @param dwpt - * the dwpt to set - */ - public void setDwpt(float dwpt) { - this.dwpt = dwpt; - } - - /** - * Get the level wind direction in angular degrees. - * - * @return the drct - */ - public float getDrct() { - return drct; - } - - /** - * Set the level wind direction in angular degrees. - * - * @param drct - * the drct to set - */ - public void setDrct(float drct) { - this.drct = drct; - } - - /** - * Get the level wind speed in meters per second. - * - * @return the sped - */ - public float getSped() { - return sped; - } - - /** - * Set the level wind speed in meters per second. - * - * @param sped - * the sped to set - */ - public void setSped(float sped) { - this.sped = sped; - } - - -} +/** + * H5Tropopouse + * + * This java class defines the getters and setters for the tropopause + * data in TTAA of an upper air sounding. + * + * HISTORY + * + * Date Ticket# Engineer Description + * ------------ ---------- ----------- -------------------------- + * 03/2010 210 L. Lin Initial coding + * 04/2011 210 T. Lee Removed table entity for H5 + * 09/2011 457 S. Gurung Renamed H5 to Nc and h5 to nc + * 09/2011 Chin Chen support batch decoding methods for better performance and + * remove xml serialization as well + * + * + * This code has been developed by the SIB for use in the AWIPS2 system. + * @author L. Lin + * @version 1.0 + */ + +package gov.noaa.nws.ncep.common.dataplugin.ncuair; + + +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.JoinColumn; +import javax.persistence.ManyToOne; +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import com.raytheon.uf.common.serialization.ISerializableObject; +import com.raytheon.uf.common.serialization.annotations.DynamicSerialize; +import com.raytheon.uf.common.serialization.annotations.DynamicSerializeElement; +import gov.noaa.nws.ncep.common.tools.IDecoderConstantsN; + +@XmlAccessorType(XmlAccessType.NONE) +@DynamicSerialize +public class NcUairTropopause implements ISerializableObject { + + /** + * + */ + private static final long serialVersionUID = 8451424934840570405L; + + @DynamicSerializeElement + private float pres; + + // Observation dry air temperature in degrees Kelvin. + + @DynamicSerializeElement + private float temp; + + // Observation dewpoint temperature in degrees Kelvin. + + @DynamicSerializeElement + private float dwpt; + + // Observation wind direction in angular degrees. + + @DynamicSerializeElement + private float drct; + + // Observation wind speed in meters per second. + // Decimal(5,2) + + @DynamicSerializeElement + private float sped; + + /** + * No-Arg Constructor + */ + public NcUairTropopause() { + sped = IDecoderConstantsN.UAIR_FLOAT_MISSING; + drct = IDecoderConstantsN.UAIR_FLOAT_MISSING; + dwpt = IDecoderConstantsN.UAIR_FLOAT_MISSING; + temp = IDecoderConstantsN.UAIR_FLOAT_MISSING; + pres = IDecoderConstantsN.UAIR_FLOAT_MISSING; + } + + /** + * @return the serialVersionUID + */ + public static long getSerialVersionUID() { + return serialVersionUID; + } + + + /** + * Get the level pressure in Pascals. + * + * @return the pres + */ + public float getPres() { + return pres; + } + + /** + * Set the level pressure in Pascals. + * + * @param pres + * the pres to set + */ + public void setPres(float pres) { + this.pres = pres; + } + + /** + * Get the level dry air temperature in degrees Kelvin. + * + * @return the temp + */ + public float getTemp() { + return temp; + } + + /** + * Set the level dry air temperature in degrees Kelvin. + * + * @param temp + * the temp to set + */ + public void setTemp(float temp) { + this.temp = temp; + } + + /** + * Get the level dewpoint temperature in degrees Kelvin. + * + * @return the dwpt + */ + public float getDwpt() { + return dwpt; + } + + /** + * Set the level dewpoint temperature in degrees Kelvin. + * + * @param dwpt + * the dwpt to set + */ + public void setDwpt(float dwpt) { + this.dwpt = dwpt; + } + + /** + * Get the level wind direction in angular degrees. + * + * @return the drct + */ + public float getDrct() { + return drct; + } + + /** + * Set the level wind direction in angular degrees. + * + * @param drct + * the drct to set + */ + public void setDrct(float drct) { + this.drct = drct; + } + + /** + * Get the level wind speed in meters per second. + * + * @return the sped + */ + public float getSped() { + return sped; + } + + /** + * Set the level wind speed in meters per second. + * + * @param sped + * the sped to set + */ + public void setSped(float sped) { + this.sped = sped; + } + + +} diff --git a/ncep/gov.noaa.nws.ncep.common.dataplugin.ncuair/src/gov/noaa/nws/ncep/common/dataplugin/ncuair/package-info.java b/ncep/gov.noaa.nws.ncep.common.dataplugin.ncuair/src/gov/noaa/nws/ncep/common/dataplugin/ncuair/package-info.java index 2dc94735ae..9c3a7204a8 100644 --- a/ncep/gov.noaa.nws.ncep.common.dataplugin.ncuair/src/gov/noaa/nws/ncep/common/dataplugin/ncuair/package-info.java +++ b/ncep/gov.noaa.nws.ncep.common.dataplugin.ncuair/src/gov/noaa/nws/ncep/common/dataplugin/ncuair/package-info.java @@ -1,4 +1,4 @@ -/** -* Contains table record for decoder plug-ins -*/ -package gov.noaa.nws.ncep.common.dataplugin.ncuair; +/** +* Contains table record for decoder plug-ins +*/ +package gov.noaa.nws.ncep.common.dataplugin.ncuair; diff --git a/ncep/gov.noaa.nws.ncep.common.dataplugin.nonconvsigmet/gov.noaa.nws.ncep.common.dataplugin.nonconvsigmet.ecl b/ncep/gov.noaa.nws.ncep.common.dataplugin.nonconvsigmet/gov.noaa.nws.ncep.common.dataplugin.nonconvsigmet.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/ncep/gov.noaa.nws.ncep.common.dataplugin.nonconvsigmet/src/gov/noaa/nws/ncep/common/dataplugin/nonconvsigmet/NonConvSigmetLocation.java b/ncep/gov.noaa.nws.ncep.common.dataplugin.nonconvsigmet/src/gov/noaa/nws/ncep/common/dataplugin/nonconvsigmet/NonConvSigmetLocation.java index fafe385dce..0558b1ceb9 100644 --- a/ncep/gov.noaa.nws.ncep.common.dataplugin.nonconvsigmet/src/gov/noaa/nws/ncep/common/dataplugin/nonconvsigmet/NonConvSigmetLocation.java +++ b/ncep/gov.noaa.nws.ncep.common.dataplugin.nonconvsigmet/src/gov/noaa/nws/ncep/common/dataplugin/nonconvsigmet/NonConvSigmetLocation.java @@ -1,161 +1,161 @@ -/** - * NonConvsigmetLocation - * - * This java class defines the getters and setters for the - * convective sigmet location table. - * - * HISTORY - * - * Date Author Description - * ------------ ---------- ----------- -------------------------- - * 06/2009 Uma Josyula Initial creation - * 09/2011 Chin Chen changed to improve purge performance and - * removed xml serialization as well - * - * This code has been developed by the SIB for use in the AWIPS2 system. - */ - -package gov.noaa.nws.ncep.common.dataplugin.nonconvsigmet; - -import java.io.Serializable; - -import javax.persistence.GeneratedValue; -import javax.persistence.Id; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.Table; -import com.raytheon.uf.common.serialization.ISerializableObject; -import com.raytheon.uf.common.serialization.annotations.DynamicSerialize; -import com.raytheon.uf.common.serialization.annotations.DynamicSerializeElement; - - - -import gov.noaa.nws.ncep.common.tools.IDecoderConstantsN; - -@Entity -@Table(name="nonconvsigmet_location") -@DynamicSerialize -public class NonConvSigmetLocation implements Serializable, ISerializableObject { - - private static final long serialVersionUID = 1L; - @Id - @GeneratedValue - private Integer recordId = null; - - - - // Collection of locations - @Column(length=120) - @DynamicSerializeElement - private String locationLine; - - // Each location of a nonconvective sigmet forecast area - @Column(length=40) - @DynamicSerializeElement - private String location; - - // Each latitude of a nonconvective sigmet forecast area - @Column - @DynamicSerializeElement - private double latitude; - - // Each longitude of a nonconvective sigmet forecast area - @Column - @DynamicSerializeElement - private double longitude; - - // Index for the order of a complete location set - @Column - @DynamicSerializeElement - private Integer index; - - /** - * No-Arg Convstructor. - */ - public NonConvSigmetLocation() { - this.locationLine=""; - this.location=""; - this.index=IDecoderConstantsN.INTEGER_MISSING; - } - - /** - * @return the recordId. If not set returns null. - */ - public Integer getRecordId() { - return recordId; - } - - /** - * @param recordId to set - */ - public void setRecordId(Integer recordId) { - this.recordId = recordId; - } - - - - /** - * @return the locationLine - */ - public String getLocationLine() { - return locationLine; - } - - /** - * @param locationLine to set - */ - public void setLocationLine(String locationLine) { - this.locationLine = locationLine; - } - - /** - * @return the location - */ - public String getLocation() { - return location; - } - - /** - * @param location to set - */ - public void setLocation(String location) { - this.location = location; - } - - /** - * @return the index - */ - public Integer getIndex() { - return index; - } - - /** - * @param index to set - */ - public void setIndex(Integer index) { - this.index = index; - } - - public double getLatitude() { - return latitude; - } - - public void setLatitude(double latitude) { - this.latitude = latitude; - } - - public double getLongitude() { - return longitude; - } - - public void setLongitude(double longitude) { - this.longitude = longitude; - } - - /** - * @return the serialVersionUID - */ - public static long getSerialVersionUID() { - return serialVersionUID; - } +/** + * NonConvsigmetLocation + * + * This java class defines the getters and setters for the + * convective sigmet location table. + * + * HISTORY + * + * Date Author Description + * ------------ ---------- ----------- -------------------------- + * 06/2009 Uma Josyula Initial creation + * 09/2011 Chin Chen changed to improve purge performance and + * removed xml serialization as well + * + * This code has been developed by the SIB for use in the AWIPS2 system. + */ + +package gov.noaa.nws.ncep.common.dataplugin.nonconvsigmet; + +import java.io.Serializable; + +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Table; +import com.raytheon.uf.common.serialization.ISerializableObject; +import com.raytheon.uf.common.serialization.annotations.DynamicSerialize; +import com.raytheon.uf.common.serialization.annotations.DynamicSerializeElement; + + + +import gov.noaa.nws.ncep.common.tools.IDecoderConstantsN; + +@Entity +@Table(name="nonconvsigmet_location") +@DynamicSerialize +public class NonConvSigmetLocation implements Serializable, ISerializableObject { + + private static final long serialVersionUID = 1L; + @Id + @GeneratedValue + private Integer recordId = null; + + + + // Collection of locations + @Column(length=120) + @DynamicSerializeElement + private String locationLine; + + // Each location of a nonconvective sigmet forecast area + @Column(length=40) + @DynamicSerializeElement + private String location; + + // Each latitude of a nonconvective sigmet forecast area + @Column + @DynamicSerializeElement + private double latitude; + + // Each longitude of a nonconvective sigmet forecast area + @Column + @DynamicSerializeElement + private double longitude; + + // Index for the order of a complete location set + @Column + @DynamicSerializeElement + private Integer index; + + /** + * No-Arg Convstructor. + */ + public NonConvSigmetLocation() { + this.locationLine=""; + this.location=""; + this.index=IDecoderConstantsN.INTEGER_MISSING; + } + + /** + * @return the recordId. If not set returns null. + */ + public Integer getRecordId() { + return recordId; + } + + /** + * @param recordId to set + */ + public void setRecordId(Integer recordId) { + this.recordId = recordId; + } + + + + /** + * @return the locationLine + */ + public String getLocationLine() { + return locationLine; + } + + /** + * @param locationLine to set + */ + public void setLocationLine(String locationLine) { + this.locationLine = locationLine; + } + + /** + * @return the location + */ + public String getLocation() { + return location; + } + + /** + * @param location to set + */ + public void setLocation(String location) { + this.location = location; + } + + /** + * @return the index + */ + public Integer getIndex() { + return index; + } + + /** + * @param index to set + */ + public void setIndex(Integer index) { + this.index = index; + } + + public double getLatitude() { + return latitude; + } + + public void setLatitude(double latitude) { + this.latitude = latitude; + } + + public double getLongitude() { + return longitude; + } + + public void setLongitude(double longitude) { + this.longitude = longitude; + } + + /** + * @return the serialVersionUID + */ + public static long getSerialVersionUID() { + return serialVersionUID; + } } \ No newline at end of file diff --git a/ncep/gov.noaa.nws.ncep.common.dataplugin.nonconvsigmet/src/gov/noaa/nws/ncep/common/dataplugin/nonconvsigmet/NonConvSigmetRecord.java b/ncep/gov.noaa.nws.ncep.common.dataplugin.nonconvsigmet/src/gov/noaa/nws/ncep/common/dataplugin/nonconvsigmet/NonConvSigmetRecord.java index 39b31aa410..c295407f6a 100644 --- a/ncep/gov.noaa.nws.ncep.common.dataplugin.nonconvsigmet/src/gov/noaa/nws/ncep/common/dataplugin/nonconvsigmet/NonConvSigmetRecord.java +++ b/ncep/gov.noaa.nws.ncep.common.dataplugin.nonconvsigmet/src/gov/noaa/nws/ncep/common/dataplugin/nonconvsigmet/NonConvSigmetRecord.java @@ -1,546 +1,546 @@ -/** - * NonConvsigmetRecord - * - * This java class performs the mapping to the database table for NONCONVSIGMET - * - * HISTORY - * - * Date Author Description - * ------------ ---------- ----------- -------------------------- - * 06/2009 Uma Josyula Initial creation - * 09/2011 Chin Chen changed to improve purge performance and - * removed xml serialization as well - * - * This code has been developed by the SIB for use in the AWIPS2 system. - */ - -package gov.noaa.nws.ncep.common.dataplugin.nonconvsigmet; - -import java.util.Calendar; -import java.util.HashSet; -import java.util.Set; -import com.raytheon.uf.common.dataplugin.PluginDataObject; -import com.raytheon.uf.common.dataplugin.IDecoderGettable; - -import gov.noaa.nws.ncep.common.tools.IDecoderConstantsN; - -import javax.persistence.CascadeType; -import javax.persistence.Column; - -import javax.persistence.Entity; -import javax.persistence.FetchType; -import javax.persistence.JoinColumn; -import javax.persistence.OneToMany; -import javax.persistence.Table; -import javax.persistence.UniqueConstraint; - -import org.hibernate.annotations.Index; - -import com.raytheon.uf.common.dataplugin.annotations.DataURI; -import com.raytheon.uf.common.serialization.annotations.DynamicSerialize; -import com.raytheon.uf.common.serialization.annotations.DynamicSerializeElement; - -@Entity -@Table(name = "nonconvsigmet", uniqueConstraints = { @UniqueConstraint(columnNames = { "dataURI" }) }) -@DynamicSerialize - - -public class NonConvSigmetRecord extends PluginDataObject{ - - /** - * - */ - private static final long serialVersionUID = 1L; - - // reportType is "non-convective sigmet". - @Column(length=32) - @DynamicSerializeElement - private String reportType; - - // WMO header - @Column(length=32) - @DynamicSerializeElement - private String wmoHeader; - - // forecastRegion as: SL - @Column(length=8) - @DataURI(position=2) - @DynamicSerializeElement - private String forecastRegion; - - // The issue office where the report from - @Column(length=32) - @DataURI(position=1) - @DynamicSerializeElement - private String issueOffice; - - // Issue time of the report - @Column - @DataURI(position=3) - @DynamicSerializeElement - private Calendar issueTime; - - // The designator - @Column(length=8) - @DynamicSerializeElement - private String designatorBBB; - - // CorrectionFlag is a flag with values (1 or 2 or 3) - @Column(length=8) - @DynamicSerializeElement - private String correctionRemarks; - - // The awipsId from the report - @Column(length=32) - @DataURI(position=4) - @DynamicSerializeElement - private String awipsId; - - // The state list from the report - @Column(length=256) - @DynamicSerializeElement - private String stateList; - - // Start time of the report - @Column - @DynamicSerializeElement - private Calendar startTime; - - // End time of the report - @Column - @DynamicSerializeElement - private Calendar endTime; - - // The type of the hazard from the report - @Column(length=16) - @DynamicSerializeElement - private String hazardType; - - // The intensity of the hazard from the report - @Column(length=64) - @DynamicSerializeElement - private String hazardIntensity; - - // The cause for the hazard from the report - @Column(length=128) - @DynamicSerializeElement - private String hazardCause; - - // The conditions stated about the hazard from the report - @Column(length=128) - @DynamicSerializeElement - private String hazardCondition; - - // The lower flight level from the report - @Column - @DynamicSerializeElement - private int flightLevel1; - - // The upper flight level from the report - @Column - @DynamicSerializeElement - private int flightLevel2; - - // The sigmet Identifier from the report - @Column(length=32) - @DynamicSerializeElement - private String sigmetId; - - // The entire report - @Column(length=3000) - @DynamicSerializeElement - private String bullMessage; - - - /** - * Convsigmet location - */ - @DynamicSerializeElement - @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER) - @JoinColumn(name = "parentID", nullable = false) - @Index(name = "nonConvSigmetLocation_parentid_idex") - private Set nonConvSigmetLocation = new HashSet(); - - - /** - * Default Constructor - */ - public NonConvSigmetRecord() { - this.issueOffice =""; - this.wmoHeader =""; - this.bullMessage =""; - this.designatorBBB =""; - this.forecastRegion =""; - this.reportType =""; - this.correctionRemarks =""; - this.awipsId =""; - this.flightLevel1 =IDecoderConstantsN.INTEGER_MISSING; - this.flightLevel2 =IDecoderConstantsN.INTEGER_MISSING; - this.hazardCause =""; - this.hazardCondition =""; - this.hazardIntensity =""; - this.hazardType ="UNKNOWN"; - this.stateList =""; - this.sigmetId =""; - } - - /** - * Convstructs a non-consigmet record from a dataURI - * - * @param uri The dataURI - */ - public NonConvSigmetRecord(String uri) { - super(uri); - } - - @Override - public IDecoderGettable getDecoderGettable() { - // TODO Auto-generated method stub - return null; - } - - - /** - * @return the reportType - */ - public String getReportType() { - return reportType; - } - - - /** - * @param reportType to set - */ - public void setReportType(String reportType) { - this.reportType = reportType; - } - - - /** - * @return the wmoHeader - */ - public String getWmoHeader() { - return wmoHeader; - } - - - /** - * @param wmoHeader to set - */ - public void setWmoHeader(String wmoHeader) { - this.wmoHeader = wmoHeader; - } - - - /** - * @return the forecastRegion - */ - public String getForecastRegion() { - return forecastRegion; - } - - - /** - * @param forecastRegion to set - */ - public void setForecastRegion(String forecastRegion) { - this.forecastRegion = forecastRegion; - } - - - /** - * @return the issueOffice - */ - public String getIssueOffice() { - return issueOffice; - } - - - /** - * @param issueOffice to set - */ - public void setIssueOffice(String issueOffice) { - this.issueOffice = issueOffice; - } - - - /** - * @return the issueTime - */ - public Calendar getIssueTime() { - return issueTime; - } - - - /** - * @param issueTime to set - */ - public void setIssueTime(Calendar issueTime) { - this.issueTime = issueTime; - } - - - /** - * @return the designatorBBB - */ - public String getDesignatorBBB() { - return designatorBBB; - } - - - /** - * @param designatorBBB to set - */ - public void setDesignatorBBB(String designatorBBB) { - this.designatorBBB = designatorBBB; - } - - - /** - * @return the correctionFlag - */ - public String getCorrectionRemarks() { - return correctionRemarks; - } - - - /** - * @param correctionFlag to set - */ - public void setCorrectionRemarks(String correctionRemarks) { - this.correctionRemarks = correctionRemarks; - } - - - /** - * @return the awipsId - */ - public String getAwipsId() { - return awipsId; - } - - - /** - * @param awipsId to set - */ - public void setAwipsId(String awipsId) { - this.awipsId = awipsId; - } - - - /** - * @return the stateList - */ - public String getStateList() { - return stateList; - } - - - /** - * @param stateList to set - */ - public void setStateList(String stateList) { - this.stateList = stateList; - } - - - /** - * @return the startTime - */ - public Calendar getStartTime() { - return startTime; - } - - - /** - * @param startTime to set - */ - public void setStartTime(Calendar startTime) { - this.startTime = startTime; - } - - - /** - * @return the endTime - */ - public Calendar getEndTime() { - return endTime; - } - - - /** - * @param endTime to set - */ - public void setEndTime(Calendar endTime) { - this.endTime = endTime; - } - - - /** - * @return the hazardType - */ - public String getHazardType() { - return hazardType; - } - - - /** - * @param hazardType to set - */ - public void setHazardType(String hazardType) { - this.hazardType = hazardType; - } - - - /** - * @return the hazardIntensity - */ - public String getHazardIntensity() { - return hazardIntensity; - } - - - /** - * @param hazardIntensity to set - */ - public void setHazardIntensity(String hazardIntensity) { - this.hazardIntensity = hazardIntensity; - } - - - /** - * @return the hazardCause - */ - public String getHazardCause() { - return hazardCause; - } - - - /** - * @param hazardCause to set - */ - public void setHazardCause(String hazardCause) { - this.hazardCause = hazardCause; - } - - - /** - * @return the hazardCondition - */ - public String getHazardCondition() { - return hazardCondition; - } - - - /** - * @param hazardCondition to set - */ - public void setHazardCondition(String hazardCondition) { - this.hazardCondition = hazardCondition; - } - - - /** - * @return the flightLevel1 - */ - public int getFlightLevel1() { - return flightLevel1; - } - - - /** - * @param flightLevel1 to set - */ - public void setFlightLevel1(int flightLevel1) { - this.flightLevel1 = flightLevel1; - } - - - /** - * @return the flightLevel2 - */ - public int getFlightLevel2() { - return flightLevel2; - } - - - /** - * @param flightLevel2 to set - */ - public void setFlightLevel2(int flightLevel2) { - this.flightLevel2 = flightLevel2; - } - - - /** - * @return the sigmetId - */ - public String getSigmetId() { - return sigmetId; - } - - - /** - * @param sigmetId to set - */ - public void setSigmetId(String sigmetId) { - this.sigmetId = sigmetId; - } - - - /** - * @return the bullMessage - */ - public String getBullMessage() { - return bullMessage; - } - - - /** - * @param bullMessage to set - */ - public void setBullMessage(String bullMessage) { - this.bullMessage = bullMessage; - } - - - /** - * @return the set of nonconvective sigmet location - */ - public Set getNonConvSigmetLocation() { - return nonConvSigmetLocation; - } - - /** - * @param nonconvsigmet the location to set - */ - public void setNonConvSigmetLocation(Set nonConvLocation) { - this.nonConvSigmetLocation = nonConvLocation; - } - - /** - * @param add conv Sigmet location to set - */ - public void addNonConvSigmetLocation(NonConvSigmetLocation pLocation){ - nonConvSigmetLocation.add(pLocation); - - } - - - /** - * Override existing set method to modify any - * classes that use the dataURI as a foreign key - */ - @Override - public void setIdentifier(Object dataURI) - { - - this.identifier = dataURI; - - - - } - - - +/** + * NonConvsigmetRecord + * + * This java class performs the mapping to the database table for NONCONVSIGMET + * + * HISTORY + * + * Date Author Description + * ------------ ---------- ----------- -------------------------- + * 06/2009 Uma Josyula Initial creation + * 09/2011 Chin Chen changed to improve purge performance and + * removed xml serialization as well + * + * This code has been developed by the SIB for use in the AWIPS2 system. + */ + +package gov.noaa.nws.ncep.common.dataplugin.nonconvsigmet; + +import java.util.Calendar; +import java.util.HashSet; +import java.util.Set; +import com.raytheon.uf.common.dataplugin.PluginDataObject; +import com.raytheon.uf.common.dataplugin.IDecoderGettable; + +import gov.noaa.nws.ncep.common.tools.IDecoderConstantsN; + +import javax.persistence.CascadeType; +import javax.persistence.Column; + +import javax.persistence.Entity; +import javax.persistence.FetchType; +import javax.persistence.JoinColumn; +import javax.persistence.OneToMany; +import javax.persistence.Table; +import javax.persistence.UniqueConstraint; + +import org.hibernate.annotations.Index; + +import com.raytheon.uf.common.dataplugin.annotations.DataURI; +import com.raytheon.uf.common.serialization.annotations.DynamicSerialize; +import com.raytheon.uf.common.serialization.annotations.DynamicSerializeElement; + +@Entity +@Table(name = "nonconvsigmet", uniqueConstraints = { @UniqueConstraint(columnNames = { "dataURI" }) }) +@DynamicSerialize + + +public class NonConvSigmetRecord extends PluginDataObject{ + + /** + * + */ + private static final long serialVersionUID = 1L; + + // reportType is "non-convective sigmet". + @Column(length=32) + @DynamicSerializeElement + private String reportType; + + // WMO header + @Column(length=32) + @DynamicSerializeElement + private String wmoHeader; + + // forecastRegion as: SL + @Column(length=8) + @DataURI(position=2) + @DynamicSerializeElement + private String forecastRegion; + + // The issue office where the report from + @Column(length=32) + @DataURI(position=1) + @DynamicSerializeElement + private String issueOffice; + + // Issue time of the report + @Column + @DataURI(position=3) + @DynamicSerializeElement + private Calendar issueTime; + + // The designator + @Column(length=8) + @DynamicSerializeElement + private String designatorBBB; + + // CorrectionFlag is a flag with values (1 or 2 or 3) + @Column(length=8) + @DynamicSerializeElement + private String correctionRemarks; + + // The awipsId from the report + @Column(length=32) + @DataURI(position=4) + @DynamicSerializeElement + private String awipsId; + + // The state list from the report + @Column(length=256) + @DynamicSerializeElement + private String stateList; + + // Start time of the report + @Column + @DynamicSerializeElement + private Calendar startTime; + + // End time of the report + @Column + @DynamicSerializeElement + private Calendar endTime; + + // The type of the hazard from the report + @Column(length=16) + @DynamicSerializeElement + private String hazardType; + + // The intensity of the hazard from the report + @Column(length=64) + @DynamicSerializeElement + private String hazardIntensity; + + // The cause for the hazard from the report + @Column(length=128) + @DynamicSerializeElement + private String hazardCause; + + // The conditions stated about the hazard from the report + @Column(length=128) + @DynamicSerializeElement + private String hazardCondition; + + // The lower flight level from the report + @Column + @DynamicSerializeElement + private int flightLevel1; + + // The upper flight level from the report + @Column + @DynamicSerializeElement + private int flightLevel2; + + // The sigmet Identifier from the report + @Column(length=32) + @DynamicSerializeElement + private String sigmetId; + + // The entire report + @Column(length=3000) + @DynamicSerializeElement + private String bullMessage; + + + /** + * Convsigmet location + */ + @DynamicSerializeElement + @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER) + @JoinColumn(name = "parentID", nullable = false) + @Index(name = "nonConvSigmetLocation_parentid_idex") + private Set nonConvSigmetLocation = new HashSet(); + + + /** + * Default Constructor + */ + public NonConvSigmetRecord() { + this.issueOffice =""; + this.wmoHeader =""; + this.bullMessage =""; + this.designatorBBB =""; + this.forecastRegion =""; + this.reportType =""; + this.correctionRemarks =""; + this.awipsId =""; + this.flightLevel1 =IDecoderConstantsN.INTEGER_MISSING; + this.flightLevel2 =IDecoderConstantsN.INTEGER_MISSING; + this.hazardCause =""; + this.hazardCondition =""; + this.hazardIntensity =""; + this.hazardType ="UNKNOWN"; + this.stateList =""; + this.sigmetId =""; + } + + /** + * Convstructs a non-consigmet record from a dataURI + * + * @param uri The dataURI + */ + public NonConvSigmetRecord(String uri) { + super(uri); + } + + @Override + public IDecoderGettable getDecoderGettable() { + // TODO Auto-generated method stub + return null; + } + + + /** + * @return the reportType + */ + public String getReportType() { + return reportType; + } + + + /** + * @param reportType to set + */ + public void setReportType(String reportType) { + this.reportType = reportType; + } + + + /** + * @return the wmoHeader + */ + public String getWmoHeader() { + return wmoHeader; + } + + + /** + * @param wmoHeader to set + */ + public void setWmoHeader(String wmoHeader) { + this.wmoHeader = wmoHeader; + } + + + /** + * @return the forecastRegion + */ + public String getForecastRegion() { + return forecastRegion; + } + + + /** + * @param forecastRegion to set + */ + public void setForecastRegion(String forecastRegion) { + this.forecastRegion = forecastRegion; + } + + + /** + * @return the issueOffice + */ + public String getIssueOffice() { + return issueOffice; + } + + + /** + * @param issueOffice to set + */ + public void setIssueOffice(String issueOffice) { + this.issueOffice = issueOffice; + } + + + /** + * @return the issueTime + */ + public Calendar getIssueTime() { + return issueTime; + } + + + /** + * @param issueTime to set + */ + public void setIssueTime(Calendar issueTime) { + this.issueTime = issueTime; + } + + + /** + * @return the designatorBBB + */ + public String getDesignatorBBB() { + return designatorBBB; + } + + + /** + * @param designatorBBB to set + */ + public void setDesignatorBBB(String designatorBBB) { + this.designatorBBB = designatorBBB; + } + + + /** + * @return the correctionFlag + */ + public String getCorrectionRemarks() { + return correctionRemarks; + } + + + /** + * @param correctionFlag to set + */ + public void setCorrectionRemarks(String correctionRemarks) { + this.correctionRemarks = correctionRemarks; + } + + + /** + * @return the awipsId + */ + public String getAwipsId() { + return awipsId; + } + + + /** + * @param awipsId to set + */ + public void setAwipsId(String awipsId) { + this.awipsId = awipsId; + } + + + /** + * @return the stateList + */ + public String getStateList() { + return stateList; + } + + + /** + * @param stateList to set + */ + public void setStateList(String stateList) { + this.stateList = stateList; + } + + + /** + * @return the startTime + */ + public Calendar getStartTime() { + return startTime; + } + + + /** + * @param startTime to set + */ + public void setStartTime(Calendar startTime) { + this.startTime = startTime; + } + + + /** + * @return the endTime + */ + public Calendar getEndTime() { + return endTime; + } + + + /** + * @param endTime to set + */ + public void setEndTime(Calendar endTime) { + this.endTime = endTime; + } + + + /** + * @return the hazardType + */ + public String getHazardType() { + return hazardType; + } + + + /** + * @param hazardType to set + */ + public void setHazardType(String hazardType) { + this.hazardType = hazardType; + } + + + /** + * @return the hazardIntensity + */ + public String getHazardIntensity() { + return hazardIntensity; + } + + + /** + * @param hazardIntensity to set + */ + public void setHazardIntensity(String hazardIntensity) { + this.hazardIntensity = hazardIntensity; + } + + + /** + * @return the hazardCause + */ + public String getHazardCause() { + return hazardCause; + } + + + /** + * @param hazardCause to set + */ + public void setHazardCause(String hazardCause) { + this.hazardCause = hazardCause; + } + + + /** + * @return the hazardCondition + */ + public String getHazardCondition() { + return hazardCondition; + } + + + /** + * @param hazardCondition to set + */ + public void setHazardCondition(String hazardCondition) { + this.hazardCondition = hazardCondition; + } + + + /** + * @return the flightLevel1 + */ + public int getFlightLevel1() { + return flightLevel1; + } + + + /** + * @param flightLevel1 to set + */ + public void setFlightLevel1(int flightLevel1) { + this.flightLevel1 = flightLevel1; + } + + + /** + * @return the flightLevel2 + */ + public int getFlightLevel2() { + return flightLevel2; + } + + + /** + * @param flightLevel2 to set + */ + public void setFlightLevel2(int flightLevel2) { + this.flightLevel2 = flightLevel2; + } + + + /** + * @return the sigmetId + */ + public String getSigmetId() { + return sigmetId; + } + + + /** + * @param sigmetId to set + */ + public void setSigmetId(String sigmetId) { + this.sigmetId = sigmetId; + } + + + /** + * @return the bullMessage + */ + public String getBullMessage() { + return bullMessage; + } + + + /** + * @param bullMessage to set + */ + public void setBullMessage(String bullMessage) { + this.bullMessage = bullMessage; + } + + + /** + * @return the set of nonconvective sigmet location + */ + public Set getNonConvSigmetLocation() { + return nonConvSigmetLocation; + } + + /** + * @param nonconvsigmet the location to set + */ + public void setNonConvSigmetLocation(Set nonConvLocation) { + this.nonConvSigmetLocation = nonConvLocation; + } + + /** + * @param add conv Sigmet location to set + */ + public void addNonConvSigmetLocation(NonConvSigmetLocation pLocation){ + nonConvSigmetLocation.add(pLocation); + + } + + + /** + * Override existing set method to modify any + * classes that use the dataURI as a foreign key + */ + @Override + public void setIdentifier(Object dataURI) + { + + this.identifier = dataURI; + + + + } + + + } \ No newline at end of file diff --git a/ncep/gov.noaa.nws.ncep.common.dataplugin.nonconvsigmet/src/gov/noaa/nws/ncep/common/dataplugin/nonconvsigmet/package-info.java b/ncep/gov.noaa.nws.ncep.common.dataplugin.nonconvsigmet/src/gov/noaa/nws/ncep/common/dataplugin/nonconvsigmet/package-info.java index a3058334a5..403310ea11 100644 --- a/ncep/gov.noaa.nws.ncep.common.dataplugin.nonconvsigmet/src/gov/noaa/nws/ncep/common/dataplugin/nonconvsigmet/package-info.java +++ b/ncep/gov.noaa.nws.ncep.common.dataplugin.nonconvsigmet/src/gov/noaa/nws/ncep/common/dataplugin/nonconvsigmet/package-info.java @@ -1,4 +1,4 @@ -/** -* Contains table record for decoder plug-ins -*/ -package gov.noaa.nws.ncep.common.dataplugin.nonconvsigmet; +/** +* Contains table record for decoder plug-ins +*/ +package gov.noaa.nws.ncep.common.dataplugin.nonconvsigmet; diff --git a/ncep/gov.noaa.nws.ncep.common.dataplugin.sgwh/gov.noaa.nws.ncep.common.dataplugin.sgwh.ecl b/ncep/gov.noaa.nws.ncep.common.dataplugin.sgwh/gov.noaa.nws.ncep.common.dataplugin.sgwh.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/ncep/gov.noaa.nws.ncep.common.dataplugin.sgwhv/gov.noaa.nws.ncep.common.dataplugin.sgwhv.ecl b/ncep/gov.noaa.nws.ncep.common.dataplugin.sgwhv/gov.noaa.nws.ncep.common.dataplugin.sgwhv.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/ncep/gov.noaa.nws.ncep.common.dataplugin.sgwhv/src/gov/noaa/nws/ncep/common/dataplugin/sgwhv/dao/SgwhvDao.java b/ncep/gov.noaa.nws.ncep.common.dataplugin.sgwhv/src/gov/noaa/nws/ncep/common/dataplugin/sgwhv/dao/SgwhvDao.java index aeba4b112d..a07218e0f6 100644 --- a/ncep/gov.noaa.nws.ncep.common.dataplugin.sgwhv/src/gov/noaa/nws/ncep/common/dataplugin/sgwhv/dao/SgwhvDao.java +++ b/ncep/gov.noaa.nws.ncep.common.dataplugin.sgwhv/src/gov/noaa/nws/ncep/common/dataplugin/sgwhv/dao/SgwhvDao.java @@ -13,68 +13,68 @@ * * @author chin chen * @version 1.0 - **/ -package gov.noaa.nws.ncep.common.dataplugin.sgwhv.dao; - -import java.util.List; + **/ +package gov.noaa.nws.ncep.common.dataplugin.sgwhv.dao; + +import java.util.List; import javax.xml.bind.JAXBException; - + import gov.noaa.nws.ncep.common.dataplugin.sgwhv.SgwhvRecord; import gov.noaa.nws.ncep.edex.common.dao.NcepPointDataPluginDao; -import com.raytheon.uf.common.dataplugin.PluginException; +import com.raytheon.uf.common.dataplugin.PluginException; import com.raytheon.uf.common.pointdata.PointDataDescription; import com.raytheon.uf.edex.database.DataAccessLayerException; - -public class SgwhvDao extends NcepPointDataPluginDao { - private PointDataDescription pdd; - - /** - * Creates a new ReccoDao - * @throws PluginException - */ - public SgwhvDao(String pluginName) throws PluginException { - super(pluginName); - } - - /** - * Retrieves a BUFRSGWHV report using the datauri . - * - * @param dataURI - * The dataURI to match against. - * @return The report record if it exists. - */ - public SgwhvRecord queryByDataURI(String dataURI) { - SgwhvRecord report = null; - List obs = null; - try { - obs = queryBySingleCriteria("dataURI", dataURI); - } catch (DataAccessLayerException e) { - e.printStackTrace(); - } - if((obs != null)&&(obs.size() > 0)) { - report = (SgwhvRecord) obs.get(0); - } - return report; - } - - /** - * Queries for to determine if a given data uri exists on the Bufrsgwhv table. - * - * @param dataUri - * The DataURI to find. - * @return An array of objects. If not null, there should only be a single - * element. - */ - public Object[] queryDataUriColumn(final String dataUri) { - - String sql = "select datauri from awips.sgwhv where datauri='" - + dataUri + "';"; - - Object[] results = executeSQLQuery(sql); - - return results; + +public class SgwhvDao extends NcepPointDataPluginDao { + private PointDataDescription pdd; + + /** + * Creates a new ReccoDao + * @throws PluginException + */ + public SgwhvDao(String pluginName) throws PluginException { + super(pluginName); + } + + /** + * Retrieves a BUFRSGWHV report using the datauri . + * + * @param dataURI + * The dataURI to match against. + * @return The report record if it exists. + */ + public SgwhvRecord queryByDataURI(String dataURI) { + SgwhvRecord report = null; + List obs = null; + try { + obs = queryBySingleCriteria("dataURI", dataURI); + } catch (DataAccessLayerException e) { + e.printStackTrace(); + } + if((obs != null)&&(obs.size() > 0)) { + report = (SgwhvRecord) obs.get(0); + } + return report; + } + + /** + * Queries for to determine if a given data uri exists on the Bufrsgwhv table. + * + * @param dataUri + * The DataURI to find. + * @return An array of objects. If not null, there should only be a single + * element. + */ + public Object[] queryDataUriColumn(final String dataUri) { + + String sql = "select datauri from awips.sgwhv where datauri='" + + dataUri + "';"; + + Object[] results = executeSQLQuery(sql); + + return results; } public PointDataDescription getPointDataDescription() throws JAXBException { if (pdd == null) { @@ -96,5 +96,5 @@ public class SgwhvDao extends NcepPointDataPluginDao { @Override public SgwhvRecord newObject() { return new SgwhvRecord(); - } -} + } +} diff --git a/ncep/gov.noaa.nws.ncep.common.dataplugin.ssha/gov.noaa.nws.ncep.common.dataplugin.ssha.ecl b/ncep/gov.noaa.nws.ncep.common.dataplugin.ssha/gov.noaa.nws.ncep.common.dataplugin.ssha.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/ncep/gov.noaa.nws.ncep.common.dataplugin.ssha/src/gov/noaa/nws/ncep/common/dataplugin/ssha/dao/SshaDao.java b/ncep/gov.noaa.nws.ncep.common.dataplugin.ssha/src/gov/noaa/nws/ncep/common/dataplugin/ssha/dao/SshaDao.java index 86d8144919..24c5b988a4 100644 --- a/ncep/gov.noaa.nws.ncep.common.dataplugin.ssha/src/gov/noaa/nws/ncep/common/dataplugin/ssha/dao/SshaDao.java +++ b/ncep/gov.noaa.nws.ncep.common.dataplugin.ssha/src/gov/noaa/nws/ncep/common/dataplugin/ssha/dao/SshaDao.java @@ -13,69 +13,69 @@ * * @author Chin Chen * @version 1.0 - **/ -package gov.noaa.nws.ncep.common.dataplugin.ssha.dao; - -import java.util.List; + **/ +package gov.noaa.nws.ncep.common.dataplugin.ssha.dao; + +import java.util.List; import javax.xml.bind.JAXBException; - + import gov.noaa.nws.ncep.common.dataplugin.ssha.SshaRecord; import gov.noaa.nws.ncep.edex.common.dao.NcepPointDataPluginDao; -import com.raytheon.uf.common.dataplugin.PluginException; +import com.raytheon.uf.common.dataplugin.PluginException; import com.raytheon.uf.common.pointdata.PointDataDescription; import com.raytheon.uf.edex.database.DataAccessLayerException; - -public class SshaDao extends NcepPointDataPluginDao { - private PointDataDescription pdd; - - /** - * Creates a new BufrsshaDao - * @throws PluginException - */ - public SshaDao(String pluginName) throws PluginException { - super(pluginName); - } - - /** - * Retrieves a BUFRSSHA report using the datauri . - * - * @param dataURI - * The dataURI to match against. - * @return The report record if it exists. - */ - public SshaRecord queryByDataURI(String dataURI) { - SshaRecord report = null; - List obs = null; - try { - obs = queryBySingleCriteria("dataURI", dataURI); - } catch (DataAccessLayerException e) { - e.printStackTrace(); - } - if((obs != null)&&(obs.size() > 0)) { - report = (SshaRecord) obs.get(0); - } - return report; - } - - /** + +public class SshaDao extends NcepPointDataPluginDao { + private PointDataDescription pdd; + + /** + * Creates a new BufrsshaDao + * @throws PluginException + */ + public SshaDao(String pluginName) throws PluginException { + super(pluginName); + } + + /** + * Retrieves a BUFRSSHA report using the datauri . + * + * @param dataURI + * The dataURI to match against. + * @return The report record if it exists. + */ + public SshaRecord queryByDataURI(String dataURI) { + SshaRecord report = null; + List obs = null; + try { + obs = queryBySingleCriteria("dataURI", dataURI); + } catch (DataAccessLayerException e) { + e.printStackTrace(); + } + if((obs != null)&&(obs.size() > 0)) { + report = (SshaRecord) obs.get(0); + } + return report; + } + + /** * Queries for to determine if a given data uri exists on the Bufrssha table.import gov.noaa.nws.ncep.common.dataplugin.sgwh.SgwhRecord; - - * - * @param dataUri - * The DataURI to find. - * @return An array of objects. If not null, there should only be a single - * element. - */ - public Object[] queryDataUriColumn(final String dataUri) { - - String sql = "select datauri from awips.ssha where datauri='" - + dataUri + "';"; - - Object[] results = executeSQLQuery(sql); - - return results; + + * + * @param dataUri + * The DataURI to find. + * @return An array of objects. If not null, there should only be a single + * element. + */ + public Object[] queryDataUriColumn(final String dataUri) { + + String sql = "select datauri from awips.ssha where datauri='" + + dataUri + "';"; + + Object[] results = executeSQLQuery(sql); + + return results; } public PointDataDescription getPointDataDescription() throws JAXBException { if (pdd == null) { @@ -97,5 +97,5 @@ public class SshaDao extends NcepPointDataPluginDao { @Override public SshaRecord newObject() { return new SshaRecord(); - } -} + } +} diff --git a/ncep/gov.noaa.nws.ncep.common.dataplugin.stormtrack/component-deploy.xml b/ncep/gov.noaa.nws.ncep.common.dataplugin.stormtrack/component-deploy.xml index 33d7dac712..7b3802d03e 100644 --- a/ncep/gov.noaa.nws.ncep.common.dataplugin.stormtrack/component-deploy.xml +++ b/ncep/gov.noaa.nws.ncep.common.dataplugin.stormtrack/component-deploy.xml @@ -1,11 +1,11 @@ - - - - - - + + + + + + \ No newline at end of file diff --git a/ncep/gov.noaa.nws.ncep.common.dataplugin.stormtrack/gov.noaa.nws.ncep.common.dataplugin.stormtrack.ecl b/ncep/gov.noaa.nws.ncep.common.dataplugin.stormtrack/gov.noaa.nws.ncep.common.dataplugin.stormtrack.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/ncep/gov.noaa.nws.ncep.common.dataplugin.stormtrack/src/gov/noaa/nws/ncep/common/dataplugin/stormtrack/dao/StormTrackDao.java b/ncep/gov.noaa.nws.ncep.common.dataplugin.stormtrack/src/gov/noaa/nws/ncep/common/dataplugin/stormtrack/dao/StormTrackDao.java index e9536e5f0d..163786a3a8 100644 --- a/ncep/gov.noaa.nws.ncep.common.dataplugin.stormtrack/src/gov/noaa/nws/ncep/common/dataplugin/stormtrack/dao/StormTrackDao.java +++ b/ncep/gov.noaa.nws.ncep.common.dataplugin.stormtrack/src/gov/noaa/nws/ncep/common/dataplugin/stormtrack/dao/StormTrackDao.java @@ -12,64 +12,64 @@ * * @author tlee * @version 1.0 - **/ -package gov.noaa.nws.ncep.common.dataplugin.stormtrack.dao; - -import java.util.List; - + **/ +package gov.noaa.nws.ncep.common.dataplugin.stormtrack.dao; + +import java.util.List; + import gov.noaa.nws.ncep.common.dataplugin.stormtrack.StormTrackRecord; import gov.noaa.nws.ncep.edex.common.dao.NcepDefaultPluginDao; -import com.raytheon.uf.common.dataplugin.PluginException; +import com.raytheon.uf.common.dataplugin.PluginException; import com.raytheon.uf.edex.database.DataAccessLayerException; - -public class StormTrackDao extends NcepDefaultPluginDao { - - - /** - * Creates a new ReccoDao - * @throws PluginException - */ - public StormTrackDao(String pluginName) throws PluginException { - super(pluginName); - } - - /** - * Retrieves a StormTrack report using the datauri . - * - * @param dataURI - * The dataURI to match against. - * @return The report record if it exists. - */ - public StormTrackRecord queryByDataURI(String dataURI) { - StormTrackRecord report = null; - List obs = null; - try { - obs = queryBySingleCriteria("dataURI", dataURI); - } catch (DataAccessLayerException e) { - e.printStackTrace(); - } - if((obs != null)&&(obs.size() > 0)) { - report = (StormTrackRecord) obs.get(0); - } - return report; - } - - /** - * Queries for to determine if a given data uri exists on the StormTrack table. - * - * @param dataUri - * The DataURI to find. - * @return An array of objects. If not null, there should only be a single - * element. - */ - public Object[] queryDataUriColumn(final String dataUri) { - - String sql = "select datauri from awips.stormtrack where datauri='" - + dataUri + "';"; - - Object[] results = executeSQLQuery(sql); - - return results; - } -} + +public class StormTrackDao extends NcepDefaultPluginDao { + + + /** + * Creates a new ReccoDao + * @throws PluginException + */ + public StormTrackDao(String pluginName) throws PluginException { + super(pluginName); + } + + /** + * Retrieves a StormTrack report using the datauri . + * + * @param dataURI + * The dataURI to match against. + * @return The report record if it exists. + */ + public StormTrackRecord queryByDataURI(String dataURI) { + StormTrackRecord report = null; + List obs = null; + try { + obs = queryBySingleCriteria("dataURI", dataURI); + } catch (DataAccessLayerException e) { + e.printStackTrace(); + } + if((obs != null)&&(obs.size() > 0)) { + report = (StormTrackRecord) obs.get(0); + } + return report; + } + + /** + * Queries for to determine if a given data uri exists on the StormTrack table. + * + * @param dataUri + * The DataURI to find. + * @return An array of objects. If not null, there should only be a single + * element. + */ + public Object[] queryDataUriColumn(final String dataUri) { + + String sql = "select datauri from awips.stormtrack where datauri='" + + dataUri + "';"; + + Object[] results = executeSQLQuery(sql); + + return results; + } +} diff --git a/ncep/gov.noaa.nws.ncep.common.dataplugin.tcm/gov.noaa.nws.ncep.common.dataplugin.tcm.ecl b/ncep/gov.noaa.nws.ncep.common.dataplugin.tcm/gov.noaa.nws.ncep.common.dataplugin.tcm.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/ncep/gov.noaa.nws.ncep.common.dataplugin.wcp/gov.noaa.nws.ncep.common.dataplugin.wcp.ecl b/ncep/gov.noaa.nws.ncep.common.dataplugin.wcp/gov.noaa.nws.ncep.common.dataplugin.wcp.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/ncep/gov.noaa.nws.ncep.common.dataplugin.wcp/src/gov/noaa/nws/ncep/common/dataplugin/wcp/dao/WcpDao.java b/ncep/gov.noaa.nws.ncep.common.dataplugin.wcp/src/gov/noaa/nws/ncep/common/dataplugin/wcp/dao/WcpDao.java index a36a65dea1..7b8639307d 100644 --- a/ncep/gov.noaa.nws.ncep.common.dataplugin.wcp/src/gov/noaa/nws/ncep/common/dataplugin/wcp/dao/WcpDao.java +++ b/ncep/gov.noaa.nws.ncep.common.dataplugin.wcp/src/gov/noaa/nws/ncep/common/dataplugin/wcp/dao/WcpDao.java @@ -14,67 +14,67 @@ * * @author fjyen * @version 1.0 - **/ -package gov.noaa.nws.ncep.common.dataplugin.wcp.dao; - -import java.util.List; - -import gov.noaa.nws.ncep.common.dataplugin.wcp.WcpRecord; + **/ +package gov.noaa.nws.ncep.common.dataplugin.wcp.dao; -import com.raytheon.uf.common.dataplugin.PluginException; +import java.util.List; + +import gov.noaa.nws.ncep.common.dataplugin.wcp.WcpRecord; + +import com.raytheon.uf.common.dataplugin.PluginException; import com.raytheon.uf.common.dataplugin.persist.IPersistable; import com.raytheon.uf.common.datastorage.IDataStore; import com.raytheon.uf.edex.database.DataAccessLayerException; import com.raytheon.uf.edex.database.plugin.PluginDao; - -public class WcpDao extends PluginDao { - - - /** - * Creates a new ReccoDao - * @throws PluginException - */ - public WcpDao(String pluginName) throws PluginException { - super(pluginName); - } - - /** - * Retrieves a WCP report using the datauri . - * - * @param dataURI - * The dataURI to match against. - * @return The report record if it exists. - */ - public WcpRecord queryByDataURI(String dataURI) { - WcpRecord report = null; - List obs = null; - try { - obs = queryBySingleCriteria("dataURI", dataURI); - } catch (DataAccessLayerException e) { - e.printStackTrace(); - } - if((obs != null)&&(obs.size() > 0)) { - report = (WcpRecord) obs.get(0); - } - return report; - } - - /** - * Queries for to determine if a given data uri exists on the WCP table. - * - * @param dataUri - * The DataURI to find. - * @return An array of objects. If not null, there should only be a single - * element. - */ - public Object[] queryDataUriColumn(final String dataUri) { - - String sql = "select datauri from awips.wcp where datauri='" - + dataUri + "';"; - - Object[] results = executeSQLQuery(sql); - - return results; + +public class WcpDao extends PluginDao { + + + /** + * Creates a new ReccoDao + * @throws PluginException + */ + public WcpDao(String pluginName) throws PluginException { + super(pluginName); + } + + /** + * Retrieves a WCP report using the datauri . + * + * @param dataURI + * The dataURI to match against. + * @return The report record if it exists. + */ + public WcpRecord queryByDataURI(String dataURI) { + WcpRecord report = null; + List obs = null; + try { + obs = queryBySingleCriteria("dataURI", dataURI); + } catch (DataAccessLayerException e) { + e.printStackTrace(); + } + if((obs != null)&&(obs.size() > 0)) { + report = (WcpRecord) obs.get(0); + } + return report; + } + + /** + * Queries for to determine if a given data uri exists on the WCP table. + * + * @param dataUri + * The DataURI to find. + * @return An array of objects. If not null, there should only be a single + * element. + */ + public Object[] queryDataUriColumn(final String dataUri) { + + String sql = "select datauri from awips.wcp where datauri='" + + dataUri + "';"; + + Object[] results = executeSQLQuery(sql); + + return results; } @Override @@ -82,5 +82,5 @@ public class WcpDao extends PluginDao { IPersistable obj) throws Exception { // TODO Auto-generated method stub return null; - } -} + } +} diff --git a/ncep/gov.noaa.nws.ncep.common.log/gov.noaa.nws.ncep.common.log.ecl b/ncep/gov.noaa.nws.ncep.common.log/gov.noaa.nws.ncep.common.log.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/ncep/gov.noaa.nws.ncep.common.log4j.config/gov.noaa.nws.ncep.common.log4j.config.ecl b/ncep/gov.noaa.nws.ncep.common.log4j.config/gov.noaa.nws.ncep.common.log4j.config.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/ncep/gov.noaa.nws.ncep.common/component-deploy.xml b/ncep/gov.noaa.nws.ncep.common/component-deploy.xml index e0fe48e841..d37f577e73 100644 --- a/ncep/gov.noaa.nws.ncep.common/component-deploy.xml +++ b/ncep/gov.noaa.nws.ncep.common/component-deploy.xml @@ -1,11 +1,11 @@ - - - - - - + + + + + + \ No newline at end of file diff --git a/ncep/gov.noaa.nws.ncep.common/gov.noaa.nws.ncep.common.ecl b/ncep/gov.noaa.nws.ncep.common/gov.noaa.nws.ncep.common.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/ncep/gov.noaa.nws.ncep.edex.common/gov.noaa.nws.ncep.edex.common.ecl b/ncep/gov.noaa.nws.ncep.edex.common/gov.noaa.nws.ncep.edex.common.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/ncep/gov.noaa.nws.ncep.edex.common/src/gov/noaa/nws/ncep/edex/common/stationTables/IStationField.java b/ncep/gov.noaa.nws.ncep.edex.common/src/gov/noaa/nws/ncep/edex/common/stationTables/IStationField.java index f61765c1bd..1277e1931e 100644 --- a/ncep/gov.noaa.nws.ncep.edex.common/src/gov/noaa/nws/ncep/edex/common/stationTables/IStationField.java +++ b/ncep/gov.noaa.nws.ncep.edex.common/src/gov/noaa/nws/ncep/edex/common/stationTables/IStationField.java @@ -1,19 +1,19 @@ -package gov.noaa.nws.ncep.edex.common.stationTables; - -public interface IStationField { - - public static enum StationField { - STID, // station id - STNM, // station number - NAME, // station name - ST, // state - CO, // country - //LAT, // latitude - //LON, // longitude - //ELV, // elevation - //PRI, // priority - WFO, // WFO - LOC // location - } - -} +package gov.noaa.nws.ncep.edex.common.stationTables; + +public interface IStationField { + + public static enum StationField { + STID, // station id + STNM, // station number + NAME, // station name + ST, // state + CO, // country + //LAT, // latitude + //LON, // longitude + //ELV, // elevation + //PRI, // priority + WFO, // WFO + LOC // location + } + +} diff --git a/ncep/gov.noaa.nws.ncep.edex.common/src/gov/noaa/nws/ncep/edex/common/stationTables/ObjectFactory.java b/ncep/gov.noaa.nws.ncep.edex.common/src/gov/noaa/nws/ncep/edex/common/stationTables/ObjectFactory.java index b7c82ddfab..7fe56dbf70 100644 --- a/ncep/gov.noaa.nws.ncep.edex.common/src/gov/noaa/nws/ncep/edex/common/stationTables/ObjectFactory.java +++ b/ncep/gov.noaa.nws.ncep.edex.common/src/gov/noaa/nws/ncep/edex/common/stationTables/ObjectFactory.java @@ -1,168 +1,168 @@ -// -// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.3 in JDK 1.6 -// See http://java.sun.com/xml/jaxb -// Any modifications to this file will be lost upon recompilation of the source schema. -// Generated on: 2009.06.08 at 02:36:43 PM EDT -// - - -package gov.noaa.nws.ncep.edex.common.stationTables; - -import javax.xml.bind.JAXBElement; -import javax.xml.bind.annotation.XmlElementDecl; -import javax.xml.bind.annotation.XmlRegistry; -import javax.xml.namespace.QName; - - -/** - * This object contains factory methods for each - * Java content interface and Java element interface - * generated in the gov.noaa.nws.ncep.viz.common.stnTables package. - *

An ObjectFactory allows you to programatically - * construct new instances of the Java representation - * for XML content. The Java representation of XML - * content can consist of schema derived interfaces - * and classes representing the binding of schema - * type definitions, element declarations and model - * groups. Factory methods for each of these are - * provided in this class. - * - */ -@XmlRegistry -public class ObjectFactory { - - private final static QName _Wfo_QNAME = new QName("", "wfo"); - private final static QName _Stid_QNAME = new QName("", "stid"); - private final static QName _Stnnum_QNAME = new QName("", "stnnum"); - private final static QName _Location_QNAME = new QName("", "location"); - private final static QName _Priority_QNAME = new QName("", "priority"); - private final static QName _Elevation_QNAME = new QName("", "elevation"); - private final static QName _State_QNAME = new QName("", "state"); - private final static QName _Longitude_QNAME = new QName("", "longitude"); - private final static QName _Stnname_QNAME = new QName("", "stnname"); - private final static QName _Latitude_QNAME = new QName("", "latitude"); - private final static QName _Country_QNAME = new QName("", "country"); - - /** - * Create a new ObjectFactory that can be used to create new instances of schema derived classes for package: gov.noaa.nws.ncep.viz.common.stnTables - * - */ - public ObjectFactory() { - } - - /** - * Create an instance of {@link StationList } - * - */ - public StationList createStationList() { - return new StationList(); - } - - /** - * Create an instance of {@link Station } - * - */ - public Station createStation() { - return new Station(); - } - - /** - * Create an instance of {@link JAXBElement }{@code <}{@link String }{@code >}} - * - */ - @XmlElementDecl(namespace = "", name = "wfo") - public JAXBElement createWfo(String value) { - return new JAXBElement(_Wfo_QNAME, String.class, null, value); - } - - /** - * Create an instance of {@link JAXBElement }{@code <}{@link String }{@code >}} - * - */ - @XmlElementDecl(namespace = "", name = "stid") - public JAXBElement createStid(String value) { - return new JAXBElement(_Stid_QNAME, String.class, null, value); - } - - /** - * Create an instance of {@link JAXBElement }{@code <}{@link String }{@code >}} - * - */ - @XmlElementDecl(namespace = "", name = "stnnum") - public JAXBElement createStnnum(String value) { - return new JAXBElement(_Stnnum_QNAME, String.class, null, value); - } - - /** - * Create an instance of {@link JAXBElement }{@code <}{@link String }{@code >}} - * - */ - @XmlElementDecl(namespace = "", name = "location") - public JAXBElement createLocation(String value) { - return new JAXBElement(_Location_QNAME, String.class, null, value); - } - - /** - * Create an instance of {@link JAXBElement }{@code <}{@link Integer }{@code >}} - * - */ - @XmlElementDecl(namespace = "", name = "priority") - public JAXBElement createPriority(Integer value) { - return new JAXBElement(_Priority_QNAME, Integer.class, null, value); - } - - /** - * Create an instance of {@link JAXBElement }{@code <}{@link Integer }{@code >}} - * - */ - @XmlElementDecl(namespace = "", name = "elevation") - public JAXBElement createElevation(Integer value) { - return new JAXBElement(_Elevation_QNAME, Integer.class, null, value); - } - - /** - * Create an instance of {@link JAXBElement }{@code <}{@link String }{@code >}} - * - */ - @XmlElementDecl(namespace = "", name = "state") - public JAXBElement createState(String value) { - return new JAXBElement(_State_QNAME, String.class, null, value); - } - - /** - * Create an instance of {@link JAXBElement }{@code <}{@link Float }{@code >}} - * - */ - @XmlElementDecl(namespace = "", name = "longitude") - public JAXBElement createLongitude(Float value) { - return new JAXBElement(_Longitude_QNAME, Float.class, null, value); - } - - /** - * Create an instance of {@link JAXBElement }{@code <}{@link String }{@code >}} - * - */ - @XmlElementDecl(namespace = "", name = "stnname") - public JAXBElement createStnname(String value) { - return new JAXBElement(_Stnname_QNAME, String.class, null, value); - } - - /** - * Create an instance of {@link JAXBElement }{@code <}{@link Float }{@code >}} - * - */ - @XmlElementDecl(namespace = "", name = "latitude") - public JAXBElement createLatitude(Float value) { - return new JAXBElement(_Latitude_QNAME, Float.class, null, value); - } - - /** - * Create an instance of {@link JAXBElement }{@code <}{@link String }{@code >}} - * - */ - @XmlElementDecl(namespace = "", name = "country") - public JAXBElement createCountry(String value) { - return new JAXBElement(_Country_QNAME, String.class, null, value); - } - -} +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.3 in JDK 1.6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2009.06.08 at 02:36:43 PM EDT +// + + +package gov.noaa.nws.ncep.edex.common.stationTables; + +import javax.xml.bind.JAXBElement; +import javax.xml.bind.annotation.XmlElementDecl; +import javax.xml.bind.annotation.XmlRegistry; +import javax.xml.namespace.QName; + + +/** + * This object contains factory methods for each + * Java content interface and Java element interface + * generated in the gov.noaa.nws.ncep.viz.common.stnTables package. + *

An ObjectFactory allows you to programatically + * construct new instances of the Java representation + * for XML content. The Java representation of XML + * content can consist of schema derived interfaces + * and classes representing the binding of schema + * type definitions, element declarations and model + * groups. Factory methods for each of these are + * provided in this class. + * + */ +@XmlRegistry +public class ObjectFactory { + + private final static QName _Wfo_QNAME = new QName("", "wfo"); + private final static QName _Stid_QNAME = new QName("", "stid"); + private final static QName _Stnnum_QNAME = new QName("", "stnnum"); + private final static QName _Location_QNAME = new QName("", "location"); + private final static QName _Priority_QNAME = new QName("", "priority"); + private final static QName _Elevation_QNAME = new QName("", "elevation"); + private final static QName _State_QNAME = new QName("", "state"); + private final static QName _Longitude_QNAME = new QName("", "longitude"); + private final static QName _Stnname_QNAME = new QName("", "stnname"); + private final static QName _Latitude_QNAME = new QName("", "latitude"); + private final static QName _Country_QNAME = new QName("", "country"); + + /** + * Create a new ObjectFactory that can be used to create new instances of schema derived classes for package: gov.noaa.nws.ncep.viz.common.stnTables + * + */ + public ObjectFactory() { + } + + /** + * Create an instance of {@link StationList } + * + */ + public StationList createStationList() { + return new StationList(); + } + + /** + * Create an instance of {@link Station } + * + */ + public Station createStation() { + return new Station(); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link String }{@code >}} + * + */ + @XmlElementDecl(namespace = "", name = "wfo") + public JAXBElement createWfo(String value) { + return new JAXBElement(_Wfo_QNAME, String.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link String }{@code >}} + * + */ + @XmlElementDecl(namespace = "", name = "stid") + public JAXBElement createStid(String value) { + return new JAXBElement(_Stid_QNAME, String.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link String }{@code >}} + * + */ + @XmlElementDecl(namespace = "", name = "stnnum") + public JAXBElement createStnnum(String value) { + return new JAXBElement(_Stnnum_QNAME, String.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link String }{@code >}} + * + */ + @XmlElementDecl(namespace = "", name = "location") + public JAXBElement createLocation(String value) { + return new JAXBElement(_Location_QNAME, String.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link Integer }{@code >}} + * + */ + @XmlElementDecl(namespace = "", name = "priority") + public JAXBElement createPriority(Integer value) { + return new JAXBElement(_Priority_QNAME, Integer.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link Integer }{@code >}} + * + */ + @XmlElementDecl(namespace = "", name = "elevation") + public JAXBElement createElevation(Integer value) { + return new JAXBElement(_Elevation_QNAME, Integer.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link String }{@code >}} + * + */ + @XmlElementDecl(namespace = "", name = "state") + public JAXBElement createState(String value) { + return new JAXBElement(_State_QNAME, String.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link Float }{@code >}} + * + */ + @XmlElementDecl(namespace = "", name = "longitude") + public JAXBElement createLongitude(Float value) { + return new JAXBElement(_Longitude_QNAME, Float.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link String }{@code >}} + * + */ + @XmlElementDecl(namespace = "", name = "stnname") + public JAXBElement createStnname(String value) { + return new JAXBElement(_Stnname_QNAME, String.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link Float }{@code >}} + * + */ + @XmlElementDecl(namespace = "", name = "latitude") + public JAXBElement createLatitude(Float value) { + return new JAXBElement(_Latitude_QNAME, Float.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link String }{@code >}} + * + */ + @XmlElementDecl(namespace = "", name = "country") + public JAXBElement createCountry(String value) { + return new JAXBElement(_Country_QNAME, String.class, null, value); + } + +} diff --git a/ncep/gov.noaa.nws.ncep.edex.common/src/gov/noaa/nws/ncep/edex/common/stationTables/Station.java b/ncep/gov.noaa.nws.ncep.edex.common/src/gov/noaa/nws/ncep/edex/common/stationTables/Station.java index 16e73c4d48..dd7a0f878d 100644 --- a/ncep/gov.noaa.nws.ncep.edex.common/src/gov/noaa/nws/ncep/edex/common/stationTables/Station.java +++ b/ncep/gov.noaa.nws.ncep.edex.common/src/gov/noaa/nws/ncep/edex/common/stationTables/Station.java @@ -1,339 +1,339 @@ -// -// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.3 in JDK 1.6 -// See http://java.sun.com/xml/jaxb -// Any modifications to this file will be lost upon recompilation of the source schema. -// Generated on: 2009.06.08 at 02:36:43 PM EDT -// - - -package gov.noaa.nws.ncep.edex.common.stationTables; - -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.XmlType; - - -/** - *

Java class for anonymous complex type. - * - *

The following schema fragment specifies the expected content contained within this class. - * - *

- * <complexType>
- *   <complexContent>
- *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
- *       <sequence>
- *         <element ref="{}stid" minOccurs="0"/>
- *         <element ref="{}stnnum" minOccurs="0"/>
- *         <element ref="{}stnname" minOccurs="0"/>
- *         <element ref="{}state" minOccurs="0"/>
- *         <element ref="{}country" minOccurs="0"/>
- *         <element ref="{}latitude" minOccurs="0"/>
- *         <element ref="{}longitude" minOccurs="0"/>
- *         <element ref="{}elevation" minOccurs="0"/>
- *         <element ref="{}priority" minOccurs="0"/>
- *         <element ref="{}location" minOccurs="0"/>
- *         <element ref="{}wfo" minOccurs="0"/>
- *       </sequence>
- *     </restriction>
- *   </complexContent>
- * </complexType>
- * 
- * - * - */ -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "", propOrder = { - "stid", - "stnnum", - "stnname", - "state", - "country", - "latitude", - "longitude", - "elevation", - "priority", - "location", - "wfo" -}) -@XmlRootElement(name = "station") -public class Station { - - protected String stid; - protected String stnnum; - protected String stnname; - protected String state; - protected String country; - protected Float latitude; - protected Float longitude; - protected Integer elevation; - protected Integer priority; - protected String location; - protected String wfo; - - /** - * Gets the value of the stid property. - * - * @return - * possible object is - * {@link String } - * - */ - public String getStid() { - return stid; - } - - /** - * Sets the value of the stid property. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setStid(String value) { - this.stid = value; - } - - /** - * Gets the value of the stnnum property. - * - * @return - * possible object is - * {@link String } - * - */ - public String getStnnum() { - return stnnum; - } - - /** - * Sets the value of the stnnum property. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setStnnum(String value) { - this.stnnum = value; - } - - /** - * Gets the value of the stnname property. - * - * @return - * possible object is - * {@link String } - * - */ - public String getStnname() { - return stnname; - } - - /** - * Sets the value of the stnname property. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setStnname(String value) { - this.stnname = value; - } - - /** - * Gets the value of the state property. - * - * @return - * possible object is - * {@link String } - * - */ - public String getState() { - return state; - } - - /** - * Sets the value of the state property. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setState(String value) { - this.state = value; - } - - /** - * Gets the value of the country property. - * - * @return - * possible object is - * {@link String } - * - */ - public String getCountry() { - return country; - } - - /** - * Sets the value of the country property. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setCountry(String value) { - this.country = value; - } - - /** - * Gets the value of the latitude property. - * - * @return - * possible object is - * {@link Float } - * - */ - public Float getLatitude() { - return latitude; - } - - /** - * Sets the value of the latitude property. - * - * @param value - * allowed object is - * {@link Float } - * - */ - public void setLatitude(Float value) { - this.latitude = value; - } - - /** - * Gets the value of the longitude property. - * - * @return - * possible object is - * {@link Float } - * - */ - public Float getLongitude() { - return longitude; - } - - /** - * Sets the value of the longitude property. - * - * @param value - * allowed object is - * {@link Float } - * - */ - public void setLongitude(Float value) { - this.longitude = value; - } - - /** - * Gets the value of the elevation property. - * - * @return - * possible object is - * {@link Integer } - * - */ - public Integer getElevation() { - return elevation; - } - - /** - * Sets the value of the elevation property. - * - * @param value - * allowed object is - * {@link Integer } - * - */ - public void setElevation(Integer value) { - this.elevation = value; - } - - /** - * Gets the value of the priority property. - * - * @return - * possible object is - * {@link Integer } - * - */ - public Integer getPriority() { - return priority; - } - - /** - * Sets the value of the priority property. - * - * @param value - * allowed object is - * {@link Integer } - * - */ - public void setPriority(Integer value) { - this.priority = value; - } - - /** - * Gets the value of the location property. - * - * @return - * possible object is - * {@link String } - * - */ - public String getLocation() { - return location; - } - - /** - * Sets the value of the location property. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setLocation(String value) { - this.location = value; - } - - /** - * Gets the value of the wfo property. - * - * @return - * possible object is - * {@link String } - * - */ - public String getWfo() { - return wfo; - } - - /** - * Sets the value of the wfo property. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setWfo(String value) { - this.wfo = value; - } - -} +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.3 in JDK 1.6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2009.06.08 at 02:36:43 PM EDT +// + + +package gov.noaa.nws.ncep.edex.common.stationTables; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.XmlType; + + +/** + *

Java class for anonymous complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType>
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <sequence>
+ *         <element ref="{}stid" minOccurs="0"/>
+ *         <element ref="{}stnnum" minOccurs="0"/>
+ *         <element ref="{}stnname" minOccurs="0"/>
+ *         <element ref="{}state" minOccurs="0"/>
+ *         <element ref="{}country" minOccurs="0"/>
+ *         <element ref="{}latitude" minOccurs="0"/>
+ *         <element ref="{}longitude" minOccurs="0"/>
+ *         <element ref="{}elevation" minOccurs="0"/>
+ *         <element ref="{}priority" minOccurs="0"/>
+ *         <element ref="{}location" minOccurs="0"/>
+ *         <element ref="{}wfo" minOccurs="0"/>
+ *       </sequence>
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "", propOrder = { + "stid", + "stnnum", + "stnname", + "state", + "country", + "latitude", + "longitude", + "elevation", + "priority", + "location", + "wfo" +}) +@XmlRootElement(name = "station") +public class Station { + + protected String stid; + protected String stnnum; + protected String stnname; + protected String state; + protected String country; + protected Float latitude; + protected Float longitude; + protected Integer elevation; + protected Integer priority; + protected String location; + protected String wfo; + + /** + * Gets the value of the stid property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getStid() { + return stid; + } + + /** + * Sets the value of the stid property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setStid(String value) { + this.stid = value; + } + + /** + * Gets the value of the stnnum property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getStnnum() { + return stnnum; + } + + /** + * Sets the value of the stnnum property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setStnnum(String value) { + this.stnnum = value; + } + + /** + * Gets the value of the stnname property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getStnname() { + return stnname; + } + + /** + * Sets the value of the stnname property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setStnname(String value) { + this.stnname = value; + } + + /** + * Gets the value of the state property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getState() { + return state; + } + + /** + * Sets the value of the state property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setState(String value) { + this.state = value; + } + + /** + * Gets the value of the country property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getCountry() { + return country; + } + + /** + * Sets the value of the country property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setCountry(String value) { + this.country = value; + } + + /** + * Gets the value of the latitude property. + * + * @return + * possible object is + * {@link Float } + * + */ + public Float getLatitude() { + return latitude; + } + + /** + * Sets the value of the latitude property. + * + * @param value + * allowed object is + * {@link Float } + * + */ + public void setLatitude(Float value) { + this.latitude = value; + } + + /** + * Gets the value of the longitude property. + * + * @return + * possible object is + * {@link Float } + * + */ + public Float getLongitude() { + return longitude; + } + + /** + * Sets the value of the longitude property. + * + * @param value + * allowed object is + * {@link Float } + * + */ + public void setLongitude(Float value) { + this.longitude = value; + } + + /** + * Gets the value of the elevation property. + * + * @return + * possible object is + * {@link Integer } + * + */ + public Integer getElevation() { + return elevation; + } + + /** + * Sets the value of the elevation property. + * + * @param value + * allowed object is + * {@link Integer } + * + */ + public void setElevation(Integer value) { + this.elevation = value; + } + + /** + * Gets the value of the priority property. + * + * @return + * possible object is + * {@link Integer } + * + */ + public Integer getPriority() { + return priority; + } + + /** + * Sets the value of the priority property. + * + * @param value + * allowed object is + * {@link Integer } + * + */ + public void setPriority(Integer value) { + this.priority = value; + } + + /** + * Gets the value of the location property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getLocation() { + return location; + } + + /** + * Sets the value of the location property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setLocation(String value) { + this.location = value; + } + + /** + * Gets the value of the wfo property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getWfo() { + return wfo; + } + + /** + * Sets the value of the wfo property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setWfo(String value) { + this.wfo = value; + } + +} diff --git a/ncep/gov.noaa.nws.ncep.edex.common/src/gov/noaa/nws/ncep/edex/common/stationTables/StationComparator.java b/ncep/gov.noaa.nws.ncep.edex.common/src/gov/noaa/nws/ncep/edex/common/stationTables/StationComparator.java index 0a2a02e19c..ce509d026f 100644 --- a/ncep/gov.noaa.nws.ncep.edex.common/src/gov/noaa/nws/ncep/edex/common/stationTables/StationComparator.java +++ b/ncep/gov.noaa.nws.ncep.edex.common/src/gov/noaa/nws/ncep/edex/common/stationTables/StationComparator.java @@ -1,61 +1,61 @@ -package gov.noaa.nws.ncep.edex.common.stationTables; - -import java.util.Comparator; - -/** - * Comparator for Station fields. - *
- * 
- * SOFTWARE HISTORY
- * 
- * Date         Ticket#    Engineer    Description
- * ------------ ---------- ----------- --------------------------
- * 06/09		134  		M. Li	   Initial Creation
- *                       
- * 
- * - * @author mli - * @version 1 - */ - -public class StationComparator implements Comparator, IStationField { - - private StationField field; - - public StationComparator(StationField f) { - this.field = f; - } - - public int compare(Station o1, Station o2) { - switch (field) { - case STID: - return o1.getStid().compareToIgnoreCase(o2.getStid()); - case STNM: - return o1.getStnnum().compareToIgnoreCase(o2.getStnnum()); - case NAME: - return o1.getStnnum().compareToIgnoreCase(o2.getStnnum()); - case ST: - return o1.getState().compareToIgnoreCase(o2.getState()); - case CO: - return o1.getCountry().compareToIgnoreCase(o2.getCountry()); - /* - case LAT: - return o1.getLatitude().compareTo(o2.getLatitude()); - case LON: - return o1.getLongitude().compareTo(o2.getLongitude()); - case ELV: - return o1.getElevation() - o2.getElevation(); - case PRI: - return o1.getPriority() - o2.getPriority(); - */ - case WFO: - return o1.getWfo().compareToIgnoreCase(o2.getWfo()); - case LOC: - return o1.getLocation().compareToIgnoreCase(o2.getLocation()); - - default: - return 0; - } - - } +package gov.noaa.nws.ncep.edex.common.stationTables; + +import java.util.Comparator; + +/** + * Comparator for Station fields. + *
+ * 
+ * SOFTWARE HISTORY
+ * 
+ * Date         Ticket#    Engineer    Description
+ * ------------ ---------- ----------- --------------------------
+ * 06/09		134  		M. Li	   Initial Creation
+ *                       
+ * 
+ * + * @author mli + * @version 1 + */ + +public class StationComparator implements Comparator, IStationField { + + private StationField field; + + public StationComparator(StationField f) { + this.field = f; + } + + public int compare(Station o1, Station o2) { + switch (field) { + case STID: + return o1.getStid().compareToIgnoreCase(o2.getStid()); + case STNM: + return o1.getStnnum().compareToIgnoreCase(o2.getStnnum()); + case NAME: + return o1.getStnnum().compareToIgnoreCase(o2.getStnnum()); + case ST: + return o1.getState().compareToIgnoreCase(o2.getState()); + case CO: + return o1.getCountry().compareToIgnoreCase(o2.getCountry()); + /* + case LAT: + return o1.getLatitude().compareTo(o2.getLatitude()); + case LON: + return o1.getLongitude().compareTo(o2.getLongitude()); + case ELV: + return o1.getElevation() - o2.getElevation(); + case PRI: + return o1.getPriority() - o2.getPriority(); + */ + case WFO: + return o1.getWfo().compareToIgnoreCase(o2.getWfo()); + case LOC: + return o1.getLocation().compareToIgnoreCase(o2.getLocation()); + + default: + return 0; + } + + } } \ No newline at end of file diff --git a/ncep/gov.noaa.nws.ncep.edex.common/src/gov/noaa/nws/ncep/edex/common/stationTables/StationList.java b/ncep/gov.noaa.nws.ncep.edex.common/src/gov/noaa/nws/ncep/edex/common/stationTables/StationList.java index 6ea06463d4..e8826da29d 100644 --- a/ncep/gov.noaa.nws.ncep.edex.common/src/gov/noaa/nws/ncep/edex/common/stationTables/StationList.java +++ b/ncep/gov.noaa.nws.ncep.edex.common/src/gov/noaa/nws/ncep/edex/common/stationTables/StationList.java @@ -1,76 +1,76 @@ -// -// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.3 in JDK 1.6 -// See http://java.sun.com/xml/jaxb -// Any modifications to this file will be lost upon recompilation of the source schema. -// Generated on: 2009.06.08 at 02:36:43 PM EDT -// - - -package gov.noaa.nws.ncep.edex.common.stationTables; - -import java.util.ArrayList; -import java.util.List; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.XmlType; - - -/** - *

Java class for anonymous complex type. - * - *

The following schema fragment specifies the expected content contained within this class. - * - *

- * <complexType>
- *   <complexContent>
- *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
- *       <sequence>
- *         <element ref="{}station" maxOccurs="unbounded" minOccurs="0"/>
- *       </sequence>
- *     </restriction>
- *   </complexContent>
- * </complexType>
- * 
- * - * - */ -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "", propOrder = { - "station" -}) -@XmlRootElement(name = "stationList") -public class StationList { - - protected List station; - - /** - * Gets the value of the station property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the station property. - * - *

- * For example, to add a new item, do as follows: - *

-     *    getStation().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link Station } - * - * - */ - public List getStation() { - if (station == null) { - station = new ArrayList(); - } - return this.station; - } - -} +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.3 in JDK 1.6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2009.06.08 at 02:36:43 PM EDT +// + + +package gov.noaa.nws.ncep.edex.common.stationTables; + +import java.util.ArrayList; +import java.util.List; +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.XmlType; + + +/** + *

Java class for anonymous complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType>
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <sequence>
+ *         <element ref="{}station" maxOccurs="unbounded" minOccurs="0"/>
+ *       </sequence>
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "", propOrder = { + "station" +}) +@XmlRootElement(name = "stationList") +public class StationList { + + protected List station; + + /** + * Gets the value of the station property. + * + *

+ * This accessor method returns a reference to the live list, + * not a snapshot. Therefore any modification you make to the + * returned list will be present inside the JAXB object. + * This is why there is not a set method for the station property. + * + *

+ * For example, to add a new item, do as follows: + *

+     *    getStation().add(newItem);
+     * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list + * {@link Station } + * + * + */ + public List getStation() { + if (station == null) { + station = new ArrayList(); + } + return this.station; + } + +} diff --git a/ncep/gov.noaa.nws.ncep.edex.common/src/gov/noaa/nws/ncep/edex/common/stationTables/StationTable.java b/ncep/gov.noaa.nws.ncep.edex.common/src/gov/noaa/nws/ncep/edex/common/stationTables/StationTable.java index 99fa8b3ddf..432fed382e 100644 --- a/ncep/gov.noaa.nws.ncep.edex.common/src/gov/noaa/nws/ncep/edex/common/stationTables/StationTable.java +++ b/ncep/gov.noaa.nws.ncep.edex.common/src/gov/noaa/nws/ncep/edex/common/stationTables/StationTable.java @@ -1,91 +1,91 @@ -package gov.noaa.nws.ncep.edex.common.stationTables; - -import java.io.File; -import java.io.FileNotFoundException; -import java.io.FileReader; -import java.util.ArrayList; -import java.util.Collections; +package gov.noaa.nws.ncep.edex.common.stationTables; + +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileReader; +import java.util.ArrayList; +import java.util.Collections; import java.util.Iterator; -import java.util.List; - -import javax.xml.bind.JAXBContext; -import javax.xml.bind.JAXBException; -import javax.xml.bind.Unmarshaller; - +import java.util.List; + +import javax.xml.bind.JAXBContext; +import javax.xml.bind.JAXBException; +import javax.xml.bind.Unmarshaller; + import com.vividsolutions.jts.geom.Coordinate; import com.vividsolutions.jts.geom.Envelope; import com.vividsolutions.jts.index.quadtree.Quadtree; import org.geotools.referencing.GeodeticCalculator; -/** - * This class reads a station table from an xml file and contains a list of stations. - * This class also provide general station search functions given station field, and - * field value. - * - *

- * 
- * SOFTWARE HISTORY
- * 
- * Date         Ticket#    Engineer    Description
- * ------------ ---------- ----------- --------------------------
- * 06/09  		?    	   	B. Yin   Initial Creation
- * 06/09		134			M. Li		Add station search
+/**
+ * This class reads a station table from an xml file and contains a list of stations.
+ * This class also provide general station search functions given station field, and
+ * field value.
+ * 
+ * 
+ * 
+ * SOFTWARE HISTORY
+ * 
+ * Date         Ticket#    Engineer    Description
+ * ------------ ---------- ----------- --------------------------
+ * 06/09  		?    	   	B. Yin   Initial Creation
+ * 06/09		134			M. Li		Add station search
  * 10/09        39/87/114   L. Lin   Make "last" as private StationField.
  * 12/09		159			B. Yin	 Add getNearestStation(...)
- *                       
- * 
- * - * @author bingfan - * @version 1 - */ - -public class StationTable implements IStationField { - - private final String PACKAGE = "gov.noaa.nws.ncep.edex.common.stationTables"; - - private List stationList; - + * + *
+ * + * @author bingfan + * @version 1 + */ + +public class StationTable implements IStationField { + + private final String PACKAGE = "gov.noaa.nws.ncep.edex.common.stationTables"; + + private List stationList; + private StationField last = null; private Quadtree stTree = null; private final double DIST = 1.0; - - /** - * Constructor. - * @param tableFileName - full path of the xml table file - */ - public StationTable( String tableFileName ) { - - try{ - stationList = readStationTable( tableFileName ); - } - catch ( JAXBException exp ){ - stationList = null; - exp.printStackTrace(); - } - - } - - /** - * Reads the contents of the input station table file - * @param xmlFilename - full path of the xml table name - * @return - a list of stations - * @throws JAXBException - */ - private List readStationTable( String xmlFilename ) throws JAXBException{ - - File xmlFile = new File(xmlFilename); - - JAXBContext context = JAXBContext.newInstance( - PACKAGE); - Unmarshaller unmarshaller = context.createUnmarshaller(); - StationList stns = null; - - try { - stns = (StationList)unmarshaller.unmarshal( - new FileReader(xmlFile)); - List listOfItems = stns.getStation(); + + /** + * Constructor. + * @param tableFileName - full path of the xml table file + */ + public StationTable( String tableFileName ) { + + try{ + stationList = readStationTable( tableFileName ); + } + catch ( JAXBException exp ){ + stationList = null; + exp.printStackTrace(); + } + + } + + /** + * Reads the contents of the input station table file + * @param xmlFilename - full path of the xml table name + * @return - a list of stations + * @throws JAXBException + */ + private List readStationTable( String xmlFilename ) throws JAXBException{ + + File xmlFile = new File(xmlFilename); + + JAXBContext context = JAXBContext.newInstance( + PACKAGE); + Unmarshaller unmarshaller = context.createUnmarshaller(); + StationList stns = null; + + try { + stns = (StationList)unmarshaller.unmarshal( + new FileReader(xmlFile)); + List listOfItems = stns.getStation(); /* * save stations in a Quadtree for efficient spatial query @@ -97,136 +97,136 @@ public class StationTable implements IStationField { stTree.insert(env, st); } - return listOfItems; - - } catch (FileNotFoundException e1) { - e1.printStackTrace(); - - } catch (NullPointerException e2) { - e2.printStackTrace(); - } - - return null; - - } - - /** - * Gets the list of the stations - * @return - the list of stations - */ - public List getStationList(){ - - return stationList; - - } - - /** - * Search a station given a field, and search key value. - * - * @param sf - * @param key - * @return Station - */ - public Station getStation(StationField sf, String key) { - if (stationList == null || stationList.isEmpty()) return null; - - StationComparator comparator = new StationComparator(sf); - if (last == null || (last != null && last != sf )) { - Collections.sort(stationList, comparator); - last = sf; - } - - Station s = getComparedStation(sf, key); - int index = Collections.binarySearch(stationList, s, comparator); - - if (index >= 0){ - return stationList.get(index); - } else - return null; - } - - /** - * Search station list given a field, and search key value. - * - * @param sf - * @param key - * @return Station - */ - public List getStations(StationField sf, String key) { - if (stationList == null || stationList.isEmpty()) return null; - - StationComparator comparator = new StationComparator(sf); - if (last == null || (last != null && last != sf )) { - Collections.sort(stationList, comparator); - last = sf; - } - - List list = new ArrayList(); - - Station s = getComparedStation(sf, key); - int index; - while ((index = Collections.binarySearch(stationList, s, comparator)) >= 0) { - list.add(stationList.get(index)); - stationList.remove(index); - } - - if (list.size() > 0) { - for (Station st : list) { - stationList.add(st); - } - - last = null; - return list; - } - else { - return null; - } - } - - - private Station getComparedStation(StationField sf, String key){ - Station station = new Station(); - switch (sf) { - case STID: - station.setStid((String)key); - break; - case STNM: - station.setStnnum((String)key); - break; - case NAME: - station.setStnname((String)key); - break; - case ST: - station.setState((String)key); - break; - case CO: - station.setCountry((String)key); - break; - /* - case LAT: - station.setLatitude((Float)key); - break; - case LON: - station.setLongitude((Float)key); - break; - case ELV: - station.setElevation((Integer)key); - break; - case PRI: - station.setPriority((Integer)key); - break; - */ - case WFO: - station.setWfo((String)key); - break; - case LOC: - station.setLocation((String)key); - break; - } - - return station; - } - + return listOfItems; + + } catch (FileNotFoundException e1) { + e1.printStackTrace(); + + } catch (NullPointerException e2) { + e2.printStackTrace(); + } + + return null; + + } + + /** + * Gets the list of the stations + * @return - the list of stations + */ + public List getStationList(){ + + return stationList; + + } + + /** + * Search a station given a field, and search key value. + * + * @param sf + * @param key + * @return Station + */ + public Station getStation(StationField sf, String key) { + if (stationList == null || stationList.isEmpty()) return null; + + StationComparator comparator = new StationComparator(sf); + if (last == null || (last != null && last != sf )) { + Collections.sort(stationList, comparator); + last = sf; + } + + Station s = getComparedStation(sf, key); + int index = Collections.binarySearch(stationList, s, comparator); + + if (index >= 0){ + return stationList.get(index); + } else + return null; + } + + /** + * Search station list given a field, and search key value. + * + * @param sf + * @param key + * @return Station + */ + public List getStations(StationField sf, String key) { + if (stationList == null || stationList.isEmpty()) return null; + + StationComparator comparator = new StationComparator(sf); + if (last == null || (last != null && last != sf )) { + Collections.sort(stationList, comparator); + last = sf; + } + + List list = new ArrayList(); + + Station s = getComparedStation(sf, key); + int index; + while ((index = Collections.binarySearch(stationList, s, comparator)) >= 0) { + list.add(stationList.get(index)); + stationList.remove(index); + } + + if (list.size() > 0) { + for (Station st : list) { + stationList.add(st); + } + + last = null; + return list; + } + else { + return null; + } + } + + + private Station getComparedStation(StationField sf, String key){ + Station station = new Station(); + switch (sf) { + case STID: + station.setStid((String)key); + break; + case STNM: + station.setStnnum((String)key); + break; + case NAME: + station.setStnname((String)key); + break; + case ST: + station.setState((String)key); + break; + case CO: + station.setCountry((String)key); + break; + /* + case LAT: + station.setLatitude((Float)key); + break; + case LON: + station.setLongitude((Float)key); + break; + case ELV: + station.setElevation((Integer)key); + break; + case PRI: + station.setPriority((Integer)key); + break; + */ + case WFO: + station.setWfo((String)key); + break; + case LOC: + station.setLocation((String)key); + break; + } + + return station; + } + /** * Get the nearest station from the input location * @param loc diff --git a/ncep/gov.noaa.nws.ncep.edex.common/src/gov/noaa/nws/ncep/edex/locations/IdftLocs.java b/ncep/gov.noaa.nws.ncep.edex.common/src/gov/noaa/nws/ncep/edex/locations/IdftLocs.java index 3aea9f3dc8..46c89085f1 100644 --- a/ncep/gov.noaa.nws.ncep.edex.common/src/gov/noaa/nws/ncep/edex/locations/IdftLocs.java +++ b/ncep/gov.noaa.nws.ncep.edex.common/src/gov/noaa/nws/ncep/edex/locations/IdftLocs.java @@ -1,78 +1,78 @@ -// -// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.3 in JDK 1.6 -// See http://java.sun.com/xml/jaxb -// Any modifications to this file will be lost upon recompilation of the source schema. -// Generated on: 2009.05.05 at 04:38:50 PM EDT -// - - -package gov.noaa.nws.ncep.edex.locations; - -import java.util.ArrayList; -import java.util.List; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.XmlType; - - -/** - *

Java class for anonymous complex type. - * - *

The following schema fragment specifies the expected content contained within this class. - * - *

- * <complexType>
- *   <complexContent>
- *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
- *       <sequence>
- *         <element ref="{}idftPoint" maxOccurs="unbounded"/>
- *       </sequence>
- *     </restriction>
- *   </complexContent>
- * </complexType>
- * 
- * - * - */ -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "", propOrder = { - "idftPoint" -}) -@XmlRootElement(name = "idftLocs") -public class IdftLocs { - - @XmlElement(required = true) - protected List idftPoint; - - /** - * Gets the value of the idftPoint property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the idftPoint property. - * - *

- * For example, to add a new item, do as follows: - *

-     *    getIdftPoint().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link IdftPoint } - * - * - */ - public List getIdftPoint() { - if (idftPoint == null) { - idftPoint = new ArrayList(); - } - return this.idftPoint; - } - -} +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.3 in JDK 1.6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2009.05.05 at 04:38:50 PM EDT +// + + +package gov.noaa.nws.ncep.edex.locations; + +import java.util.ArrayList; +import java.util.List; +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.XmlType; + + +/** + *

Java class for anonymous complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType>
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <sequence>
+ *         <element ref="{}idftPoint" maxOccurs="unbounded"/>
+ *       </sequence>
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "", propOrder = { + "idftPoint" +}) +@XmlRootElement(name = "idftLocs") +public class IdftLocs { + + @XmlElement(required = true) + protected List idftPoint; + + /** + * Gets the value of the idftPoint property. + * + *

+ * This accessor method returns a reference to the live list, + * not a snapshot. Therefore any modification you make to the + * returned list will be present inside the JAXB object. + * This is why there is not a set method for the idftPoint property. + * + *

+ * For example, to add a new item, do as follows: + *

+     *    getIdftPoint().add(newItem);
+     * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list + * {@link IdftPoint } + * + * + */ + public List getIdftPoint() { + if (idftPoint == null) { + idftPoint = new ArrayList(); + } + return this.idftPoint; + } + +} diff --git a/ncep/gov.noaa.nws.ncep.edex.common/src/gov/noaa/nws/ncep/edex/locations/IdftLocsTableReader.java b/ncep/gov.noaa.nws.ncep.edex.common/src/gov/noaa/nws/ncep/edex/locations/IdftLocsTableReader.java index e3429521c6..b4b274938d 100644 --- a/ncep/gov.noaa.nws.ncep.edex.common/src/gov/noaa/nws/ncep/edex/locations/IdftLocsTableReader.java +++ b/ncep/gov.noaa.nws.ncep.edex.common/src/gov/noaa/nws/ncep/edex/locations/IdftLocsTableReader.java @@ -1,71 +1,71 @@ -/** - * This function reads the Idft Point Location Table from idftLoc.xml - * and unmarshall it. - * - *

- * 
- * SOFTWARE HISTORY
- * 
- * Date         Ticket#    Engineer    Description
- * ------------ ---------- ----------- --------------------------
- * 14May2009  	98    	   F. J. Yen   Initial Creation
- *                       
- * 
- * - * @author Fee Jing Yen, SIB - * @version 1 - */ -package gov.noaa.nws.ncep.edex.locations; - -import java.io.File; -import java.io.FileNotFoundException; -import java.io.FileReader; -import java.util.List; - -import javax.xml.bind.JAXBContext; -import javax.xml.bind.JAXBException; -import javax.xml.bind.Unmarshaller; - -public class IdftLocsTableReader { - - - private final String PACKAGE = "gov.noaa.nws.ncep.edex.locations"; - - private String xmlFilename = null; - - public IdftLocsTableReader(String file) { - /* - * file is the full name including the path for the - * idft point location xml file, idftLoc.xml - */ - - xmlFilename = file; - } - - public List getIdftLocsTable() throws JAXBException{ - - File xmlFile = new File(xmlFilename); - - JAXBContext context = JAXBContext.newInstance( - PACKAGE); - Unmarshaller unmarshaller = context.createUnmarshaller(); - IdftLocs loc = null; - - try { - loc = (IdftLocs)unmarshaller.unmarshal( - new FileReader(xmlFile)); - List listOfItems = loc.getIdftPoint(); - return listOfItems; - - } catch (FileNotFoundException e1) { - // TODO Auto-generated catch block - e1.printStackTrace(); - - } catch (NullPointerException e2) { - e2.printStackTrace(); - } - - return null; - - } +/** + * This function reads the Idft Point Location Table from idftLoc.xml + * and unmarshall it. + * + *
+ * 
+ * SOFTWARE HISTORY
+ * 
+ * Date         Ticket#    Engineer    Description
+ * ------------ ---------- ----------- --------------------------
+ * 14May2009  	98    	   F. J. Yen   Initial Creation
+ *                       
+ * 
+ * + * @author Fee Jing Yen, SIB + * @version 1 + */ +package gov.noaa.nws.ncep.edex.locations; + +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileReader; +import java.util.List; + +import javax.xml.bind.JAXBContext; +import javax.xml.bind.JAXBException; +import javax.xml.bind.Unmarshaller; + +public class IdftLocsTableReader { + + + private final String PACKAGE = "gov.noaa.nws.ncep.edex.locations"; + + private String xmlFilename = null; + + public IdftLocsTableReader(String file) { + /* + * file is the full name including the path for the + * idft point location xml file, idftLoc.xml + */ + + xmlFilename = file; + } + + public List getIdftLocsTable() throws JAXBException{ + + File xmlFile = new File(xmlFilename); + + JAXBContext context = JAXBContext.newInstance( + PACKAGE); + Unmarshaller unmarshaller = context.createUnmarshaller(); + IdftLocs loc = null; + + try { + loc = (IdftLocs)unmarshaller.unmarshal( + new FileReader(xmlFile)); + List listOfItems = loc.getIdftPoint(); + return listOfItems; + + } catch (FileNotFoundException e1) { + // TODO Auto-generated catch block + e1.printStackTrace(); + + } catch (NullPointerException e2) { + e2.printStackTrace(); + } + + return null; + + } } \ No newline at end of file diff --git a/ncep/gov.noaa.nws.ncep.edex.common/src/gov/noaa/nws/ncep/edex/locations/IdftPoint.java b/ncep/gov.noaa.nws.ncep.edex.common/src/gov/noaa/nws/ncep/edex/locations/IdftPoint.java index 89e90b5324..a8db5002d7 100644 --- a/ncep/gov.noaa.nws.ncep.edex.common/src/gov/noaa/nws/ncep/edex/locations/IdftPoint.java +++ b/ncep/gov.noaa.nws.ncep.edex.common/src/gov/noaa/nws/ncep/edex/locations/IdftPoint.java @@ -1,203 +1,203 @@ -// -// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.3 in JDK 1.6 -// See http://java.sun.com/xml/jaxb -// Any modifications to this file will be lost upon recompilation of the source schema. -// Generated on: 2009.05.05 at 04:38:50 PM EDT -// - - -package gov.noaa.nws.ncep.edex.locations; - -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.XmlType; - - -/** - *

Java class for anonymous complex type. - * - *

The following schema fragment specifies the expected content contained within this class. - * - *

- * <complexType>
- *   <complexContent>
- *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
- *       <sequence>
- *         <element ref="{}stid"/>
- *         <element ref="{}stnnum"/>
- *         <element ref="{}stnname"/>
- *         <element ref="{}latitude"/>
- *         <element ref="{}longitude"/>
- *         <element ref="{}elevation"/>
- *         <element ref="{}priority"/>
- *       </sequence>
- *     </restriction>
- *   </complexContent>
- * </complexType>
- * 
- * - * - */ -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "", propOrder = { - "stid", - "stnnum", - "stnname", - "latitude", - "longitude", - "elevation", - "priority" -}) -@XmlRootElement(name = "idftPoint") -public class IdftPoint { - - @XmlElement(required = true) - protected String stid; - @XmlElement(required = true) - protected String stnnum; - @XmlElement(required = true) - protected String stnname; - protected float latitude; - protected float longitude; - protected int elevation; - protected int priority; - - /** - * Gets the value of the stid property. - * - * @return - * possible object is - * {@link String } - * - */ - public String getStid() { - return stid; - } - - /** - * Sets the value of the stid property. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setStid(String value) { - this.stid = value; - } - - /** - * Gets the value of the stnnum property. - * - * @return - * possible object is - * {@link String } - * - */ - public String getStnnum() { - return stnnum; - } - - /** - * Sets the value of the stnnum property. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setStnnum(String value) { - this.stnnum = value; - } - - /** - * Gets the value of the stnname property. - * - * @return - * possible object is - * {@link String } - * - */ - public String getStnname() { - return stnname; - } - - /** - * Sets the value of the stnname property. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setStnname(String value) { - this.stnname = value; - } - - /** - * Gets the value of the latitude property. - * - */ - public float getLatitude() { - return latitude; - } - - /** - * Sets the value of the latitude property. - * - */ - public void setLatitude(float value) { - this.latitude = value; - } - - /** - * Gets the value of the longitude property. - * - */ - public float getLongitude() { - return longitude; - } - - /** - * Sets the value of the longitude property. - * - */ - public void setLongitude(float value) { - this.longitude = value; - } - - /** - * Gets the value of the elevation property. - * - */ - public int getElevation() { - return elevation; - } - - /** - * Sets the value of the elevation property. - * - */ - public void setElevation(int value) { - this.elevation = value; - } - - /** - * Gets the value of the priority property. - * - */ - public int getPriority() { - return priority; - } - - /** - * Sets the value of the priority property. - * - */ - public void setPriority(int value) { - this.priority = value; - } - -} +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.3 in JDK 1.6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2009.05.05 at 04:38:50 PM EDT +// + + +package gov.noaa.nws.ncep.edex.locations; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.XmlType; + + +/** + *

Java class for anonymous complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType>
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <sequence>
+ *         <element ref="{}stid"/>
+ *         <element ref="{}stnnum"/>
+ *         <element ref="{}stnname"/>
+ *         <element ref="{}latitude"/>
+ *         <element ref="{}longitude"/>
+ *         <element ref="{}elevation"/>
+ *         <element ref="{}priority"/>
+ *       </sequence>
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "", propOrder = { + "stid", + "stnnum", + "stnname", + "latitude", + "longitude", + "elevation", + "priority" +}) +@XmlRootElement(name = "idftPoint") +public class IdftPoint { + + @XmlElement(required = true) + protected String stid; + @XmlElement(required = true) + protected String stnnum; + @XmlElement(required = true) + protected String stnname; + protected float latitude; + protected float longitude; + protected int elevation; + protected int priority; + + /** + * Gets the value of the stid property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getStid() { + return stid; + } + + /** + * Sets the value of the stid property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setStid(String value) { + this.stid = value; + } + + /** + * Gets the value of the stnnum property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getStnnum() { + return stnnum; + } + + /** + * Sets the value of the stnnum property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setStnnum(String value) { + this.stnnum = value; + } + + /** + * Gets the value of the stnname property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getStnname() { + return stnname; + } + + /** + * Sets the value of the stnname property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setStnname(String value) { + this.stnname = value; + } + + /** + * Gets the value of the latitude property. + * + */ + public float getLatitude() { + return latitude; + } + + /** + * Sets the value of the latitude property. + * + */ + public void setLatitude(float value) { + this.latitude = value; + } + + /** + * Gets the value of the longitude property. + * + */ + public float getLongitude() { + return longitude; + } + + /** + * Sets the value of the longitude property. + * + */ + public void setLongitude(float value) { + this.longitude = value; + } + + /** + * Gets the value of the elevation property. + * + */ + public int getElevation() { + return elevation; + } + + /** + * Sets the value of the elevation property. + * + */ + public void setElevation(int value) { + this.elevation = value; + } + + /** + * Gets the value of the priority property. + * + */ + public int getPriority() { + return priority; + } + + /** + * Sets the value of the priority property. + * + */ + public void setPriority(int value) { + this.priority = value; + } + +} diff --git a/ncep/gov.noaa.nws.ncep.edex.common/src/gov/noaa/nws/ncep/edex/locations/ObjectFactory.java b/ncep/gov.noaa.nws.ncep.edex.common/src/gov/noaa/nws/ncep/edex/locations/ObjectFactory.java index a57f13ba18..7c3ff7312e 100644 --- a/ncep/gov.noaa.nws.ncep.edex.common/src/gov/noaa/nws/ncep/edex/locations/ObjectFactory.java +++ b/ncep/gov.noaa.nws.ncep.edex.common/src/gov/noaa/nws/ncep/edex/locations/ObjectFactory.java @@ -1,128 +1,128 @@ -// -// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.3 in JDK 1.6 -// See http://java.sun.com/xml/jaxb -// Any modifications to this file will be lost upon recompilation of the source schema. -// Generated on: 2009.05.05 at 04:38:50 PM EDT -// - - -package gov.noaa.nws.ncep.edex.locations; - -import javax.xml.bind.JAXBElement; -import javax.xml.bind.annotation.XmlElementDecl; -import javax.xml.bind.annotation.XmlRegistry; -import javax.xml.namespace.QName; - - -/** - * This object contains factory methods for each - * Java content interface and Java element interface - * generated in the generated package. - *

An ObjectFactory allows you to programatically - * construct new instances of the Java representation - * for XML content. The Java representation of XML - * content can consist of schema derived interfaces - * and classes representing the binding of schema - * type definitions, element declarations and model - * groups. Factory methods for each of these are - * provided in this class. - * - */ -@XmlRegistry -public class ObjectFactory { - - private final static QName _Stid_QNAME = new QName("", "stid"); - private final static QName _Stnnum_QNAME = new QName("", "stnnum"); - private final static QName _Priority_QNAME = new QName("", "priority"); - private final static QName _Elevation_QNAME = new QName("", "elevation"); - private final static QName _Longitude_QNAME = new QName("", "longitude"); - private final static QName _Stnname_QNAME = new QName("", "stnname"); - private final static QName _Latitude_QNAME = new QName("", "latitude"); - - /** - * Create a new ObjectFactory that can be used to create new instances of schema derived classes for package: generated - * - */ - public ObjectFactory() { - } - - /** - * Create an instance of {@link IdftLocs } - * - */ - public IdftLocs createIdftLocs() { - return new IdftLocs(); - } - - /** - * Create an instance of {@link IdftPoint } - * - */ - public IdftPoint createIdftPoint() { - return new IdftPoint(); - } - - /** - * Create an instance of {@link JAXBElement }{@code <}{@link String }{@code >}} - * - */ - @XmlElementDecl(namespace = "", name = "stid") - public JAXBElement createStid(String value) { - return new JAXBElement(_Stid_QNAME, String.class, null, value); - } - - /** - * Create an instance of {@link JAXBElement }{@code <}{@link String }{@code >}} - * - */ - @XmlElementDecl(namespace = "", name = "stnnum") - public JAXBElement createStnnum(String value) { - return new JAXBElement(_Stnnum_QNAME, String.class, null, value); - } - - /** - * Create an instance of {@link JAXBElement }{@code <}{@link Integer }{@code >}} - * - */ - @XmlElementDecl(namespace = "", name = "priority") - public JAXBElement createPriority(Integer value) { - return new JAXBElement(_Priority_QNAME, Integer.class, null, value); - } - - /** - * Create an instance of {@link JAXBElement }{@code <}{@link Integer }{@code >}} - * - */ - @XmlElementDecl(namespace = "", name = "elevation") - public JAXBElement createElevation(Integer value) { - return new JAXBElement(_Elevation_QNAME, Integer.class, null, value); - } - - /** - * Create an instance of {@link JAXBElement }{@code <}{@link Float }{@code >}} - * - */ - @XmlElementDecl(namespace = "", name = "longitude") - public JAXBElement createLongitude(Float value) { - return new JAXBElement(_Longitude_QNAME, Float.class, null, value); - } - - /** - * Create an instance of {@link JAXBElement }{@code <}{@link String }{@code >}} - * - */ - @XmlElementDecl(namespace = "", name = "stnname") - public JAXBElement createStnname(String value) { - return new JAXBElement(_Stnname_QNAME, String.class, null, value); - } - - /** - * Create an instance of {@link JAXBElement }{@code <}{@link Float }{@code >}} - * - */ - @XmlElementDecl(namespace = "", name = "latitude") - public JAXBElement createLatitude(Float value) { - return new JAXBElement(_Latitude_QNAME, Float.class, null, value); - } - -} +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.3 in JDK 1.6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2009.05.05 at 04:38:50 PM EDT +// + + +package gov.noaa.nws.ncep.edex.locations; + +import javax.xml.bind.JAXBElement; +import javax.xml.bind.annotation.XmlElementDecl; +import javax.xml.bind.annotation.XmlRegistry; +import javax.xml.namespace.QName; + + +/** + * This object contains factory methods for each + * Java content interface and Java element interface + * generated in the generated package. + *

An ObjectFactory allows you to programatically + * construct new instances of the Java representation + * for XML content. The Java representation of XML + * content can consist of schema derived interfaces + * and classes representing the binding of schema + * type definitions, element declarations and model + * groups. Factory methods for each of these are + * provided in this class. + * + */ +@XmlRegistry +public class ObjectFactory { + + private final static QName _Stid_QNAME = new QName("", "stid"); + private final static QName _Stnnum_QNAME = new QName("", "stnnum"); + private final static QName _Priority_QNAME = new QName("", "priority"); + private final static QName _Elevation_QNAME = new QName("", "elevation"); + private final static QName _Longitude_QNAME = new QName("", "longitude"); + private final static QName _Stnname_QNAME = new QName("", "stnname"); + private final static QName _Latitude_QNAME = new QName("", "latitude"); + + /** + * Create a new ObjectFactory that can be used to create new instances of schema derived classes for package: generated + * + */ + public ObjectFactory() { + } + + /** + * Create an instance of {@link IdftLocs } + * + */ + public IdftLocs createIdftLocs() { + return new IdftLocs(); + } + + /** + * Create an instance of {@link IdftPoint } + * + */ + public IdftPoint createIdftPoint() { + return new IdftPoint(); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link String }{@code >}} + * + */ + @XmlElementDecl(namespace = "", name = "stid") + public JAXBElement createStid(String value) { + return new JAXBElement(_Stid_QNAME, String.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link String }{@code >}} + * + */ + @XmlElementDecl(namespace = "", name = "stnnum") + public JAXBElement createStnnum(String value) { + return new JAXBElement(_Stnnum_QNAME, String.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link Integer }{@code >}} + * + */ + @XmlElementDecl(namespace = "", name = "priority") + public JAXBElement createPriority(Integer value) { + return new JAXBElement(_Priority_QNAME, Integer.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link Integer }{@code >}} + * + */ + @XmlElementDecl(namespace = "", name = "elevation") + public JAXBElement createElevation(Integer value) { + return new JAXBElement(_Elevation_QNAME, Integer.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link Float }{@code >}} + * + */ + @XmlElementDecl(namespace = "", name = "longitude") + public JAXBElement createLongitude(Float value) { + return new JAXBElement(_Longitude_QNAME, Float.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link String }{@code >}} + * + */ + @XmlElementDecl(namespace = "", name = "stnname") + public JAXBElement createStnname(String value) { + return new JAXBElement(_Stnname_QNAME, String.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link Float }{@code >}} + * + */ + @XmlElementDecl(namespace = "", name = "latitude") + public JAXBElement createLatitude(Float value) { + return new JAXBElement(_Latitude_QNAME, Float.class, null, value); + } + +} diff --git a/ncep/gov.noaa.nws.ncep.edex.common/src/gov/noaa/nws/ncep/edex/locations/package-info.java b/ncep/gov.noaa.nws.ncep.edex.common/src/gov/noaa/nws/ncep/edex/locations/package-info.java index d13910d183..d41b4dd232 100644 --- a/ncep/gov.noaa.nws.ncep.edex.common/src/gov/noaa/nws/ncep/edex/locations/package-info.java +++ b/ncep/gov.noaa.nws.ncep.edex.common/src/gov/noaa/nws/ncep/edex/locations/package-info.java @@ -1,4 +1,4 @@ -/** -* Contains supporting and test methods for reading and unmarshalling idftLocs.tbl -*/ -package gov.noaa.nws.ncep.edex.locations; +/** +* Contains supporting and test methods for reading and unmarshalling idftLocs.tbl +*/ +package gov.noaa.nws.ncep.edex.locations; diff --git a/ncep/gov.noaa.nws.ncep.edex.common/src/gov/noaa/nws/ncep/edex/locations/test_IdftLocsTableReader.java b/ncep/gov.noaa.nws.ncep.edex.common/src/gov/noaa/nws/ncep/edex/locations/test_IdftLocsTableReader.java index 84eef8c9ea..028a36dd72 100644 --- a/ncep/gov.noaa.nws.ncep.edex.common/src/gov/noaa/nws/ncep/edex/locations/test_IdftLocsTableReader.java +++ b/ncep/gov.noaa.nws.ncep.edex.common/src/gov/noaa/nws/ncep/edex/locations/test_IdftLocsTableReader.java @@ -1,51 +1,51 @@ -/** - * This function tests the Idft Point Location Table Reader, IdftLocsTableReader - * by printing out all the elements in the XML file. It also gets the first and - * last element from the list and prints them out - *

- * 
- * SOFTWARE HISTORY
- * 
- * Date         Ticket#    Engineer    Description
- * ------------ ---------- ----------- --------------------------
- * 12May2009  	98    	   F. J. Yen   Initial Creation
- *                       
- * 
- * - * @author Fee Jing Yen, SIB - * @version 1 - */ -package gov.noaa.nws.ncep.edex.locations; - -import java.util.List; - -public class test_IdftLocsTableReader { - - public static void main(String args[]) throws Exception{ - String idftLocsXmlName = "../build.edex/esb/data/utility/edex_static/base/ncep/stns/idftLoc.xml"; - IdftLocsTableReader myloc = new IdftLocsTableReader (idftLocsXmlName); - List list = myloc.getIdftLocsTable(); - for(IdftPoint itm : list){ - System.out.println( - " Stid = " + itm.getStid() + - " Stnnum= " + itm.getStnnum() + - " Stnname = " + itm.getStnname() + - " Latitude = " + itm.getLatitude() + - " Longitude =" + itm.getLongitude() + - " Elevation =" + itm.getElevation() + - " Priortiy =" + itm.getPriority() ); - } - // Get the first and last elements of the list and print them along with the list size - System.out.println(" Stid(0)=" + list.get(0).stid - + " Stnnum(0) = " + list.get(0).stnnum - + " Stnname(0) = " + list.get(0).stnname - + " Latitude(0) = " + list.get(0).latitude - + " Longitude(0) = " + list.get(0).longitude - + "\n Stid(206) = " + list.get(206).stid - + " Stnnum(206) = " + list.get(206).stnnum - + " Stnname(206) = " + list.get(206).stnname - + " Latitude(206) = " + list.get(206).latitude - + " Longitude(206) = " + list.get(206).longitude - + "\n size = " + list.size()); - } -} +/** + * This function tests the Idft Point Location Table Reader, IdftLocsTableReader + * by printing out all the elements in the XML file. It also gets the first and + * last element from the list and prints them out + *
+ * 
+ * SOFTWARE HISTORY
+ * 
+ * Date         Ticket#    Engineer    Description
+ * ------------ ---------- ----------- --------------------------
+ * 12May2009  	98    	   F. J. Yen   Initial Creation
+ *                       
+ * 
+ * + * @author Fee Jing Yen, SIB + * @version 1 + */ +package gov.noaa.nws.ncep.edex.locations; + +import java.util.List; + +public class test_IdftLocsTableReader { + + public static void main(String args[]) throws Exception{ + String idftLocsXmlName = "../build.edex/esb/data/utility/edex_static/base/ncep/stns/idftLoc.xml"; + IdftLocsTableReader myloc = new IdftLocsTableReader (idftLocsXmlName); + List list = myloc.getIdftLocsTable(); + for(IdftPoint itm : list){ + System.out.println( + " Stid = " + itm.getStid() + + " Stnnum= " + itm.getStnnum() + + " Stnname = " + itm.getStnname() + + " Latitude = " + itm.getLatitude() + + " Longitude =" + itm.getLongitude() + + " Elevation =" + itm.getElevation() + + " Priortiy =" + itm.getPriority() ); + } + // Get the first and last elements of the list and print them along with the list size + System.out.println(" Stid(0)=" + list.get(0).stid + + " Stnnum(0) = " + list.get(0).stnnum + + " Stnname(0) = " + list.get(0).stnname + + " Latitude(0) = " + list.get(0).latitude + + " Longitude(0) = " + list.get(0).longitude + + "\n Stid(206) = " + list.get(206).stid + + " Stnnum(206) = " + list.get(206).stnnum + + " Stnname(206) = " + list.get(206).stnname + + " Latitude(206) = " + list.get(206).latitude + + " Longitude(206) = " + list.get(206).longitude + + "\n size = " + list.size()); + } +} diff --git a/ncep/gov.noaa.nws.ncep.edex.common/src/gov/noaa/nws/ncep/edex/tools/decoder/LatLonLocTbl.java b/ncep/gov.noaa.nws.ncep.edex.common/src/gov/noaa/nws/ncep/edex/tools/decoder/LatLonLocTbl.java index ac74fc8dbc..84cc63656f 100644 --- a/ncep/gov.noaa.nws.ncep.edex.common/src/gov/noaa/nws/ncep/edex/tools/decoder/LatLonLocTbl.java +++ b/ncep/gov.noaa.nws.ncep.edex.common/src/gov/noaa/nws/ncep/edex/tools/decoder/LatLonLocTbl.java @@ -1,182 +1,182 @@ -/** - * LatLonLocTbl - A Java class to define some known VORs and Intlsig talbes - * used to define convective/nonconvective/airmet/intl SIGMET locations. - * - * SOFTWARE HISTORY - * - * Date Ticket# Engineer Description - * ------------ ---------- ----------- -------------------------- - * 12 Jun 2009 95/132 B. Hebbard Initial creation. - * 10 Sep 2009 39/87/114 L. Lin Remove the temporary enum - * and add xml for VORs and - * Intlsig gempak tables. - * 30 Sep 2009 3102 jkorman Changed printlns to logging statements. - * - * - * - * This code has been developed by the SIB for use in the AWIPS2 system. - * @author L. Lin - * @version 1.0 - */ -package gov.noaa.nws.ncep.edex.tools.decoder; - -import static com.raytheon.uf.common.localization.LocalizationContext.LocalizationType.EDEX_STATIC; -import gov.noaa.nws.ncep.edex.common.stationTables.IStationField.StationField; -import gov.noaa.nws.ncep.edex.common.stationTables.Station; -import gov.noaa.nws.ncep.edex.common.stationTables.StationTable; - -import java.io.File; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - -import com.raytheon.uf.common.localization.IPathManager; -import com.raytheon.uf.common.localization.LocalizationContext; -import com.raytheon.uf.common.localization.LocalizationContext.LocalizationLevel; -import com.raytheon.uf.common.localization.PathManagerFactory; -import com.raytheon.uf.edex.decodertools.core.LatLonPoint; - -public class LatLonLocTbl { - private static Log logger = LogFactory.getLog(LatLonLocTbl.class); - - static StationTable vorsloc = null; - - static StationTable intlsigloc = null; - - static StationTable myloc = null; - - private double latitude; - - private double longitude; - - private LatLonLocTbl(double latitude, double longitude) { - this.latitude = latitude; - this.longitude = longitude; - } - - public static void readLocTable(String tableName) throws Exception { - - final String NCEP_DIR = "ncep"; - final String stnsDir = "stns"; - final String vorsLocTableName = "vors.xml"; - - IPathManager manager = PathManagerFactory.getPathManager(); - - LocalizationContext baseContext = null; - File baseDir = null; - String stnsFileName = null; - baseContext = manager.getContext(EDEX_STATIC, LocalizationLevel.BASE); - baseContext.setContextName(NCEP_DIR); - baseDir = manager.getFile(baseContext, ""); - if (tableName == "vors") { - stnsFileName = baseDir + File.separator + stnsDir + File.separator - + vorsLocTableName; - } - logger.debug(" stnsFileName=" + stnsFileName); - myloc = new StationTable(stnsFileName); - - } - - public double getLatitude() { - return latitude; - } - - public double getLongitude() { - return longitude; - } - - public LatLonPoint getLatLonPoint() { - return new LatLonPoint(latitude, longitude, LatLonPoint.INDEGREES); - } - - private enum Direction { - N, NNE, NE, ENE, E, ESE, SE, SSE, S, SSW, SW, WSW, W, WNW, NW, NNW; - public double getDegrees() { - return ordinal() * 22.5; - } - } - - private static final double ONE_NM_RADIANS = Math.toRadians(1.0 / 60.0); - - /** - * Given a relative reference string, returns a LatLonPoint - * (com.raytheon.uf.edex.decodertools.core.LatLonPoint). - * - * @param location - * A String such as... "BOS" "20S EMI" "30 WNW BUM" " 40ENE HUH " - * ...referencing a VOR listed in AC 00-45F (Appendix F), - * optionally preceded by distance in nautical miles and 16-point - * compass direction string. - * @param locTable - * A string such as "vors" referring to "vors" location table or - * "intlsig" referring to intl location table - * @return The decoded location as a LatLonPoint; null on error (such as - * unrecognized VOR identifier or direction string). - * - */ - public static LatLonPoint getLatLonPoint(String location, String locTable) { - LatLonPoint point = null; - Station vor = null; - // Wrap decoding in a try block, in case of exception on - // one of the xml or direction enum, or other problems. - - try { - location = location.trim(); - - // VOR is always last 3 nonblank char of location - String navaid = location.substring(location.length() - 3); - - // Read in the location table XML if not exists - if (myloc == null) { - readLocTable(locTable); - logger.debug(" - read vors.xml to cache"); - } - // Search station ID and return whole station record - if (myloc != null) { - logger.debug(" - navaid = " + navaid); - vor = myloc.getStation(StationField.STID, navaid); - } else { - logger.debug(" - myloc is null"); - } - - // Get LatLonPoint from lat/lon - if (vor != null) { - point = new LatLonPoint(vor.getLatitude(), vor.getLongitude(), - LatLonPoint.INDEGREES); - } else { - logger.debug(" - DID NOT find station ID in vors.xml"); - } - - // If there's an offset direction/bearing, process it - if (location.length() > 3) { - String u = location.substring(0, location.length() - 3); - - Pattern p = Pattern.compile("^([0-9]+)\\s*([A-Z]+)"); - Matcher m = p.matcher(u); - if (m.find()) { - String distanceStr = m.group(1); - - String bearingStr = m.group(2); - - int distanceNM = Integer.parseInt(distanceStr); - - double distanceRad = distanceNM * ONE_NM_RADIANS; - // LatLonPoint.positionOf thinks bearing is CCW, not CW... - double bearingDeg = 360.0 - Direction.valueOf(bearingStr) - .getDegrees(); - double bearingRad = Math.toRadians(bearingDeg); - point = point.positionOf(bearingRad, distanceRad); - logger.debug(" - get a good latlon point"); - } - } - return point; - } catch (Exception e) { - logger.error("[Error decoding location in LatLonLocTbl: " - + location + "]"); - return null; - } - } - -} +/** + * LatLonLocTbl - A Java class to define some known VORs and Intlsig talbes + * used to define convective/nonconvective/airmet/intl SIGMET locations. + * + * SOFTWARE HISTORY + * + * Date Ticket# Engineer Description + * ------------ ---------- ----------- -------------------------- + * 12 Jun 2009 95/132 B. Hebbard Initial creation. + * 10 Sep 2009 39/87/114 L. Lin Remove the temporary enum + * and add xml for VORs and + * Intlsig gempak tables. + * 30 Sep 2009 3102 jkorman Changed printlns to logging statements. + * + * + * + * This code has been developed by the SIB for use in the AWIPS2 system. + * @author L. Lin + * @version 1.0 + */ +package gov.noaa.nws.ncep.edex.tools.decoder; + +import static com.raytheon.uf.common.localization.LocalizationContext.LocalizationType.EDEX_STATIC; +import gov.noaa.nws.ncep.edex.common.stationTables.IStationField.StationField; +import gov.noaa.nws.ncep.edex.common.stationTables.Station; +import gov.noaa.nws.ncep.edex.common.stationTables.StationTable; + +import java.io.File; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import com.raytheon.uf.common.localization.IPathManager; +import com.raytheon.uf.common.localization.LocalizationContext; +import com.raytheon.uf.common.localization.LocalizationContext.LocalizationLevel; +import com.raytheon.uf.common.localization.PathManagerFactory; +import com.raytheon.uf.edex.decodertools.core.LatLonPoint; + +public class LatLonLocTbl { + private static Log logger = LogFactory.getLog(LatLonLocTbl.class); + + static StationTable vorsloc = null; + + static StationTable intlsigloc = null; + + static StationTable myloc = null; + + private double latitude; + + private double longitude; + + private LatLonLocTbl(double latitude, double longitude) { + this.latitude = latitude; + this.longitude = longitude; + } + + public static void readLocTable(String tableName) throws Exception { + + final String NCEP_DIR = "ncep"; + final String stnsDir = "stns"; + final String vorsLocTableName = "vors.xml"; + + IPathManager manager = PathManagerFactory.getPathManager(); + + LocalizationContext baseContext = null; + File baseDir = null; + String stnsFileName = null; + baseContext = manager.getContext(EDEX_STATIC, LocalizationLevel.BASE); + baseContext.setContextName(NCEP_DIR); + baseDir = manager.getFile(baseContext, ""); + if (tableName == "vors") { + stnsFileName = baseDir + File.separator + stnsDir + File.separator + + vorsLocTableName; + } + logger.debug(" stnsFileName=" + stnsFileName); + myloc = new StationTable(stnsFileName); + + } + + public double getLatitude() { + return latitude; + } + + public double getLongitude() { + return longitude; + } + + public LatLonPoint getLatLonPoint() { + return new LatLonPoint(latitude, longitude, LatLonPoint.INDEGREES); + } + + private enum Direction { + N, NNE, NE, ENE, E, ESE, SE, SSE, S, SSW, SW, WSW, W, WNW, NW, NNW; + public double getDegrees() { + return ordinal() * 22.5; + } + } + + private static final double ONE_NM_RADIANS = Math.toRadians(1.0 / 60.0); + + /** + * Given a relative reference string, returns a LatLonPoint + * (com.raytheon.uf.edex.decodertools.core.LatLonPoint). + * + * @param location + * A String such as... "BOS" "20S EMI" "30 WNW BUM" " 40ENE HUH " + * ...referencing a VOR listed in AC 00-45F (Appendix F), + * optionally preceded by distance in nautical miles and 16-point + * compass direction string. + * @param locTable + * A string such as "vors" referring to "vors" location table or + * "intlsig" referring to intl location table + * @return The decoded location as a LatLonPoint; null on error (such as + * unrecognized VOR identifier or direction string). + * + */ + public static LatLonPoint getLatLonPoint(String location, String locTable) { + LatLonPoint point = null; + Station vor = null; + // Wrap decoding in a try block, in case of exception on + // one of the xml or direction enum, or other problems. + + try { + location = location.trim(); + + // VOR is always last 3 nonblank char of location + String navaid = location.substring(location.length() - 3); + + // Read in the location table XML if not exists + if (myloc == null) { + readLocTable(locTable); + logger.debug(" - read vors.xml to cache"); + } + // Search station ID and return whole station record + if (myloc != null) { + logger.debug(" - navaid = " + navaid); + vor = myloc.getStation(StationField.STID, navaid); + } else { + logger.debug(" - myloc is null"); + } + + // Get LatLonPoint from lat/lon + if (vor != null) { + point = new LatLonPoint(vor.getLatitude(), vor.getLongitude(), + LatLonPoint.INDEGREES); + } else { + logger.debug(" - DID NOT find station ID in vors.xml"); + } + + // If there's an offset direction/bearing, process it + if (location.length() > 3) { + String u = location.substring(0, location.length() - 3); + + Pattern p = Pattern.compile("^([0-9]+)\\s*([A-Z]+)"); + Matcher m = p.matcher(u); + if (m.find()) { + String distanceStr = m.group(1); + + String bearingStr = m.group(2); + + int distanceNM = Integer.parseInt(distanceStr); + + double distanceRad = distanceNM * ONE_NM_RADIANS; + // LatLonPoint.positionOf thinks bearing is CCW, not CW... + double bearingDeg = 360.0 - Direction.valueOf(bearingStr) + .getDegrees(); + double bearingRad = Math.toRadians(bearingDeg); + point = point.positionOf(bearingRad, distanceRad); + logger.debug(" - get a good latlon point"); + } + } + return point; + } catch (Exception e) { + logger.error("[Error decoding location in LatLonLocTbl: " + + location + "]"); + return null; + } + } + +} diff --git a/ncep/gov.noaa.nws.ncep.edex.common/src/gov/noaa/nws/ncep/edex/tools/decoder/MndTime.java b/ncep/gov.noaa.nws.ncep.edex.common/src/gov/noaa/nws/ncep/edex/tools/decoder/MndTime.java index f1a2c95cd9..186abc02be 100644 --- a/ncep/gov.noaa.nws.ncep.edex.common/src/gov/noaa/nws/ncep/edex/tools/decoder/MndTime.java +++ b/ncep/gov.noaa.nws.ncep.edex.common/src/gov/noaa/nws/ncep/edex/tools/decoder/MndTime.java @@ -1,600 +1,600 @@ -/* - * - * MndTime - * - * This java class processes MND (Mass News Disseminator) block. - *
- * SOFTWARE HISTORY
- * 
- * Date         Ticket#    	Engineer    Description
- * ------------ ---------- 	----------- --------------------------
- * 10/2008		14			T. Lee		Creation
- * 04/2009		14			T. Lee		Used log4j logger
- * 06/2009		128			T. Lee		Added UTC/Zulu; Returned UTC 
- * 										or null for MND time
- * 07/2009		128			T. Lee		Migration to TO11
- * 01/26/2011   N/A         M. Gao      Refactor the logic of parsing MndTime string
- *                                      Now the regular expression is more flexible. 
- *                                      It can tolerate extra spaces at the beginning, ending 
- *                                      or in between of words. It can either take THU abbreviation
- *                                      or Thursday. The similar flexibility applies to MON and MONDAY too.
- *                                      It can also understand both format listed as below: 
- *                                      1018 PM CDT THU APR 1 2010 or
- *                                      1018 PM CDT THURSDAY 1 APR  2010 
- * 
- * - * @author T.Lee - * @version 1.0 - */ - -package gov.noaa.nws.ncep.edex.tools.decoder; -import java.text.ParseException; -import java.text.SimpleDateFormat; -import java.util.Calendar; -import java.util.TimeZone; -import java.util.regex.Matcher; -import java.util.regex.Pattern; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - -public final class MndTime { - private final Log logger = LogFactory.getLog(getClass()); - - /** MND time calendar*/ - private Calendar mndTm = null; - - /** MND time string */ - private String mndTmStr = null; - - /** - * Constructor the MND time - * - * @param messageData - */ - public MndTime (byte[] messageData) { - mndTm = processMndTime (messageData); - } - - /** - * Get MND time - * - * @return mndTm - */ - public Calendar getMndTime() { - return mndTm; - } - - /** - * Get MND time string - * - * @return mndTmStr - */ - public String getMndTimeString() { - return mndTmStr; - } - - /** - * Return MND time as Calendar object. - * - * @param tm the Matcher object - * @return cal - */ - - public Calendar processMndTime (byte[] msg) { - String s = new String(msg); - SimpleDateFormat sdf; - - /* - * MND time (local format) - */ -// final String MNDTIME_EXP_LOCAL = "(\\d{3,4}) ([A-Za-z]{2}) ([A-Za-z]{3}) " + -// "([A-Za-z]{3}) ([A-Za-z]{3}) (\\d{1,2}) (\\d{4})\r\r\n"; -// Pattern pt = Pattern.compile(MNDTIME_EXP_LOCAL); -// Matcher tm = pt.matcher(s); -// Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("GMT")); -// -// /* -// * Decode local time pattern -// */ -// if (tm.find()) { -// String group1; -// String group6; -// mndTmStr = tm.group(0).trim(); -// sdf = new SimpleDateFormat ("HHmm a zzz EEE MMM dd yy"); -// group1 = tm.group(1); -// if ( tm.group(1).length() == 3 ) { -// group1 = "0"+tm.group(1); -// } -// /* -// * changes made are: -// * 1. Handle both cases of "1 APR" and "APR 1" for the string fields -// * group(5) and group(6) -// */ -//// group6 = tm.group(6); -//// if ( tm.group(6).length() == 1 ) { -//// group6 = "0"+tm.group(6); -//// } -//// String mnd = group1+" "+tm.group(2)+" "+tm.group(3)+" "+ tm.group(4)+" "+ -//// tm.group(5)+" "+group6+" "+tm.group(7); -// String [] monthAndDayStringArray = verifyAndRetrieveMonthAndDay(tm.group(5), tm.group(6)); -// String mnd = group1+" "+tm.group(2)+" "+tm.group(3)+" "+ tm.group(4)+" "+ -// monthAndDayStringArray[0]+" "+ monthAndDayStringArray[1] +" "+tm.group(7); -// try { -// java.util.Date parsedDate = sdf.parse(mnd); -// cal.setTime(parsedDate); -// } catch (ParseException pe) { -// if ( logger.isInfoEnabled()) { -// logger.info ( "Errors in processing MND local time"); -// } -// if(isTimeZoneInvalid(tm.group(3))) { -// setDayOfMonthAndMonthAndYearToCalendar(cal, monthAndDayStringArray[1], -// monthAndDayStringArray[0], tm.group(7)); -// } -// } - /* - * expression pattern string match something like "800 AM PDT THU APR 1 2010" - */ - final String MNDTIME_EXP_LOCAL_1 = "( *\\d{3,4})( *[A-Za-z]{2})( *[A-Za-z]{3})" + - "( *[A-Za-z]{3,9})( *[A-Za-z]{3,9})( *\\d{1,2})( *\\d{4} *)\r\r\n"; - Pattern pattern1 = Pattern.compile(MNDTIME_EXP_LOCAL_1); - Matcher matcher1 = pattern1.matcher(s); - /* - * expression pattern string match something like "800 AM PDT THU 1 APR 2010" - */ - final String MNDTIME_EXP_LOCAL_2 = "( *\\d{3,4})( *[A-Za-z]{2})( *[A-Za-z]{3})" + - "( *[A-Za-z]{3,9})( *\\d{1,2})( *[A-Za-z]{3,9})( *\\d{4} *)\r\r\n"; - Pattern pattern2 = Pattern.compile(MNDTIME_EXP_LOCAL_2); - Matcher matcher2 = pattern2.matcher(s); - - Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("GMT")); - Matcher matcher = getMatcher(matcher1, matcher2); - - Pattern pt = null; - Matcher tm = null; - /* - * Decode local time pattern - */ - if (matcher != null) { - mndTmStr = matcher.group(0).trim(); - sdf = new SimpleDateFormat ("HHmm a zzz EEE MMM dd yy"); - String group1; - group1 = matcher.group(1).trim(); - if ( group1.length() == 3 ) { - group1 = "0"+matcher.group(1); - } - /* - * changes made are: - * 1. Handle both cases of "1 APR" and "APR 1" for the string fields - * group(5) and group(6) - */ - String group2 = matcher.group(2).trim(); - String group3 = matcher.group(3).trim(); - String group4 = matcher.group(4).trim(); - String group5 = matcher.group(5).trim(); - String group6 = matcher.group(6).trim(); - String group7 = matcher.group(7).trim(); - String [] monthAndDayStringArray = verifyAndRetrieveMonthAndDay(group5, group6); - String mnd = group1+" "+ group2 + " "+ group3 +" "+ group4 + " " + - monthAndDayStringArray[0] + " "+ monthAndDayStringArray[1] +" "+ group7; - try { - java.util.Date parsedDate = sdf.parse(mnd); - cal.setTime(parsedDate); - } catch (ParseException pe) { - if ( logger.isInfoEnabled()) { - logger.info ( "Errors in processing MND local time"); - } - if(isTimeZoneInvalid(group3)) { - setDayOfMonthAndMonthAndYearToCalendar(cal, monthAndDayStringArray[1], - monthAndDayStringArray[0], group7); - } - } - - } else { - - /* - * UTC format, e.g., 1500 UTC THU MAY 28 2009 - */ - final String MNDTIME_EXP_UTC = "(\\d{3,4}) UTC ([A-Za-z]{3}) ([A-Za-z]{3}) " + - "(\\d{1,2}) (\\d{4})\r\r\n"; - - pt = Pattern.compile(MNDTIME_EXP_UTC); - tm = pt.matcher(s); - - /* - * decode UTC pattern - */ - if (tm.find()) { - String group1, group4; - sdf = new SimpleDateFormat ("HHmm zzz EEE MMM dd yyyy"); - mndTmStr = tm.group(0).trim(); - try { - group1 = tm.group(1); - if ( tm.group(1).length() == 3 ) { - group1 = "0"+tm.group(1); - } - group4 = tm.group(4); - if ( tm.group(4).length() == 1 ) { - group4 = "0"+tm.group(4); - } - String mnd = group1+" UTC "+tm.group(2)+" "+tm.group(3)+" "+ group4+ - " "+tm.group(5); - cal.setTime(sdf.parse(mnd)); - cal.set(Calendar.SECOND, 0); - cal.set(Calendar.MILLISECOND, 0); - } catch (Exception e) { - if ( logger.isInfoEnabled()) { - logger.info ( "Errors in processing MND UTC time"); - } - } - - } else { - - /* - * Check Zulu pattern - */ - String MNDTIME_EXP_ZULU = "(\\d{5,6})(z|Z) ([A-Za-z]{3}) (\\d{2})//(\r\r\n|\r\n)"; - pt = Pattern.compile(MNDTIME_EXP_ZULU); - tm = pt.matcher(s); - - /* - * Check UTC pattern - */ - if (tm.find()) { - String group1; - sdf = new SimpleDateFormat ("ddHHmm zzz MMM yy"); - mndTmStr = tm.group(0).trim(); - try { - group1 = tm.group(1); - if ( tm.group(1).length() == 5 ) { - group1 = "0"+tm.group(1); - } - String time = group1+" UTC "+tm.group(3)+" "+tm.group(4); - cal.setTime(sdf.parse(time)); - cal.set(Calendar.SECOND, 0); - cal.set(Calendar.MILLISECOND, 0); - } catch (Exception e) { - if ( logger.isInfoEnabled()) { - logger.info ( "Errors in processing MND zulu time"); - } - } - } else { - - /* - * Check Zulu pattern - */ - MNDTIME_EXP_ZULU = "(\\d{5,6})(z|Z)([A-Za-z]{3})(\\d{4})//(\n|\r\n)"; - pt = Pattern.compile(MNDTIME_EXP_ZULU); - tm = pt.matcher(s); - - /* - * Check UTC pattern - */ - if (tm.find()) { - String group1; - sdf = new SimpleDateFormat ("ddHHmm zzz MMM yyyy"); - mndTmStr = tm.group(0).trim(); - try { - group1 = tm.group(1); - if ( tm.group(1).length() == 5 ) { - group1 = "0"+tm.group(1); - } - String time = group1+" UTC "+tm.group(3)+" "+tm.group(4); - cal.setTime(sdf.parse(time)); - cal.set(Calendar.SECOND, 0); - cal.set(Calendar.MILLISECOND, 0); - } catch (Exception e) { - if ( logger.isInfoEnabled()) { - logger.info ( "Errors in processing MND zulu time"); - } - } - } else { - - /* - * return null if no MND time - */ - cal = null; - } - } - } - } - return cal; - } - - private String stripExtraSpace(String str) { - if(isStringEmpty(str)) - return ""; - StringBuilder builder = new StringBuilder(str.length()); - String [] strArray = str.split(" "); - displayStringArray(strArray); - /* - * find the first string that can be parsed as an integer - * and discard any strings in front of it - */ - int firstIntegerStringIndex = findFirstIntegerStringIndex(strArray); - for(int i=firstIntegerStringIndex; i< strArray.length; i++) { - builder.append(strArray[i].trim()) - .append(" "); - } - return builder.toString().trim(); - } - - private void displayStringArray(String[] strArray) { - if(strArray == null) - System.out.println("=====, the input strArray is NULL and thus can not be displayed!!!!"); - else { - System.out.println("=======, the total number of String array is = " + strArray.length); - int arrayIndex = 1; - for(String eachString : strArray) { - System.out.println(" Array Intem No." + arrayIndex + ":= "+eachString + " with LENGTH ="+eachString.length()); - arrayIndex++; - } - } - } - - /** - * - * @param timezoneString - * @return - */ - private String replaceInvalidTimezoneValue(String timezoneString) { - String timezoneValueReturned = timezoneString; - if(timezoneValueReturned != null && timezoneValueReturned.trim().length() > 0) { - if(timezoneValueReturned.equalsIgnoreCase("PLT")) - timezoneValueReturned = "PDT"; - } - return timezoneValueReturned; - } - - /** - * - * @param strArray - * @return - */ - private int findFirstIntegerStringIndex(String[] strArray) { - int firstIntegerStringIndex = 0; - if(strArray != null) { - for(String eachString : strArray) { - if(isIntegerString(eachString)) - break; - firstIntegerStringIndex++; - } - } - return firstIntegerStringIndex; - } - - private boolean isIntegerString(String str) { - boolean isIntegerString = false; - try { - Integer.parseInt(str); - isIntegerString = true; - } catch(NumberFormatException nfe) { - //do nothing - } - return isIntegerString; - } - - /** - * a helper method to check is a string is empty - * @param str - * @return - */ - private boolean isStringEmpty(String str) { - boolean isEmpty = false; - if(str == null || str.trim().length() == 0) - isEmpty = true; - return isEmpty; - } - /** - * - * @param matcher1 - * @param matcher2 - * @return - */ - private Matcher getMatcher(Matcher matcher1, Matcher matcher2) { - Matcher matcher = null; - if(matcher1 != null && matcher1.find()) - matcher = matcher1; - else if(matcher2 != null && matcher2.find()) - matcher = matcher2; - return matcher; - } - - /** - * - * @param timeZoneString - * @return - */ - private boolean isTimeZoneInvalid(String timeZoneString) { - boolean isInvalid = false; - if(isStringEqual("PLT", timeZoneString)) - isInvalid = true; - return isInvalid; - } - - /** - * A helper method to parse and monthString and yearString directly - * and then set to the calendar object - * @param calendar - * @param monthString - * @param yearString - */ - private void setDayOfMonthAndMonthAndYearToCalendar(Calendar calendar, String dayOfMonthString, - String monthString, String yearString) { - if(calendar == null) - return; - /* - * set day of month - */ - int dayOfMonthInt = getDayOfMonthInt(dayOfMonthString); - if(isDayOfMonthIntValid(dayOfMonthInt)) - calendar.set(Calendar.DAY_OF_MONTH, dayOfMonthInt); - - /* - * set month - */ - int monthId = getMonthId(monthString); - if(isMonthIdValid(monthId)) - calendar.set(Calendar.MONTH, monthId); - - /* - * Now set year value - */ - int yearInt = getYearInt(yearString); - if(isYearIntValid(yearInt)) - calendar.set(Calendar.YEAR, yearInt); - } - - private int getMonthId(String monthString) { - int monthId = -1; - if(isStringEqual("JAN", monthString) || isStringEqual("JANUARY", monthString)) - monthId = Calendar.JANUARY; - else if(isStringEqual("FEB", monthString) || isStringEqual("FEBRUARY", monthString)) - monthId = Calendar.FEBRUARY; - else if(isStringEqual("MAR", monthString) || isStringEqual("MARCH", monthString)) - monthId = Calendar.MARCH; - else if(isStringEqual("APR", monthString) || isStringEqual("APRIL", monthString)) - monthId = Calendar.APRIL; - else if(isStringEqual("MAY", monthString)) - monthId = Calendar.MAY; - else if(isStringEqual("JUN", monthString) || isStringEqual("JUNE", monthString)) - monthId = Calendar.JUNE; - else if(isStringEqual("JUL", monthString) || isStringEqual("JULY", monthString)) - monthId = Calendar.JULY; - else if(isStringEqual("AUG", monthString) || isStringEqual("AUGUST", monthString)) - monthId = Calendar.AUGUST; - else if(isStringEqual("SEP", monthString) || isStringEqual("SEPTEMBER", monthString)) - monthId = Calendar.SEPTEMBER; - else if(isStringEqual("OCT", monthString) || isStringEqual("OCTOBER", monthString)) - monthId = Calendar.OCTOBER; - else if(isStringEqual("NOV", monthString) || isStringEqual("NOVEMBER", monthString)) - monthId = Calendar.NOVEMBER; - else if(isStringEqual("DEC", monthString) || isStringEqual("DECEMBER", monthString)) - monthId = Calendar.DECEMBER; - return monthId; - } - - private boolean isStringEqual(String str1, String str2) { - boolean isEqual = false; - if(str1.equalsIgnoreCase(str2)) - isEqual = true; - return isEqual; - } - - /** - * - * @param yearString - * @return - */ - private int getYearInt(String yearString) { - int yearInt = -1; - if(yearString != null) { - try { - yearInt = Integer.parseInt(yearString); - } catch(NumberFormatException nfe) { - //do nothing - } - } - return yearInt; - } - - private int getDayOfMonthInt(String dayOfMonthString) { - int dayOfMonthInt = -1; - if(dayOfMonthString != null) { - try { - dayOfMonthInt = Integer.parseInt(dayOfMonthString); - } catch(NumberFormatException nfe) { - //do nothing - } - } - return dayOfMonthInt; - } - - - /** - * - * @param monthId - * @return - */ - private boolean isMonthIdValid(int monthId) { - boolean isValid = true; - if(isIntegerNegative(monthId)) - isValid = false; - return isValid; - } - - /** - * - * @param yearInt - * @return - */ - private boolean isYearIntValid(int yearInt) { - boolean isValid = true; - if(isIntegerNegative(yearInt)) - isValid = false; - return isValid; - } - - private boolean isDayOfMonthIntValid(int dayOfMonthInt) { - boolean isValid = true; - if(isIntegerNegative(dayOfMonthInt)) - isValid = false; - return isValid; - } - - /** - * a method to return true if the input is a negative number - * @param intValue - * @return - */ - private boolean isIntegerNegative(int intValue) { - return intValue < 0 ? true : false; - } - - /* - * A helper method to retrieve month and day values - * Case No.1: 12 APR - * Case No.2: APR 12 - */ - private String[] verifyAndRetrieveMonthAndDay(String monthAndDayValue1, String monthAndDayValue2) { - String [] monthAndDayStringArray = new String[2]; - if(canStringBeParsedAsInteger(monthAndDayValue2)) { - monthAndDayStringArray[0] = monthAndDayValue1; - monthAndDayStringArray[1] = monthAndDayValue2; - } else if(canStringBeParsedAsInteger(monthAndDayValue1)) { - monthAndDayStringArray[0] = monthAndDayValue2; - monthAndDayStringArray[1] = monthAndDayValue1; - } - if(monthAndDayStringArray[1] != null && monthAndDayStringArray[1].length()==1) - monthAndDayStringArray[1] = "0" + monthAndDayStringArray[1]; - - checkStringArray(monthAndDayStringArray); - return monthAndDayStringArray; - } - - /* - * A helper method to check each element of the array - * to make sure there is no any null value exists in the array - * Assign an empty string value to any null element of the array - */ - private void checkStringArray(String[] stringArray) { - for(int i=0; i + * SOFTWARE HISTORY + * + * Date Ticket# Engineer Description + * ------------ ---------- ----------- -------------------------- + * 10/2008 14 T. Lee Creation + * 04/2009 14 T. Lee Used log4j logger + * 06/2009 128 T. Lee Added UTC/Zulu; Returned UTC + * or null for MND time + * 07/2009 128 T. Lee Migration to TO11 + * 01/26/2011 N/A M. Gao Refactor the logic of parsing MndTime string + * Now the regular expression is more flexible. + * It can tolerate extra spaces at the beginning, ending + * or in between of words. It can either take THU abbreviation + * or Thursday. The similar flexibility applies to MON and MONDAY too. + * It can also understand both format listed as below: + * 1018 PM CDT THU APR 1 2010 or + * 1018 PM CDT THURSDAY 1 APR 2010 + * + * + * @author T.Lee + * @version 1.0 + */ + +package gov.noaa.nws.ncep.edex.tools.decoder; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.TimeZone; +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +public final class MndTime { + private final Log logger = LogFactory.getLog(getClass()); + + /** MND time calendar*/ + private Calendar mndTm = null; + + /** MND time string */ + private String mndTmStr = null; + + /** + * Constructor the MND time + * + * @param messageData + */ + public MndTime (byte[] messageData) { + mndTm = processMndTime (messageData); + } + + /** + * Get MND time + * + * @return mndTm + */ + public Calendar getMndTime() { + return mndTm; + } + + /** + * Get MND time string + * + * @return mndTmStr + */ + public String getMndTimeString() { + return mndTmStr; + } + + /** + * Return MND time as Calendar object. + * + * @param tm the Matcher object + * @return cal + */ + + public Calendar processMndTime (byte[] msg) { + String s = new String(msg); + SimpleDateFormat sdf; + + /* + * MND time (local format) + */ +// final String MNDTIME_EXP_LOCAL = "(\\d{3,4}) ([A-Za-z]{2}) ([A-Za-z]{3}) " + +// "([A-Za-z]{3}) ([A-Za-z]{3}) (\\d{1,2}) (\\d{4})\r\r\n"; +// Pattern pt = Pattern.compile(MNDTIME_EXP_LOCAL); +// Matcher tm = pt.matcher(s); +// Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("GMT")); +// +// /* +// * Decode local time pattern +// */ +// if (tm.find()) { +// String group1; +// String group6; +// mndTmStr = tm.group(0).trim(); +// sdf = new SimpleDateFormat ("HHmm a zzz EEE MMM dd yy"); +// group1 = tm.group(1); +// if ( tm.group(1).length() == 3 ) { +// group1 = "0"+tm.group(1); +// } +// /* +// * changes made are: +// * 1. Handle both cases of "1 APR" and "APR 1" for the string fields +// * group(5) and group(6) +// */ +//// group6 = tm.group(6); +//// if ( tm.group(6).length() == 1 ) { +//// group6 = "0"+tm.group(6); +//// } +//// String mnd = group1+" "+tm.group(2)+" "+tm.group(3)+" "+ tm.group(4)+" "+ +//// tm.group(5)+" "+group6+" "+tm.group(7); +// String [] monthAndDayStringArray = verifyAndRetrieveMonthAndDay(tm.group(5), tm.group(6)); +// String mnd = group1+" "+tm.group(2)+" "+tm.group(3)+" "+ tm.group(4)+" "+ +// monthAndDayStringArray[0]+" "+ monthAndDayStringArray[1] +" "+tm.group(7); +// try { +// java.util.Date parsedDate = sdf.parse(mnd); +// cal.setTime(parsedDate); +// } catch (ParseException pe) { +// if ( logger.isInfoEnabled()) { +// logger.info ( "Errors in processing MND local time"); +// } +// if(isTimeZoneInvalid(tm.group(3))) { +// setDayOfMonthAndMonthAndYearToCalendar(cal, monthAndDayStringArray[1], +// monthAndDayStringArray[0], tm.group(7)); +// } +// } + /* + * expression pattern string match something like "800 AM PDT THU APR 1 2010" + */ + final String MNDTIME_EXP_LOCAL_1 = "( *\\d{3,4})( *[A-Za-z]{2})( *[A-Za-z]{3})" + + "( *[A-Za-z]{3,9})( *[A-Za-z]{3,9})( *\\d{1,2})( *\\d{4} *)\r\r\n"; + Pattern pattern1 = Pattern.compile(MNDTIME_EXP_LOCAL_1); + Matcher matcher1 = pattern1.matcher(s); + /* + * expression pattern string match something like "800 AM PDT THU 1 APR 2010" + */ + final String MNDTIME_EXP_LOCAL_2 = "( *\\d{3,4})( *[A-Za-z]{2})( *[A-Za-z]{3})" + + "( *[A-Za-z]{3,9})( *\\d{1,2})( *[A-Za-z]{3,9})( *\\d{4} *)\r\r\n"; + Pattern pattern2 = Pattern.compile(MNDTIME_EXP_LOCAL_2); + Matcher matcher2 = pattern2.matcher(s); + + Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("GMT")); + Matcher matcher = getMatcher(matcher1, matcher2); + + Pattern pt = null; + Matcher tm = null; + /* + * Decode local time pattern + */ + if (matcher != null) { + mndTmStr = matcher.group(0).trim(); + sdf = new SimpleDateFormat ("HHmm a zzz EEE MMM dd yy"); + String group1; + group1 = matcher.group(1).trim(); + if ( group1.length() == 3 ) { + group1 = "0"+matcher.group(1); + } + /* + * changes made are: + * 1. Handle both cases of "1 APR" and "APR 1" for the string fields + * group(5) and group(6) + */ + String group2 = matcher.group(2).trim(); + String group3 = matcher.group(3).trim(); + String group4 = matcher.group(4).trim(); + String group5 = matcher.group(5).trim(); + String group6 = matcher.group(6).trim(); + String group7 = matcher.group(7).trim(); + String [] monthAndDayStringArray = verifyAndRetrieveMonthAndDay(group5, group6); + String mnd = group1+" "+ group2 + " "+ group3 +" "+ group4 + " " + + monthAndDayStringArray[0] + " "+ monthAndDayStringArray[1] +" "+ group7; + try { + java.util.Date parsedDate = sdf.parse(mnd); + cal.setTime(parsedDate); + } catch (ParseException pe) { + if ( logger.isInfoEnabled()) { + logger.info ( "Errors in processing MND local time"); + } + if(isTimeZoneInvalid(group3)) { + setDayOfMonthAndMonthAndYearToCalendar(cal, monthAndDayStringArray[1], + monthAndDayStringArray[0], group7); + } + } + + } else { + + /* + * UTC format, e.g., 1500 UTC THU MAY 28 2009 + */ + final String MNDTIME_EXP_UTC = "(\\d{3,4}) UTC ([A-Za-z]{3}) ([A-Za-z]{3}) " + + "(\\d{1,2}) (\\d{4})\r\r\n"; + + pt = Pattern.compile(MNDTIME_EXP_UTC); + tm = pt.matcher(s); + + /* + * decode UTC pattern + */ + if (tm.find()) { + String group1, group4; + sdf = new SimpleDateFormat ("HHmm zzz EEE MMM dd yyyy"); + mndTmStr = tm.group(0).trim(); + try { + group1 = tm.group(1); + if ( tm.group(1).length() == 3 ) { + group1 = "0"+tm.group(1); + } + group4 = tm.group(4); + if ( tm.group(4).length() == 1 ) { + group4 = "0"+tm.group(4); + } + String mnd = group1+" UTC "+tm.group(2)+" "+tm.group(3)+" "+ group4+ + " "+tm.group(5); + cal.setTime(sdf.parse(mnd)); + cal.set(Calendar.SECOND, 0); + cal.set(Calendar.MILLISECOND, 0); + } catch (Exception e) { + if ( logger.isInfoEnabled()) { + logger.info ( "Errors in processing MND UTC time"); + } + } + + } else { + + /* + * Check Zulu pattern + */ + String MNDTIME_EXP_ZULU = "(\\d{5,6})(z|Z) ([A-Za-z]{3}) (\\d{2})//(\r\r\n|\r\n)"; + pt = Pattern.compile(MNDTIME_EXP_ZULU); + tm = pt.matcher(s); + + /* + * Check UTC pattern + */ + if (tm.find()) { + String group1; + sdf = new SimpleDateFormat ("ddHHmm zzz MMM yy"); + mndTmStr = tm.group(0).trim(); + try { + group1 = tm.group(1); + if ( tm.group(1).length() == 5 ) { + group1 = "0"+tm.group(1); + } + String time = group1+" UTC "+tm.group(3)+" "+tm.group(4); + cal.setTime(sdf.parse(time)); + cal.set(Calendar.SECOND, 0); + cal.set(Calendar.MILLISECOND, 0); + } catch (Exception e) { + if ( logger.isInfoEnabled()) { + logger.info ( "Errors in processing MND zulu time"); + } + } + } else { + + /* + * Check Zulu pattern + */ + MNDTIME_EXP_ZULU = "(\\d{5,6})(z|Z)([A-Za-z]{3})(\\d{4})//(\n|\r\n)"; + pt = Pattern.compile(MNDTIME_EXP_ZULU); + tm = pt.matcher(s); + + /* + * Check UTC pattern + */ + if (tm.find()) { + String group1; + sdf = new SimpleDateFormat ("ddHHmm zzz MMM yyyy"); + mndTmStr = tm.group(0).trim(); + try { + group1 = tm.group(1); + if ( tm.group(1).length() == 5 ) { + group1 = "0"+tm.group(1); + } + String time = group1+" UTC "+tm.group(3)+" "+tm.group(4); + cal.setTime(sdf.parse(time)); + cal.set(Calendar.SECOND, 0); + cal.set(Calendar.MILLISECOND, 0); + } catch (Exception e) { + if ( logger.isInfoEnabled()) { + logger.info ( "Errors in processing MND zulu time"); + } + } + } else { + + /* + * return null if no MND time + */ + cal = null; + } + } + } + } + return cal; + } + + private String stripExtraSpace(String str) { + if(isStringEmpty(str)) + return ""; + StringBuilder builder = new StringBuilder(str.length()); + String [] strArray = str.split(" "); + displayStringArray(strArray); + /* + * find the first string that can be parsed as an integer + * and discard any strings in front of it + */ + int firstIntegerStringIndex = findFirstIntegerStringIndex(strArray); + for(int i=firstIntegerStringIndex; i< strArray.length; i++) { + builder.append(strArray[i].trim()) + .append(" "); + } + return builder.toString().trim(); + } + + private void displayStringArray(String[] strArray) { + if(strArray == null) + System.out.println("=====, the input strArray is NULL and thus can not be displayed!!!!"); + else { + System.out.println("=======, the total number of String array is = " + strArray.length); + int arrayIndex = 1; + for(String eachString : strArray) { + System.out.println(" Array Intem No." + arrayIndex + ":= "+eachString + " with LENGTH ="+eachString.length()); + arrayIndex++; + } + } + } + + /** + * + * @param timezoneString + * @return + */ + private String replaceInvalidTimezoneValue(String timezoneString) { + String timezoneValueReturned = timezoneString; + if(timezoneValueReturned != null && timezoneValueReturned.trim().length() > 0) { + if(timezoneValueReturned.equalsIgnoreCase("PLT")) + timezoneValueReturned = "PDT"; + } + return timezoneValueReturned; + } + + /** + * + * @param strArray + * @return + */ + private int findFirstIntegerStringIndex(String[] strArray) { + int firstIntegerStringIndex = 0; + if(strArray != null) { + for(String eachString : strArray) { + if(isIntegerString(eachString)) + break; + firstIntegerStringIndex++; + } + } + return firstIntegerStringIndex; + } + + private boolean isIntegerString(String str) { + boolean isIntegerString = false; + try { + Integer.parseInt(str); + isIntegerString = true; + } catch(NumberFormatException nfe) { + //do nothing + } + return isIntegerString; + } + + /** + * a helper method to check is a string is empty + * @param str + * @return + */ + private boolean isStringEmpty(String str) { + boolean isEmpty = false; + if(str == null || str.trim().length() == 0) + isEmpty = true; + return isEmpty; + } + /** + * + * @param matcher1 + * @param matcher2 + * @return + */ + private Matcher getMatcher(Matcher matcher1, Matcher matcher2) { + Matcher matcher = null; + if(matcher1 != null && matcher1.find()) + matcher = matcher1; + else if(matcher2 != null && matcher2.find()) + matcher = matcher2; + return matcher; + } + + /** + * + * @param timeZoneString + * @return + */ + private boolean isTimeZoneInvalid(String timeZoneString) { + boolean isInvalid = false; + if(isStringEqual("PLT", timeZoneString)) + isInvalid = true; + return isInvalid; + } + + /** + * A helper method to parse and monthString and yearString directly + * and then set to the calendar object + * @param calendar + * @param monthString + * @param yearString + */ + private void setDayOfMonthAndMonthAndYearToCalendar(Calendar calendar, String dayOfMonthString, + String monthString, String yearString) { + if(calendar == null) + return; + /* + * set day of month + */ + int dayOfMonthInt = getDayOfMonthInt(dayOfMonthString); + if(isDayOfMonthIntValid(dayOfMonthInt)) + calendar.set(Calendar.DAY_OF_MONTH, dayOfMonthInt); + + /* + * set month + */ + int monthId = getMonthId(monthString); + if(isMonthIdValid(monthId)) + calendar.set(Calendar.MONTH, monthId); + + /* + * Now set year value + */ + int yearInt = getYearInt(yearString); + if(isYearIntValid(yearInt)) + calendar.set(Calendar.YEAR, yearInt); + } + + private int getMonthId(String monthString) { + int monthId = -1; + if(isStringEqual("JAN", monthString) || isStringEqual("JANUARY", monthString)) + monthId = Calendar.JANUARY; + else if(isStringEqual("FEB", monthString) || isStringEqual("FEBRUARY", monthString)) + monthId = Calendar.FEBRUARY; + else if(isStringEqual("MAR", monthString) || isStringEqual("MARCH", monthString)) + monthId = Calendar.MARCH; + else if(isStringEqual("APR", monthString) || isStringEqual("APRIL", monthString)) + monthId = Calendar.APRIL; + else if(isStringEqual("MAY", monthString)) + monthId = Calendar.MAY; + else if(isStringEqual("JUN", monthString) || isStringEqual("JUNE", monthString)) + monthId = Calendar.JUNE; + else if(isStringEqual("JUL", monthString) || isStringEqual("JULY", monthString)) + monthId = Calendar.JULY; + else if(isStringEqual("AUG", monthString) || isStringEqual("AUGUST", monthString)) + monthId = Calendar.AUGUST; + else if(isStringEqual("SEP", monthString) || isStringEqual("SEPTEMBER", monthString)) + monthId = Calendar.SEPTEMBER; + else if(isStringEqual("OCT", monthString) || isStringEqual("OCTOBER", monthString)) + monthId = Calendar.OCTOBER; + else if(isStringEqual("NOV", monthString) || isStringEqual("NOVEMBER", monthString)) + monthId = Calendar.NOVEMBER; + else if(isStringEqual("DEC", monthString) || isStringEqual("DECEMBER", monthString)) + monthId = Calendar.DECEMBER; + return monthId; + } + + private boolean isStringEqual(String str1, String str2) { + boolean isEqual = false; + if(str1.equalsIgnoreCase(str2)) + isEqual = true; + return isEqual; + } + + /** + * + * @param yearString + * @return + */ + private int getYearInt(String yearString) { + int yearInt = -1; + if(yearString != null) { + try { + yearInt = Integer.parseInt(yearString); + } catch(NumberFormatException nfe) { + //do nothing + } + } + return yearInt; + } + + private int getDayOfMonthInt(String dayOfMonthString) { + int dayOfMonthInt = -1; + if(dayOfMonthString != null) { + try { + dayOfMonthInt = Integer.parseInt(dayOfMonthString); + } catch(NumberFormatException nfe) { + //do nothing + } + } + return dayOfMonthInt; + } + + + /** + * + * @param monthId + * @return + */ + private boolean isMonthIdValid(int monthId) { + boolean isValid = true; + if(isIntegerNegative(monthId)) + isValid = false; + return isValid; + } + + /** + * + * @param yearInt + * @return + */ + private boolean isYearIntValid(int yearInt) { + boolean isValid = true; + if(isIntegerNegative(yearInt)) + isValid = false; + return isValid; + } + + private boolean isDayOfMonthIntValid(int dayOfMonthInt) { + boolean isValid = true; + if(isIntegerNegative(dayOfMonthInt)) + isValid = false; + return isValid; + } + + /** + * a method to return true if the input is a negative number + * @param intValue + * @return + */ + private boolean isIntegerNegative(int intValue) { + return intValue < 0 ? true : false; + } + + /* + * A helper method to retrieve month and day values + * Case No.1: 12 APR + * Case No.2: APR 12 + */ + private String[] verifyAndRetrieveMonthAndDay(String monthAndDayValue1, String monthAndDayValue2) { + String [] monthAndDayStringArray = new String[2]; + if(canStringBeParsedAsInteger(monthAndDayValue2)) { + monthAndDayStringArray[0] = monthAndDayValue1; + monthAndDayStringArray[1] = monthAndDayValue2; + } else if(canStringBeParsedAsInteger(monthAndDayValue1)) { + monthAndDayStringArray[0] = monthAndDayValue2; + monthAndDayStringArray[1] = monthAndDayValue1; + } + if(monthAndDayStringArray[1] != null && monthAndDayStringArray[1].length()==1) + monthAndDayStringArray[1] = "0" + monthAndDayStringArray[1]; + + checkStringArray(monthAndDayStringArray); + return monthAndDayStringArray; + } + + /* + * A helper method to check each element of the array + * to make sure there is no any null value exists in the array + * Assign an empty string value to any null element of the array + */ + private void checkStringArray(String[] stringArray) { + for(int i=0; i - * SOFTWARE HISTORY - * Date Ticket# Engineer Description - * ------------ ---------- ----------- -------------------------- - * 12 Jun 2009 95 B. Hebbard Initial creation. - * 24 Jun 2009 95/132 B. Hebbard Add getLatLonPoint; move to common plugin - * 22 Jul 2009 for 132 B. Hebbard Port to TO11 until station table avail. EDEX - * - * - * - * @author bhebbard - * @version 1.0 - */ -public enum VOR { - - // (From GEMPAK vors.tbl -- for TEMPORARY use only, just until - // this is handled by more general station/location design. - // - // Note these are a SUBSET of the high-altitude VORs in North America - // used by AWC for SIGMET bounding points. It is NOT sufficient - // for lookup in cases where where all VHF NAVAIDs -- or - // even all VORs -- are required [say, for PIREP decoding]) - // - // Lat Lon - YSJ ( 45.32 , -65.88 ) , - HUL ( 46.04 , -67.83 ) , - PQI ( 46.77 , -68.09 ) , - MLT ( 45.58 , -68.52 ) , - BGR ( 44.84 , -68.87 ) , - ACK ( 41.28 , -70.03 ) , - ENE ( 43.43 , -70.61 ) , - BOS ( 42.36 , -70.99 ) , - YQB ( 46.80 , -71.38 ) , - PVD ( 41.72 , -71.43 ) , - CON ( 43.22 , -71.58 ) , - YSC ( 45.43 , -71.68 ) , - HTO ( 40.92 , -72.32 ) , - MPV ( 44.22 , -72.57 ) , - BDL ( 41.94 , -72.69 ) , - PLB ( 44.69 , -73.52 ) , - JFK ( 40.63 , -73.77 ) , - ALB ( 42.75 , -73.80 ) , - CYN ( 39.82 , -74.43 ) , - SAX ( 41.07 , -74.54 ) , - MSS ( 44.91 , -74.72 ) , - SIE ( 39.10 , -74.80 ) , - HNK ( 42.06 , -75.32 ) , - SBY ( 38.35 , -75.52 ) , - YOW ( 45.32 , -75.67 ) , - ETX ( 40.58 , -75.68 ) , - ECG ( 36.25 , -76.18 ) , - SYR ( 43.16 , -76.20 ) , - ORF ( 36.89 , -76.20 ) , - EMI ( 39.50 , -76.98 ) , - HAR ( 40.23 , -77.02 ) , - DCA ( 38.86 , -77.04 ) , - RIC ( 37.50 , -77.32 ) , - CSN ( 38.64 , -77.87 ) , - ILM ( 34.35 , -77.87 ) , - SLT ( 41.51 , -77.97 ) , - PSB ( 40.92 , -77.99 ) , - BUF ( 42.93 , -78.65 ) , - RDU ( 35.87 , -78.78 ) , - JST ( 40.32 , -78.83 ) , - JHW ( 42.19 , -79.12 ) , - LYH ( 37.25 , -79.23 ) , - YYZ ( 43.67 , -79.63 ) , - FLO ( 34.23 , -79.66 ) , - GSO ( 36.05 , -79.98 ) , - CHS ( 32.89 , -80.04 ) , - PBI ( 26.68 , -80.09 ) , - EKN ( 38.92 , -80.10 ) , - EWC ( 40.83 , -80.21 ) , - ERI ( 42.02 , -80.30 ) , - MIA ( 25.80 , -80.30 ) , - VRB ( 27.68 , -80.49 ) , - PSK ( 37.09 , -80.71 ) , - AIR ( 40.02 , -80.82 ) , - CLT ( 35.22 , -80.93 ) , - CAE ( 33.86 , -81.05 ) , - YVV ( 44.75 , -81.10 ) , - SAV ( 32.16 , -81.11 ) , - OMN ( 29.30 , -81.11 ) , - BKW ( 37.78 , -81.12 ) , - ORL ( 28.54 , -81.34 ) , - CRG ( 30.34 , -81.51 ) , - EYW ( 24.59 , -81.80 ) , - FMY ( 26.58 , -81.87 ) , // OBSOLETE - SPA ( 35.03 , -81.93 ) , - HNN ( 38.75 , -82.03 ) , - HMV ( 36.44 , -82.13 ) , - CLE ( 41.42 , -81.85 ) , - IRQ ( 33.71 , -82.16 ) , - AMG ( 31.54 , -82.51 ) , - SRQ ( 27.40 , -82.55 ) , - APE ( 40.15 , -82.59 ) , - PIE ( 27.91 , -82.68 ) , - ECK ( 43.26 , -82.72 ) , - CTY ( 29.60 , -83.05 ) , - ODF ( 34.70 , -83.30 ) , - DXO ( 42.21 , -83.37 ) , - ASP ( 44.45 , -83.39 ) , - MCN ( 32.69 , -83.65 ) , - FNT ( 42.97 , -83.74 ) , - VXV ( 35.90 , -83.89 ) , - ROD ( 40.29 , -84.04 ) , - MBS ( 43.53 , -84.08 ) , - LOZ ( 37.03 , -84.12 ) , - ABY ( 31.65 , -84.30 ) , // OBSOLETE - SSM ( 46.41 , -84.31 ) , - TLH ( 30.56 , -84.37 ) , - ATL ( 33.63 , -84.44 ) , - CVG ( 39.02 , -84.70 ) , - GQO ( 34.96 , -85.15 ) , - FWA ( 40.98 , -85.19 ) , - LGC ( 33.05 , -85.21 ) , - GRR ( 42.79 , -85.50 ) , - TVC ( 44.67 , -85.55 ) , - LOU ( 38.10 , -85.58 ) , // OBSOLETE - MKG ( 43.17 , -86.04 ) , - PMM ( 42.47 , -86.11 ) , - GIJ ( 41.77 , -86.32 ) , - MGM ( 32.22 , -86.32 ) , - IND ( 39.81 , -86.37 ) , - BWG ( 36.93 , -86.44 ) , - BNA ( 36.14 , -86.68 ) , - CEW ( 30.83 , -86.68 ) , - VUZ ( 33.67 , -86.90 ) , - BVT ( 40.56 , -87.07 ) , - TTH ( 39.49 , -87.25 ) , - MSL ( 34.70 , -87.48 ) , - SAW ( 46.36 , -87.40 ) , - PXV ( 37.93 , -87.76 ) , - ORD ( 41.98 , -87.90 ) , - GRB ( 44.56 , -88.19 ) , - BAE ( 43.12 , -88.28 ) , - JOT ( 41.55 , -88.32 ) , - SJI ( 30.73 , -88.36 ) , - IGB ( 33.48 , -88.52 ) , - MEI ( 32.38 , -88.80 ) , - DEC ( 39.74 , -88.86 ) , - YQT ( 48.37 , -89.32 ) , - DYR ( 36.02 , -89.32 ) , - RHI ( 45.63 , -89.45 ) , - BDF ( 41.16 , -89.59 ) , - DLL ( 43.55 , -89.76 ) , - MEM ( 35.06 , -89.98 ) , - LEV ( 29.18 , -90.10 ) , - JAN ( 32.51 , -90.17 ) , - MSY ( 30.00 , -90.27 ) , // OBSOLETE - FAM ( 37.67 , -90.23 ) , - MCB ( 31.30 , -90.26 ) , - SQS ( 33.46 , -90.28 ) , - STL ( 38.86 , -90.48 ) , - DBQ ( 42.40 , -90.71 ) , - ARG ( 36.11 , -90.95 ) , - UIN ( 39.85 , -91.28 ) , - BTR ( 30.48 , -91.30 ) , - ODI ( 43.91 , -91.47 ) , - EAU ( 44.90 , -91.48 ) , - IOW ( 41.52 , -91.61 ) , - MLU ( 32.52 , -92.03 ) , - LIT ( 34.68 , -92.18 ) , - DLH ( 46.80 , -92.20 ) , - COU ( 38.82 , -92.22 ) , - AEX ( 31.26 , -92.50 ) , - IRK ( 40.14 , -92.59 ) , - ELD ( 33.26 , -92.74 ) , - LCH ( 30.14 , -93.11 ) , - MSP ( 44.88 , -93.23 ) , - MCW ( 43.09 , -93.33 ) , - SGF ( 37.36 , -93.33 ) , - INL ( 48.57 , -93.40 ) , - DSM ( 41.44 , -93.65 ) , - EIC ( 32.77 , -93.81 ) , - BRD ( 46.35 , -94.03 ) , - TXK ( 33.51 , -94.07 ) , - RZC ( 36.25 , -94.12 ) , - FSM ( 35.38 , -94.27 ) , - FOD ( 42.61 , -94.29 ) , - BUM ( 38.27 , -94.49 ) , - MKC ( 39.28 , -94.59 ) , // OBSOLETE - LFK ( 31.16 , -94.72 ) , - GGG ( 32.42 , -94.75 ) , - BJI ( 47.58 , -95.02 ) , - RWF ( 44.47 , -95.13 ) , - OSW ( 37.15 , -95.20 ) , - IAH ( 29.96 , -95.35 ) , - OVR ( 41.17 , -95.74 ) , - MLC ( 34.85 , -95.78 ) , - TUL ( 36.20 , -95.79 ) , - PWE ( 40.20 , -96.21 ) , - PSX ( 28.76 , -96.31 ) , - FSD ( 43.65 , -96.78 ) , - FAR ( 46.75 , -96.85 ) , - DFW ( 32.87 , -97.03 ) , // OBSOLETE - ADM ( 34.21 , -97.17 ) , - GFK ( 47.95 , -97.19 ) , - YWG ( 49.90 , -97.23 ) , - ACT ( 31.66 , -97.27 ) , - BRO ( 25.92 , -97.38 ) , - CRP ( 27.90 , -97.45 ) , - ICT ( 37.75 , -97.58 ) , - OKC ( 35.36 , -97.61 ) , - SLN ( 38.93 , -97.62 ) , - AUS ( 30.30 , -97.70 ) , // OBSOLETE - END ( 36.35 , -97.92 ) , - OBH ( 41.38 , -98.35 ) , - ABR ( 45.42 , -98.37 ) , - SAT ( 29.64 , -98.46 ) , - SPS ( 33.99 , -98.59 ) , - ONL ( 42.47 , -98.69 ) , - LRD ( 27.48 , -99.42 ) , - JCT ( 30.60 , -99.82 ) , - ABI ( 32.48 , -99.86 ) , - GAG ( 36.34 , -99.88 ) , - ANW ( 42.57 , -99.99 ) , - PIR ( 44.40 , -100.17 ) , - HLC ( 39.26 , -100.23 ) , - CDS ( 34.37 , -100.28 ) , - SJT ( 31.38 , -100.46 ) , - MCK ( 40.20 , -100.59 ) , - BIS ( 46.77 , -100.67 ) , - LBF ( 41.13 , -100.72 ) , - GCK ( 37.92 , -100.73 ) , - DLF ( 29.36 , -100.77 ) , - LBL ( 37.04 , -100.97 ) , - MOT ( 48.26 , -101.29 ) , - AMA ( 35.29 , -101.64 ) , - GLD ( 39.39 , -101.69 ) , - DPR ( 45.08 , -101.72 ) , - LBB ( 33.70 , -101.92 ) , - MAF ( 32.02 , -102.18 ) , - LAA ( 38.20 , -102.69 ) , - DIK ( 46.86 , -102.77 ) , - TXO ( 34.50 , -102.84 ) , - SNY ( 41.10 , -102.98 ) , - FST ( 30.95 , -102.98 ) , - RAP ( 43.98 , -103.01 ) , - AKO ( 40.16 , -103.18 ) , - INK ( 31.87 , -103.24 ) , - BFF ( 41.89 , -103.48 ) , - TBE ( 37.27 , -103.60 ) , - TCC ( 35.18 , -103.60 ) , - ISN ( 48.18 , -103.63 ) , - MRF ( 30.30 , -103.95 ) , - PUB ( 38.29 , -104.43 ) , - ROW ( 33.34 , -104.62 ) , // OBSOLETE - DEN ( 39.81 , -104.66 ) , - CYS ( 41.21 , -104.77 ) , - CIM ( 36.49 , -104.87 ) , - LVS ( 35.66 , -105.14 ) , // OBSOLETE - LAR ( 41.33 , -105.72 ) , - ALS ( 37.35 , -105.82 ) , - MLS ( 46.38 , -105.95 ) , - DDY ( 43.09 , -106.28 ) , - ELP ( 31.82 , -106.28 ) , - CZI ( 44.00 , -106.44 ) , - GGW ( 48.22 , -106.63 ) , - ABQ ( 35.04 , -106.82 ) , - DBL ( 39.44 , -106.90 ) , - HBU ( 38.45 , -107.04 ) , - SHR ( 44.84 , -107.06 ) , - TCS ( 33.28 , -107.28 ) , - CHE ( 40.52 , -107.31 ) , - DMN ( 32.28 , -107.60 ) , - YYN ( 50.28 , -107.68 ) , - FMN ( 36.75 , -108.10 ) , // OBSOLETE - BOY ( 43.46 , -108.30 ) , - BIL ( 45.81 , -108.63 ) , - JNC ( 39.06 , -108.79 ) , - DVC ( 37.81 , -108.93 ) , - OCS ( 41.59 , -109.02 ) , - SJN ( 34.42 , -109.14 ) , - SSO ( 32.27 , -109.26 ) , - LWT ( 47.05 , -109.61 ) , - HVR ( 48.54 , -109.77 ) , - BPI ( 42.58 , -110.11 ) , - MTU ( 40.15 , -110.13 ) , - HVE ( 38.42 , -110.70 ) , - YXH ( 50.02 , -110.72 ) , - JAC ( 43.62 , -110.73 ) , - INW ( 35.06 , -110.80 ) , - TUS ( 32.10 , -110.92 ) , - TBC ( 36.12 , -111.27 ) , - GTF ( 47.45 , -111.41 ) , - HLN ( 46.61 , -111.95 ) , - PHX ( 33.43 , -112.02 ) , - SLC ( 40.85 , -111.98 ) , - DBS ( 44.09 , -112.21 ) , - BCE ( 37.69 , -112.30 ) , - MLD ( 42.20 , -112.45 ) , - DRK ( 34.70 , -112.48 ) , - DTA ( 39.30 , -112.51 ) , - DLN ( 45.25 , -112.55 ) , - PIH ( 42.87 , -112.65 ) , - YQL ( 49.63 , -112.80 ) , - PGS ( 35.62 , -113.54 ) , - BVL ( 40.73 , -113.76 ) , - LKT ( 45.02 , -114.08 ) , - FCA ( 48.21 , -114.18 ) , - ILC ( 38.25 , -114.39 ) , - EED ( 34.77 , -114.47 ) , - TWF ( 42.48 , -114.49 ) , - BZA ( 32.77 , -114.60 ) , - ELY ( 39.30 , -114.85 ) , - LAS ( 36.08 , -115.16 ) , - MLP ( 47.46 , -115.65 ) , - YXC ( 49.60 , -115.78 ) , - TRM ( 33.63 , -116.16 ) , - BOI ( 43.55 , -116.19 ) , - DNJ ( 44.77 , -116.21 ) , - HEC ( 34.80 , -116.46 ) , - BTY ( 36.80 , -116.75 ) , - BAM ( 40.57 , -116.92 ) , - MZB ( 32.78 , -117.23 ) , - GEG ( 47.56 , -117.63 ) , - OAL ( 38.00 , -117.77 ) , - BKE ( 44.84 , -117.81 ) , - REO ( 42.59 , -117.87 ) , - LAX ( 33.93 , -118.43 ) , - PDT ( 45.70 , -118.94 ) , - EHF ( 35.48 , -119.10 ) , - EPH ( 47.38 , -119.42 ) , - FMG ( 39.53 , -119.66 ) , - RZS ( 34.51 , -119.77 ) , - CZQ ( 36.88 , -119.82 ) , - YKM ( 46.57 , -120.45 ) , - LKV ( 42.49 , -120.51 ) , - YDC ( 49.47 , -120.52 ) , - MOD ( 37.63 , -120.96 ) , - DSD ( 44.25 , -121.30 ) , - SAC ( 38.44 , -121.55 ) , - SNS ( 36.66 , -121.60 ) , - OAK ( 37.73 , -122.22 ) , - RBL ( 40.10 , -122.24 ) , - SEA ( 47.44 , -122.31 ) , - BLI ( 48.95 , -122.58 ) , // OBSOLETE - PDX ( 45.58 , -122.60 ) , - PYE ( 38.08 , -122.87 ) , - OED ( 42.48 , -122.91 ) , - EUG ( 44.12 , -123.22 ) , - ENI ( 39.05 , -123.27 ) , - ONP ( 44.58 , -124.06 ) , - HQM ( 46.95 , -124.15 ) , - FOT ( 40.67 , -124.23 ) , - TOU ( 48.30 , -124.63 ) , - YQV ( 51.27 , -102.47 ) , - ANN ( 55.05 , -131.57 ) , - LVD ( 56.47 , -133.08 ) , - BKA ( 56.86 , -135.55 ) , - SSR ( 58.17 , -135.25 ) , - JNU ( 58.35 , -134.58 ) , - YAK ( 59.50 , -139.67 ) , - MDO ( 59.45 , -146.30 ) , - JOH ( 60.48 , -146.60 ) , - ODK ( 57.75 , -152.50 ) , - HOM ( 59.65 , -151.48 ) , - ENA ( 60.57 , -151.25 ) , - ANC ( 61.17 , -150.00 ) , - BGQ ( 61.53 , -149.82 ) , - ORT ( 62.97 , -141.93 ) , - GKN ( 62.15 , -145.45 ) , - TKA ( 62.32 , -150.10 ) , - SQA ( 61.10 , -155.63 ) , - DLG ( 59.05 , -158.50 ) , - AKN ( 58.68 , -156.65 ) , - PDN ( 56.95 , -158.65 ) , - CDB ( 55.20 , -162.73 ) , - DUT ( 53.90 , -166.55 ) , - NUD ( 51.88 , -176.65 ) , - SYA ( 52.72 , -174.12 ) , - SPY ( 57.17 , -170.22 ) , - EHM ( 58.66 , -162.07 ) , - HPB ( 61.52 , -166.14 ) , - BET ( 60.78 , -161.83 ) , - ANI ( 61.59 , -159.61 ) , - SMA ( 62.06 , -163.30 ) , - UNK ( 63.88 , -160.80 ) , - ULL ( 63.70 , -170.48 ) , - MCG ( 62.95 , -155.60 ) , - ENN ( 64.55 , -149.07 ) , - FAI ( 64.82 , -147.85 ) , - BIG ( 64.00 , -145.72 ) , - FYU ( 66.57 , -145.25 ) , - BTT ( 66.92 , -151.53 ) , - TAL ( 65.18 , -152.18 ) , - CQR ( 67.50 , -148.47 ) , - SCC ( 70.20 , -148.47 ) , - BTI ( 70.13 , -143.57 ) , - BRW ( 71.28 , -156.77 ) , - GAL ( 64.73 , -156.93 ) , - OME ( 64.52 , -165.45 ) , - OTZ ( 66.88 , -162.60 ) , - WLK ( 66.60 , -160.00 ) , - HSL ( 65.71 , -156.37 ) , - BSF ( 19.76 , -155.39 ) , - UPP ( 20.20 , -155.84 ) , - ITO ( 19.72 , -155.01 ) , - HNL ( 21.33 , -157.93 ) , - OGG ( 20.91 , -156.42 ) , - NDB ( 20.88 , -156.44 ) , - MUE ( 20.00 , -155.67 ) , - NGF ( 21.45 , -157.76 ) , - MKK ( 21.14 , -157.17 ) , - NBS ( 22.04 , -159.79 ) , - CKH ( 21.27 , -157.70 ) , - IAI ( 19.65 , -156.02 ) , - LLD ( 20.77 , -156.97 ) , - LNY ( 20.76 , -156.97 ) , - LIH ( 21.97 , -159.34 ) , - SOK ( 21.90 , -159.53 ) , - // - // Newcomers! These are in the set of VORs now used by AWC for Convective SIGMET bounds, - // but not in (out-of-the-box V5.11.4) $GEMTBL/stns/vors.tbl : - // - RSW ( 26.53 , -81.78 ) , // Lee County VORTAC Fort Myers FL L-VORTAC !? replaces FMY - PZD ( 31.66 , -84.29 ) , // Pecan VORTAC Albany GA H-VORTACW replaces ABY - IIU ( 38.10 , -85.58 ) , // Louisville VORTAC Louisville KY H-VORTAC replaces LOU - HRV ( 29.85 , -90.00 ) , // Harvey VORTAC New Orleans LA H-VORTACW replaces MSY - MCI ( 39.29 , -94.74 ) , // Kansas City VORTAC Kansas City MO H-VORTAC replaces MKC - TTT ( 32.87 , -97.04 ) , // Maverick VOR/DME Dallas-Fort Worth TX H-VORW/DME replaces DFW - CWK ( 30.38 , -97.53 ) , // Centex VORTAC Austin TX H-VORTACW replaces AUS - CME ( 33.34 , -104.62 ) , // Chisum VORTAC Roswell NM H-VORTACW replaces ROW - FTI ( 35.66 , -105.14 ) , // Fort Union VORTAC Las Vegas NM H-VORTACW replaces LVS - RSK ( 36.75 , -108.10 ) , // Rattlesnake VORTAC Farmington NM H-VORTACW replaces FMN - HUH ( 48.95 , -122.58 ) ; // Whatcom VORTAC Bellingham WA H-VORTACW replaces BLI - - private static Log logger = LogFactory.getLog(VOR.class); - - private double latitude; - private double longitude; - - private VOR (double latitude, double longitude) - { - this.latitude = latitude; - this.longitude = longitude; - } - - public double getLatitude() - { - return latitude; - } - - public double getLongitude() - { - return longitude; - } - - public LatLonPoint getLatLonPoint() - { - return new LatLonPoint (latitude, longitude, LatLonPoint.INDEGREES); - } - - private enum Direction { - N, NNE, NE, ENE, E, ESE, SE, SSE, S, SSW, SW, WSW, W, WNW, NW, NNW; - public double getDegrees() { return ordinal() * 22.5; } - } - - private static final double ONE_NM_RADIANS = Math.toRadians (1.0 / 60.0); - - /** - * Given a VOR-relative reference string, returns a LatLonPoint - * (com.raytheon.uf.edex.decodertools.core.LatLonPoint). - * - * @param location A String such as... - * "BOS" - * "20S EMI" - * "30 WNW BUM" - * " 40ENE HUH " - * ...referencing a VOR listed in AC 00-45F - * (Appendix F), optionally preceded by - * distance in nautical miles and 16-point - * compass direction string. - * @return The decoded location as a LatLonPoint; - * null on error (such as unrecognized VOR - * identifier or direction string). - * - */ - public static LatLonPoint getLatLonPoint(String location) { - // Wrap decoding in a try block, in case of exception on - // one ofthe two enum valueOf lookups, or other problems. - try { - location = location.trim(); - // VOR is always last 3 nonblank char of location - String navaid = location.substring(location.length()-3); - LatLonPoint point = VOR.valueOf(navaid).getLatLonPoint(); - // If there's an offset direction/bearing, process it - if (location.length() > 3) { - String u = location.substring(0, location.length()-3); - Pattern p = Pattern.compile("^([0-9]+)\\s*([A-Z]+)"); - Matcher m = p.matcher(u); - if (m.find()) { - String distanceStr = m.group(1); - String bearingStr = m.group(2); - int distanceNM = Integer.parseInt(distanceStr); - double distanceRad = distanceNM * ONE_NM_RADIANS; - // LatLonPoint.positionOf thinks bearing is CCW, not CW... - double bearingDeg = 360.0 - Direction.valueOf(bearingStr).getDegrees(); - double bearingRad = Math.toRadians(bearingDeg); - point = point.positionOf(bearingRad, distanceRad); - } - } - return point; - } - catch (Exception e) { - logger.error("[Error decoding location: " + location + "]"); - return null; - } - } - -} +/** + * + */ +package gov.noaa.nws.ncep.edex.tools.decoder; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +//import com.raytheon.edex.tools.decoder.LatLonPoint; //TO10 +import com.raytheon.uf.edex.decodertools.core.LatLonPoint; //TO11 + +/** + * VOR - A *TEMPORARY* enum class to define some known VORs + * used to define convective SIGMET locations. (See below.) + * + * This code has been developed by the SIB for use in the AWIPS2 system. + * + *
+ * SOFTWARE HISTORY
+ * Date         Ticket#    Engineer    Description
+ * ------------ ---------- ----------- --------------------------
+ * 12 Jun 2009  95         B. Hebbard  Initial creation.
+ * 24 Jun 2009  95/132     B. Hebbard  Add getLatLonPoint; move to common plugin
+ * 22 Jul 2009  for 132    B. Hebbard  Port to TO11 until station table avail. EDEX
+ * 
+ * 
+ * + * @author bhebbard + * @version 1.0 + */ +public enum VOR { + + // (From GEMPAK vors.tbl -- for TEMPORARY use only, just until + // this is handled by more general station/location design. + // + // Note these are a SUBSET of the high-altitude VORs in North America + // used by AWC for SIGMET bounding points. It is NOT sufficient + // for lookup in cases where where all VHF NAVAIDs -- or + // even all VORs -- are required [say, for PIREP decoding]) + // + // Lat Lon + YSJ ( 45.32 , -65.88 ) , + HUL ( 46.04 , -67.83 ) , + PQI ( 46.77 , -68.09 ) , + MLT ( 45.58 , -68.52 ) , + BGR ( 44.84 , -68.87 ) , + ACK ( 41.28 , -70.03 ) , + ENE ( 43.43 , -70.61 ) , + BOS ( 42.36 , -70.99 ) , + YQB ( 46.80 , -71.38 ) , + PVD ( 41.72 , -71.43 ) , + CON ( 43.22 , -71.58 ) , + YSC ( 45.43 , -71.68 ) , + HTO ( 40.92 , -72.32 ) , + MPV ( 44.22 , -72.57 ) , + BDL ( 41.94 , -72.69 ) , + PLB ( 44.69 , -73.52 ) , + JFK ( 40.63 , -73.77 ) , + ALB ( 42.75 , -73.80 ) , + CYN ( 39.82 , -74.43 ) , + SAX ( 41.07 , -74.54 ) , + MSS ( 44.91 , -74.72 ) , + SIE ( 39.10 , -74.80 ) , + HNK ( 42.06 , -75.32 ) , + SBY ( 38.35 , -75.52 ) , + YOW ( 45.32 , -75.67 ) , + ETX ( 40.58 , -75.68 ) , + ECG ( 36.25 , -76.18 ) , + SYR ( 43.16 , -76.20 ) , + ORF ( 36.89 , -76.20 ) , + EMI ( 39.50 , -76.98 ) , + HAR ( 40.23 , -77.02 ) , + DCA ( 38.86 , -77.04 ) , + RIC ( 37.50 , -77.32 ) , + CSN ( 38.64 , -77.87 ) , + ILM ( 34.35 , -77.87 ) , + SLT ( 41.51 , -77.97 ) , + PSB ( 40.92 , -77.99 ) , + BUF ( 42.93 , -78.65 ) , + RDU ( 35.87 , -78.78 ) , + JST ( 40.32 , -78.83 ) , + JHW ( 42.19 , -79.12 ) , + LYH ( 37.25 , -79.23 ) , + YYZ ( 43.67 , -79.63 ) , + FLO ( 34.23 , -79.66 ) , + GSO ( 36.05 , -79.98 ) , + CHS ( 32.89 , -80.04 ) , + PBI ( 26.68 , -80.09 ) , + EKN ( 38.92 , -80.10 ) , + EWC ( 40.83 , -80.21 ) , + ERI ( 42.02 , -80.30 ) , + MIA ( 25.80 , -80.30 ) , + VRB ( 27.68 , -80.49 ) , + PSK ( 37.09 , -80.71 ) , + AIR ( 40.02 , -80.82 ) , + CLT ( 35.22 , -80.93 ) , + CAE ( 33.86 , -81.05 ) , + YVV ( 44.75 , -81.10 ) , + SAV ( 32.16 , -81.11 ) , + OMN ( 29.30 , -81.11 ) , + BKW ( 37.78 , -81.12 ) , + ORL ( 28.54 , -81.34 ) , + CRG ( 30.34 , -81.51 ) , + EYW ( 24.59 , -81.80 ) , + FMY ( 26.58 , -81.87 ) , // OBSOLETE + SPA ( 35.03 , -81.93 ) , + HNN ( 38.75 , -82.03 ) , + HMV ( 36.44 , -82.13 ) , + CLE ( 41.42 , -81.85 ) , + IRQ ( 33.71 , -82.16 ) , + AMG ( 31.54 , -82.51 ) , + SRQ ( 27.40 , -82.55 ) , + APE ( 40.15 , -82.59 ) , + PIE ( 27.91 , -82.68 ) , + ECK ( 43.26 , -82.72 ) , + CTY ( 29.60 , -83.05 ) , + ODF ( 34.70 , -83.30 ) , + DXO ( 42.21 , -83.37 ) , + ASP ( 44.45 , -83.39 ) , + MCN ( 32.69 , -83.65 ) , + FNT ( 42.97 , -83.74 ) , + VXV ( 35.90 , -83.89 ) , + ROD ( 40.29 , -84.04 ) , + MBS ( 43.53 , -84.08 ) , + LOZ ( 37.03 , -84.12 ) , + ABY ( 31.65 , -84.30 ) , // OBSOLETE + SSM ( 46.41 , -84.31 ) , + TLH ( 30.56 , -84.37 ) , + ATL ( 33.63 , -84.44 ) , + CVG ( 39.02 , -84.70 ) , + GQO ( 34.96 , -85.15 ) , + FWA ( 40.98 , -85.19 ) , + LGC ( 33.05 , -85.21 ) , + GRR ( 42.79 , -85.50 ) , + TVC ( 44.67 , -85.55 ) , + LOU ( 38.10 , -85.58 ) , // OBSOLETE + MKG ( 43.17 , -86.04 ) , + PMM ( 42.47 , -86.11 ) , + GIJ ( 41.77 , -86.32 ) , + MGM ( 32.22 , -86.32 ) , + IND ( 39.81 , -86.37 ) , + BWG ( 36.93 , -86.44 ) , + BNA ( 36.14 , -86.68 ) , + CEW ( 30.83 , -86.68 ) , + VUZ ( 33.67 , -86.90 ) , + BVT ( 40.56 , -87.07 ) , + TTH ( 39.49 , -87.25 ) , + MSL ( 34.70 , -87.48 ) , + SAW ( 46.36 , -87.40 ) , + PXV ( 37.93 , -87.76 ) , + ORD ( 41.98 , -87.90 ) , + GRB ( 44.56 , -88.19 ) , + BAE ( 43.12 , -88.28 ) , + JOT ( 41.55 , -88.32 ) , + SJI ( 30.73 , -88.36 ) , + IGB ( 33.48 , -88.52 ) , + MEI ( 32.38 , -88.80 ) , + DEC ( 39.74 , -88.86 ) , + YQT ( 48.37 , -89.32 ) , + DYR ( 36.02 , -89.32 ) , + RHI ( 45.63 , -89.45 ) , + BDF ( 41.16 , -89.59 ) , + DLL ( 43.55 , -89.76 ) , + MEM ( 35.06 , -89.98 ) , + LEV ( 29.18 , -90.10 ) , + JAN ( 32.51 , -90.17 ) , + MSY ( 30.00 , -90.27 ) , // OBSOLETE + FAM ( 37.67 , -90.23 ) , + MCB ( 31.30 , -90.26 ) , + SQS ( 33.46 , -90.28 ) , + STL ( 38.86 , -90.48 ) , + DBQ ( 42.40 , -90.71 ) , + ARG ( 36.11 , -90.95 ) , + UIN ( 39.85 , -91.28 ) , + BTR ( 30.48 , -91.30 ) , + ODI ( 43.91 , -91.47 ) , + EAU ( 44.90 , -91.48 ) , + IOW ( 41.52 , -91.61 ) , + MLU ( 32.52 , -92.03 ) , + LIT ( 34.68 , -92.18 ) , + DLH ( 46.80 , -92.20 ) , + COU ( 38.82 , -92.22 ) , + AEX ( 31.26 , -92.50 ) , + IRK ( 40.14 , -92.59 ) , + ELD ( 33.26 , -92.74 ) , + LCH ( 30.14 , -93.11 ) , + MSP ( 44.88 , -93.23 ) , + MCW ( 43.09 , -93.33 ) , + SGF ( 37.36 , -93.33 ) , + INL ( 48.57 , -93.40 ) , + DSM ( 41.44 , -93.65 ) , + EIC ( 32.77 , -93.81 ) , + BRD ( 46.35 , -94.03 ) , + TXK ( 33.51 , -94.07 ) , + RZC ( 36.25 , -94.12 ) , + FSM ( 35.38 , -94.27 ) , + FOD ( 42.61 , -94.29 ) , + BUM ( 38.27 , -94.49 ) , + MKC ( 39.28 , -94.59 ) , // OBSOLETE + LFK ( 31.16 , -94.72 ) , + GGG ( 32.42 , -94.75 ) , + BJI ( 47.58 , -95.02 ) , + RWF ( 44.47 , -95.13 ) , + OSW ( 37.15 , -95.20 ) , + IAH ( 29.96 , -95.35 ) , + OVR ( 41.17 , -95.74 ) , + MLC ( 34.85 , -95.78 ) , + TUL ( 36.20 , -95.79 ) , + PWE ( 40.20 , -96.21 ) , + PSX ( 28.76 , -96.31 ) , + FSD ( 43.65 , -96.78 ) , + FAR ( 46.75 , -96.85 ) , + DFW ( 32.87 , -97.03 ) , // OBSOLETE + ADM ( 34.21 , -97.17 ) , + GFK ( 47.95 , -97.19 ) , + YWG ( 49.90 , -97.23 ) , + ACT ( 31.66 , -97.27 ) , + BRO ( 25.92 , -97.38 ) , + CRP ( 27.90 , -97.45 ) , + ICT ( 37.75 , -97.58 ) , + OKC ( 35.36 , -97.61 ) , + SLN ( 38.93 , -97.62 ) , + AUS ( 30.30 , -97.70 ) , // OBSOLETE + END ( 36.35 , -97.92 ) , + OBH ( 41.38 , -98.35 ) , + ABR ( 45.42 , -98.37 ) , + SAT ( 29.64 , -98.46 ) , + SPS ( 33.99 , -98.59 ) , + ONL ( 42.47 , -98.69 ) , + LRD ( 27.48 , -99.42 ) , + JCT ( 30.60 , -99.82 ) , + ABI ( 32.48 , -99.86 ) , + GAG ( 36.34 , -99.88 ) , + ANW ( 42.57 , -99.99 ) , + PIR ( 44.40 , -100.17 ) , + HLC ( 39.26 , -100.23 ) , + CDS ( 34.37 , -100.28 ) , + SJT ( 31.38 , -100.46 ) , + MCK ( 40.20 , -100.59 ) , + BIS ( 46.77 , -100.67 ) , + LBF ( 41.13 , -100.72 ) , + GCK ( 37.92 , -100.73 ) , + DLF ( 29.36 , -100.77 ) , + LBL ( 37.04 , -100.97 ) , + MOT ( 48.26 , -101.29 ) , + AMA ( 35.29 , -101.64 ) , + GLD ( 39.39 , -101.69 ) , + DPR ( 45.08 , -101.72 ) , + LBB ( 33.70 , -101.92 ) , + MAF ( 32.02 , -102.18 ) , + LAA ( 38.20 , -102.69 ) , + DIK ( 46.86 , -102.77 ) , + TXO ( 34.50 , -102.84 ) , + SNY ( 41.10 , -102.98 ) , + FST ( 30.95 , -102.98 ) , + RAP ( 43.98 , -103.01 ) , + AKO ( 40.16 , -103.18 ) , + INK ( 31.87 , -103.24 ) , + BFF ( 41.89 , -103.48 ) , + TBE ( 37.27 , -103.60 ) , + TCC ( 35.18 , -103.60 ) , + ISN ( 48.18 , -103.63 ) , + MRF ( 30.30 , -103.95 ) , + PUB ( 38.29 , -104.43 ) , + ROW ( 33.34 , -104.62 ) , // OBSOLETE + DEN ( 39.81 , -104.66 ) , + CYS ( 41.21 , -104.77 ) , + CIM ( 36.49 , -104.87 ) , + LVS ( 35.66 , -105.14 ) , // OBSOLETE + LAR ( 41.33 , -105.72 ) , + ALS ( 37.35 , -105.82 ) , + MLS ( 46.38 , -105.95 ) , + DDY ( 43.09 , -106.28 ) , + ELP ( 31.82 , -106.28 ) , + CZI ( 44.00 , -106.44 ) , + GGW ( 48.22 , -106.63 ) , + ABQ ( 35.04 , -106.82 ) , + DBL ( 39.44 , -106.90 ) , + HBU ( 38.45 , -107.04 ) , + SHR ( 44.84 , -107.06 ) , + TCS ( 33.28 , -107.28 ) , + CHE ( 40.52 , -107.31 ) , + DMN ( 32.28 , -107.60 ) , + YYN ( 50.28 , -107.68 ) , + FMN ( 36.75 , -108.10 ) , // OBSOLETE + BOY ( 43.46 , -108.30 ) , + BIL ( 45.81 , -108.63 ) , + JNC ( 39.06 , -108.79 ) , + DVC ( 37.81 , -108.93 ) , + OCS ( 41.59 , -109.02 ) , + SJN ( 34.42 , -109.14 ) , + SSO ( 32.27 , -109.26 ) , + LWT ( 47.05 , -109.61 ) , + HVR ( 48.54 , -109.77 ) , + BPI ( 42.58 , -110.11 ) , + MTU ( 40.15 , -110.13 ) , + HVE ( 38.42 , -110.70 ) , + YXH ( 50.02 , -110.72 ) , + JAC ( 43.62 , -110.73 ) , + INW ( 35.06 , -110.80 ) , + TUS ( 32.10 , -110.92 ) , + TBC ( 36.12 , -111.27 ) , + GTF ( 47.45 , -111.41 ) , + HLN ( 46.61 , -111.95 ) , + PHX ( 33.43 , -112.02 ) , + SLC ( 40.85 , -111.98 ) , + DBS ( 44.09 , -112.21 ) , + BCE ( 37.69 , -112.30 ) , + MLD ( 42.20 , -112.45 ) , + DRK ( 34.70 , -112.48 ) , + DTA ( 39.30 , -112.51 ) , + DLN ( 45.25 , -112.55 ) , + PIH ( 42.87 , -112.65 ) , + YQL ( 49.63 , -112.80 ) , + PGS ( 35.62 , -113.54 ) , + BVL ( 40.73 , -113.76 ) , + LKT ( 45.02 , -114.08 ) , + FCA ( 48.21 , -114.18 ) , + ILC ( 38.25 , -114.39 ) , + EED ( 34.77 , -114.47 ) , + TWF ( 42.48 , -114.49 ) , + BZA ( 32.77 , -114.60 ) , + ELY ( 39.30 , -114.85 ) , + LAS ( 36.08 , -115.16 ) , + MLP ( 47.46 , -115.65 ) , + YXC ( 49.60 , -115.78 ) , + TRM ( 33.63 , -116.16 ) , + BOI ( 43.55 , -116.19 ) , + DNJ ( 44.77 , -116.21 ) , + HEC ( 34.80 , -116.46 ) , + BTY ( 36.80 , -116.75 ) , + BAM ( 40.57 , -116.92 ) , + MZB ( 32.78 , -117.23 ) , + GEG ( 47.56 , -117.63 ) , + OAL ( 38.00 , -117.77 ) , + BKE ( 44.84 , -117.81 ) , + REO ( 42.59 , -117.87 ) , + LAX ( 33.93 , -118.43 ) , + PDT ( 45.70 , -118.94 ) , + EHF ( 35.48 , -119.10 ) , + EPH ( 47.38 , -119.42 ) , + FMG ( 39.53 , -119.66 ) , + RZS ( 34.51 , -119.77 ) , + CZQ ( 36.88 , -119.82 ) , + YKM ( 46.57 , -120.45 ) , + LKV ( 42.49 , -120.51 ) , + YDC ( 49.47 , -120.52 ) , + MOD ( 37.63 , -120.96 ) , + DSD ( 44.25 , -121.30 ) , + SAC ( 38.44 , -121.55 ) , + SNS ( 36.66 , -121.60 ) , + OAK ( 37.73 , -122.22 ) , + RBL ( 40.10 , -122.24 ) , + SEA ( 47.44 , -122.31 ) , + BLI ( 48.95 , -122.58 ) , // OBSOLETE + PDX ( 45.58 , -122.60 ) , + PYE ( 38.08 , -122.87 ) , + OED ( 42.48 , -122.91 ) , + EUG ( 44.12 , -123.22 ) , + ENI ( 39.05 , -123.27 ) , + ONP ( 44.58 , -124.06 ) , + HQM ( 46.95 , -124.15 ) , + FOT ( 40.67 , -124.23 ) , + TOU ( 48.30 , -124.63 ) , + YQV ( 51.27 , -102.47 ) , + ANN ( 55.05 , -131.57 ) , + LVD ( 56.47 , -133.08 ) , + BKA ( 56.86 , -135.55 ) , + SSR ( 58.17 , -135.25 ) , + JNU ( 58.35 , -134.58 ) , + YAK ( 59.50 , -139.67 ) , + MDO ( 59.45 , -146.30 ) , + JOH ( 60.48 , -146.60 ) , + ODK ( 57.75 , -152.50 ) , + HOM ( 59.65 , -151.48 ) , + ENA ( 60.57 , -151.25 ) , + ANC ( 61.17 , -150.00 ) , + BGQ ( 61.53 , -149.82 ) , + ORT ( 62.97 , -141.93 ) , + GKN ( 62.15 , -145.45 ) , + TKA ( 62.32 , -150.10 ) , + SQA ( 61.10 , -155.63 ) , + DLG ( 59.05 , -158.50 ) , + AKN ( 58.68 , -156.65 ) , + PDN ( 56.95 , -158.65 ) , + CDB ( 55.20 , -162.73 ) , + DUT ( 53.90 , -166.55 ) , + NUD ( 51.88 , -176.65 ) , + SYA ( 52.72 , -174.12 ) , + SPY ( 57.17 , -170.22 ) , + EHM ( 58.66 , -162.07 ) , + HPB ( 61.52 , -166.14 ) , + BET ( 60.78 , -161.83 ) , + ANI ( 61.59 , -159.61 ) , + SMA ( 62.06 , -163.30 ) , + UNK ( 63.88 , -160.80 ) , + ULL ( 63.70 , -170.48 ) , + MCG ( 62.95 , -155.60 ) , + ENN ( 64.55 , -149.07 ) , + FAI ( 64.82 , -147.85 ) , + BIG ( 64.00 , -145.72 ) , + FYU ( 66.57 , -145.25 ) , + BTT ( 66.92 , -151.53 ) , + TAL ( 65.18 , -152.18 ) , + CQR ( 67.50 , -148.47 ) , + SCC ( 70.20 , -148.47 ) , + BTI ( 70.13 , -143.57 ) , + BRW ( 71.28 , -156.77 ) , + GAL ( 64.73 , -156.93 ) , + OME ( 64.52 , -165.45 ) , + OTZ ( 66.88 , -162.60 ) , + WLK ( 66.60 , -160.00 ) , + HSL ( 65.71 , -156.37 ) , + BSF ( 19.76 , -155.39 ) , + UPP ( 20.20 , -155.84 ) , + ITO ( 19.72 , -155.01 ) , + HNL ( 21.33 , -157.93 ) , + OGG ( 20.91 , -156.42 ) , + NDB ( 20.88 , -156.44 ) , + MUE ( 20.00 , -155.67 ) , + NGF ( 21.45 , -157.76 ) , + MKK ( 21.14 , -157.17 ) , + NBS ( 22.04 , -159.79 ) , + CKH ( 21.27 , -157.70 ) , + IAI ( 19.65 , -156.02 ) , + LLD ( 20.77 , -156.97 ) , + LNY ( 20.76 , -156.97 ) , + LIH ( 21.97 , -159.34 ) , + SOK ( 21.90 , -159.53 ) , + // + // Newcomers! These are in the set of VORs now used by AWC for Convective SIGMET bounds, + // but not in (out-of-the-box V5.11.4) $GEMTBL/stns/vors.tbl : + // + RSW ( 26.53 , -81.78 ) , // Lee County VORTAC Fort Myers FL L-VORTAC !? replaces FMY + PZD ( 31.66 , -84.29 ) , // Pecan VORTAC Albany GA H-VORTACW replaces ABY + IIU ( 38.10 , -85.58 ) , // Louisville VORTAC Louisville KY H-VORTAC replaces LOU + HRV ( 29.85 , -90.00 ) , // Harvey VORTAC New Orleans LA H-VORTACW replaces MSY + MCI ( 39.29 , -94.74 ) , // Kansas City VORTAC Kansas City MO H-VORTAC replaces MKC + TTT ( 32.87 , -97.04 ) , // Maverick VOR/DME Dallas-Fort Worth TX H-VORW/DME replaces DFW + CWK ( 30.38 , -97.53 ) , // Centex VORTAC Austin TX H-VORTACW replaces AUS + CME ( 33.34 , -104.62 ) , // Chisum VORTAC Roswell NM H-VORTACW replaces ROW + FTI ( 35.66 , -105.14 ) , // Fort Union VORTAC Las Vegas NM H-VORTACW replaces LVS + RSK ( 36.75 , -108.10 ) , // Rattlesnake VORTAC Farmington NM H-VORTACW replaces FMN + HUH ( 48.95 , -122.58 ) ; // Whatcom VORTAC Bellingham WA H-VORTACW replaces BLI + + private static Log logger = LogFactory.getLog(VOR.class); + + private double latitude; + private double longitude; + + private VOR (double latitude, double longitude) + { + this.latitude = latitude; + this.longitude = longitude; + } + + public double getLatitude() + { + return latitude; + } + + public double getLongitude() + { + return longitude; + } + + public LatLonPoint getLatLonPoint() + { + return new LatLonPoint (latitude, longitude, LatLonPoint.INDEGREES); + } + + private enum Direction { + N, NNE, NE, ENE, E, ESE, SE, SSE, S, SSW, SW, WSW, W, WNW, NW, NNW; + public double getDegrees() { return ordinal() * 22.5; } + } + + private static final double ONE_NM_RADIANS = Math.toRadians (1.0 / 60.0); + + /** + * Given a VOR-relative reference string, returns a LatLonPoint + * (com.raytheon.uf.edex.decodertools.core.LatLonPoint). + * + * @param location A String such as... + * "BOS" + * "20S EMI" + * "30 WNW BUM" + * " 40ENE HUH " + * ...referencing a VOR listed in AC 00-45F + * (Appendix F), optionally preceded by + * distance in nautical miles and 16-point + * compass direction string. + * @return The decoded location as a LatLonPoint; + * null on error (such as unrecognized VOR + * identifier or direction string). + * + */ + public static LatLonPoint getLatLonPoint(String location) { + // Wrap decoding in a try block, in case of exception on + // one ofthe two enum valueOf lookups, or other problems. + try { + location = location.trim(); + // VOR is always last 3 nonblank char of location + String navaid = location.substring(location.length()-3); + LatLonPoint point = VOR.valueOf(navaid).getLatLonPoint(); + // If there's an offset direction/bearing, process it + if (location.length() > 3) { + String u = location.substring(0, location.length()-3); + Pattern p = Pattern.compile("^([0-9]+)\\s*([A-Z]+)"); + Matcher m = p.matcher(u); + if (m.find()) { + String distanceStr = m.group(1); + String bearingStr = m.group(2); + int distanceNM = Integer.parseInt(distanceStr); + double distanceRad = distanceNM * ONE_NM_RADIANS; + // LatLonPoint.positionOf thinks bearing is CCW, not CW... + double bearingDeg = 360.0 - Direction.valueOf(bearingStr).getDegrees(); + double bearingRad = Math.toRadians(bearingDeg); + point = point.positionOf(bearingRad, distanceRad); + } + } + return point; + } + catch (Exception e) { + logger.error("[Error decoding location: " + location + "]"); + return null; + } + } + +} diff --git a/ncep/gov.noaa.nws.ncep.edex.common/src/gov/noaa/nws/ncep/edex/tools/decoder/package-info.java b/ncep/gov.noaa.nws.ncep.edex.common/src/gov/noaa/nws/ncep/edex/tools/decoder/package-info.java index 44b8eecc06..bd90a7c646 100644 --- a/ncep/gov.noaa.nws.ncep.edex.common/src/gov/noaa/nws/ncep/edex/tools/decoder/package-info.java +++ b/ncep/gov.noaa.nws.ncep.edex.common/src/gov/noaa/nws/ncep/edex/tools/decoder/package-info.java @@ -1,4 +1,4 @@ -/** -* Contains tools for decoder plug-ins -*/ -package gov.noaa.nws.ncep.edex.tools.decoder; +/** +* Contains tools for decoder plug-ins +*/ +package gov.noaa.nws.ncep.edex.tools.decoder; diff --git a/ncep/gov.noaa.nws.ncep.edex.common/src/gov/noaa/nws/ncep/edex/util/UtilN.java b/ncep/gov.noaa.nws.ncep.edex.common/src/gov/noaa/nws/ncep/edex/util/UtilN.java index ac9ad3c11c..0d967ca0a4 100644 --- a/ncep/gov.noaa.nws.ncep.edex.common/src/gov/noaa/nws/ncep/edex/util/UtilN.java +++ b/ncep/gov.noaa.nws.ncep.edex.common/src/gov/noaa/nws/ncep/edex/util/UtilN.java @@ -1,122 +1,122 @@ -/* - * - * Util - * - * This java class contains edex generic utility methods for use. - * - * T. Lee 11/2008 Creation - * T. Lee 3/2009 Fixed roll-over cases; added String functions - * T. Lee 4/2009 Added date to the base time - * T. Lee - *
- * SOFTWARE HISTORY
- * 
- * Date         Ticket#    	Engineer    Description
- * ------------ ---------- 	----------- --------------------------
- * 11/2008		14			T. Lee		Creation
- *  3/2009		14			T. Lee		Fixed roll-over cases; added String functions
- *  4/2009		14			T. Lee		Added date to the base time
- *  5/2009		128			T. Lee		Used UTC in findDataTime
- * 
- * - * @author T.Lee - * @version 1.0 - */ - -package gov.noaa.nws.ncep.edex.util; - -import java.util.Calendar; -import java.util.TimeZone; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import com.raytheon.edex.util.Util; - -public class UtilN { - private static final Log logger = LogFactory.getLog(UtilN.class); - - /** - * Constructor - */ - public UtilN() { - - } - /** - * Convert a string in ddhhmm format to a standard {@link Calendar} format where - * ddhhmm is the GMT format while the standard time is in Calendar format with - * Year and Month information. Usage: ddhhmm is the issue time whereas utcTime - * can be the MDN time. The former comes "after" the latter. - * - * @parm ddhhmm day-hour-minute in GMT - * @parm local Time UTC time in Calendar - */ - public static Calendar findDataTime (String ddhhmm, Calendar utcTime) { - Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("GMT")); ; - if ( utcTime == null ) { - try { - return Util.findCurrentTime(ddhhmm); - } catch (Exception e) { - if ( logger.isInfoEnabled()) { - logger.info( " Error in processing MND time; return current time "); - } - return cal; - } - - } else { - int iDay = Integer.parseInt(ddhhmm.substring(0, 2).trim()); - int iHour = Integer.parseInt(ddhhmm.substring(2, 4).trim()); - int iMinute = Integer.parseInt(ddhhmm.substring(4, 6).trim()); - int iMonth = utcTime.get(Calendar.MONTH); - int iYear = utcTime.get(Calendar.YEAR); - - /* - * adjust the month and year for roll-over situations - */ - if (iDay < utcTime.get(Calendar.DAY_OF_MONTH) ) { - iMonth++; - if ( iMonth == 12 ) { - iMonth = Calendar.JANUARY; - iYear++; - } - } - cal.set(iYear,iMonth,iDay,iHour,iMinute); - cal.set(Calendar.SECOND, 0); - cal.set(Calendar.MILLISECOND, 0); - return cal; - } - } - - /** - * Remove the leading spaces and tabs in a string. - */ - public static String removeLeadingWhiteSpaces (String str) { - int i; - for ( i = 0; i < str.length(); i++ ) { - if ( !Character.isWhitespace(str.charAt(i))) { - break; - } - } - return str.substring(i); - } - - /** - * Remove multiple white spaces in a string. - */ - public static String removeExtraWhiteSpaces (String str) { - StringBuffer sb = new StringBuffer(); - int i; - char first = str.charAt(0); - char second; - for ( i = 1; i < str.length(); i++ ) { - second = str.charAt(i); - if ( !Character.isWhitespace(first) || !Character.isWhitespace(second)) { - sb.append(first); - first = second; - } - if ( i == ( str.length()-1) ) { - sb.append(second); - } - } - return sb.toString(); - } -} +/* + * + * Util + * + * This java class contains edex generic utility methods for use. + * + * T. Lee 11/2008 Creation + * T. Lee 3/2009 Fixed roll-over cases; added String functions + * T. Lee 4/2009 Added date to the base time + * T. Lee + *
+ * SOFTWARE HISTORY
+ * 
+ * Date         Ticket#    	Engineer    Description
+ * ------------ ---------- 	----------- --------------------------
+ * 11/2008		14			T. Lee		Creation
+ *  3/2009		14			T. Lee		Fixed roll-over cases; added String functions
+ *  4/2009		14			T. Lee		Added date to the base time
+ *  5/2009		128			T. Lee		Used UTC in findDataTime
+ * 
+ * + * @author T.Lee + * @version 1.0 + */ + +package gov.noaa.nws.ncep.edex.util; + +import java.util.Calendar; +import java.util.TimeZone; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import com.raytheon.edex.util.Util; + +public class UtilN { + private static final Log logger = LogFactory.getLog(UtilN.class); + + /** + * Constructor + */ + public UtilN() { + + } + /** + * Convert a string in ddhhmm format to a standard {@link Calendar} format where + * ddhhmm is the GMT format while the standard time is in Calendar format with + * Year and Month information. Usage: ddhhmm is the issue time whereas utcTime + * can be the MDN time. The former comes "after" the latter. + * + * @parm ddhhmm day-hour-minute in GMT + * @parm local Time UTC time in Calendar + */ + public static Calendar findDataTime (String ddhhmm, Calendar utcTime) { + Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("GMT")); ; + if ( utcTime == null ) { + try { + return Util.findCurrentTime(ddhhmm); + } catch (Exception e) { + if ( logger.isInfoEnabled()) { + logger.info( " Error in processing MND time; return current time "); + } + return cal; + } + + } else { + int iDay = Integer.parseInt(ddhhmm.substring(0, 2).trim()); + int iHour = Integer.parseInt(ddhhmm.substring(2, 4).trim()); + int iMinute = Integer.parseInt(ddhhmm.substring(4, 6).trim()); + int iMonth = utcTime.get(Calendar.MONTH); + int iYear = utcTime.get(Calendar.YEAR); + + /* + * adjust the month and year for roll-over situations + */ + if (iDay < utcTime.get(Calendar.DAY_OF_MONTH) ) { + iMonth++; + if ( iMonth == 12 ) { + iMonth = Calendar.JANUARY; + iYear++; + } + } + cal.set(iYear,iMonth,iDay,iHour,iMinute); + cal.set(Calendar.SECOND, 0); + cal.set(Calendar.MILLISECOND, 0); + return cal; + } + } + + /** + * Remove the leading spaces and tabs in a string. + */ + public static String removeLeadingWhiteSpaces (String str) { + int i; + for ( i = 0; i < str.length(); i++ ) { + if ( !Character.isWhitespace(str.charAt(i))) { + break; + } + } + return str.substring(i); + } + + /** + * Remove multiple white spaces in a string. + */ + public static String removeExtraWhiteSpaces (String str) { + StringBuffer sb = new StringBuffer(); + int i; + char first = str.charAt(0); + char second; + for ( i = 1; i < str.length(); i++ ) { + second = str.charAt(i); + if ( !Character.isWhitespace(first) || !Character.isWhitespace(second)) { + sb.append(first); + first = second; + } + if ( i == ( str.length()-1) ) { + sb.append(second); + } + } + return sb.toString(); + } +} diff --git a/ncep/gov.noaa.nws.ncep.edex.common/src/gov/noaa/nws/ncep/edex/util/package-info.java b/ncep/gov.noaa.nws.ncep.edex.common/src/gov/noaa/nws/ncep/edex/util/package-info.java index 56ea3b8542..6bd08cd08a 100644 --- a/ncep/gov.noaa.nws.ncep.edex.common/src/gov/noaa/nws/ncep/edex/util/package-info.java +++ b/ncep/gov.noaa.nws.ncep.edex.common/src/gov/noaa/nws/ncep/edex/util/package-info.java @@ -1,4 +1,4 @@ -/** -* Contains tools for decoder plug-ins -*/ -package gov.noaa.nws.ncep.edex.util; +/** +* Contains tools for decoder plug-ins +*/ +package gov.noaa.nws.ncep.edex.util; diff --git a/ncep/gov.noaa.nws.ncep.edex.common/utility/edex_static/base/ncep/stns/idftLoc.xml b/ncep/gov.noaa.nws.ncep.edex.common/utility/edex_static/base/ncep/stns/idftLoc.xml index bf4bde2cec..e8c90fc54d 100644 --- a/ncep/gov.noaa.nws.ncep.edex.common/utility/edex_static/base/ncep/stns/idftLoc.xml +++ b/ncep/gov.noaa.nws.ncep.edex.common/utility/edex_static/base/ncep/stns/idftLoc.xml @@ -1,1868 +1,1868 @@ - - - - - 0001 - 000001 - POINT 1 - 48.88 - -60.02 - 0 - 0 - - - 0002 - 000002 - POINT 2 - 46.24 - -51.39 - 0 - 0 - - - 0003 - 000003 - POINT 3 - 54.46 - -80.00 - 0 - 0 - - - 0004 - 000004 - POINT 4 - 50.58 - -53.43 - 0 - 0 - - - 0005 - 000005 - POINT 5 - 49.02 - -49.04 - 0 - 0 - - - 0006 - 000006 - POINT 6 - 47.27 - -45.01 - 0 - 0 - - - 0007 - 000007 - POINT 7 - 57.63 - -86.34 - 0 - 0 - - - 0008 - 000008 - POINT 8 - 57.82 - -80.00 - 0 - 0 - - - 0009 - 000009 - POINT 9 - 56.18 - -61.57 - 0 - 0 - - - 0010 - 000010 - POINT 10 - 54.97 - -56.04 - 0 - 0 - - - 0011 - 000011 - POINT 11 - 53.48 - -50.95 - 0 - 0 - - - 0012 - 000012 - POINT 12 - 51.76 - -46.31 - 0 - 0 - - - 0013 - 000013 - POINT 13 - 49.86 - -42.13 - 0 - 0 - - - 0014 - 000014 - POINT 14 - 60.39 - -94.04 - 0 - 0 - - - 0015 - 000015 - POINT 15 - 61.03 - -87.13 - 0 - 0 - - - 0016 - 000016 - POINT 16 - 61.24 - -80.00 - 0 - 0 - - - 0017 - 000017 - POINT 17 - 61.03 - -72.88 - 0 - 0 - - - 0018 - 000018 - POINT 18 - 60.39 - -65.96 - 0 - 0 - - - 0019 - 000019 - POINT 19 - 59.37 - -59.44 - 0 - 0 - - - 0020 - 000020 - POINT 20 - 58.01 - -53.43 - 0 - 0 - - - 0021 - 000021 - POINT 21 - 56.36 - -47.99 - 0 - 0 - - - 0022 - 000022 - POINT 22 - 54.46 - -43.13 - 0 - 0 - - - 0023 - 000023 - POINT 23 - 64.46 - -88.13 - 0 - 0 - - - 0024 - 000024 - POINT 24 - 64.71 - -80.00 - 0 - 0 - - - 0025 - 000025 - POINT 25 - 64.46 - -71.87 - 0 - 0 - - - 0026 - 000026 - POINT 26 - 63.74 - -64.05 - 0 - 0 - - - 0027 - 000027 - POINT 27 - 62.57 - -56.80 - 0 - 0 - - - 0028 - 000028 - POINT 28 - 61.03 - -50.26 - 0 - 0 - - - 0029 - 000029 - POINT 29 - 59.18 - -44.46 - 0 - 0 - - - 0030 - 000030 - POINT 30 - 57.08 - -39.40 - 0 - 0 - - - 0031 - 000031 - POINT 31 - 67.08 - -98.43 - 0 - 0 - - - 0032 - 000032 - POINT 32 - 67.94 - -89.46 - 0 - 0 - - - 0033 - 000033 - POINT 33 - 68.23 - -80.00 - 0 - 0 - - - 0034 - 000034 - POINT 34 - 67.08 - -61.57 - 0 - 0 - - - 0035 - 000035 - POINT 35 - 65.73 - -53.43 - 0 - 0 - - - 0036 - 000036 - POINT 36 - 63.98 - -46.31 - 0 - 0 - - - 0037 - 000037 - POINT 37 - 61.90 - -40.19 - 0 - 0 - - - 0038 - 000038 - POINT 38 - 59.58 - -35.00 - 0 - 0 - - - 0039 - 000039 - POINT 39 - 68.83 - -110.96 - 0 - 0 - - - 0040 - 000040 - POINT 40 - 70.42 - -101.80 - 0 - 0 - - - 0041 - 000041 - POINT 41 - 71.44 - -91.31 - 0 - 0 - - - 0042 - 000042 - POINT 42 - 71.79 - -80.00 - 0 - 0 - - - 0043 - 000043 - POINT 43 - 71.44 - -68.69 - 0 - 0 - - - 0044 - 000044 - POINT 44 - 70.42 - -58.20 - 0 - 0 - - - 0045 - 000045 - POINT 45 - 64.46 - -35.00 - 0 - 0 - - - 0046 - 000046 - POINT 46 - 61.90 - -29.81 - 0 - 0 - - - 0047 - 000047 - POINT 47 - 69.45 - -125.00 - 0 - 0 - - - 0048 - 000048 - POINT 48 - 71.79 - -116.87 - 0 - 0 - - - 0049 - 000049 - POINT 49 - 73.69 - -106.57 - 0 - 0 - - - 0050 - 000050 - POINT 50 - 74.95 - -94.04 - 0 - 0 - - - 0051 - 000051 - POINT 51 - 75.39 - -80.00 - 0 - 0 - - - 0052 - 000052 - POINT 52 - 74.95 - -65.96 - 0 - 0 - - - 0053 - 000053 - POINT 53 - 73.69 - -53.43 - 0 - 0 - - - 0054 - 000054 - POINT 54 - 66.81 - -28.66 - 0 - 0 - - - 0055 - 000055 - POINT 55 - 63.98 - -23.69 - 0 - 0 - - - 0056 - 000056 - POINT 56 - 68.83 - -139.04 - 0 - 0 - - - 0057 - 000057 - POINT 57 - 71.79 - -133.13 - 0 - 0 - - - 0058 - 000058 - POINT 58 - 74.51 - -125.00 - 0 - 0 - - - 0059 - 000059 - POINT 59 - 76.82 - -113.69 - 0 - 0 - - - 0060 - 000060 - POINT 60 - 78.43 - -98.43 - 0 - 0 - - - 0061 - 000061 - POINT 61 - 79.02 - -80.00 - 0 - 0 - - - 0062 - 000062 - POINT 62 - 71.79 - -26.87 - 0 - 0 - - - 0063 - 000063 - POINT 63 - 68.83 - -20.96 - 0 - 0 - - - 0064 - 000064 - POINT 64 - 65.73 - -16.57 - 0 - 0 - - - 0065 - 000065 - POINT 65 - 62.57 - -13.20 - 0 - 0 - - - 0066 - 000066 - POINT 66 - 70.42 - -148.20 - 0 - 0 - - - 0067 - 000067 - POINT 67 - 73.69 - -143.44 - 0 - 0 - - - 0068 - 000068 - POINT 68 - 76.82 - -136.31 - 0 - 0 - - - 0069 - 000069 - POINT 69 - 79.64 - -125.00 - 0 - 0 - - - 0070 - 000070 - POINT 70 - 81.80 - -106.57 - 0 - 0 - - - 0071 - 000071 - POINT 71 - 82.67 - -80.00 - 0 - 0 - - - 0072 - 000072 - POINT 72 - 81.80 - -53.43 - 0 - 0 - - - 0073 - 000073 - POINT 73 - 76.82 - -23.69 - 0 - 0 - - - 0074 - 000074 - POINT 74 - 73.69 - -16.57 - 0 - 0 - - - 0075 - 000075 - POINT 75 - 70.42 - -11.80 - 0 - 0 - - - 0076 - 000076 - POINT 76 - 67.08 - -8.43 - 0 - 0 - - - 0077 - 000077 - POINT 77 - 54.30 - -164.29 - 0 - 0 - - - 0078 - 000078 - POINT 78 - 57.63 - -163.66 - 0 - 0 - - - 0079 - 000079 - POINT 79 - 61.03 - -162.88 - 0 - 0 - - - 0080 - 000080 - POINT 80 - 64.46 - -161.87 - 0 - 0 - - - 0081 - 000081 - POINT 81 - 67.94 - -160.54 - 0 - 0 - - - 0082 - 000082 - POINT 82 - 71.44 - -158.69 - 0 - 0 - - - 0083 - 000083 - POINT 83 - 74.95 - -155.96 - 0 - 0 - - - 0084 - 000084 - POINT 84 - 78.43 - -151.57 - 0 - 0 - - - 0085 - 000085 - POINT 85 - 81.80 - -143.44 - 0 - 0 - - - 0086 - 000086 - POINT 86 - 84.81 - -125.00 - 0 - 0 - - - 0087 - 000087 - POINT 87 - 86.33 - -80.00 - 0 - 0 - - - 0088 - 000088 - POINT 88 - 84.81 - -35.00 - 0 - 0 - - - 0089 - 000089 - POINT 89 - 81.80 - -16.57 - 0 - 0 - - - 0090 - 000090 - POINT 90 - 78.43 - -8.43 - 0 - 0 - - - 0091 - 000091 - POINT 91 - 74.95 - -4.04 - 0 - 0 - - - 0092 - 000092 - POINT 92 - 71.44 - -1.31 - 0 - 0 - - - 0093 - 000093 - POINT 93 - 54.46 - -170.00 - 0 - 0 - - - 0094 - 000094 - POINT 94 - 57.82 - -170.00 - 0 - 0 - - - 0095 - 000095 - POINT 95 - 61.24 - -170.00 - 0 - 0 - - - 0096 - 000096 - POINT 96 - 64.71 - -170.00 - 0 - 0 - - - 0097 - 000097 - POINT 97 - 68.23 - -170.00 - 0 - 0 - - - 0098 - 000098 - POINT 98 - 71.79 - -170.00 - 0 - 0 - - - 0099 - 000099 - POINT 99 - 75.39 - -170.00 - 0 - 0 - - - 0100 - 000100 - POINT 100 - 79.02 - -170.00 - 0 - 0 - - - 0101 - 000101 - POINT 101 - 82.67 - -170.00 - 0 - 0 - - - 0102 - 000102 - POINT 102 - 86.33 - -170.00 - 0 - 0 - - - 0103 - 000103 - POINT 103 - 90.00 - -80.00 - 0 - 0 - - - 0104 - 000104 - POINT 104 - 86.33 - 10.00 - 0 - 0 - - - 0105 - 000105 - POINT 105 - 82.67 - 10.00 - 0 - 0 - - - 0106 - 000106 - POINT 106 - 79.02 - 10.00 - 0 - 0 - - - 0107 - 000107 - POINT 107 - 75.39 - 10.00 - 0 - 0 - - - 0108 - 000108 - POINT 108 - 71.79 - 10.00 - 0 - 0 - - - 0109 - 000109 - POINT 109 - 57.82 - 10.00 - 0 - 0 - - - 0110 - 000110 - POINT 110 - 54.46 - 10.00 - 0 - 0 - - - 0111 - 000111 - POINT 111 - 54.30 - -175.71 - 0 - 0 - - - 0112 - 000112 - POINT 112 - 57.63 - -176.34 - 0 - 0 - - - 0113 - 000113 - POINT 113 - 61.03 - -177.13 - 0 - 0 - - - 0114 - 000114 - POINT 114 - 64.46 - -178.13 - 0 - 0 - - - 0115 - 000115 - POINT 115 - 67.94 - -179.46 - 0 - 0 - - - 0116 - 000116 - POINT 116 - 71.44 - 178.69 - 0 - 0 - - - 0117 - 000117 - POINT 117 - 74.95 - 175.96 - 0 - 0 - - - 0118 - 000118 - POINT 118 - 78.43 - 171.57 - 0 - 0 - - - 0119 - 000119 - POINT 119 - 81.80 - 163.44 - 0 - 0 - - - 0120 - 000120 - POINT 120 - 84.81 - 145.00 - 0 - 0 - - - 0121 - 000121 - POINT 121 - 86.33 - 100.00 - 0 - 0 - - - 0122 - 000122 - POINT 122 - 84.81 - 55.00 - 0 - 0 - - - 0123 - 000123 - POINT 123 - 81.80 - 36.57 - 0 - 0 - - - 0124 - 000124 - POINT 124 - 78.43 - 28.44 - 0 - 0 - - - 0125 - 000125 - POINT 125 - 74.95 - 24.04 - 0 - 0 - - - 0126 - 000126 - POINT 126 - 71.44 - 21.31 - 0 - 0 - - - 0127 - 000127 - POINT 127 - 61.03 - 17.13 - 0 - 0 - - - 0128 - 000128 - POINT 128 - 57.63 - 16.34 - 0 - 0 - - - 0129 - 000129 - POINT 129 - 54.30 - 15.71 - 0 - 0 - - - 0130 - 000130 - POINT 130 - 53.80 - 178.69 - 0 - 0 - - - 0131 - 000131 - POINT 131 - 57.08 - 177.47 - 0 - 0 - - - 0132 - 000132 - POINT 132 - 60.39 - 175.96 - 0 - 0 - - - 0133 - 000133 - POINT 133 - 70.42 - 168.20 - 0 - 0 - - - 0134 - 000134 - POINT 134 - 73.69 - 163.44 - 0 - 0 - - - 0135 - 000135 - POINT 135 - 76.82 - 156.31 - 0 - 0 - - - 0136 - 000136 - POINT 136 - 79.64 - 145.00 - 0 - 0 - - - 0137 - 000137 - POINT 137 - 81.80 - 126.57 - 0 - 0 - - - 0138 - 000138 - POINT 138 - 82.67 - 100.00 - 0 - 0 - - - 0139 - 000139 - POINT 139 - 81.80 - 73.44 - 0 - 0 - - - 0140 - 000140 - POINT 140 - 79.64 - 55.00 - 0 - 0 - - - 0141 - 000141 - POINT 141 - 76.82 - 43.69 - 0 - 0 - - - 0142 - 000142 - POINT 142 - 73.69 - 36.57 - 0 - 0 - - - 0143 - 000143 - POINT 143 - 70.42 - 31.80 - 0 - 0 - - - 0144 - 000144 - POINT 144 - 63.74 - 25.95 - 0 - 0 - - - 0145 - 000145 - POINT 145 - 60.39 - 24.04 - 0 - 0 - - - 0146 - 000146 - POINT 146 - 57.08 - 22.53 - 0 - 0 - - - 0147 - 000147 - POINT 147 - 56.18 - 171.57 - 0 - 0 - - - 0148 - 000148 - POINT 148 - 59.37 - 169.44 - 0 - 0 - - - 0149 - 000149 - POINT 149 - 71.79 - 153.13 - 0 - 0 - - - 0150 - 000150 - POINT 150 - 74.51 - 145.00 - 0 - 0 - - - 0151 - 000151 - POINT 151 - 76.82 - 133.69 - 0 - 0 - - - 0152 - 000152 - POINT 152 - 78.43 - 118.44 - 0 - 0 - - - 0153 - 000153 - POINT 153 - 79.02 - 100.00 - 0 - 0 - - - 0154 - 000154 - POINT 154 - 78.43 - 81.57 - 0 - 0 - - - 0155 - 000155 - POINT 155 - 76.82 - 66.31 - 0 - 0 - - - 0156 - 000156 - POINT 156 - 74.51 - 55.00 - 0 - 0 - - - 0157 - 000157 - POINT 157 - 71.79 - 46.87 - 0 - 0 - - - 0158 - 000158 - POINT 158 - 68.83 - 40.96 - 0 - 0 - - - 0159 - 000159 - POINT 159 - 65.73 - 36.57 - 0 - 0 - - - 0160 - 000160 - POINT 160 - 59.37 - 30.56 - 0 - 0 - - - 0161 - 000161 - POINT 161 - 54.97 - 166.04 - 0 - 0 - - - 0162 - 000162 - POINT 162 - 58.01 - 163.44 - 0 - 0 - - - 0163 - 000163 - POINT 163 - 61.03 - 160.26 - 0 - 0 - - - 0164 - 000164 - POINT 164 - 71.79 - 136.87 - 0 - 0 - - - 0165 - 000165 - POINT 165 - 73.69 - 126.57 - 0 - 0 - - - 0166 - 000166 - POINT 166 - 74.95 - 114.04 - 0 - 0 - - - 0167 - 000167 - POINT 167 - 74.95 - 85.96 - 0 - 0 - - - 0168 - 000168 - POINT 168 - 73.69 - 73.44 - 0 - 0 - - - 0169 - 000169 - POINT 169 - 71.79 - 63.13 - 0 - 0 - - - 0170 - 000170 - POINT 170 - 69.45 - 55.00 - 0 - 0 - - - 0171 - 000171 - POINT 171 - 66.81 - 48.66 - 0 - 0 - - - 0172 - 000172 - POINT 172 - 45.87 - 28.44 - 0 - 0 - - - 0173 - 000173 - POINT 173 - 42.90 - 27.10 - 0 - 0 - - - 0174 - 000174 - POINT 174 - 53.48 - 160.95 - 0 - 0 - - - 0175 - 000175 - POINT 175 - 59.18 - 154.46 - 0 - 0 - - - 0176 - 000176 - POINT 176 - 70.42 - 78.20 - 0 - 0 - - - 0177 - 000177 - POINT 177 - 68.83 - 69.04 - 0 - 0 - - - 0178 - 000178 - POINT 178 - 66.81 - 61.34 - 0 - 0 - - - 0179 - 000179 - POINT 179 - 44.77 - 32.62 - 0 - 0 - - - 0180 - 000180 - POINT 180 - 41.89 - 31.04 - 0 - 0 - - - 0181 - 000181 - POINT 181 - 49.02 - 159.04 - 0 - 0 - - - 0182 - 000182 - POINT 182 - 51.76 - 156.31 - 0 - 0 - - - 0183 - 000183 - POINT 183 - 54.46 - 153.13 - 0 - 0 - - - 0184 - 000184 - POINT 184 - 57.08 - 149.40 - 0 - 0 - - - 0185 - 000185 - POINT 185 - 59.58 - 145.00 - 0 - 0 - - - 0186 - 000186 - POINT 186 - 46.24 - 38.61 - 0 - 0 - - - 0187 - 000187 - POINT 187 - 43.47 - 36.57 - 0 - 0 - - - 0188 - 000188 - POINT 188 - 47.27 - 155.01 - 0 - 0 - - - 0189 - 000189 - POINT 189 - 49.86 - 152.13 - 0 - 0 - - - 0190 - 000190 - POINT 190 - 52.38 - 148.81 - 0 - 0 - - - 0191 - 000191 - POINT 191 - 54.80 - 145.00 - 0 - 0 - - - 0192 - 000192 - POINT 192 - 57.08 - 140.60 - 0 - 0 - - - 0193 - 000193 - POINT 193 - 45.37 - 151.34 - 0 - 0 - - - 0194 - 000194 - POINT 194 - 47.80 - 148.37 - 0 - 0 - - - 0195 - 000195 - POINT 195 - 50.14 - 145.00 - 0 - 0 - - - 0196 - 000196 - POINT 196 - 52.38 - 141.19 - 0 - 0 - - - 0197 - 000197 - POINT 197 - 54.46 - 136.87 - 0 - 0 - - - 0198 - 000198 - POINT 198 - 43.35 - 148.01 - 0 - 0 - - - 0199 - 000199 - POINT 199 - 45.62 - 145.00 - 0 - 0 - - - 0200 - 000200 - POINT 200 - 47.80 - 141.63 - 0 - 0 - - - 0201 - 000201 - POINT 201 - 45.37 - 138.66 - 0 - 0 - - - 0202 - 000202 - POINT 202 - 42.90 - 136.03 - 0 - 0 - - - 0203 - 000203 - POINT 203 - 40.39 - 133.69 - 0 - 0 - - - 0204 - 000204 - POINT 204 - 42.00 - 130.26 - 0 - 0 - - - 0205 - 000205 - POINT 205 - 39.36 - 128.30 - 0 - 0 - - - 0206 - 000206 - POINT 206 - 37.96 - 123.20 - 0 - 0 - - - 0207 - 000207 - POINT 207 - 39.05 - 119.65 - 0 - 0 - - + + + + + 0001 + 000001 + POINT 1 + 48.88 + -60.02 + 0 + 0 + + + 0002 + 000002 + POINT 2 + 46.24 + -51.39 + 0 + 0 + + + 0003 + 000003 + POINT 3 + 54.46 + -80.00 + 0 + 0 + + + 0004 + 000004 + POINT 4 + 50.58 + -53.43 + 0 + 0 + + + 0005 + 000005 + POINT 5 + 49.02 + -49.04 + 0 + 0 + + + 0006 + 000006 + POINT 6 + 47.27 + -45.01 + 0 + 0 + + + 0007 + 000007 + POINT 7 + 57.63 + -86.34 + 0 + 0 + + + 0008 + 000008 + POINT 8 + 57.82 + -80.00 + 0 + 0 + + + 0009 + 000009 + POINT 9 + 56.18 + -61.57 + 0 + 0 + + + 0010 + 000010 + POINT 10 + 54.97 + -56.04 + 0 + 0 + + + 0011 + 000011 + POINT 11 + 53.48 + -50.95 + 0 + 0 + + + 0012 + 000012 + POINT 12 + 51.76 + -46.31 + 0 + 0 + + + 0013 + 000013 + POINT 13 + 49.86 + -42.13 + 0 + 0 + + + 0014 + 000014 + POINT 14 + 60.39 + -94.04 + 0 + 0 + + + 0015 + 000015 + POINT 15 + 61.03 + -87.13 + 0 + 0 + + + 0016 + 000016 + POINT 16 + 61.24 + -80.00 + 0 + 0 + + + 0017 + 000017 + POINT 17 + 61.03 + -72.88 + 0 + 0 + + + 0018 + 000018 + POINT 18 + 60.39 + -65.96 + 0 + 0 + + + 0019 + 000019 + POINT 19 + 59.37 + -59.44 + 0 + 0 + + + 0020 + 000020 + POINT 20 + 58.01 + -53.43 + 0 + 0 + + + 0021 + 000021 + POINT 21 + 56.36 + -47.99 + 0 + 0 + + + 0022 + 000022 + POINT 22 + 54.46 + -43.13 + 0 + 0 + + + 0023 + 000023 + POINT 23 + 64.46 + -88.13 + 0 + 0 + + + 0024 + 000024 + POINT 24 + 64.71 + -80.00 + 0 + 0 + + + 0025 + 000025 + POINT 25 + 64.46 + -71.87 + 0 + 0 + + + 0026 + 000026 + POINT 26 + 63.74 + -64.05 + 0 + 0 + + + 0027 + 000027 + POINT 27 + 62.57 + -56.80 + 0 + 0 + + + 0028 + 000028 + POINT 28 + 61.03 + -50.26 + 0 + 0 + + + 0029 + 000029 + POINT 29 + 59.18 + -44.46 + 0 + 0 + + + 0030 + 000030 + POINT 30 + 57.08 + -39.40 + 0 + 0 + + + 0031 + 000031 + POINT 31 + 67.08 + -98.43 + 0 + 0 + + + 0032 + 000032 + POINT 32 + 67.94 + -89.46 + 0 + 0 + + + 0033 + 000033 + POINT 33 + 68.23 + -80.00 + 0 + 0 + + + 0034 + 000034 + POINT 34 + 67.08 + -61.57 + 0 + 0 + + + 0035 + 000035 + POINT 35 + 65.73 + -53.43 + 0 + 0 + + + 0036 + 000036 + POINT 36 + 63.98 + -46.31 + 0 + 0 + + + 0037 + 000037 + POINT 37 + 61.90 + -40.19 + 0 + 0 + + + 0038 + 000038 + POINT 38 + 59.58 + -35.00 + 0 + 0 + + + 0039 + 000039 + POINT 39 + 68.83 + -110.96 + 0 + 0 + + + 0040 + 000040 + POINT 40 + 70.42 + -101.80 + 0 + 0 + + + 0041 + 000041 + POINT 41 + 71.44 + -91.31 + 0 + 0 + + + 0042 + 000042 + POINT 42 + 71.79 + -80.00 + 0 + 0 + + + 0043 + 000043 + POINT 43 + 71.44 + -68.69 + 0 + 0 + + + 0044 + 000044 + POINT 44 + 70.42 + -58.20 + 0 + 0 + + + 0045 + 000045 + POINT 45 + 64.46 + -35.00 + 0 + 0 + + + 0046 + 000046 + POINT 46 + 61.90 + -29.81 + 0 + 0 + + + 0047 + 000047 + POINT 47 + 69.45 + -125.00 + 0 + 0 + + + 0048 + 000048 + POINT 48 + 71.79 + -116.87 + 0 + 0 + + + 0049 + 000049 + POINT 49 + 73.69 + -106.57 + 0 + 0 + + + 0050 + 000050 + POINT 50 + 74.95 + -94.04 + 0 + 0 + + + 0051 + 000051 + POINT 51 + 75.39 + -80.00 + 0 + 0 + + + 0052 + 000052 + POINT 52 + 74.95 + -65.96 + 0 + 0 + + + 0053 + 000053 + POINT 53 + 73.69 + -53.43 + 0 + 0 + + + 0054 + 000054 + POINT 54 + 66.81 + -28.66 + 0 + 0 + + + 0055 + 000055 + POINT 55 + 63.98 + -23.69 + 0 + 0 + + + 0056 + 000056 + POINT 56 + 68.83 + -139.04 + 0 + 0 + + + 0057 + 000057 + POINT 57 + 71.79 + -133.13 + 0 + 0 + + + 0058 + 000058 + POINT 58 + 74.51 + -125.00 + 0 + 0 + + + 0059 + 000059 + POINT 59 + 76.82 + -113.69 + 0 + 0 + + + 0060 + 000060 + POINT 60 + 78.43 + -98.43 + 0 + 0 + + + 0061 + 000061 + POINT 61 + 79.02 + -80.00 + 0 + 0 + + + 0062 + 000062 + POINT 62 + 71.79 + -26.87 + 0 + 0 + + + 0063 + 000063 + POINT 63 + 68.83 + -20.96 + 0 + 0 + + + 0064 + 000064 + POINT 64 + 65.73 + -16.57 + 0 + 0 + + + 0065 + 000065 + POINT 65 + 62.57 + -13.20 + 0 + 0 + + + 0066 + 000066 + POINT 66 + 70.42 + -148.20 + 0 + 0 + + + 0067 + 000067 + POINT 67 + 73.69 + -143.44 + 0 + 0 + + + 0068 + 000068 + POINT 68 + 76.82 + -136.31 + 0 + 0 + + + 0069 + 000069 + POINT 69 + 79.64 + -125.00 + 0 + 0 + + + 0070 + 000070 + POINT 70 + 81.80 + -106.57 + 0 + 0 + + + 0071 + 000071 + POINT 71 + 82.67 + -80.00 + 0 + 0 + + + 0072 + 000072 + POINT 72 + 81.80 + -53.43 + 0 + 0 + + + 0073 + 000073 + POINT 73 + 76.82 + -23.69 + 0 + 0 + + + 0074 + 000074 + POINT 74 + 73.69 + -16.57 + 0 + 0 + + + 0075 + 000075 + POINT 75 + 70.42 + -11.80 + 0 + 0 + + + 0076 + 000076 + POINT 76 + 67.08 + -8.43 + 0 + 0 + + + 0077 + 000077 + POINT 77 + 54.30 + -164.29 + 0 + 0 + + + 0078 + 000078 + POINT 78 + 57.63 + -163.66 + 0 + 0 + + + 0079 + 000079 + POINT 79 + 61.03 + -162.88 + 0 + 0 + + + 0080 + 000080 + POINT 80 + 64.46 + -161.87 + 0 + 0 + + + 0081 + 000081 + POINT 81 + 67.94 + -160.54 + 0 + 0 + + + 0082 + 000082 + POINT 82 + 71.44 + -158.69 + 0 + 0 + + + 0083 + 000083 + POINT 83 + 74.95 + -155.96 + 0 + 0 + + + 0084 + 000084 + POINT 84 + 78.43 + -151.57 + 0 + 0 + + + 0085 + 000085 + POINT 85 + 81.80 + -143.44 + 0 + 0 + + + 0086 + 000086 + POINT 86 + 84.81 + -125.00 + 0 + 0 + + + 0087 + 000087 + POINT 87 + 86.33 + -80.00 + 0 + 0 + + + 0088 + 000088 + POINT 88 + 84.81 + -35.00 + 0 + 0 + + + 0089 + 000089 + POINT 89 + 81.80 + -16.57 + 0 + 0 + + + 0090 + 000090 + POINT 90 + 78.43 + -8.43 + 0 + 0 + + + 0091 + 000091 + POINT 91 + 74.95 + -4.04 + 0 + 0 + + + 0092 + 000092 + POINT 92 + 71.44 + -1.31 + 0 + 0 + + + 0093 + 000093 + POINT 93 + 54.46 + -170.00 + 0 + 0 + + + 0094 + 000094 + POINT 94 + 57.82 + -170.00 + 0 + 0 + + + 0095 + 000095 + POINT 95 + 61.24 + -170.00 + 0 + 0 + + + 0096 + 000096 + POINT 96 + 64.71 + -170.00 + 0 + 0 + + + 0097 + 000097 + POINT 97 + 68.23 + -170.00 + 0 + 0 + + + 0098 + 000098 + POINT 98 + 71.79 + -170.00 + 0 + 0 + + + 0099 + 000099 + POINT 99 + 75.39 + -170.00 + 0 + 0 + + + 0100 + 000100 + POINT 100 + 79.02 + -170.00 + 0 + 0 + + + 0101 + 000101 + POINT 101 + 82.67 + -170.00 + 0 + 0 + + + 0102 + 000102 + POINT 102 + 86.33 + -170.00 + 0 + 0 + + + 0103 + 000103 + POINT 103 + 90.00 + -80.00 + 0 + 0 + + + 0104 + 000104 + POINT 104 + 86.33 + 10.00 + 0 + 0 + + + 0105 + 000105 + POINT 105 + 82.67 + 10.00 + 0 + 0 + + + 0106 + 000106 + POINT 106 + 79.02 + 10.00 + 0 + 0 + + + 0107 + 000107 + POINT 107 + 75.39 + 10.00 + 0 + 0 + + + 0108 + 000108 + POINT 108 + 71.79 + 10.00 + 0 + 0 + + + 0109 + 000109 + POINT 109 + 57.82 + 10.00 + 0 + 0 + + + 0110 + 000110 + POINT 110 + 54.46 + 10.00 + 0 + 0 + + + 0111 + 000111 + POINT 111 + 54.30 + -175.71 + 0 + 0 + + + 0112 + 000112 + POINT 112 + 57.63 + -176.34 + 0 + 0 + + + 0113 + 000113 + POINT 113 + 61.03 + -177.13 + 0 + 0 + + + 0114 + 000114 + POINT 114 + 64.46 + -178.13 + 0 + 0 + + + 0115 + 000115 + POINT 115 + 67.94 + -179.46 + 0 + 0 + + + 0116 + 000116 + POINT 116 + 71.44 + 178.69 + 0 + 0 + + + 0117 + 000117 + POINT 117 + 74.95 + 175.96 + 0 + 0 + + + 0118 + 000118 + POINT 118 + 78.43 + 171.57 + 0 + 0 + + + 0119 + 000119 + POINT 119 + 81.80 + 163.44 + 0 + 0 + + + 0120 + 000120 + POINT 120 + 84.81 + 145.00 + 0 + 0 + + + 0121 + 000121 + POINT 121 + 86.33 + 100.00 + 0 + 0 + + + 0122 + 000122 + POINT 122 + 84.81 + 55.00 + 0 + 0 + + + 0123 + 000123 + POINT 123 + 81.80 + 36.57 + 0 + 0 + + + 0124 + 000124 + POINT 124 + 78.43 + 28.44 + 0 + 0 + + + 0125 + 000125 + POINT 125 + 74.95 + 24.04 + 0 + 0 + + + 0126 + 000126 + POINT 126 + 71.44 + 21.31 + 0 + 0 + + + 0127 + 000127 + POINT 127 + 61.03 + 17.13 + 0 + 0 + + + 0128 + 000128 + POINT 128 + 57.63 + 16.34 + 0 + 0 + + + 0129 + 000129 + POINT 129 + 54.30 + 15.71 + 0 + 0 + + + 0130 + 000130 + POINT 130 + 53.80 + 178.69 + 0 + 0 + + + 0131 + 000131 + POINT 131 + 57.08 + 177.47 + 0 + 0 + + + 0132 + 000132 + POINT 132 + 60.39 + 175.96 + 0 + 0 + + + 0133 + 000133 + POINT 133 + 70.42 + 168.20 + 0 + 0 + + + 0134 + 000134 + POINT 134 + 73.69 + 163.44 + 0 + 0 + + + 0135 + 000135 + POINT 135 + 76.82 + 156.31 + 0 + 0 + + + 0136 + 000136 + POINT 136 + 79.64 + 145.00 + 0 + 0 + + + 0137 + 000137 + POINT 137 + 81.80 + 126.57 + 0 + 0 + + + 0138 + 000138 + POINT 138 + 82.67 + 100.00 + 0 + 0 + + + 0139 + 000139 + POINT 139 + 81.80 + 73.44 + 0 + 0 + + + 0140 + 000140 + POINT 140 + 79.64 + 55.00 + 0 + 0 + + + 0141 + 000141 + POINT 141 + 76.82 + 43.69 + 0 + 0 + + + 0142 + 000142 + POINT 142 + 73.69 + 36.57 + 0 + 0 + + + 0143 + 000143 + POINT 143 + 70.42 + 31.80 + 0 + 0 + + + 0144 + 000144 + POINT 144 + 63.74 + 25.95 + 0 + 0 + + + 0145 + 000145 + POINT 145 + 60.39 + 24.04 + 0 + 0 + + + 0146 + 000146 + POINT 146 + 57.08 + 22.53 + 0 + 0 + + + 0147 + 000147 + POINT 147 + 56.18 + 171.57 + 0 + 0 + + + 0148 + 000148 + POINT 148 + 59.37 + 169.44 + 0 + 0 + + + 0149 + 000149 + POINT 149 + 71.79 + 153.13 + 0 + 0 + + + 0150 + 000150 + POINT 150 + 74.51 + 145.00 + 0 + 0 + + + 0151 + 000151 + POINT 151 + 76.82 + 133.69 + 0 + 0 + + + 0152 + 000152 + POINT 152 + 78.43 + 118.44 + 0 + 0 + + + 0153 + 000153 + POINT 153 + 79.02 + 100.00 + 0 + 0 + + + 0154 + 000154 + POINT 154 + 78.43 + 81.57 + 0 + 0 + + + 0155 + 000155 + POINT 155 + 76.82 + 66.31 + 0 + 0 + + + 0156 + 000156 + POINT 156 + 74.51 + 55.00 + 0 + 0 + + + 0157 + 000157 + POINT 157 + 71.79 + 46.87 + 0 + 0 + + + 0158 + 000158 + POINT 158 + 68.83 + 40.96 + 0 + 0 + + + 0159 + 000159 + POINT 159 + 65.73 + 36.57 + 0 + 0 + + + 0160 + 000160 + POINT 160 + 59.37 + 30.56 + 0 + 0 + + + 0161 + 000161 + POINT 161 + 54.97 + 166.04 + 0 + 0 + + + 0162 + 000162 + POINT 162 + 58.01 + 163.44 + 0 + 0 + + + 0163 + 000163 + POINT 163 + 61.03 + 160.26 + 0 + 0 + + + 0164 + 000164 + POINT 164 + 71.79 + 136.87 + 0 + 0 + + + 0165 + 000165 + POINT 165 + 73.69 + 126.57 + 0 + 0 + + + 0166 + 000166 + POINT 166 + 74.95 + 114.04 + 0 + 0 + + + 0167 + 000167 + POINT 167 + 74.95 + 85.96 + 0 + 0 + + + 0168 + 000168 + POINT 168 + 73.69 + 73.44 + 0 + 0 + + + 0169 + 000169 + POINT 169 + 71.79 + 63.13 + 0 + 0 + + + 0170 + 000170 + POINT 170 + 69.45 + 55.00 + 0 + 0 + + + 0171 + 000171 + POINT 171 + 66.81 + 48.66 + 0 + 0 + + + 0172 + 000172 + POINT 172 + 45.87 + 28.44 + 0 + 0 + + + 0173 + 000173 + POINT 173 + 42.90 + 27.10 + 0 + 0 + + + 0174 + 000174 + POINT 174 + 53.48 + 160.95 + 0 + 0 + + + 0175 + 000175 + POINT 175 + 59.18 + 154.46 + 0 + 0 + + + 0176 + 000176 + POINT 176 + 70.42 + 78.20 + 0 + 0 + + + 0177 + 000177 + POINT 177 + 68.83 + 69.04 + 0 + 0 + + + 0178 + 000178 + POINT 178 + 66.81 + 61.34 + 0 + 0 + + + 0179 + 000179 + POINT 179 + 44.77 + 32.62 + 0 + 0 + + + 0180 + 000180 + POINT 180 + 41.89 + 31.04 + 0 + 0 + + + 0181 + 000181 + POINT 181 + 49.02 + 159.04 + 0 + 0 + + + 0182 + 000182 + POINT 182 + 51.76 + 156.31 + 0 + 0 + + + 0183 + 000183 + POINT 183 + 54.46 + 153.13 + 0 + 0 + + + 0184 + 000184 + POINT 184 + 57.08 + 149.40 + 0 + 0 + + + 0185 + 000185 + POINT 185 + 59.58 + 145.00 + 0 + 0 + + + 0186 + 000186 + POINT 186 + 46.24 + 38.61 + 0 + 0 + + + 0187 + 000187 + POINT 187 + 43.47 + 36.57 + 0 + 0 + + + 0188 + 000188 + POINT 188 + 47.27 + 155.01 + 0 + 0 + + + 0189 + 000189 + POINT 189 + 49.86 + 152.13 + 0 + 0 + + + 0190 + 000190 + POINT 190 + 52.38 + 148.81 + 0 + 0 + + + 0191 + 000191 + POINT 191 + 54.80 + 145.00 + 0 + 0 + + + 0192 + 000192 + POINT 192 + 57.08 + 140.60 + 0 + 0 + + + 0193 + 000193 + POINT 193 + 45.37 + 151.34 + 0 + 0 + + + 0194 + 000194 + POINT 194 + 47.80 + 148.37 + 0 + 0 + + + 0195 + 000195 + POINT 195 + 50.14 + 145.00 + 0 + 0 + + + 0196 + 000196 + POINT 196 + 52.38 + 141.19 + 0 + 0 + + + 0197 + 000197 + POINT 197 + 54.46 + 136.87 + 0 + 0 + + + 0198 + 000198 + POINT 198 + 43.35 + 148.01 + 0 + 0 + + + 0199 + 000199 + POINT 199 + 45.62 + 145.00 + 0 + 0 + + + 0200 + 000200 + POINT 200 + 47.80 + 141.63 + 0 + 0 + + + 0201 + 000201 + POINT 201 + 45.37 + 138.66 + 0 + 0 + + + 0202 + 000202 + POINT 202 + 42.90 + 136.03 + 0 + 0 + + + 0203 + 000203 + POINT 203 + 40.39 + 133.69 + 0 + 0 + + + 0204 + 000204 + POINT 204 + 42.00 + 130.26 + 0 + 0 + + + 0205 + 000205 + POINT 205 + 39.36 + 128.30 + 0 + 0 + + + 0206 + 000206 + POINT 206 + 37.96 + 123.20 + 0 + 0 + + + 0207 + 000207 + POINT 207 + 39.05 + 119.65 + 0 + 0 + + diff --git a/ncep/gov.noaa.nws.ncep.edex.common/utility/edex_static/base/ncep/stns/stns.xsd b/ncep/gov.noaa.nws.ncep.edex.common/utility/edex_static/base/ncep/stns/stns.xsd index 145fba212c..e4416acbc5 100644 --- a/ncep/gov.noaa.nws.ncep.edex.common/utility/edex_static/base/ncep/stns/stns.xsd +++ b/ncep/gov.noaa.nws.ncep.edex.common/utility/edex_static/base/ncep/stns/stns.xsd @@ -1,163 +1,163 @@ - - - - - - The station ID - - - - - - - - - - - - The station number - - - - - - - - - - - - The station name - - - - - - - - - - - state - - - - - - - - - - - country - - - - - - - - - - - The latitude - - - - - - - - - - - - The longitude - - - - - - - - - - - - The elevation - - - - - - - - - - - - The priority - - - - - - - - - - - - Volcano location - - - - - - - - - - - WFO - - - - - - - - - - - - - - - - - - - A station - - - - - - - - - - - - - - - - - - - - + + + + + + The station ID + + + + + + + + + + + + The station number + + + + + + + + + + + + The station name + + + + + + + + + + + state + + + + + + + + + + + country + + + + + + + + + + + The latitude + + + + + + + + + + + + The longitude + + + + + + + + + + + + The elevation + + + + + + + + + + + + The priority + + + + + + + + + + + + Volcano location + + + + + + + + + + + WFO + + + + + + + + + + + + + + + + + + + A station + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/ncep/gov.noaa.nws.ncep.edex.common/utility/edex_static/base/ncep/stns/vors.xml b/ncep/gov.noaa.nws.ncep.edex.common/utility/edex_static/base/ncep/stns/vors.xml index 2e15934cd5..80239cf1d0 100644 --- a/ncep/gov.noaa.nws.ncep.edex.common/utility/edex_static/base/ncep/stns/vors.xml +++ b/ncep/gov.noaa.nws.ncep.edex.common/utility/edex_static/base/ncep/stns/vors.xml @@ -1,7049 +1,7049 @@ - - - - - YSJ - 000395 - ST_JOHN - NB - CN - 45.32 - -65.88 - 0 - 0 - - - - HUL - 000341 - HOULTON - ME - US - 46.04 - -67.83 - 0 - 0 - - - - PQI - 000367 - PRESQUE_ISLE - ME - US - 46.77 - -68.09 - 0 - 0 - - - - MLT - 000183 - MILLINOCKET - ME - US - 45.58 - -68.52 - 0 - 0 - - - - BGR - 000029 - BANGOR - ME - US - 44.84 - -68.87 - 0 - 0 - - - - ACK - 000005 - NANTUCKET - MA - US - 41.28 - -70.03 - 0 - 0 - - - - ENE - 000322 - KENNEBUNK - ME - US - 43.43 - -70.61 - 0 - 0 - - - - BOS - 000289 - BOSTON - MA - US - 42.36 - -70.99 - 0 - 0 - - - - YQB - 000391 - QUEBEC - QB - CN - 46.80 - -71.38 - 0 - 0 - - - - PVD - 000221 - PROVIDENCE - RI - US - 41.72 - -71.43 - 0 - 0 - - - - CON - 000062 - CONCORD - NH - US - 43.22 - -71.58 - 0 - 0 - - - - YSC - 000394 - SHERBROOKE - QB - CN - 45.43 - -71.68 - 0 - 0 - - - - HTO - 000340 - EAST_HAMPTON - NY - US - 40.92 - -72.32 - 0 - 0 - - - - MPV - 000188 - MONTPELIER - VT - US - 44.22 - -72.57 - 0 - 0 - - - - BDL - 000287 - WINSOR_LOCKS - CT - US - 41.94 - -72.69 - 0 - 0 - - - - PLB - 000365 - PLATTSBURGH - NY - US - 44.69 - -73.52 - 0 - 0 - - - - JFK - 000345 - NEW_YORK/JF_KENNEDY - NY - US - 40.63 - -73.77 - 0 - 0 - - - - ALB - 000012 - ALBANY - NY - US - 42.75 - -73.80 - 0 - 0 - - - - CYN - 000300 - COYLE - NJ - US - 39.82 - -74.43 - 0 - 0 - - - - SAX - 000376 - SPARTA - NJ - US - 41.07 - -74.54 - 0 - 0 - - - - MSS - 000353 - MASSENA - NY - US - 44.91 - -74.72 - 0 - 0 - - - - SIE - 000377 - SEA_ISLE - NJ - US - 39.10 - -74.80 - 0 - 0 - - - - HNK - 000338 - HANCOCK - NY - US - 42.06 - -75.32 - 0 - 0 - - - - SBY - 000242 - SALISBURY - MD - US - 38.35 - -75.52 - 0 - 0 - - - - YOW - 000390 - OTTAWA - ON - CN - 45.32 - -75.67 - 0 - 0 - - - - ETX - 000325 - EAST_TEXAS - PA - US - 40.58 - -75.68 - 0 - 0 - - - - ECG - 000086 - ELIZABETH_CITY - NC - US - 36.25 - -76.18 - 0 - 0 - - - - SYR - 000259 - SYRACUSE - NY - US - 43.16 - -76.20 - 0 - 0 - - - - ORF - 000203 - NORFOLK - VA - US - 36.89 - -76.20 - 0 - 0 - - - - EMI - 000320 - WESTMINSTER - MD - US - 39.50 - -76.98 - 0 - 0 - - - - HAR - 000126 - HARRISBURG - PA - US - 40.23 - -77.02 - 0 - 0 - - - - DCA - 000306 - WASHINGTON - DC - US - 38.86 - -77.04 - 0 - 0 - - - - RIC - 000229 - RICHMOND - VA - US - 37.50 - -77.32 - 0 - 0 - - - - CSN - 000299 - CASSANOVA - VA - US - 38.64 - -77.87 - 0 - 0 - - - - ILM - 000135 - WILMINGTON - NC - US - 34.35 - -77.87 - 0 - 0 - - - - SLT - 000252 - SLATE_RUN - PA - US - 41.51 - -77.97 - 0 - 0 - - - - PSB - 000368 - PHILLIPSBURG - PA - US - 40.92 - -77.99 - 0 - 0 - - - - BUF - 000044 - BUFFALO - NY - US - 42.93 - -78.65 - 0 - 0 - - - - RDU - 000372 - RALEIGH-DURHAM - NC - US - 35.87 - -78.78 - 0 - 0 - - - - JST - 000145 - JOHNSTOWN - PA - US - 40.32 - -78.83 - 0 - 0 - - - - JHW - 000346 - JAMESTOWN - NY - US - 42.19 - -79.12 - 0 - 0 - - - - LYH - 000166 - LYNCHBURG - VA - US - 37.25 - -79.23 - 0 - 0 - - - - YYZ - 000401 - TORONTO - ON - CN - 43.67 - -79.63 - 0 - 0 - - - - FLO - 000102 - FLORENCE - SC - US - 34.23 - -79.66 - 0 - 0 - - - - GSO - 000122 - GREENSBORO - NC - US - 36.05 - -79.98 - 0 - 0 - - - - CHS - 000056 - CHARLESTON - SC - US - 32.89 - -80.04 - 0 - 0 - - - - PBI - 000206 - WEST_PALM_BEACH - FL - US - 26.68 - -80.09 - 0 - 0 - - - - EKN - 000088 - ELKINS - WV - US - 38.92 - -80.10 - 0 - 0 - - - - EWC - 000326 - ELLWOOD_CITY - PA - US - 40.83 - -80.21 - 0 - 0 - - - - ERI - 000092 - ERIE - PA - US - 42.02 - -80.30 - 0 - 0 - - - - MIA - 000176 - MIAMI - FL - US - 25.80 - -80.30 - 0 - 0 - - - - VRB - 000276 - VERO_BEACH - FL - US - 27.68 - -80.49 - 0 - 0 - - - - PSK - 000369 - DUBLIN - VA - US - 37.09 - -80.71 - 0 - 0 - - - - AIR - 000280 - BELLAIRE - OH - US - 40.02 - -80.82 - 0 - 0 - - - - CLT - 000059 - CHARLOTTE - NC - US - 35.22 - -80.93 - 0 - 0 - - - - CAE - 000295 - COLUMBIA - SC - US - 33.86 - -81.05 - 0 - 0 - - - - YVV - 000396 - WIARTON - ON - CN - 44.75 - -81.10 - 0 - 0 - - - - SAV - 000239 - SAVANNAH - GA - US - 32.16 - -81.11 - 0 - 0 - - - - OMN - 000363 - ORMOND_BEACH - FL - US - 29.30 - -81.11 - 0 - 0 - - - - BKW - 000034 - BECKLEY - WV - US - 37.78 - -81.12 - 0 - 0 - - - - ORL - 000204 - ORLANDO - FL - US - 28.54 - -81.34 - 0 - 0 - - - - CRG - 000298 - JACKSONVILLE - FL - US - 30.34 - -81.51 - 0 - 0 - - - - EYW - 000096 - KEY_WEST - FL - US - 24.59 - -81.80 - 0 - 0 - - - - FMY - 000104 - FT_MEYERS - FL - US - 26.58 - -81.87 - 0 - 0 - - - - SPA - 000380 - SPARTANBURG - SC - US - 35.03 - -81.93 - 0 - 0 - - - - HNN - 000339 - HENDERSON - WV - US - 38.75 - -82.03 - 0 - 0 - - - - HMV - 000337 - HOLSTON_MOUNTAIN - TN - US - 36.44 - -82.13 - 0 - 0 - - - - CLE - 000058 - CLEVELAND - OH - US - 41.42 - -81.85 - 0 - 0 - - - - IRQ - 000344 - COLLIERS - SC - US - 33.71 - -82.16 - 0 - 0 - - - - AMG - 000015 - ALMA - GA - US - 31.54 - -82.51 - 0 - 0 - - - - SRQ - 000382 - SARASOTA - FL - US - 27.40 - -82.55 - 0 - 0 - - - - APE - 000283 - APPLETON - OH - US - 40.15 - -82.59 - 0 - 0 - - - - PIE - 000212 - SAINT_PETERSBURG - FL - US - 27.91 - -82.68 - 0 - 0 - - - - ECK - 000316 - PECK - MI - US - 43.26 - -82.72 - 0 - 0 - - - - CTY - 000066 - CROSS_CITY - FL - US - 29.60 - -83.05 - 0 - 0 - - - - ODF - 000360 - TOCCOA - GA - US - 34.70 - -83.30 - 0 - 0 - - - - DXO - 000315 - DETROIT - MI - US - 42.21 - -83.37 - 0 - 0 - - - - ASP - 000284 - OSCODA - MI - US - 44.45 - -83.39 - 0 - 0 - - - - MCN - 000170 - MACON - GA - US - 32.69 - -83.65 - 0 - 0 - - - - FNT - 000328 - FLINT - MI - US - 42.97 - -83.74 - 0 - 0 - - - - VXV - 000388 - KNOXVILLE - TN - US - 35.90 - -83.89 - 0 - 0 - - - - ROD - 000373 - ROSEWOOD - OH - US - 40.29 - -84.04 - 0 - 0 - - - - MBS - 000168 - SAGINAW - MI - US - 43.53 - -84.08 - 0 - 0 - - - - LOZ - 000160 - LONDON - KY - US - 37.03 - -84.12 - 0 - 0 - - - - ABY - 000004 - ALBANY - GA - US - 31.65 - -84.30 - 0 - 0 - - - - SSM - 000255 - SAULT_STE_MARIE - MI - US - 46.41 - -84.31 - 0 - 0 - - - - TLH - 000264 - TALLAHASSEE - FL - US - 30.56 - -84.37 - 0 - 0 - - - - ATL - 000019 - ATLANTA - GA - US - 33.63 - -84.44 - 0 - 0 - - - - CVG - 000067 - COVINGTON - KY - US - 39.02 - -84.70 - 0 - 0 - - - - GQO - 000331 - CHATTANOOGA - TN - US - 34.96 - -85.15 - 0 - 0 - - - - FWA - 000109 - FT_WAYNE - IN - US - 40.98 - -85.19 - 0 - 0 - - - - LGC - 000350 - LA_GRANGE - GA - US - 33.05 - -85.21 - 0 - 0 - - - - GRR - 000332 - GRAND_RAPIDS - MI - US - 42.79 - -85.50 - 0 - 0 - - - - TVC - 000270 - TRAVERSE_CITY - MI - US - 44.67 - -85.55 - 0 - 0 - - - - LOU - 000159 - LOUISVILLE - KY - US - 38.10 - -85.58 - 0 - 0 - - - - MKG - 000179 - MUSKEGON - MI - US - 43.17 - -86.04 - 0 - 0 - - - - PMM - 000366 - PULLMAN - MI - US - 42.47 - -86.11 - 0 - 0 - - - - GIJ - 000330 - NILES - MI - US - 41.77 - -86.32 - 0 - 0 - - - - MGM - 000175 - MONTGOMERY - AL - US - 32.22 - -86.32 - 0 - 0 - - - - IND - 000136 - INDIANAPOLIS - IN - US - 39.81 - -86.37 - 0 - 0 - - - - BWG - 000047 - BOWLING_GREEN - KY - US - 36.93 - -86.44 - 0 - 0 - - - - BNA - 000037 - NASHVILLE - TN - US - 36.14 - -86.68 - 0 - 0 - - - - CEW - 000052 - CRESTVIEW - FL - US - 30.83 - -86.68 - 0 - 0 - - - - VUZ - 000387 - VULCAN - AL - US - 33.67 - -86.90 - 0 - 0 - - - - BVT - 000293 - LAFAYETTE - IN - US - 40.56 - -87.07 - 0 - 0 - - - - TTH - 000384 - TERRE_HAUTE - IN - US - 39.49 - -87.25 - 0 - 0 - - - - MSL - 000191 - MUSCLE_SHOALS - AL - US - 34.70 - -87.48 - 0 - 0 - - - - SAW - 000189 - SAWYER - MI - US - 46.35 - -87.38 - 0 - 0 - - - - PXV - 000370 - POCKET_CITY - IN - US - 37.93 - -87.76 - 0 - 0 - - - - ORD - 000202 - O'HARE_INTERNATIONAL - IL - US - 41.98 - -87.90 - 0 - 0 - - - - GRB - 000119 - GREEN_BAY - WI - US - 44.56 - -88.19 - 0 - 0 - - - - BAE - 000285 - MILWAUKEE - WI - US - 43.12 - -88.28 - 0 - 0 - - - - JOT - 000348 - JOLIET - IL - US - 41.55 - -88.32 - 0 - 0 - - - - SJI - 000378 - SEMMNES - AL - US - 30.73 - -88.36 - 0 - 0 - - - - IGB - 000133 - BIGBEE - MS - US - 33.48 - -88.52 - 0 - 0 - - - - MEI - 000172 - MERIDIAN - MS - US - 32.38 - -88.80 - 0 - 0 - - - - DEC - 000070 - DECATUR - IL - US - 39.74 - -88.86 - 0 - 0 - - - - YQT - 000393 - THUNDER_BAY - ON - CN - 48.37 - -89.32 - 0 - 0 - - - - DYR - 000083 - DYERSBURG - TN - US - 36.02 - -89.32 - 0 - 0 - - - - RHI - 000228 - RHINELANDER - WI - US - 45.63 - -89.45 - 0 - 0 - - - - BDF - 000024 - BRADFORD - IL - US - 41.16 - -89.59 - 0 - 0 - - - - DLL - 000310 - DELLS - WI - US - 43.55 - -89.76 - 0 - 0 - - - - MEM - 000173 - MEMPHIS - TN - US - 35.06 - -89.98 - 0 - 0 - - - - LEV - 000349 - GRAND_ISLE - LA - US - 29.18 - -90.10 - 0 - 0 - - - - JAN - 000142 - JACKSON - MS - US - 32.51 - -90.17 - 0 - 0 - - - - MSY - 000195 - NEW_ORLEANS - LA - US - 30.00 - -90.27 - 0 - 0 - - - - FAM - 000097 - FARMINGTON - MO - US - 37.67 - -90.23 - 0 - 0 - - - - MCB - 000169 - MC_COMB - MS - US - 31.30 - -90.26 - 0 - 0 - - - - SQS - 000381 - SIDON - MS - US - 33.46 - -90.28 - 0 - 0 - - - - STL - 000257 - ST_LOUIS - MO - US - 38.86 - -90.48 - 0 - 0 - - - - DBQ - 000069 - DUBUQUE - IA - US - 42.40 - -90.71 - 0 - 0 - - - - ARG - 000018 - WALNUT_RIDGE - AR - US - 36.11 - -90.95 - 0 - 0 - - - - UIN - 000386 - QUINCY - IL - US - 39.85 - -91.28 - 0 - 0 - - - - BTR - 000042 - BATON_ROUGE - LA - US - 30.48 - -91.30 - 0 - 0 - - - - ODI - 000361 - NODINE - MN - US - 43.91 - -91.47 - 0 - 0 - - - - EAU - 000085 - EAU_CLAIRE - WI - US - 44.90 - -91.48 - 0 - 0 - - - - IOW - 000343 - IOWA_CITY - IA - US - 41.52 - -91.61 - 0 - 0 - - - - MLU - 000184 - MONROE - LA - US - 32.52 - -92.03 - 0 - 0 - - - - LIT - 000156 - LITTLE_ROCK - AR - US - 34.68 - -92.18 - 0 - 0 - - - - DLH - 000075 - DULUTH - MN - US - 46.80 - -92.20 - 0 - 0 - - - - COU - 000063 - COLUMBIA - MO - US - 38.82 - -92.22 - 0 - 0 - - - - AEX - 000009 - ALEXANDRIA - LA - US - 31.26 - -92.50 - 0 - 0 - - - - IRK - 000139 - KIRKSVILLE - MO - US - 40.14 - -92.59 - 0 - 0 - - - - ELD - 000319 - EL_DORADO - AR - US - 33.26 - -92.74 - 0 - 0 - - - - LCH - 000154 - LAKE_CHARLES - LA - US - 30.14 - -93.11 - 0 - 0 - - - - MSP - 000194 - MINNEAPOLIS - MN - US - 44.88 - -93.23 - 0 - 0 - - - - MCW - 000171 - MASON_CITY - IA - US - 43.09 - -93.33 - 0 - 0 - - - - SGF - 000245 - SPRINGFIELD - MO - US - 37.36 - -93.33 - 0 - 0 - - - - INL - 000137 - INTERNATIONAL_FALLS - MN - US - 48.57 - -93.40 - 0 - 0 - - - - DSM - 000079 - DES_MOINES - IA - US - 41.44 - -93.65 - 0 - 0 - - - - EIC - 000318 - SHREVEPORT - LA - US - 32.77 - -93.81 - 0 - 0 - - - - BRD - 000292 - BRAINERD - MN - US - 46.35 - -94.03 - 0 - 0 - - - - TXK - 000272 - TEXARKANA - AR - US - 33.51 - -94.07 - 0 - 0 - - - - RZC - 000374 - RAZORBACK - AR - US - 36.25 - -94.12 - 0 - 0 - - - - FSM - 000108 - FT_SMITH - AR - US - 35.38 - -94.27 - 0 - 0 - - - - FOD - 000105 - FT_DODGE - IA - US - 42.61 - -94.29 - 0 - 0 - - - - BUM - 000045 - BUTLER - MO - US - 38.27 - -94.49 - 0 - 0 - - - - MKC - 000177 - KANSAS_CITY - MO - US - 39.28 - -94.59 - 0 - 0 - - - - LFK - 000155 - LUFKIN - TX - US - 31.16 - -94.72 - 0 - 0 - - - - GGG - 000115 - LONGVIEW - TX - US - 32.42 - -94.75 - 0 - 0 - - - - BJI - 000033 - BEMIDJI - MN - US - 47.58 - -95.02 - 0 - 0 - - - - RWF - 000234 - REDWWOD_FALLS - MN - US - 44.47 - -95.13 - 0 - 0 - - - - OSW - 000205 - OSWEGO - KS - US - 37.15 - -95.20 - 0 - 0 - - - - IAH - 000131 - HOUSTON_INTERNATIONAL - TX - US - 29.96 - -95.35 - 0 - 0 - - - - OVR - 000364 - OMAHA - NE - US - 41.17 - -95.74 - 0 - 0 - - - - MLC - 000180 - MC_CALESTER - OK - US - 34.85 - -95.78 - 0 - 0 - - - - TUL - 000268 - TULSA - OK - US - 36.20 - -95.79 - 0 - 0 - - - - PWE - 000222 - PAWNEE_CITY - NE - US - 40.20 - -96.21 - 0 - 0 - - - - PSX - 000219 - PALACIOS - TX - US - 28.76 - -96.31 - 0 - 0 - - - - FSD - 000107 - SIOUX_FALLS - SD - US - 43.65 - -96.78 - 0 - 0 - - - - FAR - 000098 - FARGO - ND - US - 46.75 - -96.85 - 0 - 0 - - - - DFW - 000072 - DALLAS-FT_WORTH - TX - US - 32.87 - -97.03 - 0 - 0 - - - - ADM - 000008 - ARDMORE - OK - US - 34.21 - -97.17 - 0 - 0 - - - - GFK - 000114 - GRAND_FORKS - ND - US - 47.95 - -97.19 - 0 - 0 - - - - YWG - 000397 - WINNIPEG - MB - CN - 49.90 - -97.23 - 0 - 0 - - - - ACT - 000006 - WACO - TX - US - 31.66 - -97.27 - 0 - 0 - - - - BRO - 000041 - BROWNSVILLE - TX - US - 25.92 - -97.38 - 0 - 0 - - - - CRP - 000065 - CORPUS_CHRISTI - TX - US - 27.90 - -97.45 - 0 - 0 - - - - ICT - 000132 - WICHITA - KS - US - 37.75 - -97.58 - 0 - 0 - - - - OKC - 000198 - OKLAHOMA_CITY - OK - US - 35.36 - -97.61 - 0 - 0 - - - - SLN - 000251 - SALINA - KS - US - 38.93 - -97.62 - 0 - 0 - - - - AUS - 000020 - AUSTIN - TX - US - 30.30 - -97.70 - 0 - 0 - - - - END - 000321 - VANCE_AFB - OK - US - 36.35 - -97.92 - 0 - 0 - - - - OBH - 000358 - WOLBACH - NE - US - 41.38 - -98.35 - 0 - 0 - - - - ABR - 000003 - ABERDEEN - SD - US - 45.42 - -98.37 - 0 - 0 - - - - SAT - 000238 - SAN_ANTONIO - TX - US - 29.64 - -98.46 - 0 - 0 - - - - SPS - 000254 - WICHITA_FALLS - TX - US - 33.99 - -98.59 - 0 - 0 - - - - ONL - 000200 - ONEILL - NE - US - 42.47 - -98.69 - 0 - 0 - - - - LRD - 000161 - LAREDO - TX - US - 27.48 - -99.42 - 0 - 0 - - - - JCT - 000144 - JUNCTION - TX - US - 30.60 - -99.82 - 0 - 0 - - - - ABI - 000001 - ABILENE - TX - US - 32.48 - -99.86 - 0 - 0 - - - - GAG - 000110 - GAGE - OK - US - 36.34 - -99.88 - 0 - 0 - - - - ANW - 000282 - AINSWORTH - NE - US - 42.57 - -99.99 - 0 - 0 - - - - PIR - 000214 - PIERRE - SD - US - 44.40 - -100.17 - 0 - 0 - - - - HLC - 000335 - HILL_CITY - KS - US - 39.26 - -100.23 - 0 - 0 - - - - CDS - 000051 - CHILDRESS - TX - US - 34.37 - -100.28 - 0 - 0 - - - - SJT - 000248 - SAN_ANGELO - TX - US - 31.38 - -100.46 - 0 - 0 - - - - MCK - 000351 - MC_COOK - NE - US - 40.20 - -100.59 - 0 - 0 - - - - BIS - 000032 - BISMARK - ND - US - 46.77 - -100.67 - 0 - 0 - - - - LBF - 000152 - NORTH_PLATTE - NE - US - 41.13 - -100.72 - 0 - 0 - - - - GCK - 000112 - GARDEN_CITY - KS - US - 37.92 - -100.73 - 0 - 0 - - - - DLF - 000309 - LAUGHLIN_AFB - TX - US - 29.36 - -100.77 - 0 - 0 - - - - LBL - 000153 - LIBERAL - KS - US - 37.04 - -100.97 - 0 - 0 - - - - MOT - 000187 - MINOT - ND - US - 48.26 - -101.29 - 0 - 0 - - - - AMA - 000014 - AMARILLO - TX - US - 35.29 - -101.64 - 0 - 0 - - - - GLD - 000118 - GOODLAND - KS - US - 39.39 - -101.69 - 0 - 0 - - - - DPR - 000077 - DUPREE - SD - US - 45.08 - -101.72 - 0 - 0 - - - - LBB - 000151 - LUBBOCK_INTERNATIONAL - TX - US - 33.70 - -101.92 - 0 - 0 - - - - MAF - 000167 - MIDLAND - TX - US - 32.02 - -102.18 - 0 - 0 - - - - LAA - 000146 - LAMAR - CO - US - 38.20 - -102.69 - 0 - 0 - - - - DIK - 000074 - DICKINSIN - ND - US - 46.86 - -102.77 - 0 - 0 - - - - TXO - 000385 - TEXICO_NM/BOVINA - TX - US - 34.50 - -102.84 - 0 - 0 - - - - SNY - 000379 - SIDNEY - NE - US - 41.10 - -102.98 - 0 - 0 - - - - FST - 000329 - FT_STOCKTON - TX - US - 30.95 - -102.98 - 0 - 0 - - - - RAP - 000224 - RAPID_CITY - SD - US - 43.98 - -103.01 - 0 - 0 - - - - AKO - 000011 - AKRON - CO - US - 40.16 - -103.18 - 0 - 0 - - - - INK - 000342 - WINK - TX - US - 31.87 - -103.24 - 0 - 0 - - - - BFF - 000026 - SCOTTSBLUFF - NE - US - 41.89 - -103.48 - 0 - 0 - - - - TBE - 000261 - TOBE - CO - US - 37.27 - -103.60 - 0 - 0 - - - - TCC - 000262 - TUCUMCARI - NM - US - 35.18 - -103.60 - 0 - 0 - - - - ISN - 000140 - WILLISTON - ND - US - 48.18 - -103.63 - 0 - 0 - - - - MRF - 000190 - MARFA - TX - US - 30.30 - -103.95 - 0 - 0 - - - - PUB - 000220 - PUEBLO - CO - US - 38.29 - -104.43 - 0 - 0 - - - - ROW - 000233 - ROSWELL - NM - US - 33.34 - -104.62 - 0 - 0 - - - - DEN - 000071 - DENVER - CO - US - 39.81 - -104.66 - 0 - 0 - - - - CYS - 000301 - CHEYENNE - WY - US - 41.21 - -104.77 - 0 - 0 - - - - CIM - 000297 - CIMARRON - NM - US - 36.49 - -104.87 - 0 - 0 - - - - LVS - 000163 - LAS_VEGAS - NM - US - 35.66 - -105.14 - 0 - 0 - - - - LAR - 000148 - LARAMIE - WY - US - 41.33 - -105.72 - 0 - 0 - - - - ALS - 000013 - ALAMOSA - CO - US - 37.35 - -105.82 - 0 - 0 - - - - MLS - 000182 - MILES_CITY - MT - US - 46.38 - -105.95 - 0 - 0 - - - - DDY - 000307 - CASPER - WY - US - 43.09 - -106.28 - 0 - 0 - - - - ELP - 000090 - EL_PASO - TX - US - 31.82 - -106.28 - 0 - 0 - - - - CZI - 000302 - CRAZY_WOMAN - WY - US - 44.00 - -106.44 - 0 - 0 - - - - GGW - 000116 - GLASGOW - MT - US - 48.22 - -106.63 - 0 - 0 - - - - ABQ - 000002 - ALBUQUERQUE - NM - US - 35.04 - -106.82 - 0 - 0 - - - - DBL - 000304 - EAGLE - CO - US - 39.44 - -106.90 - 0 - 0 - - - - HBU - 000333 - GUNNISON - CO - US - 38.45 - -107.04 - 0 - 0 - - - - SHR - 000246 - SHERIDAN - WY - US - 44.84 - -107.06 - 0 - 0 - - - - TCS - 000263 - TRUTH_OR_CONSEQUENCES - NM - US - 33.28 - -107.28 - 0 - 0 - - - - CHE - 000054 - HAYDEN - CO - US - 40.52 - -107.31 - 0 - 0 - - - - DMN - 000076 - DEMING - NM - US - 32.28 - -107.60 - 0 - 0 - - - - YYN - 000400 - SWIFT_CURRENT - SA - CN - 50.28 - -107.68 - 0 - 0 - - - - FMN - 000103 - FARMINGTON - NM - US - 36.75 - -108.10 - 0 - 0 - - - - BOY - 000290 - BOYSEN_RESV. - WY - US - 43.46 - -108.30 - 0 - 0 - - - - BIL - 000031 - BILLINGS - MT - US - 45.81 - -108.63 - 0 - 0 - - - - JNC - 000347 - GRAND_JUNCTION - CO - US - 39.06 - -108.79 - 0 - 0 - - - - DVC - 000082 - DOVE_CREEK - CO - US - 37.81 - -108.93 - 0 - 0 - - - - OCS - 000359 - ROCKSPRINGS - WY - US - 41.59 - -109.02 - 0 - 0 - - - - SJN - 000247 - ST_JOHNS - AZ - US - 34.42 - -109.14 - 0 - 0 - - - - SSO - 000256 - SAN_SIMON - AZ - US - 32.27 - -109.26 - 0 - 0 - - - - LWT - 000165 - LEWISTOWN - MT - US - 47.05 - -109.61 - 0 - 0 - - - - HVR - 000129 - HAVRE - MT - US - 48.54 - -109.77 - 0 - 0 - - - - BPI - 000291 - BIG_PINEY - WY - US - 42.58 - -110.11 - 0 - 0 - - - - MTU - 000196 - MYTON - UT - US - 40.15 - -110.13 - 0 - 0 - - - - HVE - 000128 - HANKSVILLE - UT - US - 38.42 - -110.70 - 0 - 0 - - - - YXH - 000399 - MEDICINE_HAT - AB - CN - 50.02 - -110.72 - 0 - 0 - - - - JAC - 000141 - JACKSON - WY - US - 43.62 - -110.73 - 0 - 0 - - - - INW - 000138 - WINSLOW - AZ - US - 35.06 - -110.80 - 0 - 0 - - - - TUS - 000269 - TUCSON - AZ - US - 32.10 - -110.92 - 0 - 0 - - - - TBC - 000260 - TUBA_CITY - AZ - US - 36.12 - -111.27 - 0 - 0 - - - - GTF - 000123 - GREAT_FALLS - MT - US - 47.45 - -111.41 - 0 - 0 - - - - HLN - 000336 - HELENA - MT - US - 46.61 - -111.95 - 0 - 0 - - - - PHX - 000211 - PHOENIX - AZ - US - 33.43 - -112.02 - 0 - 0 - - - - SLC - 000249 - SALT_LAKE_CITY - UT - US - 40.85 - -111.98 - 0 - 0 - - - - DBS - 000305 - DUBOIS - ID - US - 44.09 - -112.21 - 0 - 0 - - - - BCE - 000023 - BRYCE_CANYON - UT - US - 37.69 - -112.30 - 0 - 0 - - - - MLD - 000352 - MALAD_CITY - ID - US - 42.20 - -112.45 - 0 - 0 - - - - DRK - 000313 - PRESCOTT - AZ - US - 34.70 - -112.48 - 0 - 0 - - - - DTA - 000080 - DELTA - UT - US - 39.30 - -112.51 - 0 - 0 - - - - DLN - 000311 - DILLON - MT - US - 45.25 - -112.55 - 0 - 0 - - - - PIH - 000213 - POCATELLO - ID - US - 42.87 - -112.65 - 0 - 0 - - - - YQL - 000392 - LETHBRIDGE - AB - CN - 49.63 - -112.80 - 0 - 0 - - - - PGS - 000210 - PEACH_SPRINGS - AZ - US - 35.62 - -113.54 - 0 - 0 - - - - BVL - 000046 - BOONEVILLE - UT - US - 40.73 - -113.76 - 0 - 0 - - - - LKT - 000157 - SALMON - ID - US - 45.02 - -114.08 - 0 - 0 - - - - FCA - 000100 - KALISPELL - MT - US - 48.21 - -114.18 - 0 - 0 - - - - ILC - 000134 - WILSON_CREEK - NV - US - 38.25 - -114.39 - 0 - 0 - - - - EED - 000087 - NEEDLES - CA - US - 34.77 - -114.47 - 0 - 0 - - - - TWF - 000271 - TWIN_FALLS - ID - US - 42.48 - -114.49 - 0 - 0 - - - - BZA - 000294 - YUMA - AZ - US - 32.77 - -114.60 - 0 - 0 - - - - ELY - 000091 - ELY - NV - US - 39.30 - -114.85 - 0 - 0 - - - - LAS - 000149 - LAS_VEGAS - NV - US - 36.08 - -115.16 - 0 - 0 - - - - MLP - 000181 - MULLAN_PASS - ID - US - 47.46 - -115.65 - 0 - 0 - - - - YXC - 000398 - CRANBROOK - BC - CN - 49.60 - -115.78 - 0 - 0 - - - - TRM - 000383 - THERMAL - CA - US - 33.63 - -116.16 - 0 - 0 - - - - BOI - 000039 - BOISE - ID - US - 43.55 - -116.19 - 0 - 0 - - - - DNJ - 000312 - MC_CALL - ID - US - 44.77 - -116.21 - 0 - 0 - - - - HEC - 000334 - HECTOR - CA - US - 34.80 - -116.46 - 0 - 0 - - - - BTY - 000043 - BEATTY - NV - US - 36.80 - -116.75 - 0 - 0 - - - - BAM - 000286 - BATTLE_MOUNTAIN - NV - US - 40.57 - -116.92 - 0 - 0 - - - - MZB - 000354 - MISSION_BAY - CA - US - 32.78 - -117.23 - 0 - 0 - - - - GEG - 000113 - SPOKANE - WA - US - 47.56 - -117.63 - 0 - 0 - - - - OAL - 000357 - COALDALE - NV - US - 38.00 - -117.77 - 0 - 0 - - - - BKE - 000288 - BAKER - OR - US - 44.84 - -117.81 - 0 - 0 - - - - REO - 000227 - ROME - OR - US - 42.59 - -117.87 - 0 - 0 - - - - LAX - 000150 - LOS_ANGELES_INTL - CA - US - 33.93 - -118.43 - 0 - 0 - - - - PDT - 000207 - PENDLETON - OR - US - 45.70 - -118.94 - 0 - 0 - - - - EHF - 000317 - BAKERSFIELD - CA - US - 35.48 - -119.10 - 0 - 0 - - - - EPH - 000324 - EPHRATA - WA - US - 47.38 - -119.42 - 0 - 0 - - - - FMG - 000327 - RENO - NV - US - 39.53 - -119.66 - 0 - 0 - - - - RZS - 000375 - SANTA_BARBARA - CA - US - 34.51 - -119.77 - 0 - 0 - - - - CZQ - 000303 - FRESNO - CA - US - 36.88 - -119.82 - 0 - 0 - - - - YKM - 000279 - YAKIMA - WA - US - 46.57 - -120.45 - 0 - 0 - - - - LKV - 000158 - LAKEVIEW - OR - US - 42.49 - -120.51 - 0 - 0 - - - - YDC - 000389 - PRINCETON - BC - CN - 49.47 - -120.52 - 0 - 0 - - - - MOD - 000186 - MODESTO - CA - US - 37.63 - -120.96 - 0 - 0 - - - - DSD - 000314 - REDMOND - WA - US - 44.25 - -121.30 - 0 - 0 - - - - SAC - 000236 - SACRAMENTO - CA - US - 38.44 - -121.55 - 0 - 0 - - - - SNS - 000253 - SALINAS - CA - US - 36.66 - -121.60 - 0 - 0 - - - - OAK - 000356 - OAKLAND - CA - US - 37.73 - -122.22 - 0 - 0 - - - - RBL - 000225 - RED_BLUFF - CA - US - 40.10 - -122.24 - 0 - 0 - - - - SEA - 000243 - SEATTLE - WA - US - 47.44 - -122.31 - 0 - 0 - - - - BLI - 000035 - BELLINGHAM - WA - US - 48.95 - -122.58 - 0 - 0 - - - - PDX - 000208 - PORTLAND - OR - US - 45.58 - -122.60 - 0 - 0 - - - - PYE - 000371 - POINT_REYES - CA - US - 38.08 - -122.87 - 0 - 0 - - - - OED - 000362 - MEDFORD - OR - US - 42.48 - -122.91 - 0 - 0 - - - - EUG - 000093 - EUGENE - OR - US - 44.12 - -123.22 - 0 - 0 - - - - ENI - 000323 - UKIAH - CA - US - 39.05 - -123.27 - 0 - 0 - - - - ONP - 000201 - NEWPORT - OR - US - 44.58 - -124.06 - 0 - 0 - - - - HQM - 000127 - HOQUIAM - WA - US - 46.95 - -124.15 - 0 - 0 - - - - FOT - 000106 - FORTUNA - CA - US - 40.67 - -124.23 - 0 - 0 - - - - TOU - 000265 - NEAH_BAY - WA - US - 48.30 - -124.63 - 0 - 0 - - - - YQV - 000402 - YORKTON - SA - CN - 51.27 - -102.47 - 0 - 0 - - - - ANN - 0 - ANNETTE_ISLAND - AK - US - 55.05 - -131.57 - 0 - 0 - - - - LVD - 0 - LEVEL_ISLAND - AK - US - 56.47 - -133.08 - 0 - 0 - - - - BKA - 0 - BIORKA_ISLAND - AK - US - 56.86 - -135.55 - 0 - 0 - - - - SSR - 0 - SISTERS_ISLAND - AK - US - 58.17 - -135.25 - 0 - 0 - - - - JNU - 0 - JUNEAU - AK - US - 58.35 - -134.58 - 0 - 0 - - - - YAK - 0 - YAKUTAT - AK - US - 59.50 - -139.67 - 0 - 0 - - - - MDO - 0 - MIDDLETON_ISLAND - AK - US - 59.45 - -146.30 - 0 - 0 - - - - JOH - 0 - JOHNSTONE_POINT - AK - US - 60.48 - -146.60 - 0 - 0 - - - - ODK - 0 - KODIAK - AK - US - 57.75 - -152.50 - 0 - 0 - - - - HOM - 0 - HOMER - AK - US - 59.65 - -151.48 - 0 - 0 - - - - ENA - 0 - KENAI - AK - US - 60.57 - -151.25 - 0 - 0 - - - - ANC - 0 - ANCHORAGE - AK - US - 61.17 - -150.00 - 0 - 0 - - - - BGQ - 0 - BIG_LAKE - AK - US - 61.53 - -149.82 - 0 - 0 - - - - ORT - 0 - NORTHWAY - AK - US - 62.97 - -141.93 - 0 - 0 - - - - GKN - 0 - GULKANA - AK - US - 62.15 - -145.45 - 0 - 0 - - - - TKA - 0 - TALKEETNA - AK - US - 62.32 - -150.10 - 0 - 0 - - - - SQA - 0 - SPARREVOHN - AK - US - 61.10 - -155.63 - 0 - 0 - - - - DLG - 0 - DILLINGHAM - AK - US - 59.05 - -158.50 - 0 - 0 - - - - AKN - 0 - KING_SALMON - AK - US - 58.68 - -156.65 - 0 - 0 - - - - PDN - 0 - PORT_HEIDEN - AK - US - 56.95 - -158.65 - 0 - 0 - - - - CDB - 0 - COLD_BAY - AK - US - 55.20 - -162.73 - 0 - 0 - - - - DUT - 0 - DUTCH_HARBOR - AK - US - 53.90 - -166.55 - 0 - 0 - - - - NUD - 0 - ADAK - AK - US - 51.88 - -176.65 - 0 - 0 - - - - SYA - 0 - SHEMYA - AK - US - 52.72 - 174.12 - 0 - 0 - - - - SPY - 0 - ST_PAUL_ISLAND - AK - US - 57.17 - -170.22 - 0 - 0 - - - - EHM - 0 - CAPE_NEWENHAM - AK - US - 58.66 - -162.07 - 0 - 0 - - - - HPB - 0 - HOOPER_BAY - AK - US - 61.52 - -166.14 - 0 - 0 - - - - BET - 0 - BETHEL - AK - US - 60.78 - -161.83 - 0 - 0 - - - - ANI - 0 - ANIAK - AK - US - 61.59 - -159.61 - 0 - 0 - - - - SMA - 0 - ST_MARYS - AK - US - 62.06 - -163.30 - 0 - 0 - - - - UNK - 0 - UNALAKLEET - AK - US - 63.88 - -160.80 - 0 - 0 - - - - ULL - 0 - KUKULIAK - AK - US - 63.70 - -170.48 - 0 - 0 - - - - MCG - 0 - MC_GRATH - AK - US - 62.95 - -155.60 - 0 - 0 - - - - ENN - 0 - NENANA - AK - US - 64.55 - -149.07 - 0 - 0 - - - - FAI - 0 - FAIRBANKS - AK - US - 64.82 - -147.85 - 0 - 0 - - - - BIG - 0 - BIG_DELTA - AK - US - 64.00 - -145.72 - 0 - 0 - - - - FYU - 0 - FORT_YUKON - AK - US - 66.57 - -145.25 - 0 - 0 - - - - BTT - 0 - BETTLES - AK - US - 66.92 - -151.53 - 0 - 0 - - - - TAL - 0 - TANANA - AK - US - 65.18 - -152.18 - 0 - 0 - - - - CQR - 0 - CHANDALAR_LAKE - AK - US - 67.50 - -148.47 - 0 - 0 - - - - SCC - 0 - DEADHORSE - AK - US - 70.20 - -148.47 - 0 - 0 - - - - BTI - 0 - BARTER_ISLAND - AK - US - 70.13 - -143.57 - 0 - 0 - - - - BRW - 0 - BARROW - AK - US - 71.28 - -156.77 - 0 - 0 - - - - GAL - 0 - GALENA - AK - US - 64.73 - -156.93 - 0 - 0 - - - - OME - 0 - NOME - AK - US - 64.52 - -165.45 - 0 - 0 - - - - OTZ - 0 - KOTZEBUE - AK - US - 66.88 - -162.60 - 0 - 0 - - - - WLK - 0 - SELAWIK - AK - US - 66.60 - -160.00 - 0 - 0 - - - - HSL - 0 - HUSLIA - AK - US - 65.71 - -156.37 - 0 - 0 - - - - BSF - 0 - BRADSHAW - HI - US - 19.76 - -155.39 - 0 - 0 - - - - UPP - 0 - UPOLU_POINT - HI - US - 20.20 - -155.84 - 0 - 0 - - - - ITO - 0 - HILO - HI - US - 19.72 - -155.01 - 0 - 0 - - - - HNL - 0 - HONOLULU - HI - US - 21.33 - -157.93 - 0 - 0 - - - - OGG - 0 - MAUI - HI - US - 20.91 - -156.42 - 0 - 0 - - - - NDB - 0 - VALLEY_ISLAND - HI - US - 20.88 - -156.44 - 0 - 0 - - - - MUE - 0 - KAMUELA - HI - US - 20.00 - -155.67 - 0 - 0 - - - - NGF - 0 - KANEOHE_BAY - HI - US - 21.45 - -157.76 - 0 - 0 - - - - MKK - 0 - MOLOKAI - HI - US - 21.14 - -157.17 - 0 - 0 - - - - NBS - 0 - BARKING_SANDS - HI - US - 22.04 - -159.79 - 0 - 0 - - - - CKH - 0 - KOKO_HEAD - HI - US - 21.27 - -157.70 - 0 - 0 - - - - IAI - 0 - KONA - HI - US - 19.65 - -156.02 - 0 - 0 - - - - LLD - 0 - LANAI - HI - US - 20.77 - -156.97 - 0 - 0 - - - - LNY - 0 - LANAI_CITY - HI - US - 20.76 - -156.97 - 0 - 0 - - - - LIH - 0 - LIHUE - HI - US - 21.97 - -159.34 - 0 - 0 - - - - SOK - 0 - SOUTH_KAUAI - HI - US - 21.90 - -159.53 - 0 - 0 - - - - RSW - 0 - LEE_COUNTY - FL - US - 26.53 - -81.78 - 0 - 0 - - - - PZD - 0 - PECAN - GA - US - 31.66 - -84.29 - 0 - 0 - - - - IIU - 0 - LOUISVILLE - KY - US - 38.10 - -85.58 - 0 - 0 - - - - HRV - 0 - HARVEY - LA - US - 29.85 - -90.00 - 0 - 0 - - - - MCI - 0 - KANSAS_CITY - MO - US - 39.29 - -94.74 - 0 - 0 - - - - TTT - 0 - MAVERICK - TX - US - 32.87 - -97.04 - 0 - 0 - - - - CWK - 0 - CENTEX - TX - US - 30.38 - -97.53 - 0 - 0 - - - - CME - 0 - CHISUM - NM - US - 33.34 - -104.62 - 0 - 0 - - - - FTI - 0 - FT_UNION - NM - US - 35.66 - -105.14 - 0 - 0 - - - - RSK - 0 - RATTLESNAKE - NM - US - 36.75 - -108.10 - 0 - 0 - - - - HUH - 0 - WHATCOM - WA - US - 48.95 - -122.58 - 0 - 0 - - - - ASRF - 948640 - MELBOURNE - VC - AU - -37.73 - 144.90 - 81 - 0 - - - - AYPY - 940350 - PORT_MORESBY_INTL - - NG - -9.43 - 147.22 - 47 - 0 - - - - BGSF - 042310 - SONDRE_STROMFJORD - - GL - 67.00 - -50.80 - 53 - 0 - - - - BIRK - 040300 - REYKJAVIK - - IL - 64.13 - -21.90 - 61 - 0 - - - - CWEG - 999999 - ALBERTA_WEATHER_CENTRE - - CN - 53.50 - -113.50 - -9999 - 0 - - - - CWLW - 712030 - KELOWNA - BC - CN - 49.95 - -119.40 - 456 - 0 - - - - CWNT - 712500 - TURTLE_MOUNTAIN - AB - CN - 49.58 - -114.42 - 2164 - 0 - - - - CWTO - 716380 - TORONTO_A_E_S__HQ - ON - CN - 43.78 - -79.47 - 187 - 0 - - - - CWUL - 999999 - QUEBEC_FCST_OFFICE - - CN - 45.50 - -73.68 - -9999 - 0 - - - - CYQX - 718030 - GANDER_INTL_AIRPORT - NF - CN - 48.95 - -54.57 - 151 - 0 - - - - DTTA - 607150 - TUNIS/CARTHAGE - - TS - 36.83 - 10.23 - 4 - 0 - - - - EBBR - 064510 - BRUSSELS_NATIONAL - - BX - 50.90 - 4.53 - 58 - 0 - - - - EDMM - 108680 - MUENCHEN - - DL - 48.25 - 11.58 - 484 - 0 - - - - EDZB - 102380 - BERGEN/HOHNE - - DL - 52.82 - 9.93 - 70 - 0 - - - - EDZE - 104100 - ESSEN/MULHEIM - - DL - 51.40 - 6.97 - 161 - 0 - - - - EDZF - 106370 - FRANKFURT/MAIN - - DL - 50.05 - 8.58 - 112 - 0 - - - - EDZH - 107710 - GAERMERSDORF - - DL - 49.43 - 11.90 - 419 - 0 - - - - EDZM - 108680 - MUENCHEN - - DL - 48.25 - 11.58 - 484 - 0 - - - - EETN - 260380 - TALLIN - - BY - 59.35 - 24.80 - 44 - 0 - - - - EFHK - 029740 - HELSINKI/VANTAA - - FI - 60.32 - 24.97 - 56 - 0 - - - - EFRO - 028450 - ROVANIEMI(CIV/MIL) - - FI - 66.57 - 25.83 - 201 - 0 - - - - EGJJ - 038950 - JERSEY_AIRPORT - - UK - 49.22 - -2.20 - 84 - 0 - - - - EHAM - 062400 - AMSTERDAM/SCHIPHOL - - NL - 52.30 - 4.77 - -2 - 0 - - - - EHDB - 062600 - DE_BILT - - NL - 52.10 - 5.18 - 4 - 0 - - - - EINN - 039620 - SHANNON_AIRPORT - - IE - 52.70 - -8.92 - 20 - 0 - - - - EKCH - 061800 - COPENHAGEN/KASTRUP - - DN - 55.63 - 12.67 - 5 - 0 - - - - ENMI - 999999 - OSLO - - NO - 59.50 - 10.70 - -9999 - 0 - - - - ENVN - 011520 - BODO - - NO - 67.25 - 14.40 - 8 - 0 - - - - ENVV - 014150 - STAVANGER - - NO - 58.87 - 5.67 - 34 - 0 - - - - EPWA - 123750 - WARSAW/OKECIE - - PL - 52.17 - 20.97 - 107 - 0 - - - - ESNN - 023660 - SUNDSVALL/HARNOSAND - - SN - 62.53 - 17.45 - 10 - 0 - - - - ESSA - 024600 - STOCKHOLM/ARLANDA - - SN - 59.65 - 17.95 - 61 - 0 - - - - EVRA - 999999 - RIGA_AIRPORT - LE - BY - 56.92 - 23.97 - 10 - 0 - - - - EYVI - 267300 - VILNIUS_INTL - MI - BY - 54.63 - 25.28 - 156 - 0 - - - - FAJS - 683680 - JAN_SMUTS - - ZA - -26.13 - 28.23 - 1700 - 0 - - - - FCBB - 644500 - BRAZZAVILLE/MAYA-MA - - CG - -4.25 - 15.25 - 316 - 0 - - - - FTTJ - 647000 - NDJAMENA(CIV/MIL) - - CD - 12.13 - 15.03 - 295 - 0 - - - - GCGC - 999999 - CANARY_ISLANDS - - CR - 28.50 - -16.00 - -9999 - 0 - - - - GMMC - 601550 - CASABLANCA - - MC - 33.57 - -7.67 - 62 - 0 - - - - HECA - 623660 - CAIRO_INTL_AIRPORT - - EG - 30.13 - 31.40 - 74 - 0 - - - - LBSF - 156140 - SOFIA - - BU - 42.65 - 23.38 - 595 - 0 - - - - LBWN - 155520 - VARNA - - BU - 43.20 - 27.92 - 43 - 0 - - - - LCLK - 176090 - LARNACA/LARNAX_ARPT - - CY - 34.88 - 33.63 - 2 - 0 - - - - LDZA - 131310 - ZAGREB/PLESO - - RH - 45.73 - 16.07 - 107 - 0 - - - - LDZO - 999999 - ZAGREB/PLESO - - RH - 45.73 - 16.07 - 107 - 0 - - - - LECB - 081810 - BARCELONA - - SP - 41.28 - 2.07 - 6 - 0 - - - - LEMM - 999999 - MADRID_CNM - - SP - 40.12 - -3.53 - -9999 - 0 - - - - LFBD - 075100 - BORDEAUX/MERIGNAC - - FR - 44.83 - -.70 - 61 - 0 - - - - LFMM - 076500 - MARSEILLE - - FR - 43.45 - 5.22 - 20 - 0 - - - - LFPW - 999999 - PARIS_MET_CENTER - - FR - 48.83 - 2.33 - 75 - 0 - - - - LFRN - 071300 - RENNES/ST.JACQUES - - FR - 48.07 - -1.73 - 37 - 0 - - - - LFST - 071900 - STRASBOURG/ENTZHEIM - - FR - 48.55 - 7.63 - 154 - 0 - - - - LGAT - 167160 - ATHENS/HELLENKION - - GR - 37.90 - 23.73 - 15 - 0 - - - - LHBP - 128390 - BUDAPEST/FERIHEGY - - HU - 47.43 - 19.27 - 185 - 0 - - - - LIMM - 160800 - MILANO/LINATE - - IY - 45.43 - 9.27 - 103 - 0 - - - - LJLJ - 130140 - LJUBLJANA/BRNIK - - LJ - 46.22 - 14.48 - 385 - 0 - - - - LKPR - 115180 - PRAGUE/RUZYNE - - CZ - 50.10 - 14.28 - 365 - 0 - - - - LLBG - 401800 - BEN-GURION(CIV/MIL) - - IS - 32.00 - 34.90 - 49 - 0 - - - - LMML - 165970 - LUQA/MALTA - - ML - 35.85 - 14.48 - 91 - 0 - - - - LOWW - 110360 - VIENNA/SCHWECHAT - - OS - 48.12 - 16.57 - 190 - 0 - - - - LPPT - 085360 - LISBON/PORTELA - - PO - 38.78 - -9.13 - 123 - 0 - - - - LROM - 154210 - BUCHAREST/OTOPENI - - RO - 44.55 - 26.10 - 95 - 0 - - - - LROP - 154210 - BUCHAREST/OTOPENI - - RO - 44.55 - 26.10 - 95 - 0 - - - - LSZH - 066700 - ZURICH-KLOTEN_(AUT) - - SW - 47.48 - 8.53 - 432 - 0 - - - - LTAC - 171280 - ANKARA/ESENBOGA - - TU - 40.11 - 32.97 - 949 - 0 - - - - LTBA - 170600 - ISTANBUL/ATATURK_AB - - TU - 40.97 - 28.82 - 37 - 0 - - - - LUKK - 338387 - KISHINAU - - UR - 46.93 - 28.93 - 122 - 0 - - - - LWSK - 135860 - SKOPJE/PETROVAC - - MK - 41.97 - 21.65 - 239 - 0 - - - - LYBE - 132720 - BELGRADE/SURCIN - - YG - 44.82 - 20.28 - 99 - 0 - - - - LZIB - 118160 - BRATISLAVA_IVANKA - - CZ - 48.20 - 17.20 - 130 - 0 - - - - NFFN - 916800 - NANDI/NADI_INTL - - FJ - -17.75 - 177.45 - 18 - 0 - - - - NZDT - 999999 - NEW_ZEALAND - - NZ - -41.00 - 172.50 - -9999 - 0 - - - - NZKL - 999999 - AUCKLAND - - NZ - -37.02 - 174.80 - 6 - 0 - - - - MHTG - 787200 - TEGUCIGALPA/TONCONT - - HO - 14.05 - -87.22 - 994 - 0 - - - - MPTO - 787920 - TOCUMEN/GEN._OMAR - - PM - 9.05 - -79.37 - 11 - 0 - - - - OBBB - 999999 - BAHRAIN_INTL_ARPT - - BN - 26.27 - 50.65 - 2 - 0 - - - - OBBI - 411500 - BAHRAIN_INTL_ARPT - - BN - 26.27 - 50.65 - 2 - 0 - - - - OEJD - 999999 - JEDDAH - - SD - 21.30 - 39.20 - -9999 - 0 - - - - OEJN - 410240 - JEDDAH/KING_ABD - - SD - 21.67 - 39.15 - 12 - 0 - - - - OIII - 407540 - TEHRAN/MEHRABAD_AFB - - IR - 35.68 - 51.35 - 1191 - 0 - - - - OIIX - 999999 - TEHRAN - - IR - 35.68 - 51.35 - 1191 - 0 - - - - OLBA - 401000 - BEIRUT_(CIV/MIL) - - LB - 33.82 - 35.48 - 19 - 0 - - - - OPKC - 417800 - KARACHI_INTL_ARPT - - PK - 24.90 - 67.13 - 22 - 0 - - - - OPLA - 416410 - LAHORE(CIV/MIL) - - PK - 31.52 - 74.40 - 217 - 0 - - - - OYSN - 413440 - SANA'A - - YE - 15.52 - 44.18 - 2190 - 0 - - - - PAFA - 702610 - FAIRBANKS_INTL_ARPT_(ASOS) - AK - US - 64.82 - -147.87 - 138 - 0 - - - - PAJN - 703810 - JUNEAU_INTL_AIRPORT_(ASOS) - AK - US - 58.37 - -134.58 - 7 - 0 - - - - PANC - 702730 - ANCHORAGE_INTL_ARPT_(ASOS) - AK - US - 61.17 - -150.02 - 40 - 0 - - - - RKSI - 470699 - CHAJANG_NI_(K-ARMY) - - KO - 37.87 - 127.18 - 100 - 0 - - - - RCTP - 466860 - TAIPEI/CHIANG_KAI_SHEK - - TW - 25.08 - 121.22 - 33 - 0 - - - - SABE - 875820 - AEROPARQUE(CIV/MIL) - - AG - -34.57 - -58.42 - 6 - 0 - - - - SACO - 873440 - CORDOBA_AIRPORT - - AG - -31.32 - -64.22 - 474 - 0 - - - - SAEZ - 875760 - BUENOS_AIRES/EZEIZA - - AG - -34.82 - -58.53 - 20 - 0 - - - - SAME - 874180 - MENDOZA/EL_PLUMERIL - - AG - -32.83 - -68.78 - 704 - 0 - - - - SARE - 871550 - RESISTENCIA_AIRPORT - - AG - -27.45 - -59.05 - 52 - 0 - - - - SBBE - 821930 - BELEM/VAL_DE_CAES - - BZ - -1.38 - -48.48 - 16 - 0 - - - - SBBR - 833780 - BRASILIA_(CIV/MIL) - - BZ - -15.87 - -47.93 - 1061 - 0 - - - - SBBS - 833780 - BRASILIA - - BZ - -15.87 - -47.93 - 1061 - 0 - - - - SBCT - 838400 - CURITIBA/AFONSO_PEN - - BZ - -25.52 - -49.17 - 908 - 0 - - - - SBCW - 838400 - CURITIBA/AFONSO_PEN - - BZ - -25.52 - -49.17 - 908 - 0 - - - - SBEG - 821110 - EDUARDO_GOMES_INTL - - BZ - -3.03 - -60.05 - 2 - 0 - - - - SBGL - 837460 - GALEAO/RIO(CIV/MIL) - - BZ - -22.82 - -43.25 - 6 - 0 - - - - SBGR - 837753 - GUARULHOS_(CIV/MIL) - - BZ - -23.43 - -46.47 - 750 - 0 - - - - SBRF - 828990 - RECIFE/GUARARAPES - - BZ - -8.07 - -34.85 - 19 - 0 - - - - SCCI - 859340 - PUNTA_ARENAS/PRES_C - - CH - -53.00 - -70.85 - 37 - 0 - - - - SCEL - 855740 - PUDAHUEL/ARTURO_MER - - CH - -33.38 - -70.78 - 476 - 0 - - - - SCFA - 854420 - ANTOFAGASTA/CERRO - - CH - -23.43 - -70.43 - 120 - 0 - - - - SCTE - 857990 - PUERTO_MONTT/TEPUAL - - CH - -41.42 - -73.08 - 86 - 0 - - - - SLLP - 852010 - LA_PAZ/JFK_INTL - - BO - -16.52 - -68.18 - 4014 - 0 - - - - SOCA - 814050 - CAYENNE/ROCHAMBEAU - - FG - 4.83 - -52.37 - 9 - 0 - - - - SPIM - 846280 - LIMA/JORGE_CHAVEZ - - PR - -12.00 - -77.12 - 13 - 0 - - - - TNCC - 789880 - HATO_ARPT_(CIV/MIL) - - NU - 12.20 - -68.97 - 67 - 0 - - - - TTPP - 789700 - PIARCO_INTL_AIRPORT - - TD - 10.62 - -61.35 - 15 - 0 - - - - UAAA - 368700 - ALMA-ATA - AL - RA - 43.23 - 76.93 - 847 - 0 - - - - UAFM - 835300 - FRUNZE - - RA - 42.85 - 74.53 - 760 - 0 - - - - UATT - 352290 - AKTJUBINSK - AL - KZ - 50.30 - 57.23 - 227 - 0 - - - - UBBB - 378640 - BAKU/BINE_ARPT - TB - AJ - 40.45 - 50.07 - -1 - 0 - - - - UGEE - 377890 - YEREVAN/ZAPADNY - TB - RS - 40.13 - 44.47 - 907 - 0 - - - - UGGG - 375490 - TBILISI/NOVO-AL - TB - RS - 41.68 - 44.95 - 490 - 0 - - - - UHBB - 315100 - BLAGOVESHCHENSK - HA - RA - 50.27 - 127.50 - 137 - 0 - - - - UHHH - 317350 - KHABAROVSK/NOVY - HA - RA - 48.52 - 135.16 - 72 - 0 - - - - UHNN - 999999 - NIKOLAEVSK-NA-AMURE_CENTER - HA - RA - 53.15 - 140.70 - 68 - 0 - - - - UHWW - 319600 - VLADIVOSTOK - HA - RA - 43.12 - 131.94 - 184 - 0 - - - - UHPP - 325400 - PETROPAVLOVSK-KAMCA - HA - RA - 52.97 - 158.75 - 24 - 0 - - - - UHSS - 321500 - JUZNO-SAHALINSK - HA - RA - 46.92 - 142.73 - 31 - 0 - - - - UIBB - 303090 - BRATSK - - RA - 56.07 - 101.83 - 489 - 0 - - - - UIII - 307100 - IRKUTSK - IR - RA - 52.27 - 104.35 - 513 - 0 - - - - UIKK - 302300 - KIRENSK - IR - RA - 57.77 - 108.07 - 258 - 0 - - - - UKBB - 333470 - BORISPOL'/KIEV - KV - UR - 50.33 - 30.97 - 119 - 0 - - - - UKFF - 339460 - SIMFEROPOL - - UR - 44.68 - 34.13 - 180 - 0 - - - - UKHH - 343000 - KHARKIV - KI - UR - 49.96 - 36.13 - 1550 - 0 - - - - UKLL - 333930 - LVOV - KI - UR - 49.82 - 23.95 - 325 - 0 - - - - UKOO - 338370 - ODESSA/TSENTRALNY - KI - UR - 46.43 - 30.77 - 35 - 0 - - - - ULAA - 225500 - ARHANGELSK - AR - RS - 64.53 - 40.47 - 13 - 0 - - - - ULLI - 260630 - ST.PETERSBURG(VOEJKOVO) - LE - RS - 59.95 - 30.70 - 78 - 0 - - - - ULLL - 260630 - ST.PETERSBURG - LE - RS - 59.95 - 30.70 - 78 - 0 - - - - ULWW - 270370 - VOLOGDA - AR - RS - 59.23 - 39.87 - 131 - 0 - - - - ULMM - 221130 - MURMANSK - AR - RS - 68.97 - 33.05 - 51 - 0 - - - - UMKK - 267020 - KALININGRAD - - BY - 54.70 - 20.62 - 27 - 0 - - - - UMMS - 268500 - MINSK - MI - BY - 53.87 - 27.53 - 234 - 0 - - - - UNBB - 298380 - BARNAUL - NO - RA - 53.40 - 83.70 - 252 - 0 - - - - UNIT - 245070 - TURA - NO - RA - 64.27 - 100.23 - 186 - 0 - - - - UNKB - 292820 - BOGUCHANY - NO - RA - 58.42 - 97.40 - 134 - 0 - - - - UNKL - 284935 - KRASNOYARSK - - RS - 56.18 - 92.52 - -9999 - 0 - - - - UNLL - 999999 - KOLPASHEVO - NO - RA - 58.30 - 82.90 - 76 - 0 - - - - UNNT - 296340 - NOVOSIBIRSK/TOLMACH - - RA - 55.03 - 82.90 - 177 - 0 - - - - UNOO - 286980 - OMSK - NO - RA - 54.93 - 73.40 - 123 - 0 - - - - UODD - 206740 - DIKSON_ISLAND - DK - RA - 73.53 - 80.40 - 47 - 0 - - - - UOHH - 208910 - KHATANGA - DK - RA - 71.98 - 102.47 - 24 - 0 - - - - UOTT - 234720 - TURUKHANSK - - RA - 65.78 - 087.95 - 37 - 0 - - - - URRV - 273290 - ROSTOV - MS - RS - 57.20 - 39.42 - 102 - 0 - - - - URWA - 999999 - ASTRAKHAN - - RS - 46.35 - 47.97 - -22 - 0 - - - - URWW - 345600 - VOLGOGRAD - TB - RS - 48.68 - 44.35 - 145 - 0 - - - - USCC - 286420 - CHELYABINSK/BALANDI - SV - RA - 55.18 - 61.32 - -9999 - 0 - - - - USDD - 999999 - SALEKHARD - NO - RA - 66.53 - 66.53 - 358 - 0 - - - - USDS - 235520 - TARKO-SALE - NO - RA - 64.92 - 77.82 - 27 - 0 - - - - USHB - 236310 - BEREZOVO - NO - RA - 63.93 - 65.05 - 27 - 0 - - - - USHH - 239330 - HANTY-MANSIJSK - NO - RA - 60.97 - 69.07 - 40 - 0 - - - - USKK - 999999 - KIROV - MS - RS - 58.60 - 49.63 - 158 - 0 - - - - USPP - 282250 - PERM - SV - RA - 58.02 - 56.30 - 172 - 0 - - - - USRR - 238490 - SURGUT - NO - RA - 61.25 - 73.50 - 44 - 0 - - - - USSS - 284400 - SVERDLOVSK - SV - RA - 56.80 - 60.63 - 237 - 0 - - - - USUU - 286610 - KURGAN - SV - RA - 55.47 - 65.40 - 79 - 0 - - - - UTAA - 388800 - ASHABAD - TA - RA - 37.97 - 58.33 - 210 - 0 - - - - UTTT - 384570 - TASHKENT/YUZNI - TA - RA - 41.27 - 69.27 - 489 - 0 - - - - UUWW - 275185 - MOSCOW/VNUKOVO - MS - RS - 55.65 - 37.27 - 203 - 0 - - - - UUYP - 234180 - PECHORA - AR - RS - 65.11 - 57.10 - 61 - 0 - - - - UUYW - 232260 - VORKUTA - AR - RA - 67.48 - 64.02 - 180 - 0 - - - - UUYY - 238040 - SYKTYVKAR - AR - RA - 61.72 - 50.83 - 119 - 0 - - - - UWKD - 275950 - KAZAN' - MS - RS - 55.78 - 49.18 - 116 - 0 - - - - UWUU - 287220 - UFA - SV - RA - 54.75 - 56.00 - 105 - 0 - - - - VABB - 430030 - BOMBAY/SANTA_CR - - IN - 19.12 - 72.84 - 14 - 0 - - - - VCBI - 434500 - COLOMBO/KATUNAYAKE - - SB - 7.17 - 79.88 - 8 - 0 - - - - VGZR - 419220 - KURMITOLA/ZIA_INTL - - BW - 23.85 - 90.40 - 10 - 0 - - - - VHHH - 450070 - HONG_KONG_INTL_ARPT - - HK - 22.33 - 114.18 - 24 - 0 - - - - VIDP - 421810 - INDIRA_GANDHI/DELHI - - IN - 28.57 - 77.12 - 233 - 0 - - - - WSSS - 486980 - SINGAPORE/CHANG - - SR - 1.37 - 103.98 - 16 - 0 - - - - YBRF - 945780 - BRISBANE - QU - AU - -27.43 - 153.08 - 2 - 0 - - - - YBTL - 942940 - TOWNSVILLE(CIV/MIL) - QU - AU - -19.25 - 146.75 - 6 - 0 - - - - YMHF - 948640 - MELBOURNE - VC - AU - -37.73 - 144.90 - 81 - 0 - - - - YMMB - 948700 - MOORABBIN_AIRPORT - VC - AU - -37.98 - 145.10 - 13 - 0 - - - - YMMC - 948640 - MELBOURNE - VC - AU - -37.73 - 144.90 - 81 - 0 - - - - YMRF - 948640 - MELBOURNE - VC - AU - -37.73 - 144.90 - 81 - 0 - - - - YPDM - 948640 - MELBOURNE - VC - AU - -37.73 - 144.90 - 81 - 0 - - - - YPRF - 948640 - MELBOURNE - VC - AU - -37.73 - 144.90 - 81 - 0 - - - - YPRM - 948640 - MELBOURNE - VC - AU - -37.73 - 144.90 - 81 - 0 - - - - YSRF - 948640 - MELBOURNE - VC - AU - -37.73 - 144.90 - 81 - 0 - - - - ZPPP - 567780 - KUNMING/WUJIABA - CD - CI - 25.02 - 102.68 - 1892 - 0 - - - + + + + + YSJ + 000395 + ST_JOHN + NB + CN + 45.32 + -65.88 + 0 + 0 + + + + HUL + 000341 + HOULTON + ME + US + 46.04 + -67.83 + 0 + 0 + + + + PQI + 000367 + PRESQUE_ISLE + ME + US + 46.77 + -68.09 + 0 + 0 + + + + MLT + 000183 + MILLINOCKET + ME + US + 45.58 + -68.52 + 0 + 0 + + + + BGR + 000029 + BANGOR + ME + US + 44.84 + -68.87 + 0 + 0 + + + + ACK + 000005 + NANTUCKET + MA + US + 41.28 + -70.03 + 0 + 0 + + + + ENE + 000322 + KENNEBUNK + ME + US + 43.43 + -70.61 + 0 + 0 + + + + BOS + 000289 + BOSTON + MA + US + 42.36 + -70.99 + 0 + 0 + + + + YQB + 000391 + QUEBEC + QB + CN + 46.80 + -71.38 + 0 + 0 + + + + PVD + 000221 + PROVIDENCE + RI + US + 41.72 + -71.43 + 0 + 0 + + + + CON + 000062 + CONCORD + NH + US + 43.22 + -71.58 + 0 + 0 + + + + YSC + 000394 + SHERBROOKE + QB + CN + 45.43 + -71.68 + 0 + 0 + + + + HTO + 000340 + EAST_HAMPTON + NY + US + 40.92 + -72.32 + 0 + 0 + + + + MPV + 000188 + MONTPELIER + VT + US + 44.22 + -72.57 + 0 + 0 + + + + BDL + 000287 + WINSOR_LOCKS + CT + US + 41.94 + -72.69 + 0 + 0 + + + + PLB + 000365 + PLATTSBURGH + NY + US + 44.69 + -73.52 + 0 + 0 + + + + JFK + 000345 + NEW_YORK/JF_KENNEDY + NY + US + 40.63 + -73.77 + 0 + 0 + + + + ALB + 000012 + ALBANY + NY + US + 42.75 + -73.80 + 0 + 0 + + + + CYN + 000300 + COYLE + NJ + US + 39.82 + -74.43 + 0 + 0 + + + + SAX + 000376 + SPARTA + NJ + US + 41.07 + -74.54 + 0 + 0 + + + + MSS + 000353 + MASSENA + NY + US + 44.91 + -74.72 + 0 + 0 + + + + SIE + 000377 + SEA_ISLE + NJ + US + 39.10 + -74.80 + 0 + 0 + + + + HNK + 000338 + HANCOCK + NY + US + 42.06 + -75.32 + 0 + 0 + + + + SBY + 000242 + SALISBURY + MD + US + 38.35 + -75.52 + 0 + 0 + + + + YOW + 000390 + OTTAWA + ON + CN + 45.32 + -75.67 + 0 + 0 + + + + ETX + 000325 + EAST_TEXAS + PA + US + 40.58 + -75.68 + 0 + 0 + + + + ECG + 000086 + ELIZABETH_CITY + NC + US + 36.25 + -76.18 + 0 + 0 + + + + SYR + 000259 + SYRACUSE + NY + US + 43.16 + -76.20 + 0 + 0 + + + + ORF + 000203 + NORFOLK + VA + US + 36.89 + -76.20 + 0 + 0 + + + + EMI + 000320 + WESTMINSTER + MD + US + 39.50 + -76.98 + 0 + 0 + + + + HAR + 000126 + HARRISBURG + PA + US + 40.23 + -77.02 + 0 + 0 + + + + DCA + 000306 + WASHINGTON + DC + US + 38.86 + -77.04 + 0 + 0 + + + + RIC + 000229 + RICHMOND + VA + US + 37.50 + -77.32 + 0 + 0 + + + + CSN + 000299 + CASSANOVA + VA + US + 38.64 + -77.87 + 0 + 0 + + + + ILM + 000135 + WILMINGTON + NC + US + 34.35 + -77.87 + 0 + 0 + + + + SLT + 000252 + SLATE_RUN + PA + US + 41.51 + -77.97 + 0 + 0 + + + + PSB + 000368 + PHILLIPSBURG + PA + US + 40.92 + -77.99 + 0 + 0 + + + + BUF + 000044 + BUFFALO + NY + US + 42.93 + -78.65 + 0 + 0 + + + + RDU + 000372 + RALEIGH-DURHAM + NC + US + 35.87 + -78.78 + 0 + 0 + + + + JST + 000145 + JOHNSTOWN + PA + US + 40.32 + -78.83 + 0 + 0 + + + + JHW + 000346 + JAMESTOWN + NY + US + 42.19 + -79.12 + 0 + 0 + + + + LYH + 000166 + LYNCHBURG + VA + US + 37.25 + -79.23 + 0 + 0 + + + + YYZ + 000401 + TORONTO + ON + CN + 43.67 + -79.63 + 0 + 0 + + + + FLO + 000102 + FLORENCE + SC + US + 34.23 + -79.66 + 0 + 0 + + + + GSO + 000122 + GREENSBORO + NC + US + 36.05 + -79.98 + 0 + 0 + + + + CHS + 000056 + CHARLESTON + SC + US + 32.89 + -80.04 + 0 + 0 + + + + PBI + 000206 + WEST_PALM_BEACH + FL + US + 26.68 + -80.09 + 0 + 0 + + + + EKN + 000088 + ELKINS + WV + US + 38.92 + -80.10 + 0 + 0 + + + + EWC + 000326 + ELLWOOD_CITY + PA + US + 40.83 + -80.21 + 0 + 0 + + + + ERI + 000092 + ERIE + PA + US + 42.02 + -80.30 + 0 + 0 + + + + MIA + 000176 + MIAMI + FL + US + 25.80 + -80.30 + 0 + 0 + + + + VRB + 000276 + VERO_BEACH + FL + US + 27.68 + -80.49 + 0 + 0 + + + + PSK + 000369 + DUBLIN + VA + US + 37.09 + -80.71 + 0 + 0 + + + + AIR + 000280 + BELLAIRE + OH + US + 40.02 + -80.82 + 0 + 0 + + + + CLT + 000059 + CHARLOTTE + NC + US + 35.22 + -80.93 + 0 + 0 + + + + CAE + 000295 + COLUMBIA + SC + US + 33.86 + -81.05 + 0 + 0 + + + + YVV + 000396 + WIARTON + ON + CN + 44.75 + -81.10 + 0 + 0 + + + + SAV + 000239 + SAVANNAH + GA + US + 32.16 + -81.11 + 0 + 0 + + + + OMN + 000363 + ORMOND_BEACH + FL + US + 29.30 + -81.11 + 0 + 0 + + + + BKW + 000034 + BECKLEY + WV + US + 37.78 + -81.12 + 0 + 0 + + + + ORL + 000204 + ORLANDO + FL + US + 28.54 + -81.34 + 0 + 0 + + + + CRG + 000298 + JACKSONVILLE + FL + US + 30.34 + -81.51 + 0 + 0 + + + + EYW + 000096 + KEY_WEST + FL + US + 24.59 + -81.80 + 0 + 0 + + + + FMY + 000104 + FT_MEYERS + FL + US + 26.58 + -81.87 + 0 + 0 + + + + SPA + 000380 + SPARTANBURG + SC + US + 35.03 + -81.93 + 0 + 0 + + + + HNN + 000339 + HENDERSON + WV + US + 38.75 + -82.03 + 0 + 0 + + + + HMV + 000337 + HOLSTON_MOUNTAIN + TN + US + 36.44 + -82.13 + 0 + 0 + + + + CLE + 000058 + CLEVELAND + OH + US + 41.42 + -81.85 + 0 + 0 + + + + IRQ + 000344 + COLLIERS + SC + US + 33.71 + -82.16 + 0 + 0 + + + + AMG + 000015 + ALMA + GA + US + 31.54 + -82.51 + 0 + 0 + + + + SRQ + 000382 + SARASOTA + FL + US + 27.40 + -82.55 + 0 + 0 + + + + APE + 000283 + APPLETON + OH + US + 40.15 + -82.59 + 0 + 0 + + + + PIE + 000212 + SAINT_PETERSBURG + FL + US + 27.91 + -82.68 + 0 + 0 + + + + ECK + 000316 + PECK + MI + US + 43.26 + -82.72 + 0 + 0 + + + + CTY + 000066 + CROSS_CITY + FL + US + 29.60 + -83.05 + 0 + 0 + + + + ODF + 000360 + TOCCOA + GA + US + 34.70 + -83.30 + 0 + 0 + + + + DXO + 000315 + DETROIT + MI + US + 42.21 + -83.37 + 0 + 0 + + + + ASP + 000284 + OSCODA + MI + US + 44.45 + -83.39 + 0 + 0 + + + + MCN + 000170 + MACON + GA + US + 32.69 + -83.65 + 0 + 0 + + + + FNT + 000328 + FLINT + MI + US + 42.97 + -83.74 + 0 + 0 + + + + VXV + 000388 + KNOXVILLE + TN + US + 35.90 + -83.89 + 0 + 0 + + + + ROD + 000373 + ROSEWOOD + OH + US + 40.29 + -84.04 + 0 + 0 + + + + MBS + 000168 + SAGINAW + MI + US + 43.53 + -84.08 + 0 + 0 + + + + LOZ + 000160 + LONDON + KY + US + 37.03 + -84.12 + 0 + 0 + + + + ABY + 000004 + ALBANY + GA + US + 31.65 + -84.30 + 0 + 0 + + + + SSM + 000255 + SAULT_STE_MARIE + MI + US + 46.41 + -84.31 + 0 + 0 + + + + TLH + 000264 + TALLAHASSEE + FL + US + 30.56 + -84.37 + 0 + 0 + + + + ATL + 000019 + ATLANTA + GA + US + 33.63 + -84.44 + 0 + 0 + + + + CVG + 000067 + COVINGTON + KY + US + 39.02 + -84.70 + 0 + 0 + + + + GQO + 000331 + CHATTANOOGA + TN + US + 34.96 + -85.15 + 0 + 0 + + + + FWA + 000109 + FT_WAYNE + IN + US + 40.98 + -85.19 + 0 + 0 + + + + LGC + 000350 + LA_GRANGE + GA + US + 33.05 + -85.21 + 0 + 0 + + + + GRR + 000332 + GRAND_RAPIDS + MI + US + 42.79 + -85.50 + 0 + 0 + + + + TVC + 000270 + TRAVERSE_CITY + MI + US + 44.67 + -85.55 + 0 + 0 + + + + LOU + 000159 + LOUISVILLE + KY + US + 38.10 + -85.58 + 0 + 0 + + + + MKG + 000179 + MUSKEGON + MI + US + 43.17 + -86.04 + 0 + 0 + + + + PMM + 000366 + PULLMAN + MI + US + 42.47 + -86.11 + 0 + 0 + + + + GIJ + 000330 + NILES + MI + US + 41.77 + -86.32 + 0 + 0 + + + + MGM + 000175 + MONTGOMERY + AL + US + 32.22 + -86.32 + 0 + 0 + + + + IND + 000136 + INDIANAPOLIS + IN + US + 39.81 + -86.37 + 0 + 0 + + + + BWG + 000047 + BOWLING_GREEN + KY + US + 36.93 + -86.44 + 0 + 0 + + + + BNA + 000037 + NASHVILLE + TN + US + 36.14 + -86.68 + 0 + 0 + + + + CEW + 000052 + CRESTVIEW + FL + US + 30.83 + -86.68 + 0 + 0 + + + + VUZ + 000387 + VULCAN + AL + US + 33.67 + -86.90 + 0 + 0 + + + + BVT + 000293 + LAFAYETTE + IN + US + 40.56 + -87.07 + 0 + 0 + + + + TTH + 000384 + TERRE_HAUTE + IN + US + 39.49 + -87.25 + 0 + 0 + + + + MSL + 000191 + MUSCLE_SHOALS + AL + US + 34.70 + -87.48 + 0 + 0 + + + + SAW + 000189 + SAWYER + MI + US + 46.35 + -87.38 + 0 + 0 + + + + PXV + 000370 + POCKET_CITY + IN + US + 37.93 + -87.76 + 0 + 0 + + + + ORD + 000202 + O'HARE_INTERNATIONAL + IL + US + 41.98 + -87.90 + 0 + 0 + + + + GRB + 000119 + GREEN_BAY + WI + US + 44.56 + -88.19 + 0 + 0 + + + + BAE + 000285 + MILWAUKEE + WI + US + 43.12 + -88.28 + 0 + 0 + + + + JOT + 000348 + JOLIET + IL + US + 41.55 + -88.32 + 0 + 0 + + + + SJI + 000378 + SEMMNES + AL + US + 30.73 + -88.36 + 0 + 0 + + + + IGB + 000133 + BIGBEE + MS + US + 33.48 + -88.52 + 0 + 0 + + + + MEI + 000172 + MERIDIAN + MS + US + 32.38 + -88.80 + 0 + 0 + + + + DEC + 000070 + DECATUR + IL + US + 39.74 + -88.86 + 0 + 0 + + + + YQT + 000393 + THUNDER_BAY + ON + CN + 48.37 + -89.32 + 0 + 0 + + + + DYR + 000083 + DYERSBURG + TN + US + 36.02 + -89.32 + 0 + 0 + + + + RHI + 000228 + RHINELANDER + WI + US + 45.63 + -89.45 + 0 + 0 + + + + BDF + 000024 + BRADFORD + IL + US + 41.16 + -89.59 + 0 + 0 + + + + DLL + 000310 + DELLS + WI + US + 43.55 + -89.76 + 0 + 0 + + + + MEM + 000173 + MEMPHIS + TN + US + 35.06 + -89.98 + 0 + 0 + + + + LEV + 000349 + GRAND_ISLE + LA + US + 29.18 + -90.10 + 0 + 0 + + + + JAN + 000142 + JACKSON + MS + US + 32.51 + -90.17 + 0 + 0 + + + + MSY + 000195 + NEW_ORLEANS + LA + US + 30.00 + -90.27 + 0 + 0 + + + + FAM + 000097 + FARMINGTON + MO + US + 37.67 + -90.23 + 0 + 0 + + + + MCB + 000169 + MC_COMB + MS + US + 31.30 + -90.26 + 0 + 0 + + + + SQS + 000381 + SIDON + MS + US + 33.46 + -90.28 + 0 + 0 + + + + STL + 000257 + ST_LOUIS + MO + US + 38.86 + -90.48 + 0 + 0 + + + + DBQ + 000069 + DUBUQUE + IA + US + 42.40 + -90.71 + 0 + 0 + + + + ARG + 000018 + WALNUT_RIDGE + AR + US + 36.11 + -90.95 + 0 + 0 + + + + UIN + 000386 + QUINCY + IL + US + 39.85 + -91.28 + 0 + 0 + + + + BTR + 000042 + BATON_ROUGE + LA + US + 30.48 + -91.30 + 0 + 0 + + + + ODI + 000361 + NODINE + MN + US + 43.91 + -91.47 + 0 + 0 + + + + EAU + 000085 + EAU_CLAIRE + WI + US + 44.90 + -91.48 + 0 + 0 + + + + IOW + 000343 + IOWA_CITY + IA + US + 41.52 + -91.61 + 0 + 0 + + + + MLU + 000184 + MONROE + LA + US + 32.52 + -92.03 + 0 + 0 + + + + LIT + 000156 + LITTLE_ROCK + AR + US + 34.68 + -92.18 + 0 + 0 + + + + DLH + 000075 + DULUTH + MN + US + 46.80 + -92.20 + 0 + 0 + + + + COU + 000063 + COLUMBIA + MO + US + 38.82 + -92.22 + 0 + 0 + + + + AEX + 000009 + ALEXANDRIA + LA + US + 31.26 + -92.50 + 0 + 0 + + + + IRK + 000139 + KIRKSVILLE + MO + US + 40.14 + -92.59 + 0 + 0 + + + + ELD + 000319 + EL_DORADO + AR + US + 33.26 + -92.74 + 0 + 0 + + + + LCH + 000154 + LAKE_CHARLES + LA + US + 30.14 + -93.11 + 0 + 0 + + + + MSP + 000194 + MINNEAPOLIS + MN + US + 44.88 + -93.23 + 0 + 0 + + + + MCW + 000171 + MASON_CITY + IA + US + 43.09 + -93.33 + 0 + 0 + + + + SGF + 000245 + SPRINGFIELD + MO + US + 37.36 + -93.33 + 0 + 0 + + + + INL + 000137 + INTERNATIONAL_FALLS + MN + US + 48.57 + -93.40 + 0 + 0 + + + + DSM + 000079 + DES_MOINES + IA + US + 41.44 + -93.65 + 0 + 0 + + + + EIC + 000318 + SHREVEPORT + LA + US + 32.77 + -93.81 + 0 + 0 + + + + BRD + 000292 + BRAINERD + MN + US + 46.35 + -94.03 + 0 + 0 + + + + TXK + 000272 + TEXARKANA + AR + US + 33.51 + -94.07 + 0 + 0 + + + + RZC + 000374 + RAZORBACK + AR + US + 36.25 + -94.12 + 0 + 0 + + + + FSM + 000108 + FT_SMITH + AR + US + 35.38 + -94.27 + 0 + 0 + + + + FOD + 000105 + FT_DODGE + IA + US + 42.61 + -94.29 + 0 + 0 + + + + BUM + 000045 + BUTLER + MO + US + 38.27 + -94.49 + 0 + 0 + + + + MKC + 000177 + KANSAS_CITY + MO + US + 39.28 + -94.59 + 0 + 0 + + + + LFK + 000155 + LUFKIN + TX + US + 31.16 + -94.72 + 0 + 0 + + + + GGG + 000115 + LONGVIEW + TX + US + 32.42 + -94.75 + 0 + 0 + + + + BJI + 000033 + BEMIDJI + MN + US + 47.58 + -95.02 + 0 + 0 + + + + RWF + 000234 + REDWWOD_FALLS + MN + US + 44.47 + -95.13 + 0 + 0 + + + + OSW + 000205 + OSWEGO + KS + US + 37.15 + -95.20 + 0 + 0 + + + + IAH + 000131 + HOUSTON_INTERNATIONAL + TX + US + 29.96 + -95.35 + 0 + 0 + + + + OVR + 000364 + OMAHA + NE + US + 41.17 + -95.74 + 0 + 0 + + + + MLC + 000180 + MC_CALESTER + OK + US + 34.85 + -95.78 + 0 + 0 + + + + TUL + 000268 + TULSA + OK + US + 36.20 + -95.79 + 0 + 0 + + + + PWE + 000222 + PAWNEE_CITY + NE + US + 40.20 + -96.21 + 0 + 0 + + + + PSX + 000219 + PALACIOS + TX + US + 28.76 + -96.31 + 0 + 0 + + + + FSD + 000107 + SIOUX_FALLS + SD + US + 43.65 + -96.78 + 0 + 0 + + + + FAR + 000098 + FARGO + ND + US + 46.75 + -96.85 + 0 + 0 + + + + DFW + 000072 + DALLAS-FT_WORTH + TX + US + 32.87 + -97.03 + 0 + 0 + + + + ADM + 000008 + ARDMORE + OK + US + 34.21 + -97.17 + 0 + 0 + + + + GFK + 000114 + GRAND_FORKS + ND + US + 47.95 + -97.19 + 0 + 0 + + + + YWG + 000397 + WINNIPEG + MB + CN + 49.90 + -97.23 + 0 + 0 + + + + ACT + 000006 + WACO + TX + US + 31.66 + -97.27 + 0 + 0 + + + + BRO + 000041 + BROWNSVILLE + TX + US + 25.92 + -97.38 + 0 + 0 + + + + CRP + 000065 + CORPUS_CHRISTI + TX + US + 27.90 + -97.45 + 0 + 0 + + + + ICT + 000132 + WICHITA + KS + US + 37.75 + -97.58 + 0 + 0 + + + + OKC + 000198 + OKLAHOMA_CITY + OK + US + 35.36 + -97.61 + 0 + 0 + + + + SLN + 000251 + SALINA + KS + US + 38.93 + -97.62 + 0 + 0 + + + + AUS + 000020 + AUSTIN + TX + US + 30.30 + -97.70 + 0 + 0 + + + + END + 000321 + VANCE_AFB + OK + US + 36.35 + -97.92 + 0 + 0 + + + + OBH + 000358 + WOLBACH + NE + US + 41.38 + -98.35 + 0 + 0 + + + + ABR + 000003 + ABERDEEN + SD + US + 45.42 + -98.37 + 0 + 0 + + + + SAT + 000238 + SAN_ANTONIO + TX + US + 29.64 + -98.46 + 0 + 0 + + + + SPS + 000254 + WICHITA_FALLS + TX + US + 33.99 + -98.59 + 0 + 0 + + + + ONL + 000200 + ONEILL + NE + US + 42.47 + -98.69 + 0 + 0 + + + + LRD + 000161 + LAREDO + TX + US + 27.48 + -99.42 + 0 + 0 + + + + JCT + 000144 + JUNCTION + TX + US + 30.60 + -99.82 + 0 + 0 + + + + ABI + 000001 + ABILENE + TX + US + 32.48 + -99.86 + 0 + 0 + + + + GAG + 000110 + GAGE + OK + US + 36.34 + -99.88 + 0 + 0 + + + + ANW + 000282 + AINSWORTH + NE + US + 42.57 + -99.99 + 0 + 0 + + + + PIR + 000214 + PIERRE + SD + US + 44.40 + -100.17 + 0 + 0 + + + + HLC + 000335 + HILL_CITY + KS + US + 39.26 + -100.23 + 0 + 0 + + + + CDS + 000051 + CHILDRESS + TX + US + 34.37 + -100.28 + 0 + 0 + + + + SJT + 000248 + SAN_ANGELO + TX + US + 31.38 + -100.46 + 0 + 0 + + + + MCK + 000351 + MC_COOK + NE + US + 40.20 + -100.59 + 0 + 0 + + + + BIS + 000032 + BISMARK + ND + US + 46.77 + -100.67 + 0 + 0 + + + + LBF + 000152 + NORTH_PLATTE + NE + US + 41.13 + -100.72 + 0 + 0 + + + + GCK + 000112 + GARDEN_CITY + KS + US + 37.92 + -100.73 + 0 + 0 + + + + DLF + 000309 + LAUGHLIN_AFB + TX + US + 29.36 + -100.77 + 0 + 0 + + + + LBL + 000153 + LIBERAL + KS + US + 37.04 + -100.97 + 0 + 0 + + + + MOT + 000187 + MINOT + ND + US + 48.26 + -101.29 + 0 + 0 + + + + AMA + 000014 + AMARILLO + TX + US + 35.29 + -101.64 + 0 + 0 + + + + GLD + 000118 + GOODLAND + KS + US + 39.39 + -101.69 + 0 + 0 + + + + DPR + 000077 + DUPREE + SD + US + 45.08 + -101.72 + 0 + 0 + + + + LBB + 000151 + LUBBOCK_INTERNATIONAL + TX + US + 33.70 + -101.92 + 0 + 0 + + + + MAF + 000167 + MIDLAND + TX + US + 32.02 + -102.18 + 0 + 0 + + + + LAA + 000146 + LAMAR + CO + US + 38.20 + -102.69 + 0 + 0 + + + + DIK + 000074 + DICKINSIN + ND + US + 46.86 + -102.77 + 0 + 0 + + + + TXO + 000385 + TEXICO_NM/BOVINA + TX + US + 34.50 + -102.84 + 0 + 0 + + + + SNY + 000379 + SIDNEY + NE + US + 41.10 + -102.98 + 0 + 0 + + + + FST + 000329 + FT_STOCKTON + TX + US + 30.95 + -102.98 + 0 + 0 + + + + RAP + 000224 + RAPID_CITY + SD + US + 43.98 + -103.01 + 0 + 0 + + + + AKO + 000011 + AKRON + CO + US + 40.16 + -103.18 + 0 + 0 + + + + INK + 000342 + WINK + TX + US + 31.87 + -103.24 + 0 + 0 + + + + BFF + 000026 + SCOTTSBLUFF + NE + US + 41.89 + -103.48 + 0 + 0 + + + + TBE + 000261 + TOBE + CO + US + 37.27 + -103.60 + 0 + 0 + + + + TCC + 000262 + TUCUMCARI + NM + US + 35.18 + -103.60 + 0 + 0 + + + + ISN + 000140 + WILLISTON + ND + US + 48.18 + -103.63 + 0 + 0 + + + + MRF + 000190 + MARFA + TX + US + 30.30 + -103.95 + 0 + 0 + + + + PUB + 000220 + PUEBLO + CO + US + 38.29 + -104.43 + 0 + 0 + + + + ROW + 000233 + ROSWELL + NM + US + 33.34 + -104.62 + 0 + 0 + + + + DEN + 000071 + DENVER + CO + US + 39.81 + -104.66 + 0 + 0 + + + + CYS + 000301 + CHEYENNE + WY + US + 41.21 + -104.77 + 0 + 0 + + + + CIM + 000297 + CIMARRON + NM + US + 36.49 + -104.87 + 0 + 0 + + + + LVS + 000163 + LAS_VEGAS + NM + US + 35.66 + -105.14 + 0 + 0 + + + + LAR + 000148 + LARAMIE + WY + US + 41.33 + -105.72 + 0 + 0 + + + + ALS + 000013 + ALAMOSA + CO + US + 37.35 + -105.82 + 0 + 0 + + + + MLS + 000182 + MILES_CITY + MT + US + 46.38 + -105.95 + 0 + 0 + + + + DDY + 000307 + CASPER + WY + US + 43.09 + -106.28 + 0 + 0 + + + + ELP + 000090 + EL_PASO + TX + US + 31.82 + -106.28 + 0 + 0 + + + + CZI + 000302 + CRAZY_WOMAN + WY + US + 44.00 + -106.44 + 0 + 0 + + + + GGW + 000116 + GLASGOW + MT + US + 48.22 + -106.63 + 0 + 0 + + + + ABQ + 000002 + ALBUQUERQUE + NM + US + 35.04 + -106.82 + 0 + 0 + + + + DBL + 000304 + EAGLE + CO + US + 39.44 + -106.90 + 0 + 0 + + + + HBU + 000333 + GUNNISON + CO + US + 38.45 + -107.04 + 0 + 0 + + + + SHR + 000246 + SHERIDAN + WY + US + 44.84 + -107.06 + 0 + 0 + + + + TCS + 000263 + TRUTH_OR_CONSEQUENCES + NM + US + 33.28 + -107.28 + 0 + 0 + + + + CHE + 000054 + HAYDEN + CO + US + 40.52 + -107.31 + 0 + 0 + + + + DMN + 000076 + DEMING + NM + US + 32.28 + -107.60 + 0 + 0 + + + + YYN + 000400 + SWIFT_CURRENT + SA + CN + 50.28 + -107.68 + 0 + 0 + + + + FMN + 000103 + FARMINGTON + NM + US + 36.75 + -108.10 + 0 + 0 + + + + BOY + 000290 + BOYSEN_RESV. + WY + US + 43.46 + -108.30 + 0 + 0 + + + + BIL + 000031 + BILLINGS + MT + US + 45.81 + -108.63 + 0 + 0 + + + + JNC + 000347 + GRAND_JUNCTION + CO + US + 39.06 + -108.79 + 0 + 0 + + + + DVC + 000082 + DOVE_CREEK + CO + US + 37.81 + -108.93 + 0 + 0 + + + + OCS + 000359 + ROCKSPRINGS + WY + US + 41.59 + -109.02 + 0 + 0 + + + + SJN + 000247 + ST_JOHNS + AZ + US + 34.42 + -109.14 + 0 + 0 + + + + SSO + 000256 + SAN_SIMON + AZ + US + 32.27 + -109.26 + 0 + 0 + + + + LWT + 000165 + LEWISTOWN + MT + US + 47.05 + -109.61 + 0 + 0 + + + + HVR + 000129 + HAVRE + MT + US + 48.54 + -109.77 + 0 + 0 + + + + BPI + 000291 + BIG_PINEY + WY + US + 42.58 + -110.11 + 0 + 0 + + + + MTU + 000196 + MYTON + UT + US + 40.15 + -110.13 + 0 + 0 + + + + HVE + 000128 + HANKSVILLE + UT + US + 38.42 + -110.70 + 0 + 0 + + + + YXH + 000399 + MEDICINE_HAT + AB + CN + 50.02 + -110.72 + 0 + 0 + + + + JAC + 000141 + JACKSON + WY + US + 43.62 + -110.73 + 0 + 0 + + + + INW + 000138 + WINSLOW + AZ + US + 35.06 + -110.80 + 0 + 0 + + + + TUS + 000269 + TUCSON + AZ + US + 32.10 + -110.92 + 0 + 0 + + + + TBC + 000260 + TUBA_CITY + AZ + US + 36.12 + -111.27 + 0 + 0 + + + + GTF + 000123 + GREAT_FALLS + MT + US + 47.45 + -111.41 + 0 + 0 + + + + HLN + 000336 + HELENA + MT + US + 46.61 + -111.95 + 0 + 0 + + + + PHX + 000211 + PHOENIX + AZ + US + 33.43 + -112.02 + 0 + 0 + + + + SLC + 000249 + SALT_LAKE_CITY + UT + US + 40.85 + -111.98 + 0 + 0 + + + + DBS + 000305 + DUBOIS + ID + US + 44.09 + -112.21 + 0 + 0 + + + + BCE + 000023 + BRYCE_CANYON + UT + US + 37.69 + -112.30 + 0 + 0 + + + + MLD + 000352 + MALAD_CITY + ID + US + 42.20 + -112.45 + 0 + 0 + + + + DRK + 000313 + PRESCOTT + AZ + US + 34.70 + -112.48 + 0 + 0 + + + + DTA + 000080 + DELTA + UT + US + 39.30 + -112.51 + 0 + 0 + + + + DLN + 000311 + DILLON + MT + US + 45.25 + -112.55 + 0 + 0 + + + + PIH + 000213 + POCATELLO + ID + US + 42.87 + -112.65 + 0 + 0 + + + + YQL + 000392 + LETHBRIDGE + AB + CN + 49.63 + -112.80 + 0 + 0 + + + + PGS + 000210 + PEACH_SPRINGS + AZ + US + 35.62 + -113.54 + 0 + 0 + + + + BVL + 000046 + BOONEVILLE + UT + US + 40.73 + -113.76 + 0 + 0 + + + + LKT + 000157 + SALMON + ID + US + 45.02 + -114.08 + 0 + 0 + + + + FCA + 000100 + KALISPELL + MT + US + 48.21 + -114.18 + 0 + 0 + + + + ILC + 000134 + WILSON_CREEK + NV + US + 38.25 + -114.39 + 0 + 0 + + + + EED + 000087 + NEEDLES + CA + US + 34.77 + -114.47 + 0 + 0 + + + + TWF + 000271 + TWIN_FALLS + ID + US + 42.48 + -114.49 + 0 + 0 + + + + BZA + 000294 + YUMA + AZ + US + 32.77 + -114.60 + 0 + 0 + + + + ELY + 000091 + ELY + NV + US + 39.30 + -114.85 + 0 + 0 + + + + LAS + 000149 + LAS_VEGAS + NV + US + 36.08 + -115.16 + 0 + 0 + + + + MLP + 000181 + MULLAN_PASS + ID + US + 47.46 + -115.65 + 0 + 0 + + + + YXC + 000398 + CRANBROOK + BC + CN + 49.60 + -115.78 + 0 + 0 + + + + TRM + 000383 + THERMAL + CA + US + 33.63 + -116.16 + 0 + 0 + + + + BOI + 000039 + BOISE + ID + US + 43.55 + -116.19 + 0 + 0 + + + + DNJ + 000312 + MC_CALL + ID + US + 44.77 + -116.21 + 0 + 0 + + + + HEC + 000334 + HECTOR + CA + US + 34.80 + -116.46 + 0 + 0 + + + + BTY + 000043 + BEATTY + NV + US + 36.80 + -116.75 + 0 + 0 + + + + BAM + 000286 + BATTLE_MOUNTAIN + NV + US + 40.57 + -116.92 + 0 + 0 + + + + MZB + 000354 + MISSION_BAY + CA + US + 32.78 + -117.23 + 0 + 0 + + + + GEG + 000113 + SPOKANE + WA + US + 47.56 + -117.63 + 0 + 0 + + + + OAL + 000357 + COALDALE + NV + US + 38.00 + -117.77 + 0 + 0 + + + + BKE + 000288 + BAKER + OR + US + 44.84 + -117.81 + 0 + 0 + + + + REO + 000227 + ROME + OR + US + 42.59 + -117.87 + 0 + 0 + + + + LAX + 000150 + LOS_ANGELES_INTL + CA + US + 33.93 + -118.43 + 0 + 0 + + + + PDT + 000207 + PENDLETON + OR + US + 45.70 + -118.94 + 0 + 0 + + + + EHF + 000317 + BAKERSFIELD + CA + US + 35.48 + -119.10 + 0 + 0 + + + + EPH + 000324 + EPHRATA + WA + US + 47.38 + -119.42 + 0 + 0 + + + + FMG + 000327 + RENO + NV + US + 39.53 + -119.66 + 0 + 0 + + + + RZS + 000375 + SANTA_BARBARA + CA + US + 34.51 + -119.77 + 0 + 0 + + + + CZQ + 000303 + FRESNO + CA + US + 36.88 + -119.82 + 0 + 0 + + + + YKM + 000279 + YAKIMA + WA + US + 46.57 + -120.45 + 0 + 0 + + + + LKV + 000158 + LAKEVIEW + OR + US + 42.49 + -120.51 + 0 + 0 + + + + YDC + 000389 + PRINCETON + BC + CN + 49.47 + -120.52 + 0 + 0 + + + + MOD + 000186 + MODESTO + CA + US + 37.63 + -120.96 + 0 + 0 + + + + DSD + 000314 + REDMOND + WA + US + 44.25 + -121.30 + 0 + 0 + + + + SAC + 000236 + SACRAMENTO + CA + US + 38.44 + -121.55 + 0 + 0 + + + + SNS + 000253 + SALINAS + CA + US + 36.66 + -121.60 + 0 + 0 + + + + OAK + 000356 + OAKLAND + CA + US + 37.73 + -122.22 + 0 + 0 + + + + RBL + 000225 + RED_BLUFF + CA + US + 40.10 + -122.24 + 0 + 0 + + + + SEA + 000243 + SEATTLE + WA + US + 47.44 + -122.31 + 0 + 0 + + + + BLI + 000035 + BELLINGHAM + WA + US + 48.95 + -122.58 + 0 + 0 + + + + PDX + 000208 + PORTLAND + OR + US + 45.58 + -122.60 + 0 + 0 + + + + PYE + 000371 + POINT_REYES + CA + US + 38.08 + -122.87 + 0 + 0 + + + + OED + 000362 + MEDFORD + OR + US + 42.48 + -122.91 + 0 + 0 + + + + EUG + 000093 + EUGENE + OR + US + 44.12 + -123.22 + 0 + 0 + + + + ENI + 000323 + UKIAH + CA + US + 39.05 + -123.27 + 0 + 0 + + + + ONP + 000201 + NEWPORT + OR + US + 44.58 + -124.06 + 0 + 0 + + + + HQM + 000127 + HOQUIAM + WA + US + 46.95 + -124.15 + 0 + 0 + + + + FOT + 000106 + FORTUNA + CA + US + 40.67 + -124.23 + 0 + 0 + + + + TOU + 000265 + NEAH_BAY + WA + US + 48.30 + -124.63 + 0 + 0 + + + + YQV + 000402 + YORKTON + SA + CN + 51.27 + -102.47 + 0 + 0 + + + + ANN + 0 + ANNETTE_ISLAND + AK + US + 55.05 + -131.57 + 0 + 0 + + + + LVD + 0 + LEVEL_ISLAND + AK + US + 56.47 + -133.08 + 0 + 0 + + + + BKA + 0 + BIORKA_ISLAND + AK + US + 56.86 + -135.55 + 0 + 0 + + + + SSR + 0 + SISTERS_ISLAND + AK + US + 58.17 + -135.25 + 0 + 0 + + + + JNU + 0 + JUNEAU + AK + US + 58.35 + -134.58 + 0 + 0 + + + + YAK + 0 + YAKUTAT + AK + US + 59.50 + -139.67 + 0 + 0 + + + + MDO + 0 + MIDDLETON_ISLAND + AK + US + 59.45 + -146.30 + 0 + 0 + + + + JOH + 0 + JOHNSTONE_POINT + AK + US + 60.48 + -146.60 + 0 + 0 + + + + ODK + 0 + KODIAK + AK + US + 57.75 + -152.50 + 0 + 0 + + + + HOM + 0 + HOMER + AK + US + 59.65 + -151.48 + 0 + 0 + + + + ENA + 0 + KENAI + AK + US + 60.57 + -151.25 + 0 + 0 + + + + ANC + 0 + ANCHORAGE + AK + US + 61.17 + -150.00 + 0 + 0 + + + + BGQ + 0 + BIG_LAKE + AK + US + 61.53 + -149.82 + 0 + 0 + + + + ORT + 0 + NORTHWAY + AK + US + 62.97 + -141.93 + 0 + 0 + + + + GKN + 0 + GULKANA + AK + US + 62.15 + -145.45 + 0 + 0 + + + + TKA + 0 + TALKEETNA + AK + US + 62.32 + -150.10 + 0 + 0 + + + + SQA + 0 + SPARREVOHN + AK + US + 61.10 + -155.63 + 0 + 0 + + + + DLG + 0 + DILLINGHAM + AK + US + 59.05 + -158.50 + 0 + 0 + + + + AKN + 0 + KING_SALMON + AK + US + 58.68 + -156.65 + 0 + 0 + + + + PDN + 0 + PORT_HEIDEN + AK + US + 56.95 + -158.65 + 0 + 0 + + + + CDB + 0 + COLD_BAY + AK + US + 55.20 + -162.73 + 0 + 0 + + + + DUT + 0 + DUTCH_HARBOR + AK + US + 53.90 + -166.55 + 0 + 0 + + + + NUD + 0 + ADAK + AK + US + 51.88 + -176.65 + 0 + 0 + + + + SYA + 0 + SHEMYA + AK + US + 52.72 + 174.12 + 0 + 0 + + + + SPY + 0 + ST_PAUL_ISLAND + AK + US + 57.17 + -170.22 + 0 + 0 + + + + EHM + 0 + CAPE_NEWENHAM + AK + US + 58.66 + -162.07 + 0 + 0 + + + + HPB + 0 + HOOPER_BAY + AK + US + 61.52 + -166.14 + 0 + 0 + + + + BET + 0 + BETHEL + AK + US + 60.78 + -161.83 + 0 + 0 + + + + ANI + 0 + ANIAK + AK + US + 61.59 + -159.61 + 0 + 0 + + + + SMA + 0 + ST_MARYS + AK + US + 62.06 + -163.30 + 0 + 0 + + + + UNK + 0 + UNALAKLEET + AK + US + 63.88 + -160.80 + 0 + 0 + + + + ULL + 0 + KUKULIAK + AK + US + 63.70 + -170.48 + 0 + 0 + + + + MCG + 0 + MC_GRATH + AK + US + 62.95 + -155.60 + 0 + 0 + + + + ENN + 0 + NENANA + AK + US + 64.55 + -149.07 + 0 + 0 + + + + FAI + 0 + FAIRBANKS + AK + US + 64.82 + -147.85 + 0 + 0 + + + + BIG + 0 + BIG_DELTA + AK + US + 64.00 + -145.72 + 0 + 0 + + + + FYU + 0 + FORT_YUKON + AK + US + 66.57 + -145.25 + 0 + 0 + + + + BTT + 0 + BETTLES + AK + US + 66.92 + -151.53 + 0 + 0 + + + + TAL + 0 + TANANA + AK + US + 65.18 + -152.18 + 0 + 0 + + + + CQR + 0 + CHANDALAR_LAKE + AK + US + 67.50 + -148.47 + 0 + 0 + + + + SCC + 0 + DEADHORSE + AK + US + 70.20 + -148.47 + 0 + 0 + + + + BTI + 0 + BARTER_ISLAND + AK + US + 70.13 + -143.57 + 0 + 0 + + + + BRW + 0 + BARROW + AK + US + 71.28 + -156.77 + 0 + 0 + + + + GAL + 0 + GALENA + AK + US + 64.73 + -156.93 + 0 + 0 + + + + OME + 0 + NOME + AK + US + 64.52 + -165.45 + 0 + 0 + + + + OTZ + 0 + KOTZEBUE + AK + US + 66.88 + -162.60 + 0 + 0 + + + + WLK + 0 + SELAWIK + AK + US + 66.60 + -160.00 + 0 + 0 + + + + HSL + 0 + HUSLIA + AK + US + 65.71 + -156.37 + 0 + 0 + + + + BSF + 0 + BRADSHAW + HI + US + 19.76 + -155.39 + 0 + 0 + + + + UPP + 0 + UPOLU_POINT + HI + US + 20.20 + -155.84 + 0 + 0 + + + + ITO + 0 + HILO + HI + US + 19.72 + -155.01 + 0 + 0 + + + + HNL + 0 + HONOLULU + HI + US + 21.33 + -157.93 + 0 + 0 + + + + OGG + 0 + MAUI + HI + US + 20.91 + -156.42 + 0 + 0 + + + + NDB + 0 + VALLEY_ISLAND + HI + US + 20.88 + -156.44 + 0 + 0 + + + + MUE + 0 + KAMUELA + HI + US + 20.00 + -155.67 + 0 + 0 + + + + NGF + 0 + KANEOHE_BAY + HI + US + 21.45 + -157.76 + 0 + 0 + + + + MKK + 0 + MOLOKAI + HI + US + 21.14 + -157.17 + 0 + 0 + + + + NBS + 0 + BARKING_SANDS + HI + US + 22.04 + -159.79 + 0 + 0 + + + + CKH + 0 + KOKO_HEAD + HI + US + 21.27 + -157.70 + 0 + 0 + + + + IAI + 0 + KONA + HI + US + 19.65 + -156.02 + 0 + 0 + + + + LLD + 0 + LANAI + HI + US + 20.77 + -156.97 + 0 + 0 + + + + LNY + 0 + LANAI_CITY + HI + US + 20.76 + -156.97 + 0 + 0 + + + + LIH + 0 + LIHUE + HI + US + 21.97 + -159.34 + 0 + 0 + + + + SOK + 0 + SOUTH_KAUAI + HI + US + 21.90 + -159.53 + 0 + 0 + + + + RSW + 0 + LEE_COUNTY + FL + US + 26.53 + -81.78 + 0 + 0 + + + + PZD + 0 + PECAN + GA + US + 31.66 + -84.29 + 0 + 0 + + + + IIU + 0 + LOUISVILLE + KY + US + 38.10 + -85.58 + 0 + 0 + + + + HRV + 0 + HARVEY + LA + US + 29.85 + -90.00 + 0 + 0 + + + + MCI + 0 + KANSAS_CITY + MO + US + 39.29 + -94.74 + 0 + 0 + + + + TTT + 0 + MAVERICK + TX + US + 32.87 + -97.04 + 0 + 0 + + + + CWK + 0 + CENTEX + TX + US + 30.38 + -97.53 + 0 + 0 + + + + CME + 0 + CHISUM + NM + US + 33.34 + -104.62 + 0 + 0 + + + + FTI + 0 + FT_UNION + NM + US + 35.66 + -105.14 + 0 + 0 + + + + RSK + 0 + RATTLESNAKE + NM + US + 36.75 + -108.10 + 0 + 0 + + + + HUH + 0 + WHATCOM + WA + US + 48.95 + -122.58 + 0 + 0 + + + + ASRF + 948640 + MELBOURNE + VC + AU + -37.73 + 144.90 + 81 + 0 + + + + AYPY + 940350 + PORT_MORESBY_INTL + + NG + -9.43 + 147.22 + 47 + 0 + + + + BGSF + 042310 + SONDRE_STROMFJORD + + GL + 67.00 + -50.80 + 53 + 0 + + + + BIRK + 040300 + REYKJAVIK + + IL + 64.13 + -21.90 + 61 + 0 + + + + CWEG + 999999 + ALBERTA_WEATHER_CENTRE + + CN + 53.50 + -113.50 + -9999 + 0 + + + + CWLW + 712030 + KELOWNA + BC + CN + 49.95 + -119.40 + 456 + 0 + + + + CWNT + 712500 + TURTLE_MOUNTAIN + AB + CN + 49.58 + -114.42 + 2164 + 0 + + + + CWTO + 716380 + TORONTO_A_E_S__HQ + ON + CN + 43.78 + -79.47 + 187 + 0 + + + + CWUL + 999999 + QUEBEC_FCST_OFFICE + + CN + 45.50 + -73.68 + -9999 + 0 + + + + CYQX + 718030 + GANDER_INTL_AIRPORT + NF + CN + 48.95 + -54.57 + 151 + 0 + + + + DTTA + 607150 + TUNIS/CARTHAGE + + TS + 36.83 + 10.23 + 4 + 0 + + + + EBBR + 064510 + BRUSSELS_NATIONAL + + BX + 50.90 + 4.53 + 58 + 0 + + + + EDMM + 108680 + MUENCHEN + + DL + 48.25 + 11.58 + 484 + 0 + + + + EDZB + 102380 + BERGEN/HOHNE + + DL + 52.82 + 9.93 + 70 + 0 + + + + EDZE + 104100 + ESSEN/MULHEIM + + DL + 51.40 + 6.97 + 161 + 0 + + + + EDZF + 106370 + FRANKFURT/MAIN + + DL + 50.05 + 8.58 + 112 + 0 + + + + EDZH + 107710 + GAERMERSDORF + + DL + 49.43 + 11.90 + 419 + 0 + + + + EDZM + 108680 + MUENCHEN + + DL + 48.25 + 11.58 + 484 + 0 + + + + EETN + 260380 + TALLIN + + BY + 59.35 + 24.80 + 44 + 0 + + + + EFHK + 029740 + HELSINKI/VANTAA + + FI + 60.32 + 24.97 + 56 + 0 + + + + EFRO + 028450 + ROVANIEMI(CIV/MIL) + + FI + 66.57 + 25.83 + 201 + 0 + + + + EGJJ + 038950 + JERSEY_AIRPORT + + UK + 49.22 + -2.20 + 84 + 0 + + + + EHAM + 062400 + AMSTERDAM/SCHIPHOL + + NL + 52.30 + 4.77 + -2 + 0 + + + + EHDB + 062600 + DE_BILT + + NL + 52.10 + 5.18 + 4 + 0 + + + + EINN + 039620 + SHANNON_AIRPORT + + IE + 52.70 + -8.92 + 20 + 0 + + + + EKCH + 061800 + COPENHAGEN/KASTRUP + + DN + 55.63 + 12.67 + 5 + 0 + + + + ENMI + 999999 + OSLO + + NO + 59.50 + 10.70 + -9999 + 0 + + + + ENVN + 011520 + BODO + + NO + 67.25 + 14.40 + 8 + 0 + + + + ENVV + 014150 + STAVANGER + + NO + 58.87 + 5.67 + 34 + 0 + + + + EPWA + 123750 + WARSAW/OKECIE + + PL + 52.17 + 20.97 + 107 + 0 + + + + ESNN + 023660 + SUNDSVALL/HARNOSAND + + SN + 62.53 + 17.45 + 10 + 0 + + + + ESSA + 024600 + STOCKHOLM/ARLANDA + + SN + 59.65 + 17.95 + 61 + 0 + + + + EVRA + 999999 + RIGA_AIRPORT + LE + BY + 56.92 + 23.97 + 10 + 0 + + + + EYVI + 267300 + VILNIUS_INTL + MI + BY + 54.63 + 25.28 + 156 + 0 + + + + FAJS + 683680 + JAN_SMUTS + + ZA + -26.13 + 28.23 + 1700 + 0 + + + + FCBB + 644500 + BRAZZAVILLE/MAYA-MA + + CG + -4.25 + 15.25 + 316 + 0 + + + + FTTJ + 647000 + NDJAMENA(CIV/MIL) + + CD + 12.13 + 15.03 + 295 + 0 + + + + GCGC + 999999 + CANARY_ISLANDS + + CR + 28.50 + -16.00 + -9999 + 0 + + + + GMMC + 601550 + CASABLANCA + + MC + 33.57 + -7.67 + 62 + 0 + + + + HECA + 623660 + CAIRO_INTL_AIRPORT + + EG + 30.13 + 31.40 + 74 + 0 + + + + LBSF + 156140 + SOFIA + + BU + 42.65 + 23.38 + 595 + 0 + + + + LBWN + 155520 + VARNA + + BU + 43.20 + 27.92 + 43 + 0 + + + + LCLK + 176090 + LARNACA/LARNAX_ARPT + + CY + 34.88 + 33.63 + 2 + 0 + + + + LDZA + 131310 + ZAGREB/PLESO + + RH + 45.73 + 16.07 + 107 + 0 + + + + LDZO + 999999 + ZAGREB/PLESO + + RH + 45.73 + 16.07 + 107 + 0 + + + + LECB + 081810 + BARCELONA + + SP + 41.28 + 2.07 + 6 + 0 + + + + LEMM + 999999 + MADRID_CNM + + SP + 40.12 + -3.53 + -9999 + 0 + + + + LFBD + 075100 + BORDEAUX/MERIGNAC + + FR + 44.83 + -.70 + 61 + 0 + + + + LFMM + 076500 + MARSEILLE + + FR + 43.45 + 5.22 + 20 + 0 + + + + LFPW + 999999 + PARIS_MET_CENTER + + FR + 48.83 + 2.33 + 75 + 0 + + + + LFRN + 071300 + RENNES/ST.JACQUES + + FR + 48.07 + -1.73 + 37 + 0 + + + + LFST + 071900 + STRASBOURG/ENTZHEIM + + FR + 48.55 + 7.63 + 154 + 0 + + + + LGAT + 167160 + ATHENS/HELLENKION + + GR + 37.90 + 23.73 + 15 + 0 + + + + LHBP + 128390 + BUDAPEST/FERIHEGY + + HU + 47.43 + 19.27 + 185 + 0 + + + + LIMM + 160800 + MILANO/LINATE + + IY + 45.43 + 9.27 + 103 + 0 + + + + LJLJ + 130140 + LJUBLJANA/BRNIK + + LJ + 46.22 + 14.48 + 385 + 0 + + + + LKPR + 115180 + PRAGUE/RUZYNE + + CZ + 50.10 + 14.28 + 365 + 0 + + + + LLBG + 401800 + BEN-GURION(CIV/MIL) + + IS + 32.00 + 34.90 + 49 + 0 + + + + LMML + 165970 + LUQA/MALTA + + ML + 35.85 + 14.48 + 91 + 0 + + + + LOWW + 110360 + VIENNA/SCHWECHAT + + OS + 48.12 + 16.57 + 190 + 0 + + + + LPPT + 085360 + LISBON/PORTELA + + PO + 38.78 + -9.13 + 123 + 0 + + + + LROM + 154210 + BUCHAREST/OTOPENI + + RO + 44.55 + 26.10 + 95 + 0 + + + + LROP + 154210 + BUCHAREST/OTOPENI + + RO + 44.55 + 26.10 + 95 + 0 + + + + LSZH + 066700 + ZURICH-KLOTEN_(AUT) + + SW + 47.48 + 8.53 + 432 + 0 + + + + LTAC + 171280 + ANKARA/ESENBOGA + + TU + 40.11 + 32.97 + 949 + 0 + + + + LTBA + 170600 + ISTANBUL/ATATURK_AB + + TU + 40.97 + 28.82 + 37 + 0 + + + + LUKK + 338387 + KISHINAU + + UR + 46.93 + 28.93 + 122 + 0 + + + + LWSK + 135860 + SKOPJE/PETROVAC + + MK + 41.97 + 21.65 + 239 + 0 + + + + LYBE + 132720 + BELGRADE/SURCIN + + YG + 44.82 + 20.28 + 99 + 0 + + + + LZIB + 118160 + BRATISLAVA_IVANKA + + CZ + 48.20 + 17.20 + 130 + 0 + + + + NFFN + 916800 + NANDI/NADI_INTL + + FJ + -17.75 + 177.45 + 18 + 0 + + + + NZDT + 999999 + NEW_ZEALAND + + NZ + -41.00 + 172.50 + -9999 + 0 + + + + NZKL + 999999 + AUCKLAND + + NZ + -37.02 + 174.80 + 6 + 0 + + + + MHTG + 787200 + TEGUCIGALPA/TONCONT + + HO + 14.05 + -87.22 + 994 + 0 + + + + MPTO + 787920 + TOCUMEN/GEN._OMAR + + PM + 9.05 + -79.37 + 11 + 0 + + + + OBBB + 999999 + BAHRAIN_INTL_ARPT + + BN + 26.27 + 50.65 + 2 + 0 + + + + OBBI + 411500 + BAHRAIN_INTL_ARPT + + BN + 26.27 + 50.65 + 2 + 0 + + + + OEJD + 999999 + JEDDAH + + SD + 21.30 + 39.20 + -9999 + 0 + + + + OEJN + 410240 + JEDDAH/KING_ABD + + SD + 21.67 + 39.15 + 12 + 0 + + + + OIII + 407540 + TEHRAN/MEHRABAD_AFB + + IR + 35.68 + 51.35 + 1191 + 0 + + + + OIIX + 999999 + TEHRAN + + IR + 35.68 + 51.35 + 1191 + 0 + + + + OLBA + 401000 + BEIRUT_(CIV/MIL) + + LB + 33.82 + 35.48 + 19 + 0 + + + + OPKC + 417800 + KARACHI_INTL_ARPT + + PK + 24.90 + 67.13 + 22 + 0 + + + + OPLA + 416410 + LAHORE(CIV/MIL) + + PK + 31.52 + 74.40 + 217 + 0 + + + + OYSN + 413440 + SANA'A + + YE + 15.52 + 44.18 + 2190 + 0 + + + + PAFA + 702610 + FAIRBANKS_INTL_ARPT_(ASOS) + AK + US + 64.82 + -147.87 + 138 + 0 + + + + PAJN + 703810 + JUNEAU_INTL_AIRPORT_(ASOS) + AK + US + 58.37 + -134.58 + 7 + 0 + + + + PANC + 702730 + ANCHORAGE_INTL_ARPT_(ASOS) + AK + US + 61.17 + -150.02 + 40 + 0 + + + + RKSI + 470699 + CHAJANG_NI_(K-ARMY) + + KO + 37.87 + 127.18 + 100 + 0 + + + + RCTP + 466860 + TAIPEI/CHIANG_KAI_SHEK + + TW + 25.08 + 121.22 + 33 + 0 + + + + SABE + 875820 + AEROPARQUE(CIV/MIL) + + AG + -34.57 + -58.42 + 6 + 0 + + + + SACO + 873440 + CORDOBA_AIRPORT + + AG + -31.32 + -64.22 + 474 + 0 + + + + SAEZ + 875760 + BUENOS_AIRES/EZEIZA + + AG + -34.82 + -58.53 + 20 + 0 + + + + SAME + 874180 + MENDOZA/EL_PLUMERIL + + AG + -32.83 + -68.78 + 704 + 0 + + + + SARE + 871550 + RESISTENCIA_AIRPORT + + AG + -27.45 + -59.05 + 52 + 0 + + + + SBBE + 821930 + BELEM/VAL_DE_CAES + + BZ + -1.38 + -48.48 + 16 + 0 + + + + SBBR + 833780 + BRASILIA_(CIV/MIL) + + BZ + -15.87 + -47.93 + 1061 + 0 + + + + SBBS + 833780 + BRASILIA + + BZ + -15.87 + -47.93 + 1061 + 0 + + + + SBCT + 838400 + CURITIBA/AFONSO_PEN + + BZ + -25.52 + -49.17 + 908 + 0 + + + + SBCW + 838400 + CURITIBA/AFONSO_PEN + + BZ + -25.52 + -49.17 + 908 + 0 + + + + SBEG + 821110 + EDUARDO_GOMES_INTL + + BZ + -3.03 + -60.05 + 2 + 0 + + + + SBGL + 837460 + GALEAO/RIO(CIV/MIL) + + BZ + -22.82 + -43.25 + 6 + 0 + + + + SBGR + 837753 + GUARULHOS_(CIV/MIL) + + BZ + -23.43 + -46.47 + 750 + 0 + + + + SBRF + 828990 + RECIFE/GUARARAPES + + BZ + -8.07 + -34.85 + 19 + 0 + + + + SCCI + 859340 + PUNTA_ARENAS/PRES_C + + CH + -53.00 + -70.85 + 37 + 0 + + + + SCEL + 855740 + PUDAHUEL/ARTURO_MER + + CH + -33.38 + -70.78 + 476 + 0 + + + + SCFA + 854420 + ANTOFAGASTA/CERRO + + CH + -23.43 + -70.43 + 120 + 0 + + + + SCTE + 857990 + PUERTO_MONTT/TEPUAL + + CH + -41.42 + -73.08 + 86 + 0 + + + + SLLP + 852010 + LA_PAZ/JFK_INTL + + BO + -16.52 + -68.18 + 4014 + 0 + + + + SOCA + 814050 + CAYENNE/ROCHAMBEAU + + FG + 4.83 + -52.37 + 9 + 0 + + + + SPIM + 846280 + LIMA/JORGE_CHAVEZ + + PR + -12.00 + -77.12 + 13 + 0 + + + + TNCC + 789880 + HATO_ARPT_(CIV/MIL) + + NU + 12.20 + -68.97 + 67 + 0 + + + + TTPP + 789700 + PIARCO_INTL_AIRPORT + + TD + 10.62 + -61.35 + 15 + 0 + + + + UAAA + 368700 + ALMA-ATA + AL + RA + 43.23 + 76.93 + 847 + 0 + + + + UAFM + 835300 + FRUNZE + + RA + 42.85 + 74.53 + 760 + 0 + + + + UATT + 352290 + AKTJUBINSK + AL + KZ + 50.30 + 57.23 + 227 + 0 + + + + UBBB + 378640 + BAKU/BINE_ARPT + TB + AJ + 40.45 + 50.07 + -1 + 0 + + + + UGEE + 377890 + YEREVAN/ZAPADNY + TB + RS + 40.13 + 44.47 + 907 + 0 + + + + UGGG + 375490 + TBILISI/NOVO-AL + TB + RS + 41.68 + 44.95 + 490 + 0 + + + + UHBB + 315100 + BLAGOVESHCHENSK + HA + RA + 50.27 + 127.50 + 137 + 0 + + + + UHHH + 317350 + KHABAROVSK/NOVY + HA + RA + 48.52 + 135.16 + 72 + 0 + + + + UHNN + 999999 + NIKOLAEVSK-NA-AMURE_CENTER + HA + RA + 53.15 + 140.70 + 68 + 0 + + + + UHWW + 319600 + VLADIVOSTOK + HA + RA + 43.12 + 131.94 + 184 + 0 + + + + UHPP + 325400 + PETROPAVLOVSK-KAMCA + HA + RA + 52.97 + 158.75 + 24 + 0 + + + + UHSS + 321500 + JUZNO-SAHALINSK + HA + RA + 46.92 + 142.73 + 31 + 0 + + + + UIBB + 303090 + BRATSK + + RA + 56.07 + 101.83 + 489 + 0 + + + + UIII + 307100 + IRKUTSK + IR + RA + 52.27 + 104.35 + 513 + 0 + + + + UIKK + 302300 + KIRENSK + IR + RA + 57.77 + 108.07 + 258 + 0 + + + + UKBB + 333470 + BORISPOL'/KIEV + KV + UR + 50.33 + 30.97 + 119 + 0 + + + + UKFF + 339460 + SIMFEROPOL + + UR + 44.68 + 34.13 + 180 + 0 + + + + UKHH + 343000 + KHARKIV + KI + UR + 49.96 + 36.13 + 1550 + 0 + + + + UKLL + 333930 + LVOV + KI + UR + 49.82 + 23.95 + 325 + 0 + + + + UKOO + 338370 + ODESSA/TSENTRALNY + KI + UR + 46.43 + 30.77 + 35 + 0 + + + + ULAA + 225500 + ARHANGELSK + AR + RS + 64.53 + 40.47 + 13 + 0 + + + + ULLI + 260630 + ST.PETERSBURG(VOEJKOVO) + LE + RS + 59.95 + 30.70 + 78 + 0 + + + + ULLL + 260630 + ST.PETERSBURG + LE + RS + 59.95 + 30.70 + 78 + 0 + + + + ULWW + 270370 + VOLOGDA + AR + RS + 59.23 + 39.87 + 131 + 0 + + + + ULMM + 221130 + MURMANSK + AR + RS + 68.97 + 33.05 + 51 + 0 + + + + UMKK + 267020 + KALININGRAD + + BY + 54.70 + 20.62 + 27 + 0 + + + + UMMS + 268500 + MINSK + MI + BY + 53.87 + 27.53 + 234 + 0 + + + + UNBB + 298380 + BARNAUL + NO + RA + 53.40 + 83.70 + 252 + 0 + + + + UNIT + 245070 + TURA + NO + RA + 64.27 + 100.23 + 186 + 0 + + + + UNKB + 292820 + BOGUCHANY + NO + RA + 58.42 + 97.40 + 134 + 0 + + + + UNKL + 284935 + KRASNOYARSK + + RS + 56.18 + 92.52 + -9999 + 0 + + + + UNLL + 999999 + KOLPASHEVO + NO + RA + 58.30 + 82.90 + 76 + 0 + + + + UNNT + 296340 + NOVOSIBIRSK/TOLMACH + + RA + 55.03 + 82.90 + 177 + 0 + + + + UNOO + 286980 + OMSK + NO + RA + 54.93 + 73.40 + 123 + 0 + + + + UODD + 206740 + DIKSON_ISLAND + DK + RA + 73.53 + 80.40 + 47 + 0 + + + + UOHH + 208910 + KHATANGA + DK + RA + 71.98 + 102.47 + 24 + 0 + + + + UOTT + 234720 + TURUKHANSK + + RA + 65.78 + 087.95 + 37 + 0 + + + + URRV + 273290 + ROSTOV + MS + RS + 57.20 + 39.42 + 102 + 0 + + + + URWA + 999999 + ASTRAKHAN + + RS + 46.35 + 47.97 + -22 + 0 + + + + URWW + 345600 + VOLGOGRAD + TB + RS + 48.68 + 44.35 + 145 + 0 + + + + USCC + 286420 + CHELYABINSK/BALANDI + SV + RA + 55.18 + 61.32 + -9999 + 0 + + + + USDD + 999999 + SALEKHARD + NO + RA + 66.53 + 66.53 + 358 + 0 + + + + USDS + 235520 + TARKO-SALE + NO + RA + 64.92 + 77.82 + 27 + 0 + + + + USHB + 236310 + BEREZOVO + NO + RA + 63.93 + 65.05 + 27 + 0 + + + + USHH + 239330 + HANTY-MANSIJSK + NO + RA + 60.97 + 69.07 + 40 + 0 + + + + USKK + 999999 + KIROV + MS + RS + 58.60 + 49.63 + 158 + 0 + + + + USPP + 282250 + PERM + SV + RA + 58.02 + 56.30 + 172 + 0 + + + + USRR + 238490 + SURGUT + NO + RA + 61.25 + 73.50 + 44 + 0 + + + + USSS + 284400 + SVERDLOVSK + SV + RA + 56.80 + 60.63 + 237 + 0 + + + + USUU + 286610 + KURGAN + SV + RA + 55.47 + 65.40 + 79 + 0 + + + + UTAA + 388800 + ASHABAD + TA + RA + 37.97 + 58.33 + 210 + 0 + + + + UTTT + 384570 + TASHKENT/YUZNI + TA + RA + 41.27 + 69.27 + 489 + 0 + + + + UUWW + 275185 + MOSCOW/VNUKOVO + MS + RS + 55.65 + 37.27 + 203 + 0 + + + + UUYP + 234180 + PECHORA + AR + RS + 65.11 + 57.10 + 61 + 0 + + + + UUYW + 232260 + VORKUTA + AR + RA + 67.48 + 64.02 + 180 + 0 + + + + UUYY + 238040 + SYKTYVKAR + AR + RA + 61.72 + 50.83 + 119 + 0 + + + + UWKD + 275950 + KAZAN' + MS + RS + 55.78 + 49.18 + 116 + 0 + + + + UWUU + 287220 + UFA + SV + RA + 54.75 + 56.00 + 105 + 0 + + + + VABB + 430030 + BOMBAY/SANTA_CR + + IN + 19.12 + 72.84 + 14 + 0 + + + + VCBI + 434500 + COLOMBO/KATUNAYAKE + + SB + 7.17 + 79.88 + 8 + 0 + + + + VGZR + 419220 + KURMITOLA/ZIA_INTL + + BW + 23.85 + 90.40 + 10 + 0 + + + + VHHH + 450070 + HONG_KONG_INTL_ARPT + + HK + 22.33 + 114.18 + 24 + 0 + + + + VIDP + 421810 + INDIRA_GANDHI/DELHI + + IN + 28.57 + 77.12 + 233 + 0 + + + + WSSS + 486980 + SINGAPORE/CHANG + + SR + 1.37 + 103.98 + 16 + 0 + + + + YBRF + 945780 + BRISBANE + QU + AU + -27.43 + 153.08 + 2 + 0 + + + + YBTL + 942940 + TOWNSVILLE(CIV/MIL) + QU + AU + -19.25 + 146.75 + 6 + 0 + + + + YMHF + 948640 + MELBOURNE + VC + AU + -37.73 + 144.90 + 81 + 0 + + + + YMMB + 948700 + MOORABBIN_AIRPORT + VC + AU + -37.98 + 145.10 + 13 + 0 + + + + YMMC + 948640 + MELBOURNE + VC + AU + -37.73 + 144.90 + 81 + 0 + + + + YMRF + 948640 + MELBOURNE + VC + AU + -37.73 + 144.90 + 81 + 0 + + + + YPDM + 948640 + MELBOURNE + VC + AU + -37.73 + 144.90 + 81 + 0 + + + + YPRF + 948640 + MELBOURNE + VC + AU + -37.73 + 144.90 + 81 + 0 + + + + YPRM + 948640 + MELBOURNE + VC + AU + -37.73 + 144.90 + 81 + 0 + + + + YSRF + 948640 + MELBOURNE + VC + AU + -37.73 + 144.90 + 81 + 0 + + + + ZPPP + 567780 + KUNMING/WUJIABA + CD + CI + 25.02 + 102.68 + 1892 + 0 + + + diff --git a/ncep/gov.noaa.nws.ncep.edex.common/utility/edex_static/base/ncep/stns/zones.xml b/ncep/gov.noaa.nws.ncep.edex.common/utility/edex_static/base/ncep/stns/zones.xml index 662ba89deb..fb26a34d6f 100644 --- a/ncep/gov.noaa.nws.ncep.edex.common/utility/edex_static/base/ncep/stns/zones.xml +++ b/ncep/gov.noaa.nws.ncep.edex.common/utility/edex_static/base/ncep/stns/zones.xml @@ -1,47189 +1,47189 @@ - - - - - AKZ187 - 21870 - Central_Aleutians - AK - US - 52.22 - -174.23 - 0 - 0 - AFC - - - AKZ213 - 22130 - St_Lawrence_I_and_Bering_St_Cst - AK - US - 63.36 - -170.27 - 0 - 0 - AFG - - - AKZ195 - 21950 - Pribilof_Islands - AK - US - 57.18 - -170.26 - 0 - 0 - AFC - - - AKZ185 - 21850 - Eastern_Aleutians - AK - US - 53.63 - -166.66 - 0 - 0 - AFC - - - AKZ207 - 22070 - Chukchi_Sea_Coast - AK - US - 67.98 - -165.11 - 0 - 0 - AFG - - - AKZ211 - 22110 - Southern_Seward_Peninsula_Coast - AK - US - 64.58 - -164.56 - 0 - 0 - AFG - - - AKZ214 - 22140 - Yukon_Delta - AK - US - 62.24 - -164.37 - 0 - 0 - AFG - - - AKZ155 - 21550 - Kuskokwim_Delta - AK - US - 60.18 - -163.61 - 0 - 0 - AFC - - - AKZ208 - 22080 - Lower_Kobuk_and_Noatak_Valleys - AK - US - 67.77 - -162.75 - 0 - 0 - AFG - - - AKZ210 - 22100 - Nrn_and_Interior_Seward_Penin - AK - US - 65.40 - -162.41 - 0 - 0 - AFG - - - AKZ201 - 22010 - Western_Arctic_Coast - AK - US - 69.84 - -161.53 - 0 - 0 - AFG - - - AKZ181 - 21810 - Alaska_Peninsula - AK - US - 55.82 - -161.44 - 0 - 0 - AFC - - - AKZ209 - 22090 - Baldwin_Penin_and_Selawik_Vly - AK - US - 66.69 - -161.06 - 0 - 0 - AFG - - - AKZ212 - 22120 - Ern_Norton_Snd_and_Nulato_Hills - AK - US - 63.74 - -160.39 - 0 - 0 - AFG - - - HIZ001 - 110010 - Niihau - HI - US - 21.89 - -160.15 - 0 - 0 - HFO - - - AKZ215 - 22150 - Lower_Yukon_Valley - AK - US - 62.56 - -159.94 - 0 - 0 - AFG - - - HIZ003 - 110030 - Kauai_Leeward - HI - US - 22.02 - -159.67 - 0 - 0 - HFO - - - HIZ004 - 110040 - Kauai_Mountains - HI - US - 22.07 - -159.54 - 0 - 0 - HFO - - - HIZ002 - 110020 - Kauai_Windward - HI - US - 22.05 - -159.40 - 0 - 0 - HFO - - - AKZ205 - 22050 - Northwestern_Brooks_Range - AK - US - 69.06 - -158.44 - 0 - 0 - AFG - - - HIZ006 - 110060 - Waianae_Coast - HI - US - 21.48 - -158.21 - 0 - 0 - HFO - - - HIZ011 - 110110 - Waianae_Mountains - HI - US - 21.46 - -158.10 - 0 - 0 - HFO - - - HIZ007 - 110070 - Oahu_North_Shore - HI - US - 21.59 - -158.08 - 0 - 0 - HFO - - - HIZ005 - 110050 - Oahu_South_Shore - HI - US - 21.33 - -158.05 - 0 - 0 - HFO - - - HIZ010 - 110100 - Central_Oahu - HI - US - 21.50 - -158.01 - 0 - 0 - HFO - - - HIZ008 - 110080 - Oahu_Koolau - HI - US - 21.50 - -157.89 - 0 - 0 - HFO - - - HIZ009 - 110090 - Olomana - HI - US - 21.39 - -157.73 - 0 - 0 - HFO - - - HIZ013 - 110130 - Molokai_Leeward - HI - US - 21.14 - -157.09 - 0 - 0 - HFO - - - AKZ217 - 22170 - Upper_Kobuk_and_Noatak_Valleys - AK - US - 67.41 - -156.95 - 0 - 0 - AFG - - - HIZ015 - 110150 - Lanai_Mauka - HI - US - 20.82 - -156.92 - 0 - 0 - HFO - - - HIZ012 - 110120 - Molokai_Windward - HI - US - 21.14 - -156.85 - 0 - 0 - HFO - - - HIZ014 - 110140 - Lanai_Makai - HI - US - 20.83 - -156.84 - 0 - 0 - HFO - - - HIZ018 - 110180 - Maui_Leeward_West - HI - US - 20.89 - -156.67 - 0 - 0 - HFO - - - HIZ016 - 110160 - Kahoolawe - HI - US - 20.56 - -156.62 - 0 - 0 - HFO - - - AKZ216 - 22160 - Lwr_Koyukuk_and_Middle_Yukon_Vly - AK - US - 64.44 - -156.58 - 0 - 0 - AFG - - - HIZ017 - 110170 - Maui_Windward_West - HI - US - 20.92 - -156.58 - 0 - 0 - HFO - - - HIZ019 - 110190 - Maui_Central_Valley - HI - US - 20.85 - -156.45 - 0 - 0 - HFO - - - HIZ021 - 110210 - Leeward_Haleakala - HI - US - 20.72 - -156.31 - 0 - 0 - HFO - - - HIZ022 - 110220 - Haleakala_Summit - HI - US - 20.72 - -156.23 - 0 - 0 - HFO - - - HIZ020 - 110200 - Windward_Haleakala - HI - US - 20.80 - -156.18 - 0 - 0 - HFO - - - AKZ151 - 21510 - Kuskokwim_Valley - AK - US - 62.26 - -156.04 - 0 - 0 - AFC - - - HIZ023 - 110230 - Kona - HI - US - 19.45 - -155.86 - 0 - 0 - HFO - - - HIZ026 - 110260 - Kohala - HI - US - 20.02 - -155.74 - 0 - 0 - HFO - - - AKZ161 - 21610 - Bristol_Bay - AK - US - 58.67 - -155.70 - 0 - 0 - AFC - - - HIZ027 - 110270 - Big_Island_Interior - HI - US - 19.56 - -155.61 - 0 - 0 - HFO - - - HIZ028 - 110280 - Big_Island_Summit - HI - US - 19.44 - -155.58 - 0 - 0 - HFO - - - HIZ024 - 110240 - South_Big_Island - HI - US - 19.19 - -155.42 - 0 - 0 - HFO - - - AKZ202 - 22020 - Northern_Arctic_Coast - AK - US - 70.78 - -155.25 - 0 - 0 - AFG - - - HIZ025 - 110250 - Big_Island_North_and_East - HI - US - 19.81 - -155.19 - 0 - 0 - HFO - - - AKZ171 - 21710 - Kodiak_Island - AK - US - 58.65 - -154.17 - 0 - 0 - AFC - - - AKZ219 - 22190 - Upper_Koyukuk_Valley - AK - US - 66.28 - -152.42 - 0 - 0 - AFG - - - AKZ221 - 22210 - Central_Interior - AK - US - 64.61 - -151.55 - 0 - 0 - AFG - - - AKZ145 - 21450 - Susitna_Valley - AK - US - 61.95 - -150.71 - 0 - 0 - AFC - - - AKZ121 - 21210 - Western_Kenai_Peninsula - AK - US - 60.12 - -150.69 - 0 - 0 - AFC - - - AKZ225 - 22250 - Denali - AK - US - 63.51 - -150.21 - 0 - 0 - AFG - - - AKZ101 - 21010 - Anchorage - AK - US - 61.20 - -149.71 - 0 - 0 - AFC - - - AKZ203 - 22030 - Central_Beaufort_Sea_Coast - AK - US - 70.34 - -149.66 - 0 - 0 - AFG - - - AKZ111 - 21110 - Matanuska_Valley - AK - US - 61.60 - -149.43 - 0 - 0 - AFC - - - AKZ125 - 21250 - Western_Prince_William_Sound - AK - US - 60.28 - -149.43 - 0 - 0 - AFC - - - AKZ218 - 22180 - Southeastern_Brooks_Range - AK - US - 67.94 - -147.78 - 0 - 0 - AFG - - - AKZ206 - 22060 - Northeastern_Brooks_Range - AK - US - 68.97 - -147.55 - 0 - 0 - AFG - - - AKZ222 - 22220 - Middle_Tanana_Valley - AK - US - 64.97 - -147.45 - 0 - 0 - AFG - - - AKZ223 - 22230 - Deltana_and_Tanana_Flats - AK - US - 64.13 - -146.62 - 0 - 0 - AFG - - - AKZ131 - 21310 - Northeast_Prince_William_Sound - AK - US - 61.14 - -146.39 - 0 - 0 - AFC - - - AKZ220 - 22200 - Yukon_Flats_and_Surrounding_Upla - AK - US - 66.46 - -146.25 - 0 - 0 - AFG - - - AKZ135 - 21350 - Southeast_Prince_William_Sound - AK - US - 60.65 - -145.32 - 0 - 0 - AFC - - - AKZ141 - 21410 - Copper_River_Basin - AK - US - 61.88 - -144.85 - 0 - 0 - AFC - - - AKZ204 - 22040 - Eastern_Beaufort_Sea_Coast - AK - US - 69.85 - -143.75 - 0 - 0 - AFG - - - AKZ224 - 22240 - Upr_Tanana_Vly_and_the_Ftymile_C - AK - US - 64.21 - -143.50 - 0 - 0 - AFG - - - AKZ226 - 22260 - Eastern_Alaska_Range - AK - US - 62.77 - -142.76 - 0 - 0 - AFG - - - AKZ017 - 20170 - C_Fairweather_to_C_Suckling_Csta - AK - US - 59.74 - -140.70 - 0 - 0 - AJK - - - AKZ022 - 20220 - Salisbury_Snd_to_C_Fairweather_C - AK - US - 58.68 - -137.66 - 0 - 0 - AJK - - - AKZ020 - 20200 - Glacier_Bay - AK - US - 58.79 - -136.99 - 0 - 0 - AJK - - - AKZ021 - 20210 - Eastern_Chichagof_Island - AK - US - 57.88 - -135.51 - 0 - 0 - AJK - - - AKZ019 - 20190 - Haines_Borough_and_Lynn_Canal - AK - US - 58.95 - -135.41 - 0 - 0 - AJK - - - AKZ018 - 20180 - Taiya_Inlet_and_Klondike_Hiway - AK - US - 59.57 - -135.35 - 0 - 0 - AJK - - - AKZ023 - 20230 - C_Decision_to_Salisbury_Snd_Csta - AK - US - 56.85 - -135.25 - 0 - 0 - AJK - - - AKZ024 - 20240 - Ern_Baranof_I_and_Srn_Admty_I - AK - US - 57.31 - -134.27 - 0 - 0 - AJK - - - AKZ025 - 20250 - Juneau_Borough_and_Nrn_Admty_I - AK - US - 58.08 - -133.64 - 0 - 0 - AJK - - - AKZ027 - 20270 - Dixon_Entr_to_C_Decision_Cstal_A - AK - US - 55.36 - -133.19 - 0 - 0 - AJK - - - AKZ026 - 20260 - Inr_Chnls_fr_Kupreanof_I_to_Etol - AK - US - 56.53 - -133.00 - 0 - 0 - AJK - - - AKZ028 - 20280 - Southern_Inner_Channels - AK - US - 55.71 - -132.71 - 0 - 0 - AJK - - - AKZ029 - 20290 - Misty_Fjords - AK - US - 55.67 - -130.98 - 0 - 0 - AJK - - - WAZ516 - 475160 - North_Coast - WA - US - 47.95 - -124.39 - 0 - 0 - SEW - - - ORZ022 - 370220 - Curry_County_Coast - OR - US - 42.35 - -124.27 - 0 - 0 - MFR - - - WAZ515 - 475150 - Western_Strait_of_Juan_De_Fuca - WA - US - 48.19 - -124.25 - 0 - 0 - SEW - - - ORZ021 - 370210 - South_Central_Oregon_Coast - OR - US - 43.28 - -124.24 - 0 - 0 - MFR - - - WAZ517 - 475170 - Central_Coast - WA - US - 47.16 - -124.06 - 0 - 0 - SEW - - - CAZ001 - 50010 - Redwood_Coast - CA - US - 41.02 - -124.03 - 0 - 0 - EKA - - - ORZ002 - 370020 - Central_Oregon_Coast - OR - US - 44.44 - -124.01 - 0 - 0 - PQR - - - ORZ001 - 370010 - North_Oregon_Coast - OR - US - 45.64 - -123.92 - 0 - 0 - PQR - - - ORZ024 - 370240 - Ern_Curry_Cnty_and_Josephine_Cnt - OR - US - 42.39 - -123.75 - 0 - 0 - MFR - - - CAZ003 - 50030 - North_Coast_Interior - CA - US - 40.99 - -123.72 - 0 - 0 - EKA - - - WAZ021 - 470210 - South_Washington_Coast - WA - US - 46.47 - -123.71 - 0 - 0 - PQR - - - CAZ002 - 50020 - Mendocino_Coast - CA - US - 39.40 - -123.64 - 0 - 0 - EKA - - - ORZ004 - 370040 - Ctrl_Coast_Range_of_Wrn_Oregon - OR - US - 44.42 - -123.62 - 0 - 0 - PQR - - - WAZ513 - 475130 - Olympics - WA - US - 47.71 - -123.61 - 0 - 0 - SEW - - - WAZ512 - 475120 - Lower_Chehalis_Valley_Area - WA - US - 47.09 - -123.52 - 0 - 0 - SEW - - - WAZ020 - 470200 - Willapa_Hills - WA - US - 46.52 - -123.51 - 0 - 0 - PQR - - - ORZ003 - 370030 - Coast_Range_of_Northwest_Oregon - OR - US - 45.59 - -123.40 - 0 - 0 - PQR - - - CAZ076 - 50760 - Mendocino_Interior - CA - US - 39.40 - -123.39 - 0 - 0 - EKA - - - ORZ023 - 370230 - Central_Douglas_County - OR - US - 43.32 - -123.35 - 0 - 0 - MFR - - - WAZ514 - 475140 - Eastern_Strait_of_Juan_de_Fuca - WA - US - 48.07 - -123.28 - 0 - 0 - SEW - - - CAZ080 - 50800 - Western_Siskiyou_County - CA - US - 41.49 - -123.13 - 0 - 0 - MFR - - - ORZ008 - 370080 - South__Willamette_Valley - OR - US - 44.32 - -123.11 - 0 - 0 - PQR - - - CAZ004 - 50040 - Upper_Trinity_River - CA - US - 40.44 - -123.07 - 0 - 0 - EKA - - - CAZ505 - 55050 - Cstal_N_Bay_Incl_Pt_Reyes_Natl_S - CA - US - 38.30 - -122.99 - 0 - 0 - MTR - - - WAZ001 - 470010 - San_Juan_County - WA - US - 48.60 - -122.99 - 0 - 0 - SEW - - - ORZ007 - 370070 - Central_Willamette_Valley - OR - US - 45.05 - -122.94 - 0 - 0 - PQR - - - WAZ511 - 475110 - Hood_Canal_Area - WA - US - 47.52 - -122.94 - 0 - 0 - SEW - - - WAZ022 - 470220 - Lwr_Columbia_and_I_-_5_Corridor_ - WA - US - 46.11 - -122.88 - 0 - 0 - PQR - - - ORZ005 - 370050 - Lower_Columbia - OR - US - 45.97 - -122.87 - 0 - 0 - PQR - - - WAZ504 - 475040 - Southwest_Interior - WA - US - 46.78 - -122.87 - 0 - 0 - SEW - - - ORZ026 - 370260 - Jackson_County - OR - US - 42.48 - -122.86 - 0 - 0 - MFR - - - ORZ006 - 370060 - Greater_Portland_Metro_Area - OR - US - 45.52 - -122.83 - 0 - 0 - PQR - - - CAZ506 - 55060 - North_Bay_Interior_Valleys - CA - US - 38.34 - -122.78 - 0 - 0 - MTR - - - ORZ012 - 370120 - Cascade_Foothills_in_Lane_Cnty - OR - US - 43.91 - -122.77 - 0 - 0 - PQR - - - ORZ025 - 370250 - Ern_Douglas_County_Foothills - OR - US - 43.18 - -122.75 - 0 - 0 - MFR - - - CAZ063 - 50630 - Mtns_SWrn_Shasta_Cnty_to_Nrn_L_C - CA - US - 39.91 - -122.73 - 0 - 0 - STO - - - CAZ064 - 50640 - Clear_Lake/Southern_Lake_County - CA - US - 38.96 - -122.67 - 0 - 0 - STO - - - CAZ081 - 50810 - Central_Siskiyou_County - CA - US - 41.68 - -122.60 - 0 - 0 - MFR - - - WAZ503 - 475030 - Western_Whatcom_County - WA - US - 48.82 - -122.59 - 0 - 0 - SEW - - - WAZ039 - 470390 - Greater_Vancouver_Area - WA - US - 45.73 - -122.54 - 0 - 0 - PQR - - - ORZ010 - 370100 - Nrn_Oregon_Cascade_Foothills - OR - US - 44.86 - -122.52 - 0 - 0 - PQR - - - WAZ509 - 475090 - Tacoma_Area - WA - US - 47.17 - -122.52 - 0 - 0 - SEW - - - WAZ510 - 475100 - Admiralty_Inlet_Area - WA - US - 48.15 - -122.50 - 0 - 0 - SEW - - - WAZ040 - 470400 - S_Washington_Cascade_Foothills - WA - US - 46.00 - -122.48 - 0 - 0 - PQR - - - CAZ006 - 50060 - San_Francisco - CA - US - 37.75 - -122.42 - 0 - 0 - MTR - - - WAZ506 - 475060 - Western_Skagit_County - WA - US - 48.47 - -122.42 - 0 - 0 - SEW - - - CAZ509 - 55090 - San_Francisco_Peninsula_Coast - CA - US - 37.36 - -122.38 - 0 - 0 - MTR - - - WAZ508 - 475080 - Seattle/Bremerton_Area - WA - US - 47.51 - -122.29 - 0 - 0 - SEW - - - CAZ507 - 55070 - North_Bay_Mountains - CA - US - 38.54 - -122.27 - 0 - 0 - MTR - - - CAZ015 - 50150 - Northern_Sacramento_Valley - CA - US - 40.26 - -122.25 - 0 - 0 - STO - - - ORZ013 - 370130 - Cascades_in_Lane_County - OR - US - 43.84 - -122.25 - 0 - 0 - PQR - - - ORZ028 - 370280 - Siskiyou_Mtns_and_Srn_Oregon_Cas - OR - US - 42.41 - -122.24 - 0 - 0 - MFR - - - CAZ013 - 50130 - Shasta_L_Area_/_Nrn_Shasta_Cnty - CA - US - 40.87 - -122.21 - 0 - 0 - STO - - - ORZ027 - 370270 - South_Central_Oregon_Cascades - OR - US - 43.21 - -122.21 - 0 - 0 - MFR - - - CAZ082 - 50820 - South_Central_Siskiyou_County - CA - US - 41.30 - -122.14 - 0 - 0 - MFR - - - WAZ507 - 475070 - Everett_and_Vicinity - WA - US - 48.03 - -122.14 - 0 - 0 - SEW - - - CAZ508 - 55080 - San_Francisco_Bay_Shoreline - CA - US - 37.64 - -122.08 - 0 - 0 - MTR - - - WAZ505 - 475050 - East_Puget_Sound_Lowlands - WA - US - 47.53 - -122.05 - 0 - 0 - SEW - - - WAZ019 - 470190 - South_Washington_Cascades - WA - US - 46.00 - -122.04 - 0 - 0 - PQR - - - CAZ512 - 55120 - Santa_Cruz_Mountains - CA - US - 37.20 - -121.98 - 0 - 0 - MTR - - - CAZ510 - 55100 - East_Bay_Interior_Valleys - CA - US - 37.82 - -121.97 - 0 - 0 - MTR - - - ORZ009 - 370090 - Western_Columbia_River_Gorge - OR - US - 45.61 - -121.96 - 0 - 0 - PQR - - - ORZ011 - 370110 - Northern_Oregon_Cascades - OR - US - 44.93 - -121.94 - 0 - 0 - PQR - - - WAZ023 - 470230 - Western_Columbia_River_Gorge - WA - US - 45.66 - -121.92 - 0 - 0 - PQR - - - CAZ016 - 50160 - Central_Sacramento_Valley - CA - US - 39.40 - -121.90 - 0 - 0 - STO - - - CAZ083 - 50830 - N_Ctrl_and_SE_Siskiyou_County - CA - US - 41.59 - -121.90 - 0 - 0 - MFR - - - CAZ530 - 55300 - Srn_Monterey_Bay_and_Big_Sur_Cst - CA - US - 36.35 - -121.90 - 0 - 0 - MTR - - - WAZ519 - 475190 - W_Slopes_Ctrl_Cascades_and_Passe - WA - US - 47.08 - -121.89 - 0 - 0 - SEW - - - CAZ018 - 50180 - Carquinez_Strait_and_Delta - CA - US - 38.07 - -121.80 - 0 - 0 - STO - - - CAZ529 - 55290 - Northern_Monterey_Bay - CA - US - 36.96 - -121.79 - 0 - 0 - MTR - - - CAZ511 - 55110 - E_Bay_Hills_and_the_Diablo_Rng - CA - US - 37.48 - -121.73 - 0 - 0 - MTR - - - CAZ513 - 55130 - Santa_Clara_Vly_Incl_San_Jose - CA - US - 37.17 - -121.69 - 0 - 0 - MTR - - - CAZ066 - 50660 - NE_Foothills/Sacramento_Valley - CA - US - 40.13 - -121.65 - 0 - 0 - STO - - - CAZ017 - 50170 - Southern_Sacramento_Valley - CA - US - 38.64 - -121.63 - 0 - 0 - STO - - - CAZ084 - 50840 - NE_Siskiyou_and_NW_Modoc_Cnties - CA - US - 41.86 - -121.63 - 0 - 0 - MFR - - - ORZ029 - 370290 - Klamath_Basin - OR - US - 42.47 - -121.63 - 0 - 0 - MFR - - - ORZ014 - 370140 - Upper_Hood_River_Valley - OR - US - 45.56 - -121.58 - 0 - 0 - PQR - - - CAZ528 - 55280 - Nrn_Salinas_Vly/Hollister_Vly_an - CA - US - 36.67 - -121.56 - 0 - 0 - MTR - - - CAZ014 - 50140 - Burney_Basin_/_Ern_Shasta_Cnty - CA - US - 40.88 - -121.52 - 0 - 0 - STO - - - WAZ518 - 475180 - W_Slopes_Nrn_Cascades_and_Passes - WA - US - 48.39 - -121.49 - 0 - 0 - SEW - - - CAZ517 - 55170 - Sta_Lucia_Mtns_and_Los_Padres_Na - CA - US - 36.19 - -121.39 - 0 - 0 - MTR - - - CAZ068 - 50680 - Wrn_Plumas_County/Lassen_Park - CA - US - 40.22 - -121.32 - 0 - 0 - STO - - - ORZ030 - 370300 - Nrn_and_Ern_Klamath_Cnty_and_Wrn - OR - US - 42.80 - -121.24 - 0 - 0 - MFR - - - ORZ042 - 370420 - North_Central_Oregon - OR - US - 45.04 - -121.10 - 0 - 0 - PDT - - - CAZ516 - 55160 - Srn_Salinas_Vly/Arroyo_Seco_and_ - CA - US - 36.09 - -121.09 - 0 - 0 - MTR - - - WAZ024 - 470240 - East_Columbia_River_Gorge - WA - US - 45.70 - -121.06 - 0 - 0 - PDT - - - ORZ041 - 370410 - East_Columbia_River_Gorge - OR - US - 45.64 - -121.02 - 0 - 0 - PDT - - - WAZ501 - 475010 - E_Slopes_of_the_Ctrl_Cascades - WA - US - 47.05 - -120.96 - 0 - 0 - PDT - - - ORZ043 - 370430 - Central_Oregon - OR - US - 44.00 - -120.95 - 0 - 0 - PDT - - - CAZ019 - 50190 - Northern_San_Joaquin_Valley - CA - US - 37.76 - -120.93 - 0 - 0 - STO - - - CAZ518 - 55180 - Mtns_Of_Sn_Benito_Cnty_And_Int_M - CA - US - 36.39 - -120.89 - 0 - 0 - MTR - - - CAZ034 - 50340 - San_Luis_Obispo_Cnty_Ctrl_Coast - CA - US - 35.35 - -120.78 - 0 - 0 - LOX - - - WAZ502 - 475020 - East_Slopes_of_the_Srn_Cascades - WA - US - 46.10 - -120.78 - 0 - 0 - PDT - - - CAZ085 - 50850 - Modoc_County - CA - US - 41.58 - -120.74 - 0 - 0 - MFR - - - CAZ067 - 50670 - Motherlode - CA - US - 38.63 - -120.71 - 0 - 0 - STO - - - CAZ071 - 50710 - Lassen-Ern_Plumas-Ern_Sierra_Cnt - CA - US - 40.31 - -120.66 - 0 - 0 - REV - - - WAZ027 - 470270 - Yakima_Valley - WA - US - 46.43 - -120.45 - 0 - 0 - PDT - - - CAZ035 - 50350 - Santa_Barbara_County_Ctrl_Coast - CA - US - 34.72 - -120.41 - 0 - 0 - LOX - - - CAZ089 - 50890 - West-Central_San_Joaquin_Valley - CA - US - 36.62 - -120.39 - 0 - 0 - HNX - - - WAZ026 - 470260 - Kittitas_Valley - WA - US - 47.00 - -120.39 - 0 - 0 - PDT - - - WAZ042 - 470420 - East_Slopes_Northern_Cascades - WA - US - 48.13 - -120.38 - 0 - 0 - OTX - - - CAZ069 - 50690 - West_Slope_Nrn_Sierra_Nevada - CA - US - 38.76 - -120.37 - 0 - 0 - STO - - - CAZ037 - 50370 - San_Luis_Obispo_Cnty_Int_Vlys - CA - US - 35.41 - -120.31 - 0 - 0 - LOX - - - ORZ031 - 370310 - Central_and_Eastern_Lake_County - OR - US - 42.80 - -120.24 - 0 - 0 - MFR - - - ORZ506 - 375060 - Ochoco-John_Day_Highlands - OR - US - 44.34 - -120.20 - 0 - 0 - PDT - - - WAZ041 - 470410 - Wenatchee_Area - WA - US - 47.61 - -120.18 - 0 - 0 - OTX - - - CAZ051 - 50510 - San_Luis_Obispo_County_Mtns - CA - US - 35.16 - -120.17 - 0 - 0 - LOX - - - CAZ036 - 50360 - Santa_Ynez_Valley - CA - US - 34.72 - -120.14 - 0 - 0 - LOX - - - CAZ070 - 50700 - Surprise_Valley_California - CA - US - 41.58 - -120.11 - 0 - 0 - REV - - - CAZ090 - 50900 - East-Central_San_Joaquin_Valley - CA - US - 37.11 - -120.11 - 0 - 0 - HNX - - - ORZ504 - 375040 - Nrn_Wheeler_and_Srn_Gilliam_Cnti - OR - US - 45.01 - -120.10 - 0 - 0 - PDT - - - CAZ072 - 50720 - Greater_Lake_Tahoe_Area - CA - US - 38.89 - -119.96 - 0 - 0 - REV - - - CAZ039 - 50390 - Santa_Barbara_County_S_Coast - CA - US - 34.45 - -119.95 - 0 - 0 - LOX - - - NVZ002 - 280020 - Greater_Lake_Tahoe_Area - NV - US - 39.19 - -119.90 - 0 - 0 - REV - - - CAZ052 - 50520 - Santa_Barbara_County_Mountains - CA - US - 34.77 - -119.88 - 0 - 0 - LOX - - - CAZ091 - 50910 - Southwestern_San_Joaquin_Valley - CA - US - 35.75 - -119.78 - 0 - 0 - HNX - - - CAZ038 - 50380 - Cuyama_Valley - CA - US - 34.96 - -119.77 - 0 - 0 - LOX - - - NVZ005 - 280050 - Northern_Washoe_County - NV - US - 41.01 - -119.65 - 0 - 0 - REV - - - ORZ044 - 370440 - Lower_Columbia_Basin - OR - US - 45.60 - -119.65 - 0 - 0 - PDT - - - WAZ044 - 470440 - Waterville_Plateau - WA - US - 47.68 - -119.65 - 0 - 0 - OTX - - - CAZ093 - 50930 - Mariposa_Madera_and_Fresno_Cnty_ - CA - US - 37.24 - -119.64 - 0 - 0 - HNX - - - NVZ003 - 280030 - Gter_Reno-Carson_Cty-Minden_Area - NV - US - 39.36 - -119.63 - 0 - 0 - REV - - - ORZ505 - 375050 - John_Day_Basin - OR - US - 44.63 - -119.49 - 0 - 0 - PDT - - - WAZ034 - 470340 - Moses_Lake_Area - WA - US - 47.03 - -119.48 - 0 - 0 - OTX - - - WAZ043 - 470430 - Okanogan_Valley - WA - US - 48.47 - -119.47 - 0 - 0 - OTX - - - WAZ028 - 470280 - Lower_Columbia_Basin - WA - US - 46.21 - -119.43 - 0 - 0 - PDT - - - CAZ044 - 50440 - Ventura_County_Interior_Valleys - CA - US - 34.44 - -119.25 - 0 - 0 - LOX - - - CAZ040 - 50400 - Ventura_County_Coast - CA - US - 34.22 - -119.19 - 0 - 0 - LOX - - - CAZ092 - 50920 - Southeastern_San_Joaquin_Valley - CA - US - 35.82 - -119.14 - 0 - 0 - HNX - - - CAZ096 - 50960 - Sierra_NV_fr_Yosemite_to_Kings_C - CA - US - 37.43 - -119.12 - 0 - 0 - HNX - - - CAZ053 - 50530 - Ventura_County_Mountains - CA - US - 34.65 - -119.10 - 0 - 0 - LOX - - - ORZ501 - 375010 - Foothills_of_the_Blue_Mountains - OR - US - 45.53 - -119.07 - 0 - 0 - PDT - - - ORZ061 - 370610 - Harney_County - OR - US - 43.01 - -119.06 - 0 - 0 - BOI - - - CAZ094 - 50940 - Tulare_County_Foothills - CA - US - 36.23 - -118.96 - 0 - 0 - HNX - - - WAZ035 - 470350 - Upper_Columbia_Basin - WA - US - 47.41 - -118.91 - 0 - 0 - OTX - - - ORZ503 - 375030 - Southern_Blue_Mtns_of_Oregon - OR - US - 45.23 - -118.88 - 0 - 0 - PDT - - - CAZ045 - 50450 - Ventura_County_Coastal_Valleys - CA - US - 34.23 - -118.87 - 0 - 0 - LOX - - - WAZ038 - 470380 - Okanogan_Highlands - WA - US - 48.42 - -118.75 - 0 - 0 - OTX - - - CAZ073 - 50730 - Mono - CA - US - 38.08 - -118.74 - 0 - 0 - REV - - - CAZ095 - 50950 - Kern_County_Mountains - CA - US - 35.30 - -118.71 - 0 - 0 - HNX - - - CAZ046 - 50460 - Santa_Monica_Mtns_Recnl_Area - CA - US - 34.09 - -118.58 - 0 - 0 - LOX - - - CAZ088 - 50880 - Santa_Clarita_Valley - CA - US - 34.46 - -118.55 - 0 - 0 - LOX - - - NVZ001 - 280010 - Mineral_and_Srn_Lyon_Counties - NV - US - 38.56 - -118.55 - 0 - 0 - REV - - - NVZ004 - 280040 - Wrn_NV_Bsn_and_Rng_including_Pyr - NV - US - 40.01 - -118.53 - 0 - 0 - REV - - - CAZ547 - 55470 - Los_Angeles_Cnty_Sn_Fernando_Vly - CA - US - 34.21 - -118.51 - 0 - 0 - LOX - - - CAZ097 - 50970 - Tulare_County_Mountains - CA - US - 36.27 - -118.48 - 0 - 0 - HNX - - - CAZ087 - 50870 - Catalina_Island - CA - US - 33.39 - -118.45 - 0 - 0 - LOX - - - CAZ054 - 50540 - Los_Angeles_Cnty_Mtns_excluding_ - CA - US - 34.48 - -118.26 - 0 - 0 - LOX - - - CAZ519 - 55190 - Ern_Sierra_Slopes_of_Inyo_Cnty - CA - US - 36.63 - -118.26 - 0 - 0 - VEF - - - CAZ041 - 50410 - Los_Angeles_Cnty_Cst_including_D - CA - US - 33.92 - -118.24 - 0 - 0 - LOX - - - CAZ059 - 50590 - Antelope_Valley - CA - US - 34.62 - -118.22 - 0 - 0 - LOX - - - ORZ502 - 375020 - Northern_Blue_Mtns_of_Oregon - OR - US - 45.65 - -118.19 - 0 - 0 - PDT - - - NVZ030 - 280300 - Humboldt_County - NV - US - 41.26 - -118.16 - 0 - 0 - LKN - - - WAZ029 - 470290 - Foothills_of_the_Blue_Mountains - WA - US - 46.31 - -118.16 - 0 - 0 - PDT - - - CAZ520 - 55200 - Owens_Valley - CA - US - 36.63 - -118.08 - 0 - 0 - VEF - - - CAZ521 - 55210 - White_Mountains_of_Inyo_County - CA - US - 36.92 - -118.00 - 0 - 0 - VEF - - - CAZ548 - 55480 - Los_Angeles_Cnty_Sn_Gabriel_Vly - CA - US - 34.05 - -117.96 - 0 - 0 - LOX - - - CAZ099 - 50990 - Southeastern_Kern_County_Desert - CA - US - 35.15 - -117.93 - 0 - 0 - HNX - - - WAZ030 - 470300 - Northwest_Blue_Mountains - WA - US - 46.17 - -117.87 - 0 - 0 - PDT - - - CAZ098 - 50980 - Indian_Wells_Valley - CA - US - 35.62 - -117.82 - 0 - 0 - HNX - - - CAZ042 - 50420 - Orange_County_Coastal_Areas - CA - US - 33.67 - -117.79 - 0 - 0 - SGX - - - WAZ037 - 470370 - Northeast_Mountains - WA - US - 48.36 - -117.71 - 0 - 0 - OTX - - - WAZ036 - 470360 - Spokane_Area - WA - US - 47.60 - -117.70 - 0 - 0 - OTX - - - ORZ049 - 370490 - Grande_Ronde_Valley - OR - US - 45.39 - -117.69 - 0 - 0 - PDT - - - ORZ062 - 370620 - Baker_County - OR - US - 44.66 - -117.65 - 0 - 0 - BOI - - - WAZ033 - 470330 - Washington_Palouse - WA - US - 46.89 - -117.64 - 0 - 0 - OTX - - - ORZ063 - 370630 - Malheur_County - OR - US - 43.21 - -117.62 - 0 - 0 - BOI - - - CAZ057 - 50570 - Santa_Ana_Mtns_and_Foothills - CA - US - 33.63 - -117.45 - 0 - 0 - SGX - - - WAZ031 - 470310 - Northeast_Blue_Mountains - WA - US - 46.21 - -117.37 - 0 - 0 - OTX - - - CAZ043 - 50430 - San_Diego_County_Coastal_Areas - CA - US - 33.00 - -117.28 - 0 - 0 - SGX - - - CAZ048 - 50480 - Sn_Bernardino_and_Rivside_Cnty_V - CA - US - 33.85 - -117.28 - 0 - 0 - SGX - - - ORZ050 - 370500 - Wallowa_County - OR - US - 45.54 - -117.17 - 0 - 0 - PDT - - - WAZ032 - 470320 - Lwr_Garfield_and_Asotin_Cnties - WA - US - 46.35 - -117.16 - 0 - 0 - OTX - - - NVZ014 - 280140 - Esmeralda_and_Ctrl_Nye_County - NV - US - 37.65 - -117.15 - 0 - 0 - VEF - - - CAZ055 - 50550 - San_Bernardino_County_Mountains - CA - US - 34.23 - -117.13 - 0 - 0 - SGX - - - ORZ064 - 370640 - Oregon_Lower_Treasure_Valley - OR - US - 44.02 - -117.11 - 0 - 0 - BOI - - - CAZ050 - 50500 - San_Diego_County_Valleys - CA - US - 33.03 - -117.06 - 0 - 0 - SGX - - - CAZ060 - 50600 - Apple_and_Lucerne_Valleys - CA - US - 34.43 - -117.03 - 0 - 0 - SGX - - - CAZ523 - 55230 - Western_Mojave_Desert - CA - US - 35.27 - -116.98 - 0 - 0 - VEF - - - IDZ003 - 120030 - Idaho_Palouse - ID - US - 46.96 - -116.96 - 0 - 0 - OTX - - - CAZ522 - 55220 - Death_Valley_National_Park - CA - US - 36.63 - -116.85 - 0 - 0 - VEF - - - IDZ002 - 120020 - Coeur_d'Alene_Area - ID - US - 47.62 - -116.83 - 0 - 0 - OTX - - - NVZ037 - 280370 - Srn_Lander_Cnty_and_Srn_Eureka_C - NV - US - 39.62 - -116.78 - 0 - 0 - LKN - - - NVZ036 - 280360 - Nrn_Lander_Cnty_and_Nrn_Eureka_C - NV - US - 40.51 - -116.76 - 0 - 0 - LKN - - - IDZ012 - 120120 - Lower_Treasure_Valley - ID - US - 43.82 - -116.75 - 0 - 0 - BOI - - - IDZ026 - 120260 - Lewiston_Area - ID - US - 46.47 - -116.71 - 0 - 0 - OTX - - - IDZ029 - 120290 - Owyhee_Mountains - ID - US - 43.07 - -116.70 - 0 - 0 - BOI - - - CAZ056 - 50560 - Riverside_County_Mountains - CA - US - 33.73 - -116.60 - 0 - 0 - SGX - - - NVZ013 - 280130 - Northern_Nye_County - NV - US - 38.60 - -116.59 - 0 - 0 - LKN - - - CAZ058 - 50580 - San_Diego_County_Mountains - CA - US - 33.00 - -116.57 - 0 - 0 - SGX - - - IDZ001 - 120010 - Northern_Panhandle - ID - US - 48.36 - -116.55 - 0 - 0 - OTX - - - IDZ027 - 120270 - Lewis_and_Srn_Nez_Perce_Cnties - ID - US - 46.16 - -116.51 - 0 - 0 - OTX - - - IDZ008 - 120080 - Lwr_Hells_Canyon/Salmon_Riv_Rgn - ID - US - 45.65 - -116.49 - 0 - 0 - MSO - - - CAZ061 - 50610 - Coachella_Valley - CA - US - 33.73 - -116.36 - 0 - 0 - SGX - - - CAZ062 - 50620 - San_Diego_County_Deserts - CA - US - 33.02 - -116.31 - 0 - 0 - SGX - - - CAZ525 - 55250 - Morongo_Basin - CA - US - 34.39 - -116.15 - 0 - 0 - VEF - - - NVZ017 - 280170 - Wrn_Clark_and_Srn_Nye_County - NV - US - 36.28 - -116.11 - 0 - 0 - VEF - - - IDZ015 - 120150 - Southwest_Highlands - ID - US - 42.51 - -116.02 - 0 - 0 - BOI - - - IDZ011 - 120110 - West_Central_Mountains - ID - US - 44.70 - -115.94 - 0 - 0 - BOI - - - IDZ004 - 120040 - Central_Panhandle_Mountains - ID - US - 47.34 - -115.93 - 0 - 0 - OTX - - - CAZ030 - 50300 - Joshua_Tree_National_Park - CA - US - 33.93 - -115.89 - 0 - 0 - PSR - - - IDZ007 - 120070 - Orofino/Grangeville_Region - ID - US - 46.24 - -115.85 - 0 - 0 - MSO - - - IDZ014 - 120140 - Upper_Treasure_Valley - ID - US - 43.16 - -115.77 - 0 - 0 - BOI - - - CAZ524 - 55240 - Ern_Mojave_Dsrt,_Incl_the_Mojave - CA - US - 35.17 - -115.61 - 0 - 0 - VEF - - - NVZ019 - 280190 - Spring_Mtns-Red_Rock_Canyon - NV - US - 36.13 - -115.57 - 0 - 0 - VEF - - - NVZ031 - 280310 - Northern_Elko_County - NV - US - 41.49 - -115.52 - 0 - 0 - LKN - - - IDZ005 - 120050 - Northern_Clearwater_Mountains - ID - US - 46.65 - -115.47 - 0 - 0 - MSO - - - CAZ033 - 50330 - Imperial_County - CA - US - 33.02 - -115.41 - 0 - 0 - PSR - - - IDZ013 - 120130 - Boise_Mountains - ID - US - 43.79 - -115.39 - 0 - 0 - BOI - - - CAZ032 - 50320 - Riverside_County/Ern_Deserts - CA - US - 33.75 - -115.33 - 0 - 0 - PSR - - - IDZ006 - 120060 - Southern_Clearwater_Mountains - ID - US - 45.88 - -115.33 - 0 - 0 - MSO - - - NVZ034 - 280340 - Ruby_Mtns/East_Humboldt_Range - NV - US - 40.56 - -115.33 - 0 - 0 - LKN - - - MTZ001 - 260010 - Kootenai/Cabinet_Region - MT - US - 48.18 - -115.15 - 0 - 0 - MSO - - - NVZ018 - 280180 - Sheep_Range - NV - US - 36.84 - -115.15 - 0 - 0 - VEF - - - NVZ020 - 280200 - Las_Vegas_Valley - NV - US - 36.11 - -115.12 - 0 - 0 - VEF - - - NVZ022 - 280220 - Southern_Clark_County - NV - US - 35.50 - -115.09 - 0 - 0 - VEF - - - CAZ526 - 55260 - Cadiz_Basin - CA - US - 34.45 - -115.08 - 0 - 0 - VEF - - - MTZ004 - 260040 - Lower_Clark_Fork_Region - MT - US - 47.38 - -115.02 - 0 - 0 - MSO - - - NVZ035 - 280350 - White_Pine_County - NV - US - 39.40 - -114.97 - 0 - 0 - LKN - - - NVZ015 - 280150 - Lincoln_County - NV - US - 37.76 - -114.96 - 0 - 0 - VEF - - - IDZ028 - 120280 - Camas_Prairie - ID - US - 43.34 - -114.86 - 0 - 0 - BOI - - - NVZ032 - 280320 - SW_and_South_Ctrl_Elko_County - NV - US - 40.64 - -114.83 - 0 - 0 - LKN - - - CAZ031 - 50310 - Lower_Colorado_River_Valley_CA - CA - US - 33.39 - -114.79 - 0 - 0 - PSR - - - NVZ021 - 280210 - L_Mead_National_Recreation_Area - NV - US - 35.79 - -114.78 - 0 - 0 - VEF - - - IDZ030 - 120300 - Southern_Twin__Falls_County - ID - US - 42.26 - -114.65 - 0 - 0 - BOI - - - AZZ036 - 30360 - L_Mead_National_Recreation_Area - AZ - US - 35.67 - -114.61 - 0 - 0 - VEF - - - AZZ025 - 30250 - Yuma/Martinez_Lake_and_Vicinity - AZ - US - 32.69 - -114.58 - 0 - 0 - PSR - - - NVZ016 - 280160 - Northeast_Clark_County - NV - US - 36.55 - -114.53 - 0 - 0 - VEF - - - IDZ016 - 120160 - Western_Magic_Valley - ID - US - 42.80 - -114.50 - 0 - 0 - BOI - - - IDZ018 - 120180 - Sawtooth_Mountains - ID - US - 44.18 - -114.49 - 0 - 0 - PIH - - - CAZ527 - 55270 - Sn_Bernardino_Cnty-Upr_CO_Riv_Vl - CA - US - 34.58 - -114.44 - 0 - 0 - VEF - - - AZZ020 - 30200 - Lower_Colorado_River_Valley_AZ - AZ - US - 33.65 - -114.43 - 0 - 0 - PSR - - - IDZ009 - 120090 - Western_Lemhi_County - ID - US - 45.10 - -114.39 - 0 - 0 - MSO - - - AZZ002 - 30020 - Lake_Havasu_and_Fort_Mohave - AZ - US - 34.63 - -114.37 - 0 - 0 - VEF - - - MTZ003 - 260030 - Flathead/Mission_Valleys - MT - US - 47.82 - -114.31 - 0 - 0 - MSO - - - IDZ031 - 120310 - Big_and_Little_Wood_River_Rgn - ID - US - 43.59 - -114.29 - 0 - 0 - PIH - - - NVZ033 - 280330 - Extreme_Eastern_Elko_County - NV - US - 40.64 - -114.23 - 0 - 0 - LKN - - - MTZ005 - 260050 - Missoula/Bitterroot_Valleys - MT - US - 46.44 - -114.10 - 0 - 0 - MSO - - - MTZ006 - 260060 - Bitterroot/Sapphire_Mountains - MT - US - 46.16 - -113.95 - 0 - 0 - MSO - - - MTZ002 - 260020 - West_Glacier_Region - MT - US - 48.30 - -113.94 - 0 - 0 - MSO - - - AZZ003 - 30030 - Northwest_Deserts - AZ - US - 35.14 - -113.92 - 0 - 0 - VEF - - - AZZ021 - 30210 - West_Central_Deserts - AZ - US - 33.86 - -113.90 - 0 - 0 - PSR - - - AZZ026 - 30260 - Southwest_Deserts - AZ - US - 32.75 - -113.90 - 0 - 0 - PSR - - - IDZ017 - 120170 - Eastern_Magic_Valley - ID - US - 42.94 - -113.79 - 0 - 0 - PIH - - - MTZ043 - 260430 - Potomac/Seeley_Lake_Region - MT - US - 47.12 - -113.60 - 0 - 0 - MSO - - - IDZ032 - 120320 - Lost_River/Pashimeroi - ID - US - 44.17 - -113.54 - 0 - 0 - PIH - - - IDZ010 - 120100 - Eastern_Lemhi_County - ID - US - 44.96 - -113.48 - 0 - 0 - MSO - - - UTZ019 - 440190 - Utah's_Dixie_and_Zion_Natl_Pk - UT - US - 37.20 - -113.47 - 0 - 0 - SLC - - - UTZ016 - 440160 - Southwest_Utah - UT - US - 37.98 - -113.33 - 0 - 0 - SLC - - - AZZ001 - 30010 - Northwest_Plateau - AZ - US - 36.49 - -113.28 - 0 - 0 - VEF - - - IDZ022 - 120220 - South_Central_Highlands - ID - US - 42.39 - -113.17 - 0 - 0 - PIH - - - MTZ009 - 260090 - Northern_Rocky_Mountain_Front - MT - US - 48.56 - -113.12 - 0 - 0 - TFX - - - AZZ037 - 30370 - Yavapai_County_Vlys_and_Basins - AZ - US - 34.56 - -113.07 - 0 - 0 - FGZ - - - UTZ005 - 440050 - Great_Salt_Lake_Desert_and_Mtns - UT - US - 40.95 - -113.00 - 0 - 0 - SLC - - - UTZ015 - 440150 - West_Central_Utah - UT - US - 39.29 - -112.99 - 0 - 0 - SLC - - - AZZ008 - 30080 - Yavapai_County__Mountains - AZ - US - 34.82 - -112.97 - 0 - 0 - FGZ - - - AZZ031 - 30310 - Western_Pima_County - AZ - US - 32.14 - -112.87 - 0 - 0 - TWC - - - MTZ007 - 260070 - Butte/Blackfoot_Region - MT - US - 46.40 - -112.84 - 0 - 0 - MSO - - - AZZ027 - 30270 - Southwest_Maricopa_County - AZ - US - 32.94 - -112.77 - 0 - 0 - PSR - - - AZZ022 - 30220 - Northwest_Maricopa_County - AZ - US - 33.67 - -112.70 - 0 - 0 - PSR - - - MTZ008 - 260080 - Beaverhead - MT - US - 45.15 - -112.69 - 0 - 0 - TFX - - - MTZ010 - 260100 - Eastern_Glacier - MT - US - 48.65 - -112.67 - 0 - 0 - TFX - - - IDZ020 - 120200 - Upper_Snake_River_Plain - ID - US - 43.66 - -112.62 - 0 - 0 - PIH - - - MTZ048 - 260480 - Southern_Rocky_Mountain_Front - MT - US - 47.73 - -112.60 - 0 - 0 - TFX - - - IDZ021 - 120210 - Lower_Snake_River_Plain - ID - US - 42.94 - -112.55 - 0 - 0 - PIH - - - AZZ007 - 30070 - Coconino_Plateau - AZ - US - 35.71 - -112.43 - 0 - 0 - FGZ - - - UTZ003 - 440030 - Salt_Lake_and_Tooele_Valleys - UT - US - 40.45 - -112.42 - 0 - 0 - SLC - - - UTZ518 - 445180 - Southern_Utah_Mountains - UT - US - 37.79 - -112.33 - 0 - 0 - SLC - - - AZZ006 - 30060 - Grand_Canyon_Country - AZ - US - 36.22 - -112.32 - 0 - 0 - FGZ - - - MTZ014 - 260140 - Central_and_Srn_Lewis_and_Clark - MT - US - 46.87 - -112.28 - 0 - 0 - TFX - - - UTZ002 - 440020 - Northern_Wasatch_Front - UT - US - 41.39 - -112.16 - 0 - 0 - SLC - - - AZZ004 - 30040 - Kaibab_Plateau - AZ - US - 36.56 - -112.14 - 0 - 0 - FGZ - - - MTZ052 - 260520 - Jefferson - MT - US - 46.15 - -112.13 - 0 - 0 - TFX - - - AZZ023 - 30230 - Greater_Phoenix_Area - AZ - US - 33.57 - -112.09 - 0 - 0 - PSR - - - UTZ020 - 440200 - South_Central_Utah - UT - US - 37.50 - -112.04 - 0 - 0 - SLC - - - MTZ015 - 260150 - Madison - MT - US - 45.28 - -112.02 - 0 - 0 - TFX - - - IDZ019 - 120190 - Upper_Snake_Highlands - ID - US - 44.13 - -112.01 - 0 - 0 - PIH - - - MTZ046 - 260460 - Eastern_Pondera - MT - US - 48.23 - -112.00 - 0 - 0 - TFX - - - IDZ024 - 120240 - Cache_Valley/Idaho_Portion - ID - US - 42.14 - -111.94 - 0 - 0 - PIH - - - UTZ001 - 440010 - Cache_Valley/Utah_Portion - UT - US - 41.73 - -111.93 - 0 - 0 - SLC - - - AZZ038 - 30380 - Oak_Creek_and_Sycamore_Canyons - AZ - US - 34.93 - -111.89 - 0 - 0 - FGZ - - - AZZ005 - 30050 - Marble_and_Glen_Canyons - AZ - US - 36.63 - -111.87 - 0 - 0 - FGZ - - - UTZ004 - 440040 - Southern_Wasatch_Front - UT - US - 40.01 - -111.87 - 0 - 0 - SLC - - - UTZ014 - 440140 - Sanpete/Sevier_Valleys - UT - US - 39.17 - -111.84 - 0 - 0 - SLC - - - AZZ032 - 30320 - Tohono_Oodham_Nation - AZ - US - 31.98 - -111.83 - 0 - 0 - TWC - - - AZZ015 - 30150 - Western_Mogollon_Rim - AZ - US - 35.20 - -111.80 - 0 - 0 - FGZ - - - MTZ049 - 260490 - Eastern_Teton - MT - US - 47.80 - -111.80 - 0 - 0 - TFX - - - IDZ023 - 120230 - Caribou_Highlands - ID - US - 42.94 - -111.78 - 0 - 0 - PIH - - - MTZ044 - 260440 - Toole - MT - US - 48.60 - -111.74 - 0 - 0 - TFX - - - AZZ028 - 30280 - NW_and_North_Ctrl_Pinal_County - AZ - US - 33.08 - -111.67 - 0 - 0 - PSR - - - UTZ007 - 440070 - Wasatch_Mountains_I-80_North - UT - US - 41.36 - -111.61 - 0 - 0 - SLC - - - IDZ025 - 120250 - Wasatch_Mountains/Idaho_Portion - ID - US - 42.30 - -111.47 - 0 - 0 - PIH - - - UTZ008 - 440080 - Wasatch_Mountains_South_of_I-80 - UT - US - 40.17 - -111.45 - 0 - 0 - SLC - - - UTZ517 - 445170 - Central_Utah_Mountains - UT - US - 39.02 - -111.44 - 0 - 0 - SLC - - - MTZ053 - 260530 - Broadwater - MT - US - 46.31 - -111.42 - 0 - 0 - TFX - - - UTZ006 - 440060 - Wasatch_Mountain_Valleys - UT - US - 40.86 - -111.39 - 0 - 0 - SLC - - - MTZ012 - 260120 - Cascade - MT - US - 47.26 - -111.34 - 0 - 0 - TFX - - - AZZ029 - 30290 - Southeast_Pinal_County - AZ - US - 32.88 - -111.33 - 0 - 0 - TWC - - - MTZ055 - 260550 - Gallatin - MT - US - 45.34 - -111.29 - 0 - 0 - TFX - - - AZZ012 - 30120 - Ltl_CO_Riv_Vly_in_Coconino_Cnty - AZ - US - 35.44 - -111.25 - 0 - 0 - FGZ - - - MTZ045 - 260450 - Liberty - MT - US - 48.56 - -111.08 - 0 - 0 - TFX - - - AZZ024 - 30240 - Srn_Gila/Tonto_NF_Foothills - AZ - US - 33.51 - -111.03 - 0 - 0 - PSR - - - MTZ054 - 260540 - Meagher - MT - US - 46.63 - -110.97 - 0 - 0 - TFX - - - WYZ023 - 500230 - Star_Valley - WY - US - 42.89 - -110.96 - 0 - 0 - RIW - - - AZZ009 - 30090 - NE_Plateaus_and_Mesas_Hwy_264_Nw - AZ - US - 36.39 - -110.92 - 0 - 0 - FGZ - - - AZZ033 - 30330 - Tucson_Metro/Marana/Grn_Valley - AZ - US - 32.13 - -110.92 - 0 - 0 - TWC - - - AZZ034 - 30340 - Santa_Cruz_County - AZ - US - 31.54 - -110.91 - 0 - 0 - TWC - - - AZZ018 - 30180 - Northern_Gila_County - AZ - US - 34.06 - -110.85 - 0 - 0 - FGZ - - - UTZ012 - 440120 - Castle_Country - UT - US - 39.29 - -110.85 - 0 - 0 - SLC - - - AZZ016 - 30160 - Eastern_Mogollon_Rim - AZ - US - 34.49 - -110.77 - 0 - 0 - FGZ - - - MTZ064 - 260640 - Paradise_Valley - MT - US - 45.33 - -110.73 - 0 - 0 - BYZ - - - UTZ010 - 440100 - Wasatch_Plateau/Book_Cliffs - UT - US - 39.76 - -110.73 - 0 - 0 - SLC - - - UTZ009 - 440090 - Western_Uinta_Mountains - UT - US - 40.70 - -110.70 - 0 - 0 - SLC - - - UTZ021 - 440210 - Glen_Canyon_Rec_Area/L_Powell - UT - US - 37.54 - -110.70 - 0 - 0 - SLC - - - WYZ024 - 500240 - Salt_River_and_Wyoming_Ranges - WY - US - 42.55 - -110.65 - 0 - 0 - RIW - - - UTZ013 - 440130 - San_Rafael_Swell - UT - US - 38.54 - -110.64 - 0 - 0 - SLC - - - WYZ013 - 500130 - Jackson_Hole - WY - US - 43.63 - -110.62 - 0 - 0 - RIW - - - MTZ040 - 260400 - Northern_Park - MT - US - 45.98 - -110.55 - 0 - 0 - BYZ - - - WYZ012 - 500120 - Teton_and_Gros_Ventre_Mountains - WY - US - 43.64 - -110.55 - 0 - 0 - RIW - - - WYZ021 - 500210 - Southwest_Wyoming - WY - US - 41.29 - -110.55 - 0 - 0 - SLC - - - WYZ027 - 500270 - South_Lincoln_County - WY - US - 41.93 - -110.55 - 0 - 0 - RIW - - - MTZ065 - 260650 - Livingston_Area - MT - US - 45.65 - -110.51 - 0 - 0 - BYZ - - - WYZ001 - 500010 - Yellowstone_National_Park - WY - US - 44.62 - -110.49 - 0 - 0 - RIW - - - MTZ013 - 260130 - Chouteau - MT - US - 47.86 - -110.48 - 0 - 0 - TFX - - - UTZ011 - 440110 - Western_Uinta_Basin - UT - US - 40.22 - -110.46 - 0 - 0 - SLC - - - MTZ068 - 260680 - Crazy_Mountains - MT - US - 46.10 - -110.32 - 0 - 0 - BYZ - - - AZZ040 - 30400 - NE_Plateaus_and_Mesas_S_of_Hwy_2 - AZ - US - 35.52 - -110.30 - 0 - 0 - FGZ - - - AZZ013 - 30130 - Ltl_CO_Riv_Vly_in_Navajo_Cnty - AZ - US - 34.88 - -110.29 - 0 - 0 - FGZ - - - MTZ050 - 260500 - Judith_Basin - MT - US - 47.05 - -110.27 - 0 - 0 - TFX - - - AZZ039 - 30390 - Black_Mesa_Area - AZ - US - 36.37 - -110.25 - 0 - 0 - FGZ - - - MTZ067 - 260670 - Absaroka/Beartooth_Mountains - MT - US - 45.33 - -110.13 - 0 - 0 - BYZ - - - MTZ011 - 260110 - Hill - MT - US - 48.57 - -110.11 - 0 - 0 - TFX - - - UTZ029 - 440290 - Canyonlands/Natural_Bridges - UT - US - 37.87 - -110.03 - 0 - 0 - GJT - - - WYZ025 - 500250 - Upper_Grn_River_Basin_Foothills - WY - US - 42.98 - -110.03 - 0 - 0 - RIW - - - MTZ041 - 260410 - Northern_Sweet_Grass - MT - US - 45.93 - -109.86 - 0 - 0 - BYZ - - - MTZ028 - 260280 - Southern_Wheatland - MT - US - 46.38 - -109.84 - 0 - 0 - BYZ - - - MTZ066 - 260660 - Beartooth_Foothills - MT - US - 45.54 - -109.81 - 0 - 0 - BYZ - - - AZZ010 - 30100 - Chinle_Valley - AZ - US - 36.36 - -109.76 - 0 - 0 - FGZ - - - AZZ030 - 30300 - Upper_Gila_River_Valley - AZ - US - 33.05 - -109.75 - 0 - 0 - TWC - - - AZZ035 - 30350 - Cochise_County - AZ - US - 31.89 - -109.75 - 0 - 0 - TWC - - - WYZ014 - 500140 - Wind_River_Mountains_West - WY - US - 43.00 - -109.70 - 0 - 0 - RIW - - - WYZ026 - 500260 - Upper_Green_River_Basin - WY - US - 42.42 - -109.68 - 0 - 0 - RIW - - - AZZ017 - 30170 - White_Mountains - AZ - US - 33.89 - -109.65 - 0 - 0 - FGZ - - - MTZ063 - 260630 - Judith_Gap - MT - US - 46.65 - -109.65 - 0 - 0 - BYZ - - - UTZ027 - 440270 - Arches/Grand_Flat - UT - US - 38.95 - -109.61 - 0 - 0 - GJT - - - WYZ028 - 500280 - Rock_Springs_and_Green_River - WY - US - 41.51 - -109.60 - 0 - 0 - RIW - - - UTZ025 - 440250 - Tavaputs_Plateau - UT - US - 39.50 - -109.58 - 0 - 0 - GJT - - - UTZ028 - 440280 - La_Sal_and_Abajo_Mountains - UT - US - 38.15 - -109.53 - 0 - 0 - GJT - - - UTZ023 - 440230 - Eastern_Uinta_Mountains - UT - US - 40.68 - -109.52 - 0 - 0 - GJT - - - UTZ024 - 440240 - Eastern_Uinta_Basin - UT - US - 40.21 - -109.51 - 0 - 0 - GJT - - - WYZ002 - 500020 - Absaroka_Mountains - WY - US - 44.24 - -109.49 - 0 - 0 - RIW - - - AZZ014 - 30140 - Ltl_CO_Riv_Vly_in_Apache_Cnty - AZ - US - 34.58 - -109.45 - 0 - 0 - FGZ - - - UTZ022 - 440220 - Southeast_Utah - UT - US - 37.40 - -109.45 - 0 - 0 - GJT - - - WYZ029 - 500290 - Flaming_Gorge - WY - US - 41.25 - -109.42 - 0 - 0 - RIW - - - WYZ016 - 500160 - Upper_Wind_River_Basin - WY - US - 43.44 - -109.41 - 0 - 0 - RIW - - - MTZ056 - 260560 - Red_Lodge_Foothills - MT - US - 45.23 - -109.32 - 0 - 0 - BYZ - - - AZZ011 - 30110 - Chuska_Mtns_and_Defiance_Plateay - AZ - US - 35.98 - -109.31 - 0 - 0 - FGZ - - - WYZ015 - 500150 - Wind_River_Mountains_East - WY - US - 43.09 - -109.31 - 0 - 0 - RIW - - - AZZ019 - 30190 - Northern_Greenlee - AZ - US - 33.42 - -109.27 - 0 - 0 - TWC - - - MTZ051 - 260510 - Fergus - MT - US - 47.25 - -109.26 - 0 - 0 - TFX - - - MTZ042 - 260420 - Golden_Valley - MT - US - 46.36 - -109.22 - 0 - 0 - BYZ - - - MTZ034 - 260340 - Northern_Stillwater - MT - US - 45.78 - -109.21 - 0 - 0 - BYZ - - - WYZ003 - 500030 - Cody_Foothills - WY - US - 44.46 - -109.04 - 0 - 0 - RIW - - - MTZ047 - 260470 - Blaine - MT - US - 48.37 - -108.90 - 0 - 0 - TFX - - - MTZ039 - 260390 - Eastern_Carbon - MT - US - 45.32 - -108.71 - 0 - 0 - BYZ - - - COZ006 - 60060 - Grand_Valley - CO - US - 39.16 - -108.65 - 0 - 0 - GJT - - - COZ021 - 60210 - Four_Corners/Upper_Dolores_Riv - CO - US - 37.49 - -108.64 - 0 - 0 - GJT - - - NMZ030 - 310300 - Southwest_Desert/Bootheel - NM - US - 31.93 - -108.63 - 0 - 0 - EPZ - - - COZ020 - 60200 - Paradox_Vly/Little_Dolores_Riv - CO - US - 38.28 - -108.61 - 0 - 0 - GJT - - - WYZ007 - 500070 - Owl_Creek_and_Bridger_Mountains - WY - US - 43.62 - -108.61 - 0 - 0 - RIW - - - WYZ018 - 500180 - Lander_Foothills - WY - US - 42.81 - -108.61 - 0 - 0 - RIW - - - MTZ060 - 260600 - Southwest_Phillips - MT - US - 47.83 - -108.55 - 0 - 0 - GGW - - - COZ001 - 60010 - Lower_Yampa_River_Basin - CO - US - 40.30 - -108.49 - 0 - 0 - GJT - - - COZ003 - 60030 - Roan_and_Tavaputs_Plateaus - CO - US - 39.63 - -108.44 - 0 - 0 - GJT - - - MTZ029 - 260290 - Musselshell - MT - US - 46.44 - -108.40 - 0 - 0 - BYZ - - - WYZ030 - 500300 - East_Sweetwater_County - WY - US - 41.61 - -108.37 - 0 - 0 - RIW - - - COZ017 - 60170 - Uncompahgre_Plateau/Dallas_Divid - CO - US - 38.58 - -108.35 - 0 - 0 - GJT - - - WYZ017 - 500170 - Wind_River_Basin - WY - US - 43.13 - -108.34 - 0 - 0 - RIW - - - MTZ021 - 260210 - Petroleum - MT - US - 47.18 - -108.28 - 0 - 0 - GGW - - - WYZ005 - 500050 - Southwest_Big_Horn_Basin - WY - US - 43.81 - -108.25 - 0 - 0 - RIW - - - NMZ001 - 310010 - Northwest_Plateau - NM - US - 36.35 - -108.23 - 0 - 0 - ABQ - - - MTZ035 - 260350 - Yellowstone - MT - US - 45.98 - -108.20 - 0 - 0 - BYZ - - - WYZ004 - 500040 - North_Big_Horn_Basin - WY - US - 44.57 - -108.19 - 0 - 0 - RIW - - - NMZ022 - 310220 - SW_Mtns/Lower_Gila_Region - NM - US - 33.00 - -108.17 - 0 - 0 - EPZ - - - NMZ014 - 310140 - SW_Mtns/Upper_Gila_Region - NM - US - 33.77 - -108.13 - 0 - 0 - ABQ - - - NMZ008 - 310080 - West_Central_Mountains - NM - US - 35.06 - -108.09 - 0 - 0 - ABQ - - - COZ007 - 60070 - Debeque_to_Silt_Corridor - CO - US - 39.43 - -108.05 - 0 - 0 - GJT - - - WYZ019 - 500190 - Grn_Mtns_and_Rattlesnake_Range - WY - US - 42.40 - -107.96 - 0 - 0 - RIW - - - COZ011 - 60110 - Ctrl_Gunnison_and_Uncompahgre_Ri - CO - US - 38.64 - -107.94 - 0 - 0 - GJT - - - COZ022 - 60220 - Animas_River_Basin - CO - US - 37.25 - -107.92 - 0 - 0 - GJT - - - WYZ006 - 500060 - Southeast_Big_Horn_Basin - WY - US - 43.87 - -107.90 - 0 - 0 - RIW - - - COZ002 - 60020 - Central_Yampa_River_Basin - CO - US - 40.34 - -107.85 - 0 - 0 - GJT - - - COZ009 - 60090 - Grand_and_Battlement_Mesas - CO - US - 39.17 - -107.85 - 0 - 0 - GJT - - - MTZ016 - 260160 - Central_and_Southeast_Phillips - MT - US - 48.02 - -107.82 - 0 - 0 - GGW - - - MTZ059 - 260590 - Northern_Phillips - MT - US - 48.79 - -107.75 - 0 - 0 - GGW - - - NMZ031 - 310310 - Southwest_Desert/Mimbres_Basin - NM - US - 32.20 - -107.75 - 0 - 0 - EPZ - - - COZ018 - 60180 - Northwestern_San_Juan_Mountains - CO - US - 38.08 - -107.64 - 0 - 0 - GJT - - - COZ019 - 60190 - Southwest_San_Juan_Mountains - CO - US - 37.48 - -107.64 - 0 - 0 - GJT - - - COZ013 - 60130 - Flattops - CO - US - 39.98 - -107.53 - 0 - 0 - GJT - - - MTZ038 - 260380 - Southern_Big_Horn - MT - US - 45.26 - -107.48 - 0 - 0 - BYZ - - - WYZ098 - 500980 - Northeast_Big_Horn_Mountains - WY - US - 44.78 - -107.43 - 0 - 0 - BYZ - - - MTZ057 - 260570 - Northern_Big_Horn - MT - US - 45.78 - -107.40 - 0 - 0 - BYZ - - - MTZ030 - 260300 - Treasure - MT - US - 46.18 - -107.34 - 0 - 0 - BYZ - - - COZ023 - 60230 - San_Juan_River_Basin - CO - US - 37.20 - -107.30 - 0 - 0 - GJT - - - WYZ008 - 500080 - Bighorn_Mountains_West - WY - US - 44.21 - -107.28 - 0 - 0 - RIW - - - WYZ061 - 500610 - Southwest_Carbon - WY - US - 41.53 - -107.28 - 0 - 0 - CYS - - - COZ014 - 60140 - Upper_Gunnison_River_Valley - CO - US - 38.51 - -107.17 - 0 - 0 - GJT - - - NMZ002 - 310020 - Northwest_Mtns_including_Jemez - NM - US - 36.16 - -107.10 - 0 - 0 - ABQ - - - WYZ009 - 500090 - Bighorn_Mountains_Southeast - WY - US - 43.88 - -107.07 - 0 - 0 - RIW - - - MTZ022 - 260220 - Garfield - MT - US - 47.41 - -107.03 - 0 - 0 - GGW - - - COZ008 - 60080 - Central_Colorado_River_Basin - CO - US - 39.60 - -106.99 - 0 - 0 - GJT - - - MTZ031 - 260310 - Northern_Rosebud - MT - US - 46.27 - -106.99 - 0 - 0 - BYZ - - - NMZ023 - 310230 - Sierra_County_Lakes_Region - NM - US - 33.04 - -106.97 - 0 - 0 - EPZ - - - COZ005 - 60050 - Upper_Yampa_River_Basin - CO - US - 40.41 - -106.96 - 0 - 0 - GJT - - - COZ012 - 60120 - West_Elk_and_Sawatch_Mountains - CO - US - 38.84 - -106.93 - 0 - 0 - GJT - - - COZ010 - 60100 - Gore_and_Elk_Mtns/Ctrl_Mtn_Vlys - CO - US - 39.45 - -106.92 - 0 - 0 - GJT - - - NMZ032 - 310320 - Southern_Desert - NM - US - 32.37 - -106.87 - 0 - 0 - EPZ - - - NMZ015 - 310150 - Lower_Rio_Grande_Valley - NM - US - 34.03 - -106.86 - 0 - 0 - ABQ - - - NMZ009 - 310090 - Middle_Rio_Gnde_Vly/Albuquerque_ - NM - US - 34.90 - -106.85 - 0 - 0 - ABQ - - - WYZ062 - 500620 - North_Carbon - WY - US - 42.03 - -106.80 - 0 - 0 - CYS - - - WYZ020 - 500200 - Natrona_County_Lower_Elevations - WY - US - 42.97 - -106.79 - 0 - 0 - RIW - - - WYZ099 - 500990 - Sheridan_Foothills - WY - US - 44.78 - -106.77 - 0 - 0 - BYZ - - - COZ004 - 60040 - Elkhead_and_Park_Mountains - CO - US - 40.46 - -106.73 - 0 - 0 - GJT - - - COZ066 - 60660 - La_Garita_Mtns_Above_10000_Ft - CO - US - 38.05 - -106.72 - 0 - 0 - PUB - - - COZ064 - 60640 - Saguache_Cnty_W_of_Continental_D - CO - US - 38.24 - -106.64 - 0 - 0 - PUB - - - COZ031 - 60310 - W_Jackson_and_W_Gnd_Cnties_Above - CO - US - 40.48 - -106.62 - 0 - 0 - BOU - - - MTZ017 - 260170 - Central_and_Southern_Valley - MT - US - 48.12 - -106.62 - 0 - 0 - GGW - - - MTZ061 - 260610 - Northern_Valley - MT - US - 48.79 - -106.62 - 0 - 0 - GGW - - - COZ068 - 60680 - Ern_Sn_Juan_Mtns_Above_10000_Ft - CO - US - 37.40 - -106.61 - 0 - 0 - PUB - - - MTZ058 - 260580 - Southern_Rosebud - MT - US - 45.43 - -106.50 - 0 - 0 - BYZ - - - WYZ011 - 500110 - Southeast_Johnson_County - WY - US - 43.83 - -106.48 - 0 - 0 - RIW - - - WYZ010 - 500100 - Northeast_Johnson_County - WY - US - 44.36 - -106.46 - 0 - 0 - RIW - - - NMZ010 - 310100 - Sandia/Manzano_Mountains - NM - US - 34.76 - -106.40 - 0 - 0 - ABQ - - - COZ060 - 60600 - Ern_Sawatch_Mtns_Above_11000_Ft - CO - US - 38.81 - -106.39 - 0 - 0 - PUB - - - COZ059 - 60590 - Leadvl_Vic/L_Cnty_Below_11000_Ft - CO - US - 39.20 - -106.38 - 0 - 0 - PUB - - - WYZ063 - 500630 - Snowy_Range - WY - US - 41.39 - -106.37 - 0 - 0 - CYS - - - COZ065 - 60650 - Saguache_Cnty_E_of_Continental_D - CO - US - 38.07 - -106.36 - 0 - 0 - PUB - - - TXZ055 - 430550 - El_Paso - TX - US - 31.70 - -106.30 - 0 - 0 - EPZ - - - COZ030 - 60300 - Jackson_County_Below_9000_Feet - CO - US - 40.69 - -106.28 - 0 - 0 - BOU - - - WYZ022 - 500220 - Casper_Mountain - WY - US - 42.61 - -106.24 - 0 - 0 - RIW - - - COZ067 - 60670 - Upr_Rio_Gnde_Vly/Ern_Sn_Juan_Mtn - CO - US - 37.45 - -106.23 - 0 - 0 - PUB - - - COZ058 - 60580 - Wrn_Mosquito_Rng/E_L_Cnty_Above_ - CO - US - 39.21 - -106.21 - 0 - 0 - PUB - - - COZ061 - 60610 - Wrn_Chaffee_Cnty_Between_9000_an - CO - US - 38.74 - -106.20 - 0 - 0 - PUB - - - NMZ024 - 310240 - Tularosa_Basin/Southern_Desert - NM - US - 32.70 - -106.18 - 0 - 0 - EPZ - - - COZ032 - 60320 - Gnd_and_Summit_Cnties_Below_9000 - CO - US - 40.00 - -106.17 - 0 - 0 - BOU - - - COZ062 - 60620 - Ctrl_Chaffee_Cnty_Below_9000_Ft - CO - US - 38.74 - -106.12 - 0 - 0 - PUB - - - NMZ003 - 310030 - Upper_Rio_Grande_Valley - NM - US - 35.80 - -106.07 - 0 - 0 - ABQ - - - COZ069 - 60690 - Del_Norte_Vic/Nrn_Sn_Luis_Vly_Be - CO - US - 37.97 - -106.04 - 0 - 0 - PUB - - - COZ063 - 60630 - Wrn_Mosquito_Rng/E_Chaffee_Cnty_ - CO - US - 38.79 - -105.96 - 0 - 0 - PUB - - - COZ033 - 60330 - S_and_E_Jackson/Larimer/N_and_NE - CO - US - 40.55 - -105.94 - 0 - 0 - BOU - - - COZ034 - 60340 - S_and_SE_Gnd/W_Ctrl_and_SW_Bould - CO - US - 39.55 - -105.91 - 0 - 0 - BOU - - - COZ070 - 60700 - Alamosa_Vic/Ctrl_Sn_Luis_Vly_Bel - CO - US - 37.54 - -105.91 - 0 - 0 - PUB - - - NMZ011 - 310110 - Ctrl_Hi_Plains/Estancia_Valley - NM - US - 34.77 - -105.83 - 0 - 0 - ABQ - - - MTZ023 - 260230 - McCone - MT - US - 47.59 - -105.82 - 0 - 0 - GGW - - - WYZ065 - 500650 - Laramie_Valley - WY - US - 41.59 - -105.81 - 0 - 0 - CYS - - - COZ071 - 60710 - Southern_San_Luis_Valley - CO - US - 37.27 - -105.78 - 0 - 0 - PUB - - - WYZ064 - 500640 - North_Laramie_Range - WY - US - 42.32 - -105.68 - 0 - 0 - CYS - - - COZ037 - 60370 - Central_and_SE_Park_County - CO - US - 39.05 - -105.66 - 0 - 0 - BOU - - - COZ077 - 60770 - Wrn/Ctrl_Fremt_Cnty_Below_8500_F - CO - US - 38.46 - -105.63 - 0 - 0 - PUB - - - MTZ036 - 260360 - Powder_River - MT - US - 45.40 - -105.63 - 0 - 0 - BYZ - - - NMZ025 - 310250 - Southern_Sacramento_Mountains - NM - US - 32.91 - -105.63 - 0 - 0 - EPZ - - - COZ076 - 60760 - NWrn_Fremt_County_above_8500_Ft - CO - US - 38.55 - -105.61 - 0 - 0 - PUB - - - COZ073 - 60730 - Nrn_Sngre_De_Cristo_Mtns_Above_1 - CO - US - 38.00 - -105.59 - 0 - 0 - PUB - - - NMZ017 - 310170 - Capitan/Nrn_Sacramento_Mtns - NM - US - 33.71 - -105.58 - 0 - 0 - ABQ - - - MTZ018 - 260180 - Daniels - MT - US - 48.79 - -105.57 - 0 - 0 - GGW - - - NMZ004 - 310040 - Sangre_de_Cristo_Mountains - NM - US - 36.25 - -105.57 - 0 - 0 - ABQ - - - WYZ054 - 500540 - Northern_Campbell - WY - US - 44.60 - -105.55 - 0 - 0 - UNR - - - WYZ055 - 500550 - Southern_Campbell - WY - US - 43.84 - -105.55 - 0 - 0 - UNR - - - COZ072 - 60720 - Nrn_Sngre_De_Cristo_Mtns_Between - CO - US - 37.98 - -105.49 - 0 - 0 - PUB - - - WYZ059 - 500590 - Converse - WY - US - 43.02 - -105.49 - 0 - 0 - CYS - - - MTZ032 - 260320 - Custer - MT - US - 46.33 - -105.47 - 0 - 0 - BYZ - - - COZ078 - 60780 - Wet_Mtn_Valley_Below_8500_Feet - CO - US - 38.08 - -105.45 - 0 - 0 - PUB - - - TXZ056 - 430560 - Hudspeth - TX - US - 31.32 - -105.45 - 0 - 0 - EPZ - - - MTZ020 - 260200 - Western_Roosevelt - MT - US - 48.29 - -105.41 - 0 - 0 - GGW - - - COZ035 - 60350 - Larimer_and_Boulder_Cnties_Betwe - CO - US - 40.46 - -105.39 - 0 - 0 - BOU - - - MTZ026 - 260260 - Prairie - MT - US - 46.86 - -105.34 - 0 - 0 - GGW - - - COZ036 - 60360 - Jefferson_and_W_Douglas_Cnties_A - CO - US - 39.53 - -105.32 - 0 - 0 - BOU - - - WYZ066 - 500660 - Laramie_Range - WY - US - 41.45 - -105.31 - 0 - 0 - CYS - - - COZ081 - 60810 - Teller_Cnty/Rampart_Rng_above_75 - CO - US - 38.82 - -105.22 - 0 - 0 - PUB - - - COZ039 - 60390 - Boulder_And_Jefferson_Cnties_Bel - CO - US - 39.87 - -105.19 - 0 - 0 - BOU - - - COZ075 - 60750 - Srn_Sngre_De_Cristo_Mtns_Above_1 - CO - US - 37.20 - -105.17 - 0 - 0 - PUB - - - COZ079 - 60790 - Wet_Mtns_Between_6300_and_10000_ - CO - US - 38.08 - -105.14 - 0 - 0 - PUB - - - COZ080 - 60800 - Wet_Mountains_Above_10000_Ft - CO - US - 37.98 - -105.14 - 0 - 0 - PUB - - - COZ083 - 60830 - Canon_City_Vic/Ern_Fremt_County - CO - US - 38.44 - -105.14 - 0 - 0 - PUB - - - NMZ026 - 310260 - Guadalupe_Mtns_of_Chaves_County - NM - US - 32.83 - -105.08 - 0 - 0 - ABQ - - - NMZ016 - 310160 - Lincoln_Cnty_Hi_Plns/Hondo_Vly - NM - US - 33.74 - -105.07 - 0 - 0 - ABQ - - - COZ082 - 60820 - PIkes_Peak_above_11000_Ft - CO - US - 38.82 - -105.04 - 0 - 0 - PUB - - - WYZ067 - 500670 - Platte - WY - US - 42.13 - -104.97 - 0 - 0 - CYS - - - COZ087 - 60870 - Walsenbg_Vic/Upr_Huerfano_Riv_Bs - CO - US - 37.67 - -104.87 - 0 - 0 - PUB - - - MTZ025 - 260250 - Dawson - MT - US - 47.32 - -104.86 - 0 - 0 - GGW - - - COZ074 - 60740 - Srn_Sngre_De_Cristo_Mtns_Between - CO - US - 37.26 - -104.83 - 0 - 0 - PUB - - - COZ040 - 60400 - N_Douglas_Cnty_Below_6000_Feet/D - CO - US - 39.73 - -104.81 - 0 - 0 - BOU - - - COZ038 - 60380 - Larimer_Cnty_Below_6000_Feet/NW_ - CO - US - 40.63 - -104.80 - 0 - 0 - BOU - - - WYZ069 - 500690 - Cheyenne_Foothills - WY - US - 41.33 - -104.75 - 0 - 0 - CYS - - - WYZ056 - 500560 - Western_Crook - WY - US - 44.59 - -104.72 - 0 - 0 - UNR - - - TXZ258 - 432580 - Guadalupe_Mountains - TX - US - 31.90 - -104.71 - 0 - 0 - MAF - - - NMZ027 - 310270 - Guadalupe_Mtns_of_Eddy_County - NM - US - 32.30 - -104.67 - 0 - 0 - MAF - - - MTZ024 - 260240 - Richland - MT - US - 47.75 - -104.64 - 0 - 0 - GGW - - - TXZ079 - 430790 - Presidio_Valley - TX - US - 29.95 - -104.61 - 0 - 0 - MAF - - - COZ043 - 60430 - Central_and_South_Weld_County - CO - US - 40.29 - -104.59 - 0 - 0 - BOU - - - WYZ058 - 500580 - Weston - WY - US - 43.84 - -104.57 - 0 - 0 - UNR - - - MTZ019 - 260190 - Sheridan - MT - US - 48.70 - -104.55 - 0 - 0 - GGW - - - TXZ057 - 430570 - Van_Horn_and_Hiway_54_Corridor - TX - US - 31.24 - -104.55 - 0 - 0 - MAF - - - COZ086 - 60860 - Pueblo_and_Vic/Pueblo_Cnty_Below - CO - US - 38.12 - -104.54 - 0 - 0 - PUB - - - MTZ037 - 260370 - Carter - MT - US - 45.57 - -104.54 - 0 - 0 - BYZ - - - NMZ005 - 310050 - Northeast_Highlands - NM - US - 36.10 - -104.54 - 0 - 0 - ABQ - - - COZ085 - 60850 - CO_Spgs_Vic/Srn_El_Paso_Cnty/Ram - CO - US - 38.74 - -104.51 - 0 - 0 - PUB - - - MTZ062 - 260620 - Eastern_Roosevelt - MT - US - 48.28 - -104.51 - 0 - 0 - GGW - - - COZ088 - 60880 - Trinidad_Vic/Wrn_Las_Animas_Cnty - CO - US - 37.40 - -104.50 - 0 - 0 - PUB - - - COZ084 - 60840 - Nrn_El_Paso_Cnty/Monument_Ridge/ - CO - US - 38.99 - -104.49 - 0 - 0 - PUB - - - WYZ060 - 500600 - Niobrara - WY - US - 43.06 - -104.49 - 0 - 0 - CYS - - - MTZ033 - 260330 - Fallon - MT - US - 46.29 - -104.48 - 0 - 0 - BYZ - - - NMZ012 - 310120 - Conchas_Lake/Guadalupe_County - NM - US - 35.08 - -104.46 - 0 - 0 - ABQ - - - COZ041 - 60410 - Elbert/Ctrl_and_E_Douglas_Cnties - CO - US - 39.28 - -104.43 - 0 - 0 - BOU - - - NMZ018 - 310180 - De_Baca_County - NM - US - 34.39 - -104.41 - 0 - 0 - ABQ - - - TXZ080 - 430800 - Marfa_Plateau - TX - US - 30.16 - -104.39 - 0 - 0 - MAF - - - WYZ057 - 500570 - Wyoming_Black_Hills - WY - US - 44.38 - -104.37 - 0 - 0 - UNR - - - WYZ068 - 500680 - Goshen - WY - US - 42.09 - -104.35 - 0 - 0 - CYS - - - MTZ027 - 260270 - Wibaux - MT - US - 47.02 - -104.33 - 0 - 0 - GGW - - - WYZ070 - 500700 - Pine_Bluffs - WY - US - 41.28 - -104.28 - 0 - 0 - CYS - - - NMZ028 - 310280 - Eddy_County_Plains - NM - US - 32.49 - -104.27 - 0 - 0 - MAF - - - WYZ071 - 500710 - Northeastern_Crook - WY - US - 44.79 - -104.21 - 0 - 0 - UNR - - - NMZ019 - 310190 - Chaves_County_Plains - NM - US - 33.53 - -104.19 - 0 - 0 - ABQ - - - COZ042 - 60420 - Northeast_Weld_County - CO - US - 40.75 - -104.10 - 0 - 0 - BOU - - - COZ045 - 60450 - Ctrl_and_E_Adams_and_Arapahoe_Cn - CO - US - 39.78 - -104.10 - 0 - 0 - BOU - - - NMZ006 - 310060 - Harding_County - NM - US - 35.81 - -103.89 - 0 - 0 - ABQ - - - NDZ031 - 340310 - Golden_Valley - ND - US - 46.94 - -103.83 - 0 - 0 - BIS - - - COZ046 - 60460 - N_and_NE_Elbert_Cnty_Below_6000_ - CO - US - 39.33 - -103.81 - 0 - 0 - BOU - - - COZ044 - 60440 - Morgan_County - CO - US - 40.25 - -103.80 - 0 - 0 - BOU - - - TXZ074 - 430740 - Davis/Apache_Mountains_Area - TX - US - 30.71 - -103.80 - 0 - 0 - MAF - - - TXZ058 - 430580 - Reeves_Cnty_and_Upr_Trans_Pecos - TX - US - 31.39 - -103.78 - 0 - 0 - MAF - - - COZ089 - 60890 - Crowley_County - CO - US - 38.31 - -103.77 - 0 - 0 - PUB - - - NEZ001 - 270010 - Sioux - NE - US - 42.50 - -103.73 - 0 - 0 - CYS - - - COZ093 - 60930 - La_Junta_Vicinity/Otero_County - CO - US - 37.95 - -103.72 - 0 - 0 - PUB - - - SDZ024 - 410240 - Northern_Black_Hills - SD - US - 44.31 - -103.72 - 0 - 0 - UNR - - - NEZ019 - 270190 - Scotts_Bluff - NE - US - 41.85 - -103.71 - 0 - 0 - CYS - - - NEZ020 - 270200 - Banner - NE - US - 41.54 - -103.71 - 0 - 0 - CYS - - - NEZ054 - 270540 - Kimball - NE - US - 41.20 - -103.71 - 0 - 0 - CYS - - - SDZ028 - 410280 - Central_Black_Hills - SD - US - 44.00 - -103.69 - 0 - 0 - UNR - - - SDZ029 - 410290 - Southern_Black_Hills - SD - US - 43.67 - -103.69 - 0 - 0 - UNR - - - NMZ007 - 310070 - Far_Northeast_Plains - NM - US - 36.37 - -103.67 - 0 - 0 - ABQ - - - TXZ059 - 430590 - Loving - TX - US - 31.83 - -103.66 - 0 - 0 - MAF - - - SDZ025 - 410250 - Northern_Foot_Hills - SD - US - 44.44 - -103.64 - 0 - 0 - UNR - - - SDZ027 - 410270 - Southern_Foot_Hills - SD - US - 43.36 - -103.64 - 0 - 0 - UNR - - - COZ047 - 60470 - SE_Elbert_Cnty_Below_6000_Feet/S - CO - US - 38.80 - -103.60 - 0 - 0 - BOU - - - NMZ013 - 310130 - Quay_County - NM - US - 35.17 - -103.57 - 0 - 0 - ABQ - - - COZ094 - 60940 - Eastern_Las_Animas_County - CO - US - 37.32 - -103.56 - 0 - 0 - PUB - - - SDZ041 - 410410 - Fall_River - SD - US - 43.24 - -103.53 - 0 - 0 - UNR - - - NDZ043 - 340430 - Bowman - ND - US - 46.11 - -103.52 - 0 - 0 - BIS - - - SDZ012 - 410120 - Butte - SD - US - 44.89 - -103.51 - 0 - 0 - UNR - - - SDZ001 - 410010 - Harding - SD - US - 45.58 - -103.50 - 0 - 0 - UNR - - - NDZ040 - 340400 - Slope - ND - US - 46.45 - -103.49 - 0 - 0 - BIS - - - NMZ020 - 310200 - Roosevelt_County - NM - US - 34.08 - -103.49 - 0 - 0 - ABQ - - - NDZ001 - 340010 - Divide - ND - US - 48.82 - -103.47 - 0 - 0 - BIS - - - NDZ009 - 340090 - Williams - ND - US - 48.30 - -103.44 - 0 - 0 - BIS - - - NMZ033 - 310330 - Central_Lea_County - NM - US - 32.75 - -103.43 - 0 - 0 - MAF - - - NMZ029 - 310290 - Northern_Lea_County - NM - US - 33.28 - -103.40 - 0 - 0 - MAF - - - NMZ034 - 310340 - Southern_Lea_County - NM - US - 32.25 - -103.39 - 0 - 0 - MAF - - - NMZ021 - 310210 - Curry_County - NM - US - 34.64 - -103.38 - 0 - 0 - ABQ - - - NDZ032 - 340320 - Billings - ND - US - 46.98 - -103.35 - 0 - 0 - BIS - - - SDZ072 - 410720 - Sturgis/Piedmont_Foot_Hills - SD - US - 44.38 - -103.35 - 0 - 0 - UNR - - - NDZ017 - 340170 - McKenzie - ND - US - 47.74 - -103.31 - 0 - 0 - BIS - - - SDZ074 - 410740 - Hermosa_Foot_Hills - SD - US - 43.67 - -103.27 - 0 - 0 - UNR - - - COZ049 - 60490 - Washington_County - CO - US - 40.00 - -103.24 - 0 - 0 - BOU - - - SDZ026 - 410260 - Rapid_City - SD - US - 44.00 - -103.23 - 0 - 0 - UNR - - - TXZ067 - 430670 - Ward - TX - US - 31.46 - -103.18 - 0 - 0 - MAF - - - NEZ002 - 270020 - Dawes - NE - US - 42.72 - -103.14 - 0 - 0 - CYS - - - COZ048 - 60480 - Logan_County - CO - US - 40.72 - -103.11 - 0 - 0 - BOU - - - COZ095 - 60950 - Western_Kiowa_County - CO - US - 38.43 - -103.11 - 0 - 0 - PUB - - - NEZ003 - 270030 - Box_Butte - NE - US - 42.22 - -103.07 - 0 - 0 - CYS - - - TXZ060 - 430600 - Winkler - TX - US - 31.87 - -103.07 - 0 - 0 - MAF - - - TXZ081 - 430810 - Big_Bend_Area - TX - US - 29.69 - -103.06 - 0 - 0 - MAF - - - COZ097 - 60970 - Las_Animas_Vicinity/Bent_County - CO - US - 37.95 - -103.05 - 0 - 0 - PUB - - - NEZ021 - 270210 - Morrill - NE - US - 41.72 - -103.00 - 0 - 0 - CYS - - - NEZ055 - 270550 - Cheyenne - NE - US - 41.22 - -102.99 - 0 - 0 - CYS - - - SDZ030 - 410300 - Custer_Co_Plains - SD - US - 43.67 - -102.96 - 0 - 0 - UNR - - - TXZ027 - 430270 - Bailey - TX - US - 34.07 - -102.82 - 0 - 0 - LUB - - - TXZ033 - 430330 - Cochran - TX - US - 33.61 - -102.82 - 0 - 0 - LUB - - - TXZ039 - 430390 - Yoakum - TX - US - 33.17 - -102.82 - 0 - 0 - LUB - - - SDZ073 - 410730 - Southern_Meade_Co_Plains - SD - US - 44.38 - -102.78 - 0 - 0 - UNR - - - TXZ021 - 430210 - Parmer - TX - US - 34.53 - -102.78 - 0 - 0 - LUB - - - TXZ075 - 430750 - Pecos - TX - US - 30.72 - -102.67 - 0 - 0 - MAF - - - NDZ033 - 340330 - Stark - ND - US - 46.82 - -102.66 - 0 - 0 - BIS - - - NDZ018 - 340180 - Dunn - ND - US - 47.40 - -102.63 - 0 - 0 - BIS - - - TXZ050 - 430500 - Andrews - TX - US - 32.30 - -102.63 - 0 - 0 - MAF - - - TXZ045 - 430450 - Gaines - TX - US - 32.74 - -102.62 - 0 - 0 - MAF - - - COZ092 - 60920 - Cheyenne_County - CO - US - 38.82 - -102.61 - 0 - 0 - GLD - - - COZ091 - 60910 - Kit_Carson_County - CO - US - 39.30 - -102.60 - 0 - 0 - GLD - - - TXZ001 - 430010 - Dallam - TX - US - 36.27 - -102.60 - 0 - 0 - AMA - - - TXZ006 - 430060 - Hartley - TX - US - 35.84 - -102.59 - 0 - 0 - AMA - - - TXZ011 - 430110 - Oldham - TX - US - 35.40 - -102.59 - 0 - 0 - AMA - - - TXZ016 - 430160 - Deaf_Smith - TX - US - 34.97 - -102.59 - 0 - 0 - AMA - - - COZ099 - 60990 - Springfield_Vic/Baca_County - CO - US - 37.32 - -102.56 - 0 - 0 - PUB - - - SDZ031 - 410310 - Pennington_Co_Plains - SD - US - 44.10 - -102.56 - 0 - 0 - UNR - - - SDZ042 - 410420 - Shannon - SD - US - 43.35 - -102.54 - 0 - 0 - UNR - - - TXZ061 - 430610 - Ector - TX - US - 31.87 - -102.54 - 0 - 0 - MAF - - - TXZ068 - 430680 - Crane - TX - US - 31.37 - -102.54 - 0 - 0 - MAF - - - OKZ001 - 360010 - Cimarron - OK - US - 36.74 - -102.51 - 0 - 0 - AMA - - - NDZ044 - 340440 - Adams - ND - US - 46.11 - -102.50 - 0 - 0 - BIS - - - NDZ002 - 340020 - Burke - ND - US - 48.78 - -102.48 - 0 - 0 - BIS - - - SDZ002 - 410020 - Perkins - SD - US - 45.49 - -102.48 - 0 - 0 - UNR - - - SDZ013 - 410130 - Northern_Meade_Co_Plains - SD - US - 44.82 - -102.48 - 0 - 0 - UNR - - - NDZ041 - 340410 - Hettinger - ND - US - 46.42 - -102.46 - 0 - 0 - BIS - - - COZ090 - 60900 - Yuma_County - CO - US - 40.00 - -102.42 - 0 - 0 - GLD - - - NEZ004 - 270040 - Sheridan - NE - US - 42.50 - -102.40 - 0 - 0 - LBF - - - COZ096 - 60960 - Eastern_Kiowa_County - CO - US - 38.44 - -102.39 - 0 - 0 - PUB - - - COZ098 - 60980 - Lamar_Vicinity/Prowers_County - CO - US - 37.95 - -102.39 - 0 - 0 - PUB - - - NDZ010 - 340100 - Mountrail - ND - US - 48.16 - -102.38 - 0 - 0 - BIS - - - COZ050 - 60500 - Sedgwick_County - CO - US - 40.87 - -102.35 - 0 - 0 - BOU - - - COZ051 - 60510 - Phillips_County - CO - US - 40.59 - -102.35 - 0 - 0 - BOU - - - TXZ028 - 430280 - Lamb - TX - US - 34.07 - -102.35 - 0 - 0 - LUB - - - TXZ034 - 430340 - Hockley - TX - US - 33.61 - -102.34 - 0 - 0 - LUB - - - NEZ022 - 270220 - Garden - NE - US - 41.61 - -102.33 - 0 - 0 - LBF - - - NEZ056 - 270560 - Deuel - NE - US - 41.11 - -102.33 - 0 - 0 - LBF - - - TXZ040 - 430400 - Terry - TX - US - 33.17 - -102.33 - 0 - 0 - LUB - - - TXZ022 - 430220 - Castro - TX - US - 34.53 - -102.26 - 0 - 0 - LUB - - - TXZ082 - 430820 - Terrell - TX - US - 30.22 - -102.11 - 0 - 0 - MAF - - - TXZ069 - 430690 - Upton - TX - US - 31.37 - -102.04 - 0 - 0 - MAF - - - TXZ062 - 430620 - Midland - TX - US - 31.87 - -102.03 - 0 - 0 - MAF - - - TXZ051 - 430510 - Martin - TX - US - 32.30 - -101.95 - 0 - 0 - MAF - - - TXZ046 - 430460 - Dawson - TX - US - 32.74 - -101.94 - 0 - 0 - MAF - - - TXZ017 - 430170 - Randall - TX - US - 34.97 - -101.90 - 0 - 0 - AMA - - - TXZ002 - 430020 - Sherman - TX - US - 36.27 - -101.89 - 0 - 0 - AMA - - - TXZ007 - 430070 - Moore - TX - US - 35.84 - -101.89 - 0 - 0 - AMA - - - TXZ012 - 430120 - Potter - TX - US - 35.40 - -101.89 - 0 - 0 - AMA - - - TXZ029 - 430290 - Hale - TX - US - 34.07 - -101.82 - 0 - 0 - LUB - - - TXZ035 - 430350 - Lubbock - TX - US - 33.61 - -101.82 - 0 - 0 - LUB - - - TXZ041 - 430410 - Lynn - TX - US - 33.17 - -101.82 - 0 - 0 - LUB - - - KSZ041 - 160410 - Greeley - KS - US - 38.47 - -101.80 - 0 - 0 - GLD - - - KSZ084 - 160840 - Morton - KS - US - 37.19 - -101.80 - 0 - 0 - DDC - - - KSZ061 - 160610 - Hamilton - KS - US - 37.99 - -101.78 - 0 - 0 - DDC - - - KSZ074 - 160740 - Stanton - KS - US - 37.56 - -101.78 - 0 - 0 - DDC - - - KSZ027 - 160270 - Wallace - KS - US - 38.91 - -101.76 - 0 - 0 - GLD - - - NEZ023 - 270230 - Grant - NE - US - 41.91 - -101.75 - 0 - 0 - LBF - - - KSZ001 - 160010 - Cheyenne - KS - US - 39.78 - -101.73 - 0 - 0 - GLD - - - NDZ019 - 340190 - Mercer - ND - US - 47.28 - -101.73 - 0 - 0 - BIS - - - TXZ023 - 430230 - Swisher - TX - US - 34.53 - -101.73 - 0 - 0 - LUB - - - KSZ013 - 160130 - Sherman - KS - US - 39.35 - -101.72 - 0 - 0 - GLD - - - NEZ035 - 270350 - Arthur - NE - US - 41.56 - -101.70 - 0 - 0 - LBF - - - NEZ069 - 270690 - Chase - NE - US - 40.52 - -101.69 - 0 - 0 - LBF - - - NEZ079 - 270790 - Dundy - NE - US - 40.17 - -101.69 - 0 - 0 - GLD - - - SDZ044 - 410440 - Bennett - SD - US - 43.19 - -101.67 - 0 - 0 - UNR - - - TXZ076 - 430760 - Crockett - TX - US - 30.69 - -101.67 - 0 - 0 - SJT - - - NEZ057 - 270570 - Keith - NE - US - 41.19 - -101.65 - 0 - 0 - LBF - - - NEZ058 - 270580 - Perkins - NE - US - 40.85 - -101.65 - 0 - 0 - LBF - - - SDZ043 - 410430 - Jackson - SD - US - 43.69 - -101.61 - 0 - 0 - UNR - - - NDZ011 - 340110 - Ward - ND - US - 48.33 - -101.60 - 0 - 0 - BIS - - - NDZ042 - 340420 - Grant - ND - US - 46.37 - -101.58 - 0 - 0 - BIS - - - SDZ014 - 410140 - Ziebach - SD - US - 45.00 - -101.57 - 0 - 0 - UNR - - - NDZ003 - 340030 - Renville - ND - US - 48.73 - -101.54 - 0 - 0 - BIS - - - SDZ032 - 410320 - Haakon - SD - US - 44.37 - -101.53 - 0 - 0 - UNR - - - TXZ063 - 430630 - Glasscock - TX - US - 31.87 - -101.52 - 0 - 0 - MAF - - - TXZ070 - 430700 - Reagan - TX - US - 31.37 - -101.52 - 0 - 0 - MAF - - - OKZ002 - 360020 - Texas - OK - US - 36.74 - -101.49 - 0 - 0 - AMA - - - TXZ047 - 430470 - Borden - TX - US - 32.74 - -101.43 - 0 - 0 - MAF - - - TXZ052 - 430520 - Howard - TX - US - 32.30 - -101.43 - 0 - 0 - MAF - - - NEZ094 - 270940 - Western_Cherry - NE - US - 42.54 - -101.42 - 0 - 0 - LBF - - - TXZ013 - 430130 - Carson - TX - US - 35.40 - -101.36 - 0 - 0 - AMA - - - TXZ018 - 430180 - Armstrong - TX - US - 34.97 - -101.36 - 0 - 0 - AMA - - - TXZ003 - 430030 - Hansford - TX - US - 36.27 - -101.35 - 0 - 0 - AMA - - - TXZ008 - 430080 - Hutchinson - TX - US - 35.84 - -101.35 - 0 - 0 - AMA - - - KSZ042 - 160420 - Wichita - KS - US - 38.48 - -101.34 - 0 - 0 - GLD - - - NDZ034 - 340340 - Morton - ND - US - 46.63 - -101.33 - 0 - 0 - BIS - - - NDZ020 - 340200 - Oliver - ND - US - 47.14 - -101.32 - 0 - 0 - BIS - - - KSZ062 - 160620 - Kearny - KS - US - 37.99 - -101.31 - 0 - 0 - DDC - - - KSZ085 - 160850 - Stevens - KS - US - 37.19 - -101.31 - 0 - 0 - DDC - - - KSZ075 - 160750 - Grant - KS - US - 37.56 - -101.30 - 0 - 0 - DDC - - - TXZ030 - 430300 - Floyd - TX - US - 34.07 - -101.30 - 0 - 0 - LUB - - - TXZ036 - 430360 - Crosby - TX - US - 33.61 - -101.30 - 0 - 0 - LUB - - - TXZ042 - 430420 - Garza - TX - US - 33.17 - -101.30 - 0 - 0 - LUB - - - TXZ183 - 431830 - Val_Verde - TX - US - 29.76 - -101.22 - 0 - 0 - EWX - - - TXZ024 - 430240 - Briscoe - TX - US - 34.53 - -101.21 - 0 - 0 - LUB - - - SDZ003 - 410030 - Corson - SD - US - 45.71 - -101.15 - 0 - 0 - ABR - - - KSZ028 - 160280 - Logan - KS - US - 38.91 - -101.14 - 0 - 0 - GLD - - - NEZ024 - 270240 - Hooker - NE - US - 41.91 - -101.13 - 0 - 0 - LBF - - - KSZ002 - 160020 - Rawlins - KS - US - 39.78 - -101.07 - 0 - 0 - GLD - - - NEZ036 - 270360 - McPherson - NE - US - 41.56 - -101.06 - 0 - 0 - LBF - - - NEZ070 - 270700 - Hayes - NE - US - 40.52 - -101.06 - 0 - 0 - LBF - - - KSZ014 - 160140 - Thomas - KS - US - 39.35 - -101.05 - 0 - 0 - GLD - - - NDZ021 - 340210 - McLean - ND - US - 47.51 - -101.04 - 0 - 0 - BIS - - - NEZ080 - 270800 - Hitchcock - NE - US - 40.17 - -101.04 - 0 - 0 - GLD - - - TXZ064 - 430640 - Sterling - TX - US - 31.83 - -101.04 - 0 - 0 - SJT - - - TXZ071 - 430710 - Irion - TX - US - 31.31 - -100.98 - 0 - 0 - SJT - - - TXZ048 - 430480 - Scurry - TX - US - 32.74 - -100.92 - 0 - 0 - MAF - - - TXZ053 - 430530 - Mitchell - TX - US - 32.30 - -100.92 - 0 - 0 - MAF - - - KSZ043 - 160430 - Scott - KS - US - 38.48 - -100.90 - 0 - 0 - DDC - - - NDZ045 - 340450 - Sioux - ND - US - 46.19 - -100.90 - 0 - 0 - BIS - - - SDZ015 - 410150 - Dewey - SD - US - 45.10 - -100.89 - 0 - 0 - ABR - - - SDZ033 - 410330 - Stanley - SD - US - 44.48 - -100.88 - 0 - 0 - ABR - - - KSZ076 - 160760 - Haskell - KS - US - 37.56 - -100.86 - 0 - 0 - DDC - - - KSZ086 - 160860 - Seward - KS - US - 37.19 - -100.85 - 0 - 0 - DDC - - - NDZ004 - 340040 - Bottineau - ND - US - 48.77 - -100.82 - 0 - 0 - BIS - - - TXZ004 - 430040 - Ochiltree - TX - US - 36.27 - -100.82 - 0 - 0 - AMA - - - TXZ009 - 430090 - Roberts - TX - US - 35.84 - -100.82 - 0 - 0 - AMA - - - TXZ014 - 430140 - Gray - TX - US - 35.40 - -100.81 - 0 - 0 - AMA - - - TXZ019 - 430190 - Donley - TX - US - 34.96 - -100.81 - 0 - 0 - AMA - - - TXZ031 - 430310 - Motley - TX - US - 34.08 - -100.78 - 0 - 0 - LUB - - - TXZ037 - 430370 - Dickens - TX - US - 33.62 - -100.78 - 0 - 0 - LUB - - - TXZ043 - 430430 - Kent - TX - US - 33.18 - -100.78 - 0 - 0 - LUB - - - NEZ059 - 270590 - Lincoln - NE - US - 41.04 - -100.74 - 0 - 0 - LBF - - - SDZ046 - 410460 - Mellette - SD - US - 43.63 - -100.72 - 0 - 0 - UNR - - - SDZ047 - 410470 - Todd - SD - US - 43.19 - -100.72 - 0 - 0 - UNR - - - SDZ045 - 410450 - Jones - SD - US - 43.95 - -100.71 - 0 - 0 - ABR - - - TXZ025 - 430250 - Hall - TX - US - 34.53 - -100.68 - 0 - 0 - LUB - - - KSZ063 - 160630 - Finney - KS - US - 37.99 - -100.66 - 0 - 0 - DDC - - - NDZ012 - 340120 - McHenry - ND - US - 48.24 - -100.63 - 0 - 0 - BIS - - - NEZ025 - 270250 - Thomas - NE - US - 41.91 - -100.55 - 0 - 0 - LBF - - - TXZ077 - 430770 - Schleicher - TX - US - 30.89 - -100.54 - 0 - 0 - SJT - - - TXZ078 - 430780 - Sutton - TX - US - 30.49 - -100.54 - 0 - 0 - SJT - - - NEZ005 - 270050 - Eastern_Cherry - NE - US - 42.53 - -100.53 - 0 - 0 - LBF - - - TXZ065 - 430650 - Coke - TX - US - 31.89 - -100.53 - 0 - 0 - SJT - - - NDZ035 - 340350 - Burleigh - ND - US - 46.98 - -100.52 - 0 - 0 - BIS - - - KSZ029 - 160290 - Gove - KS - US - 38.91 - -100.48 - 0 - 0 - GLD - - - NEZ037 - 270370 - Logan - NE - US - 41.57 - -100.48 - 0 - 0 - LBF - - - OKZ003 - 360030 - Beaver - OK - US - 36.74 - -100.48 - 0 - 0 - AMA - - - NEZ081 - 270810 - Red_Willow - NE - US - 40.17 - -100.47 - 0 - 0 - GLD - - - KSZ003 - 160030 - Decatur - KS - US - 39.78 - -100.46 - 0 - 0 - GLD - - - KSZ044 - 160440 - Lane - KS - US - 38.47 - -100.46 - 0 - 0 - DDC - - - TXZ202 - 432020 - Kinney - TX - US - 29.35 - -100.45 - 0 - 0 - EWX - - - KSZ015 - 160150 - Sheridan - KS - US - 39.35 - -100.44 - 0 - 0 - GLD - - - KSZ077 - 160770 - Gray - KS - US - 37.73 - -100.43 - 0 - 0 - DDC - - - TXZ049 - 430490 - Fisher - TX - US - 32.74 - -100.41 - 0 - 0 - SJT - - - TXZ054 - 430540 - Nolan - TX - US - 32.30 - -100.41 - 0 - 0 - SJT - - - TXZ072 - 430720 - Tom_Green - TX - US - 31.39 - -100.40 - 0 - 0 - SJT - - - TXZ217 - 432170 - Maverick - TX - US - 28.65 - -100.39 - 0 - 0 - EWX - - - KSZ087 - 160870 - Meade - KS - US - 37.23 - -100.37 - 0 - 0 - DDC - - - NEZ071 - 270710 - Frontier - NE - US - 40.52 - -100.37 - 0 - 0 - LBF - - - NDZ022 - 340220 - Sheridan - ND - US - 47.59 - -100.36 - 0 - 0 - BIS - - - TXZ005 - 430050 - Lipscomb - TX - US - 36.28 - -100.27 - 0 - 0 - AMA - - - TXZ010 - 430100 - Hemphill - TX - US - 35.84 - -100.27 - 0 - 0 - AMA - - - TXZ015 - 430150 - Wheeler - TX - US - 35.40 - -100.27 - 0 - 0 - AMA - - - TXZ020 - 430200 - Collingsworth - TX - US - 34.96 - -100.27 - 0 - 0 - AMA - - - NDZ046 - 340460 - Emmons - ND - US - 46.29 - -100.26 - 0 - 0 - BIS - - - TXZ032 - 430320 - Cottle - TX - US - 34.08 - -100.26 - 0 - 0 - LUB - - - TXZ038 - 430380 - King - TX - US - 33.62 - -100.26 - 0 - 0 - LUB - - - TXZ044 - 430440 - Stonewall - TX - US - 33.18 - -100.26 - 0 - 0 - LUB - - - TXZ184 - 431840 - Edwards - TX - US - 29.96 - -100.22 - 0 - 0 - EWX - - - TXZ026 - 430260 - Childress - TX - US - 34.53 - -100.21 - 0 - 0 - LUB - - - SDZ034 - 410340 - Sully - SD - US - 44.72 - -100.20 - 0 - 0 - ABR - - - SDZ004 - 410040 - Campbell - SD - US - 45.77 - -100.12 - 0 - 0 - ABR - - - SDZ009 - 410090 - Walworth - SD - US - 45.43 - -100.10 - 0 - 0 - ABR - - - SDZ035 - 410350 - Hughes - SD - US - 44.33 - -100.10 - 0 - 0 - ABR - - - SDZ016 - 410160 - Potter - SD - US - 45.07 - -100.00 - 0 - 0 - ABR - - - NEZ026 - 270260 - Blaine - NE - US - 41.91 - -99.97 - 0 - 0 - LBF - - - TXZ066 - 430660 - Runnels - TX - US - 31.83 - -99.97 - 0 - 0 - SJT - - - NEZ008 - 270080 - Brown - NE - US - 42.46 - -99.93 - 0 - 0 - LBF - - - KSZ045 - 160450 - Ness - KS - US - 38.47 - -99.91 - 0 - 0 - DDC - - - NEZ082 - 270820 - Furnas - NE - US - 40.17 - -99.91 - 0 - 0 - GID - - - KSZ004 - 160040 - Norton - KS - US - 39.78 - -99.90 - 0 - 0 - GLD - - - KSZ064 - 160640 - Hodgeman - KS - US - 38.08 - -99.89 - 0 - 0 - DDC - - - KSZ078 - 160780 - Ford - KS - US - 37.69 - -99.89 - 0 - 0 - DDC - - - NDZ013 - 340130 - Pierce - ND - US - 48.20 - -99.89 - 0 - 0 - BIS - - - TXZ127 - 431270 - Taylor - TX - US - 32.30 - -99.89 - 0 - 0 - SJT - - - KSZ016 - 160160 - Graham - KS - US - 39.34 - -99.88 - 0 - 0 - GLD - - - SDZ049 - 410490 - Tripp - SD - US - 43.38 - -99.88 - 0 - 0 - UNR - - - TXZ113 - 431130 - Jones - TX - US - 32.74 - -99.88 - 0 - 0 - SJT - - - KSZ030 - 160300 - Trego - KS - US - 38.91 - -99.87 - 0 - 0 - DDC - - - NEZ072 - 270720 - Gosper - NE - US - 40.52 - -99.86 - 0 - 0 - GID - - - TXZ073 - 430730 - Concho - TX - US - 31.34 - -99.86 - 0 - 0 - SJT - - - NDZ005 - 340050 - Rolette - ND - US - 48.77 - -99.84 - 0 - 0 - BIS - - - OKZ033 - 360330 - Harmon - OK - US - 34.77 - -99.83 - 0 - 0 - OUN - - - SDZ048 - 410480 - Lyman - SD - US - 43.86 - -99.83 - 0 - 0 - ABR - - - TXZ185 - 431850 - Real - TX - US - 29.86 - -99.83 - 0 - 0 - EWX - - - KSZ088 - 160880 - Clark - KS - US - 37.23 - -99.82 - 0 - 0 - DDC - - - NEZ060 - 270600 - Dawson - NE - US - 40.86 - -99.81 - 0 - 0 - GID - - - TXZ168 - 431680 - Menard - TX - US - 30.90 - -99.80 - 0 - 0 - SJT - - - NDZ036 - 340360 - Kidder - ND - US - 46.98 - -99.79 - 0 - 0 - BIS - - - TXZ203 - 432030 - Uvalde - TX - US - 29.36 - -99.77 - 0 - 0 - EWX - - - TXZ084 - 430840 - Foard - TX - US - 33.99 - -99.76 - 0 - 0 - OUN - - - TXZ218 - 432180 - Zavala - TX - US - 28.87 - -99.76 - 0 - 0 - EWX - - - TXZ228 - 432280 - Dimmit - TX - US - 28.42 - -99.75 - 0 - 0 - EWX - - - TXZ083 - 430830 - Hardeman - TX - US - 34.32 - -99.74 - 0 - 0 - OUN - - - NEZ006 - 270060 - Keya_Paha - NE - US - 42.85 - -99.73 - 0 - 0 - LBF - - - TXZ087 - 430870 - Knox - TX - US - 33.61 - -99.73 - 0 - 0 - OUN - - - TXZ098 - 430980 - Haskell - TX - US - 33.18 - -99.73 - 0 - 0 - SJT - - - NEZ038 - 270380 - Custer - NE - US - 41.39 - -99.72 - 0 - 0 - LBF - - - TXZ169 - 431690 - Kimble - TX - US - 30.50 - -99.71 - 0 - 0 - SJT - - - OKZ009 - 360090 - Ellis - OK - US - 36.22 - -99.69 - 0 - 0 - OUN - - - OKZ014 - 360140 - Roger_Mills - OK - US - 35.72 - -99.68 - 0 - 0 - OUN - - - OKZ021 - 360210 - Beckham - OK - US - 35.27 - -99.68 - 0 - 0 - OUN - - - NDZ023 - 340230 - Wells - ND - US - 47.59 - -99.67 - 0 - 0 - BIS - - - OKZ004 - 360040 - Harper - OK - US - 36.79 - -99.65 - 0 - 0 - OUN - - - OKZ034 - 360340 - Greer - OK - US - 34.92 - -99.56 - 0 - 0 - OUN - - - TXZ239 - 432390 - Webb - TX - US - 27.73 - -99.51 - 0 - 0 - CRP - - - SDZ036 - 410360 - Hyde - SD - US - 44.55 - -99.49 - 0 - 0 - ABR - - - NDZ047 - 340470 - Logan - ND - US - 46.46 - -99.48 - 0 - 0 - BIS - - - TXZ139 - 431390 - Coleman - TX - US - 31.75 - -99.46 - 0 - 0 - SJT - - - NEZ009 - 270090 - Rock - NE - US - 42.44 - -99.45 - 0 - 0 - LBF - - - NEZ027 - 270270 - Loup - NE - US - 41.91 - -99.45 - 0 - 0 - LBF - - - NDZ050 - 340500 - McIntosh - ND - US - 46.11 - -99.44 - 0 - 0 - BIS - - - OKZ036 - 360360 - Jackson - OK - US - 34.59 - -99.44 - 0 - 0 - OUN - - - NEZ073 - 270730 - Phelps - NE - US - 40.51 - -99.41 - 0 - 0 - GID - - - NEZ083 - 270830 - Harlan - NE - US - 40.17 - -99.40 - 0 - 0 - GID - - - TXZ128 - 431280 - Callahan - TX - US - 32.30 - -99.37 - 0 - 0 - SJT - - - TXZ114 - 431140 - Shackelford - TX - US - 32.74 - -99.36 - 0 - 0 - SJT - - - TXZ154 - 431540 - McCulloch - TX - US - 31.22 - -99.35 - 0 - 0 - SJT - - - KSZ005 - 160050 - Phillips - KS - US - 39.78 - -99.34 - 0 - 0 - GID - - - TXZ186 - 431860 - Kerr - TX - US - 30.04 - -99.34 - 0 - 0 - EWX - - - KSZ017 - 160170 - Rooks - KS - US - 39.35 - -99.32 - 0 - 0 - GID - - - KSZ031 - 160310 - Ellis - KS - US - 38.91 - -99.31 - 0 - 0 - DDC - - - KSZ046 - 160460 - Rush - KS - US - 38.52 - -99.30 - 0 - 0 - DDC - - - KSZ079 - 160790 - Edwards - KS - US - 37.90 - -99.29 - 0 - 0 - DDC - - - KSZ080 - 160800 - Kiowa - KS - US - 37.55 - -99.28 - 0 - 0 - DDC - - - OKZ010 - 360100 - Woodward - OK - US - 36.48 - -99.28 - 0 - 0 - OUN - - - KSZ089 - 160890 - Comanche - KS - US - 37.19 - -99.27 - 0 - 0 - DDC - - - NDZ006 - 340060 - Towner - ND - US - 48.69 - -99.25 - 0 - 0 - FGF - - - SDZ051 - 410510 - Buffalo - SD - US - 44.06 - -99.25 - 0 - 0 - ABR - - - KSZ065 - 160650 - Pawnee - KS - US - 38.17 - -99.24 - 0 - 0 - DDC - - - SDZ005 - 410050 - McPherson - SD - US - 45.77 - -99.23 - 0 - 0 - ABR - - - SDZ010 - 410100 - Edmunds - SD - US - 45.42 - -99.22 - 0 - 0 - ABR - - - TXZ085 - 430850 - Wilbarger - TX - US - 34.14 - -99.22 - 0 - 0 - OUN - - - TXZ170 - 431700 - Mason - TX - US - 30.72 - -99.22 - 0 - 0 - SJT - - - TXZ088 - 430880 - Baylor - TX - US - 33.62 - -99.21 - 0 - 0 - OUN - - - TXZ099 - 430990 - Throckmorton - TX - US - 33.18 - -99.21 - 0 - 0 - SJT - - - TXZ187 - 431870 - Bandera - TX - US - 29.74 - -99.21 - 0 - 0 - EWX - - - TXZ248 - 432480 - Zapata - TX - US - 26.94 - -99.21 - 0 - 0 - BRO - - - NDZ014 - 340140 - Benson - ND - US - 48.11 - -99.19 - 0 - 0 - FGF - - - SDZ017 - 410170 - Faulk - SD - US - 45.07 - -99.15 - 0 - 0 - ABR - - - SDZ057 - 410570 - Brule - SD - US - 43.72 - -99.13 - 0 - 0 - FSD - - - TXZ204 - 432040 - Medina - TX - US - 29.39 - -99.11 - 0 - 0 - EWX - - - TXZ219 - 432190 - Frio - TX - US - 28.87 - -99.11 - 0 - 0 - EWX - - - TXZ229 - 432290 - La_Salle - TX - US - 28.34 - -99.10 - 0 - 0 - CRP - - - NEZ061 - 270610 - Buffalo - NE - US - 40.85 - -99.07 - 0 - 0 - GID - - - SDZ050 - 410500 - Gregory - SD - US - 43.25 - -99.02 - 0 - 0 - FSD - - - OKZ015 - 360150 - Dewey - OK - US - 35.99 - -99.01 - 0 - 0 - OUN - - - OKZ035 - 360350 - Kiowa - OK - US - 34.86 - -99.01 - 0 - 0 - OUN - - - SDZ037 - 410370 - Hand - SD - US - 44.55 - -99.01 - 0 - 0 - ABR - - - OKZ016 - 360160 - Custer - OK - US - 35.64 - -99.00 - 0 - 0 - OUN - - - NEZ028 - 270280 - Garfield - NE - US - 41.91 - -98.99 - 0 - 0 - LBF - - - NEZ039 - 270390 - Valley - NE - US - 41.56 - -98.98 - 0 - 0 - GID - - - OKZ005 - 360050 - Woods - OK - US - 36.69 - -98.98 - 0 - 0 - OUN - - - OKZ022 - 360220 - Washita - OK - US - 35.29 - -98.98 - 0 - 0 - OUN - - - NEZ046 - 270460 - Sherman - NE - US - 41.22 - -98.97 - 0 - 0 - GID - - - NDZ037 - 340370 - Stutsman - ND - US - 46.98 - -98.96 - 0 - 0 - BIS - - - NEZ074 - 270740 - Kearney - NE - US - 40.51 - -98.95 - 0 - 0 - GID - - - NEZ084 - 270840 - Franklin - NE - US - 40.17 - -98.95 - 0 - 0 - GID - - - TXZ188 - 431880 - Gillespie - TX - US - 30.32 - -98.95 - 0 - 0 - EWX - - - TXZ140 - 431400 - Brown - TX - US - 31.77 - -98.94 - 0 - 0 - SJT - - - OKZ037 - 360370 - Tillman - OK - US - 34.38 - -98.92 - 0 - 0 - OUN - - - NDZ024 - 340240 - Eddy - ND - US - 47.72 - -98.90 - 0 - 0 - FGF - - - NDZ025 - 340250 - Foster - ND - US - 47.46 - -98.89 - 0 - 0 - BIS - - - TXZ115 - 431150 - Stephens - TX - US - 32.74 - -98.83 - 0 - 0 - FWD - - - TXZ129 - 431290 - Eastland - TX - US - 32.30 - -98.80 - 0 - 0 - FWD - - - KSZ006 - 160060 - Smith - KS - US - 39.78 - -98.78 - 0 - 0 - GID - - - NEZ007 - 270070 - Boyd - NE - US - 42.88 - -98.77 - 0 - 0 - LBF - - - NEZ010 - 270100 - Holt - NE - US - 42.49 - -98.77 - 0 - 0 - LBF - - - KSZ018 - 160180 - Osborne - KS - US - 39.34 - -98.76 - 0 - 0 - GID - - - KSZ032 - 160320 - Russell - KS - US - 38.91 - -98.76 - 0 - 0 - ICT - - - TXZ252 - 432520 - Starr - TX - US - 26.52 - -98.76 - 0 - 0 - BRO - - - KSZ047 - 160470 - Barton - KS - US - 38.47 - -98.75 - 0 - 0 - ICT - - - NDZ015 - 340150 - Ramsey - ND - US - 48.23 - -98.75 - 0 - 0 - FGF - - - TXZ155 - 431550 - San_Saba - TX - US - 31.21 - -98.75 - 0 - 0 - SJT - - - KSZ066 - 160660 - Stafford - KS - US - 38.03 - -98.74 - 0 - 0 - DDC - - - KSZ081 - 160810 - Pratt - KS - US - 37.64 - -98.73 - 0 - 0 - DDC - - - TXZ249 - 432490 - Jim_Hogg - TX - US - 27.08 - -98.70 - 0 - 0 - BRO - - - SDZ063 - 410630 - Charles_Mix - SD - US - 43.17 - -98.69 - 0 - 0 - FSD - - - TXZ086 - 430860 - Wichita - TX - US - 34.01 - -98.69 - 0 - 0 - OUN - - - KSZ090 - 160900 - Barber - KS - US - 37.23 - -98.68 - 0 - 0 - DDC - - - TXZ089 - 430890 - Archer - TX - US - 33.62 - -98.68 - 0 - 0 - OUN - - - TXZ100 - 431000 - Young - TX - US - 33.18 - -98.68 - 0 - 0 - FWD - - - TXZ189 - 431890 - Kendall - TX - US - 29.93 - -98.67 - 0 - 0 - EWX - - - TXZ171 - 431710 - Llano - TX - US - 30.71 - -98.65 - 0 - 0 - EWX - - - SDZ052 - 410520 - Jerauld - SD - US - 44.07 - -98.63 - 0 - 0 - FSD - - - TXZ142 - 431420 - Mills - TX - US - 31.48 - -98.63 - 0 - 0 - FWD - - - SDZ058 - 410580 - Aurora - SD - US - 43.72 - -98.57 - 0 - 0 - FSD - - - TXZ230 - 432300 - McMullen - TX - US - 28.35 - -98.57 - 0 - 0 - CRP - - - NDZ048 - 340480 - La_Moure - ND - US - 46.46 - -98.54 - 0 - 0 - BIS - - - TXZ141 - 431410 - Comanche - TX - US - 31.98 - -98.54 - 0 - 0 - FWD - - - OKZ011 - 360110 - Major - OK - US - 36.33 - -98.53 - 0 - 0 - OUN - - - NEZ029 - 270290 - Wheeler - NE - US - 41.91 - -98.52 - 0 - 0 - LBF - - - NEZ040 - 270400 - Greeley - NE - US - 41.57 - -98.52 - 0 - 0 - GID - - - TXZ240 - 432400 - Duval - TX - US - 27.66 - -98.52 - 0 - 0 - CRP - - - NDZ051 - 340510 - Dickey - ND - US - 46.11 - -98.51 - 0 - 0 - BIS - - - NEZ047 - 270470 - Howard - NE - US - 41.22 - -98.51 - 0 - 0 - GID - - - NEZ062 - 270620 - Hall - NE - US - 40.87 - -98.50 - 0 - 0 - GID - - - NEZ075 - 270750 - Adams - NE - US - 40.52 - -98.50 - 0 - 0 - GID - - - NEZ085 - 270850 - Webster - NE - US - 40.17 - -98.49 - 0 - 0 - GID - - - TXZ205 - 432050 - Bexar - TX - US - 29.44 - -98.47 - 0 - 0 - EWX - - - NDZ007 - 340070 - Cavalier - ND - US - 48.77 - -98.46 - 0 - 0 - FGF - - - OKZ038 - 360380 - Comanche - OK - US - 34.63 - -98.46 - 0 - 0 - OUN - - - TXZ220 - 432200 - Atascosa - TX - US - 28.93 - -98.45 - 0 - 0 - EWX - - - OKZ017 - 360170 - Blaine - OK - US - 35.86 - -98.42 - 0 - 0 - OUN - - - SDZ064 - 410640 - Douglas - SD - US - 43.35 - -98.41 - 0 - 0 - FSD - - - OKZ044 - 360440 - Cotton - OK - US - 34.28 - -98.40 - 0 - 0 - OUN - - - SDZ006 - 410060 - Brown - SD - US - 45.59 - -98.36 - 0 - 0 - ABR - - - TXZ190 - 431900 - Blanco - TX - US - 30.23 - -98.36 - 0 - 0 - EWX - - - OKZ023 - 360230 - Caddo - OK - US - 35.21 - -98.35 - 0 - 0 - OUN - - - SDZ018 - 410180 - Spink - SD - US - 44.94 - -98.35 - 0 - 0 - ABR - - - TXZ206 - 432060 - Comal - TX - US - 29.82 - -98.33 - 0 - 0 - EWX - - - OKZ006 - 360060 - Alfalfa - OK - US - 36.73 - -98.32 - 0 - 0 - OUN - - - TXZ116 - 431160 - Palo_Pinto - TX - US - 32.76 - -98.31 - 0 - 0 - FWD - - - SDZ038 - 410380 - Beadle - SD - US - 44.41 - -98.28 - 0 - 0 - FSD - - - TXZ250 - 432500 - Brooks - TX - US - 27.03 - -98.26 - 0 - 0 - BRO - - - TXZ156 - 431560 - Lampasas - TX - US - 31.25 - -98.24 - 0 - 0 - FWD - - - NDZ028 - 340280 - Griggs - ND - US - 47.46 - -98.23 - 0 - 0 - FGF - - - TXZ253 - 432530 - Hidalgo - TX - US - 26.41 - -98.23 - 0 - 0 - BRO - - - KSZ007 - 160070 - Jewell - KS - US - 39.78 - -98.22 - 0 - 0 - GID - - - KSZ033 - 160330 - Lincoln - KS - US - 39.04 - -98.21 - 0 - 0 - ICT - - - TXZ130 - 431300 - Erath - TX - US - 32.22 - -98.21 - 0 - 0 - FWD - - - KSZ019 - 160190 - Mitchell - KS - US - 39.39 - -98.20 - 0 - 0 - GID - - - KSZ048 - 160480 - Ellsworth - KS - US - 38.69 - -98.20 - 0 - 0 - ICT - - - KSZ050 - 160500 - Rice - KS - US - 38.33 - -98.20 - 0 - 0 - ICT - - - NDZ026 - 340260 - Nelson - ND - US - 47.94 - -98.20 - 0 - 0 - FGF - - - TXZ090 - 430900 - Clay - TX - US - 33.81 - -98.18 - 0 - 0 - OUN - - - TXZ101 - 431010 - Jack - TX - US - 33.24 - -98.17 - 0 - 0 - FWD - - - SDZ059 - 410590 - Davison - SD - US - 43.67 - -98.15 - 0 - 0 - FSD - - - TXZ172 - 431720 - Burnet - TX - US - 30.74 - -98.15 - 0 - 0 - EWX - - - KSZ082 - 160820 - Kingman - KS - US - 37.55 - -98.13 - 0 - 0 - ICT - - - TXZ143 - 431430 - Hamilton - TX - US - 31.72 - -98.11 - 0 - 0 - FWD - - - SDZ053 - 410530 - Sanborn - SD - US - 44.02 - -98.10 - 0 - 0 - FSD - - - NDZ054 - 340540 - Western_Walsh_County - ND - US - 48.37 - -98.09 - 0 - 0 - FGF - - - KSZ067 - 160670 - Reno - KS - US - 37.95 - -98.08 - 0 - 0 - ICT - - - NDZ038 - 340380 - Barnes - ND - US - 46.94 - -98.08 - 0 - 0 - FGF - - - TXZ221 - 432210 - Wilson - TX - US - 29.16 - -98.08 - 0 - 0 - EWX - - - TXZ231 - 432310 - Live_Oak - TX - US - 28.42 - -98.08 - 0 - 0 - CRP - - - KSZ091 - 160910 - Harper - KS - US - 37.19 - -98.07 - 0 - 0 - ICT - - - NEZ016 - 270160 - Antelope - NE - US - 42.17 - -98.07 - 0 - 0 - OAX - - - NEZ030 - 270300 - Boone - NE - US - 41.70 - -98.06 - 0 - 0 - OAX - - - NEZ063 - 270630 - Hamilton - NE - US - 40.93 - -98.05 - 0 - 0 - GID - - - NEZ076 - 270760 - Clay - NE - US - 40.52 - -98.05 - 0 - 0 - GID - - - NEZ086 - 270860 - Nuckolls - NE - US - 40.17 - -98.04 - 0 - 0 - GID - - - TXZ191 - 431910 - Hays - TX - US - 30.05 - -98.02 - 0 - 0 - EWX - - - TXZ241 - 432410 - Jim_Wells - TX - US - 27.66 - -98.02 - 0 - 0 - CRP - - - NEZ041 - 270410 - Nance - NE - US - 41.39 - -97.99 - 0 - 0 - GID - - - OKZ024 - 360240 - Canadian - OK - US - 35.53 - -97.99 - 0 - 0 - OUN - - - TXZ207 - 432070 - Guadalupe - TX - US - 29.62 - -97.98 - 0 - 0 - EWX - - - NEZ048 - 270480 - Merrick - NE - US - 41.13 - -97.94 - 0 - 0 - GID - - - OKZ018 - 360180 - Kingfisher - OK - US - 35.95 - -97.94 - 0 - 0 - OUN - - - NEZ011 - 270110 - Knox - NE - US - 42.66 - -97.90 - 0 - 0 - OAX - - - SDZ068 - 410680 - Bon_Homme - SD - US - 42.97 - -97.90 - 0 - 0 - FSD - - - OKZ027 - 360270 - Grady - OK - US - 35.03 - -97.88 - 0 - 0 - OUN - - - TXZ222 - 432220 - Karnes - TX - US - 28.95 - -97.88 - 0 - 0 - EWX - - - OKZ039 - 360390 - Stephens - OK - US - 34.49 - -97.85 - 0 - 0 - OUN - - - TXZ131 - 431310 - Hood - TX - US - 32.40 - -97.84 - 0 - 0 - FWD - - - OKZ045 - 360450 - Jefferson - OK - US - 34.07 - -97.83 - 0 - 0 - OUN - - - TXZ117 - 431170 - Parker - TX - US - 32.78 - -97.80 - 0 - 0 - FWD - - - TXZ157 - 431570 - Coryell - TX - US - 31.39 - -97.80 - 0 - 0 - FWD - - - SDZ060 - 410600 - Hanson - SD - US - 43.67 - -97.79 - 0 - 0 - FSD - - - OKZ007 - 360070 - Grant - OK - US - 36.79 - -97.78 - 0 - 0 - OUN - - - OKZ012 - 360120 - Garfield - OK - US - 36.38 - -97.78 - 0 - 0 - OUN - - - TXZ132 - 431320 - Somervell - TX - US - 32.21 - -97.78 - 0 - 0 - FWD - - - TXZ192 - 431920 - Travis - TX - US - 30.33 - -97.77 - 0 - 0 - EWX - - - SDZ065 - 410650 - Hutchinson - SD - US - 43.33 - -97.76 - 0 - 0 - FSD - - - SDZ019 - 410190 - Clark - SD - US - 44.85 - -97.74 - 0 - 0 - ABR - - - TXZ091 - 430910 - Montague - TX - US - 33.71 - -97.73 - 0 - 0 - FWD - - - TXZ232 - 432320 - Bee - TX - US - 28.42 - -97.73 - 0 - 0 - CRP - - - TXZ254 - 432540 - Inland_Willacy - TX - US - 26.46 - -97.73 - 0 - 0 - BRO - - - NDZ029 - 340290 - Steele - ND - US - 47.46 - -97.72 - 0 - 0 - FGF - - - NDZ049 - 340490 - Ransom - ND - US - 46.46 - -97.66 - 0 - 0 - FGF - - - TXZ102 - 431020 - Wise - TX - US - 33.22 - -97.65 - 0 - 0 - FWD - - - KSZ008 - 160080 - Republic - KS - US - 39.82 - -97.64 - 0 - 0 - TOP - - - KSZ020 - 160200 - Cloud - KS - US - 39.48 - -97.64 - 0 - 0 - TOP - - - KSZ034 - 160340 - Ottawa - KS - US - 39.13 - -97.64 - 0 - 0 - TOP - - - KSZ049 - 160490 - Saline - KS - US - 38.78 - -97.64 - 0 - 0 - ICT - - - KSZ051 - 160510 - McPherson - KS - US - 38.38 - -97.64 - 0 - 0 - ICT - - - TXZ144 - 431440 - Bosque - TX - US - 31.90 - -97.64 - 0 - 0 - FWD - - - TXZ242 - 432420 - Kleberg - TX - US - 27.43 - -97.64 - 0 - 0 - CRP - - - TXZ251 - 432510 - Kenedy - TX - US - 26.94 - -97.64 - 0 - 0 - BRO - - - NDZ052 - 340520 - Sargent - ND - US - 46.11 - -97.62 - 0 - 0 - FGF - - - TXZ208 - 432080 - Caldwell - TX - US - 29.86 - -97.62 - 0 - 0 - EWX - - - SDZ011 - 410110 - Day - SD - US - 45.37 - -97.61 - 0 - 0 - ABR - - - SDZ054 - 410540 - Miner - SD - US - 44.02 - -97.61 - 0 - 0 - FSD - - - NEZ017 - 270170 - Pierce - NE - US - 42.26 - -97.60 - 0 - 0 - OAX - - - NEZ031 - 270310 - Madison - NE - US - 41.91 - -97.60 - 0 - 0 - OAX - - - SDZ007 - 410070 - Marshall - SD - US - 45.75 - -97.60 - 0 - 0 - ABR - - - TXZ173 - 431730 - Williamson - TX - US - 30.66 - -97.60 - 0 - 0 - EWX - - - NEZ049 - 270490 - Polk - NE - US - 41.22 - -97.59 - 0 - 0 - GID - - - NEZ064 - 270640 - York - NE - US - 40.87 - -97.59 - 0 - 0 - GID - - - NEZ077 - 270770 - Fillmore - NE - US - 40.52 - -97.59 - 0 - 0 - GID - - - NEZ087 - 270870 - Thayer - NE - US - 40.17 - -97.59 - 0 - 0 - GID - - - TXZ255 - 432550 - Inland_Cameron - TX - US - 26.10 - -97.56 - 0 - 0 - BRO - - - NEZ042 - 270420 - Platte - NE - US - 41.54 - -97.54 - 0 - 0 - OAX - - - OKZ028 - 360280 - McClain - OK - US - 35.10 - -97.54 - 0 - 0 - OUN - - - NDZ008 - 340080 - Pembina - ND - US - 48.77 - -97.52 - 0 - 0 - FGF - - - TXZ244 - 432440 - San_Patricio - TX - US - 27.99 - -97.52 - 0 - 0 - CRP - - - TXZ158 - 431580 - Bell - TX - US - 31.05 - -97.50 - 0 - 0 - FWD - - - TXZ223 - 432230 - Gonzales - TX - US - 29.45 - -97.50 - 0 - 0 - EWX - - - TXZ243 - 432430 - Nueces - TX - US - 27.78 - -97.50 - 0 - 0 - CRP - - - NDZ016 - 340160 - Eastern_Walsh_County - ND - US - 48.37 - -97.49 - 0 - 0 - FGF - - - SDZ039 - 410390 - Kingsbury - SD - US - 44.37 - -97.49 - 0 - 0 - FSD - - - TXZ256 - 432560 - Coastal_Willacy - TX - US - 26.47 - -97.49 - 0 - 0 - BRO - - - KSZ083 - 160830 - Sedgwick - KS - US - 37.69 - -97.47 - 0 - 0 - ICT - - - KSZ092 - 160920 - Sumner - KS - US - 37.23 - -97.47 - 0 - 0 - ICT - - - TXZ233 - 432330 - Goliad - TX - US - 28.65 - -97.47 - 0 - 0 - CRP - - - KSZ068 - 160680 - Harvey - KS - US - 38.04 - -97.42 - 0 - 0 - ICT - - - OKZ019 - 360190 - Logan - OK - US - 35.95 - -97.41 - 0 - 0 - OUN - - - NDZ027 - 340270 - Grand_Forks - ND - US - 47.93 - -97.40 - 0 - 0 - FGF - - - OKZ025 - 360250 - Oklahoma - OK - US - 35.55 - -97.40 - 0 - 0 - OUN - - - OKZ029 - 360290 - Cleveland - OK - US - 35.16 - -97.40 - 0 - 0 - OUN - - - SDZ069 - 410690 - Yankton - SD - US - 42.99 - -97.40 - 0 - 0 - FSD - - - SDZ061 - 410610 - McCook - SD - US - 43.67 - -97.37 - 0 - 0 - FSD - - - TXZ224 - 432240 - DeWitt - TX - US - 29.10 - -97.37 - 0 - 0 - EWX - - - TXZ133 - 431330 - Johnson - TX - US - 32.35 - -97.35 - 0 - 0 - FWD - - - TXZ193 - 431930 - Bastrop - TX - US - 30.10 - -97.35 - 0 - 0 - EWX - - - TXZ257 - 432570 - Coastal_Cameron - TX - US - 26.20 - -97.34 - 0 - 0 - BRO - - - OKZ040 - 360400 - Garvin - OK - US - 34.69 - -97.30 - 0 - 0 - OUN - - - TXZ118 - 431180 - Tarrant - TX - US - 32.78 - -97.29 - 0 - 0 - FWD - - - NEZ012 - 270120 - Cedar - NE - US - 42.61 - -97.25 - 0 - 0 - OAX - - - OKZ046 - 360460 - Carter - OK - US - 34.29 - -97.24 - 0 - 0 - OUN - - - OKZ050 - 360500 - Love - OK - US - 33.90 - -97.24 - 0 - 0 - OUN - - - NDZ039 - 340390 - Cass - ND - US - 46.94 - -97.23 - 0 - 0 - FGF - - - TXZ092 - 430920 - Cooke - TX - US - 33.69 - -97.21 - 0 - 0 - FWD - - - TXZ159 - 431590 - McLennan - TX - US - 31.56 - -97.20 - 0 - 0 - FWD - - - NEZ032 - 270320 - Stanton - NE - US - 41.92 - -97.19 - 0 - 0 - OAX - - - SDZ020 - 410200 - Codington - SD - US - 44.98 - -97.19 - 0 - 0 - ABR - - - SDZ022 - 410220 - Hamlin - SD - US - 44.67 - -97.19 - 0 - 0 - ABR - - - OKZ013 - 360130 - Noble - OK - US - 36.39 - -97.17 - 0 - 0 - OUN - - - KSZ021 - 160210 - Clay - KS - US - 39.35 - -97.16 - 0 - 0 - TOP - - - NDZ030 - 340300 - Traill - ND - US - 47.46 - -97.16 - 0 - 0 - FGF - - - SDZ066 - 410660 - Turner - SD - US - 43.29 - -97.16 - 0 - 0 - FSD - - - TXZ246 - 432460 - Refugio - TX - US - 28.30 - -97.15 - 0 - 0 - CRP - - - KSZ035 - 160350 - Dickinson - KS - US - 38.86 - -97.14 - 0 - 0 - TOP - - - NEZ088 - 270880 - Jefferson - NE - US - 40.17 - -97.14 - 0 - 0 - OAX - - - NEZ050 - 270500 - Butler - NE - US - 41.25 - -97.13 - 0 - 0 - OAX - - - NEZ065 - 270650 - Seward - NE - US - 40.87 - -97.13 - 0 - 0 - OAX - - - NEZ078 - 270780 - Saline - NE - US - 40.52 - -97.13 - 0 - 0 - OAX - - - SDZ055 - 410550 - Lake - SD - US - 44.02 - -97.13 - 0 - 0 - FSD - - - OKZ008 - 360080 - Kay - OK - US - 36.79 - -97.11 - 0 - 0 - OUN - - - TXZ103 - 431030 - Denton - TX - US - 33.21 - -97.11 - 0 - 0 - FWD - - - TXZ145 - 431450 - Hill - TX - US - 32.00 - -97.11 - 0 - 0 - FWD - - - NEZ018 - 270180 - Wayne - NE - US - 42.22 - -97.10 - 0 - 0 - OAX - - - KSZ052 - 160520 - Marion - KS - US - 38.34 - -97.09 - 0 - 0 - ICT - - - OKZ041 - 360410 - Murray - OK - US - 34.49 - -97.09 - 0 - 0 - OUN - - - KSZ009 - 160090 - Washington - KS - US - 39.78 - -97.08 - 0 - 0 - TOP - - - NEZ043 - 270430 - Colfax - NE - US - 41.56 - -97.08 - 0 - 0 - OAX - - - OKZ020 - 360200 - Payne - OK - US - 36.10 - -96.99 - 0 - 0 - OUN - - - SDZ070 - 410700 - Clay - SD - US - 42.90 - -96.99 - 0 - 0 - FSD - - - TXZ194 - 431940 - Lee - TX - US - 30.30 - -96.99 - 0 - 0 - EWX - - - TXZ234 - 432340 - Victoria - TX - US - 28.80 - -96.98 - 0 - 0 - CRP - - - TXZ174 - 431740 - Milam - TX - US - 30.80 - -96.97 - 0 - 0 - FWD - - - TXZ209 - 432090 - Fayette - TX - US - 29.90 - -96.95 - 0 - 0 - EWX - - - TXZ160 - 431600 - Falls - TX - US - 31.26 - -96.94 - 0 - 0 - FWD - - - NDZ053 - 340530 - Richland - ND - US - 46.28 - -96.92 - 0 - 0 - FGF - - - TXZ225 - 432250 - Lavaca - TX - US - 29.35 - -96.91 - 0 - 0 - EWX - - - OKZ026 - 360260 - Lincoln - OK - US - 35.71 - -96.88 - 0 - 0 - OUN - - - OKZ030 - 360300 - Pottawatomie - OK - US - 35.19 - -96.88 - 0 - 0 - OUN - - - TXZ245 - 432450 - Aransas - TX - US - 28.21 - -96.87 - 0 - 0 - CRP - - - SDZ008 - 410080 - Roberts - SD - US - 45.62 - -96.86 - 0 - 0 - ABR - - - SDZ021 - 410210 - Grant - SD - US - 45.15 - -96.84 - 0 - 0 - ABR - - - KSZ069 - 160690 - Butler - KS - US - 37.78 - -96.83 - 0 - 0 - ICT - - - KSZ093 - 160930 - Cowley - KS - US - 37.23 - -96.83 - 0 - 0 - ICT - - - NEZ013 - 270130 - Dixon - NE - US - 42.51 - -96.82 - 0 - 0 - FSD - - - MNZ004 - 230040 - Kittson - MN - US - 48.77 - -96.81 - 0 - 0 - FGF - - - NEZ033 - 270330 - Cuming - NE - US - 41.92 - -96.79 - 0 - 0 - OAX - - - SDZ040 - 410400 - Brookings - SD - US - 44.37 - -96.79 - 0 - 0 - FSD - - - SDZ062 - 410620 - Minnehaha - SD - US - 43.67 - -96.79 - 0 - 0 - FSD - - - MNZ007 - 230070 - West_Marshall - MN - US - 48.36 - -96.78 - 0 - 0 - FGF - - - TXZ119 - 431190 - Dallas - TX - US - 32.77 - -96.77 - 0 - 0 - FWD - - - OKZ051 - 360510 - Marshall - OK - US - 34.01 - -96.76 - 0 - 0 - OUN - - - MNZ001 - 230010 - West_Polk - MN - US - 47.84 - -96.75 - 0 - 0 - FGF - - - TXZ134 - 431340 - Ellis - TX - US - 32.31 - -96.74 - 0 - 0 - FWD - - - KSZ036 - 160360 - Geary - KS - US - 39.04 - -96.72 - 0 - 0 - TOP - - - SDZ067 - 410670 - Lincoln - SD - US - 43.29 - -96.69 - 0 - 0 - FSD - - - NEZ066 - 270660 - Lancaster - NE - US - 40.78 - -96.68 - 0 - 0 - OAX - - - NEZ089 - 270890 - Gage - NE - US - 40.26 - -96.68 - 0 - 0 - OAX - - - KSZ022 - 160220 - Riley - KS - US - 39.30 - -96.67 - 0 - 0 - TOP - - - OKZ047 - 360470 - Johnston - OK - US - 34.32 - -96.67 - 0 - 0 - OUN - - - SDZ023 - 410230 - Deuel - SD - US - 44.76 - -96.67 - 0 - 0 - ABR - - - SDZ056 - 410560 - Moody - SD - US - 44.02 - -96.67 - 0 - 0 - FSD - - - OKZ042 - 360420 - Pontotoc - OK - US - 34.74 - -96.66 - 0 - 0 - OUN - - - TXZ093 - 430930 - Grayson - TX - US - 33.68 - -96.65 - 0 - 0 - FWD - - - KSZ037 - 160370 - Morris - KS - US - 38.69 - -96.64 - 0 - 0 - TOP - - - OKZ059 - 360590 - Pawnee - OK - US - 36.37 - -96.64 - 0 - 0 - TSA - - - SDZ071 - 410710 - Union - SD - US - 42.79 - -96.64 - 0 - 0 - FSD - - - TXZ247 - 432470 - Calhoun - TX - US - 28.39 - -96.63 - 0 - 0 - CRP - - - NEZ044 - 270440 - Dodge - NE - US - 41.57 - -96.62 - 0 - 0 - OAX - - - TXZ195 - 431950 - Burleson - TX - US - 30.52 - -96.62 - 0 - 0 - HGX - - - TXZ235 - 432350 - Jackson - TX - US - 28.96 - -96.62 - 0 - 0 - HGX - - - NEZ051 - 270510 - Saunders - NE - US - 41.24 - -96.61 - 0 - 0 - OAX - - - OKZ031 - 360310 - Seminole - OK - US - 35.16 - -96.61 - 0 - 0 - OUN - - - KSZ053 - 160530 - Chase - KS - US - 38.30 - -96.59 - 0 - 0 - ICT - - - TXZ161 - 431610 - Limestone - TX - US - 31.53 - -96.58 - 0 - 0 - FWD - - - MNZ039 - 230390 - Traverse - MN - US - 45.80 - -96.56 - 0 - 0 - ABR - - - TXZ104 - 431040 - Collin - TX - US - 33.20 - -96.56 - 0 - 0 - FWD - - - NEZ015 - 270150 - Thurston - NE - US - 42.15 - -96.55 - 0 - 0 - OAX - - - OKZ054 - 360540 - Osage - OK - US - 36.58 - -96.54 - 0 - 0 - TSA - - - TXZ175 - 431750 - Robertson - TX - US - 31.04 - -96.54 - 0 - 0 - FWD - - - NEZ014 - 270140 - Dakota - NE - US - 42.40 - -96.53 - 0 - 0 - FSD - - - TXZ210 - 432100 - Colorado - TX - US - 29.60 - -96.53 - 0 - 0 - HGX - - - KSZ010 - 160100 - Marshall - KS - US - 39.78 - -96.52 - 0 - 0 - TOP - - - MNZ029 - 230290 - Wilkin - MN - US - 46.33 - -96.52 - 0 - 0 - FGF - - - MNZ003 - 230030 - Clay - MN - US - 46.89 - -96.51 - 0 - 0 - FGF - - - MNZ046 - 230460 - Big_Stone - MN - US - 45.38 - -96.48 - 0 - 0 - ABR - - - MNZ002 - 230020 - Norman - MN - US - 47.33 - -96.47 - 0 - 0 - FGF - - - TXZ146 - 431460 - Navarro - TX - US - 32.07 - -96.47 - 0 - 0 - FWD - - - TXZ197 - 431970 - Washington - TX - US - 30.23 - -96.44 - 0 - 0 - HGX - - - TXZ120 - 431200 - Rockwall - TX - US - 32.91 - -96.40 - 0 - 0 - FWD - - - KSZ023 - 160230 - Pottawatomie - KS - US - 39.34 - -96.37 - 0 - 0 - TOP - - - TXZ196 - 431960 - Brazos - TX - US - 30.66 - -96.34 - 0 - 0 - HGX - - - OKZ064 - 360640 - Creek - OK - US - 35.91 - -96.33 - 0 - 0 - TSA - - - TXZ211 - 432110 - Austin - TX - US - 29.85 - -96.32 - 0 - 0 - HGX - - - NEZ034 - 270340 - Burt - NE - US - 41.87 - -96.31 - 0 - 0 - OAX - - - OKZ043 - 360430 - Coal - OK - US - 34.60 - -96.30 - 0 - 0 - OUN - - - OKZ065 - 360650 - Okfuskee - OK - US - 35.47 - -96.30 - 0 - 0 - TSA - - - TXZ121 - 431210 - Kaufman - TX - US - 32.61 - -96.30 - 0 - 0 - FWD - - - MNZ071 - 230710 - Lincoln - MN - US - 44.41 - -96.27 - 0 - 0 - FSD - - - MNZ097 - 230970 - Pipestone - MN - US - 44.02 - -96.26 - 0 - 0 - FSD - - - MNZ098 - 230980 - Rock - MN - US - 43.67 - -96.26 - 0 - 0 - FSD - - - NEZ090 - 270900 - Johnson - NE - US - 40.39 - -96.26 - 0 - 0 - OAX - - - IAZ020 - 150200 - Plymouth - IA - US - 42.74 - -96.25 - 0 - 0 - FSD - - - TXZ226 - 432260 - Wharton - TX - US - 29.30 - -96.25 - 0 - 0 - HGX - - - KSZ070 - 160700 - Greenwood - KS - US - 37.88 - -96.24 - 0 - 0 - ICT - - - KSZ094 - 160940 - Elk - KS - US - 37.45 - -96.24 - 0 - 0 - ICT - - - KSZ098 - 160980 - Chautauqua - KS - US - 37.15 - -96.24 - 0 - 0 - ICT - - - IAZ001 - 150010 - Lyon - IA - US - 43.38 - -96.23 - 0 - 0 - FSD - - - NEZ092 - 270920 - Pawnee - NE - US - 40.13 - -96.23 - 0 - 0 - OAX - - - OKZ032 - 360320 - Hughes - OK - US - 35.03 - -96.23 - 0 - 0 - OUN - - - IAZ012 - 150120 - Sioux - IA - US - 43.09 - -96.22 - 0 - 0 - FSD - - - KSZ038 - 160380 - Wabaunsee - KS - US - 38.97 - -96.22 - 0 - 0 - TOP - - - OKZ052 - 360520 - Bryan - OK - US - 33.93 - -96.19 - 0 - 0 - OUN - - - NEZ045 - 270450 - Washington - NE - US - 41.54 - -96.18 - 0 - 0 - OAX - - - NEZ052 - 270520 - Douglas - NE - US - 41.29 - -96.18 - 0 - 0 - OAX - - - KSZ054 - 160540 - Lyon - KS - US - 38.45 - -96.15 - 0 - 0 - TOP - - - NEZ067 - 270670 - Cass - NE - US - 40.93 - -96.15 - 0 - 0 - OAX - - - TXZ147 - 431470 - Freestone - TX - US - 31.72 - -96.14 - 0 - 0 - FWD - - - TXZ094 - 430940 - Fannin - TX - US - 33.62 - -96.11 - 0 - 0 - FWD - - - MNZ014 - 230140 - Red_Lake - MN - US - 47.86 - -96.10 - 0 - 0 - FGF - - - MNZ054 - 230540 - Lac_qui_Parle - MN - US - 45.04 - -96.09 - 0 - 0 - MPX - - - NEZ053 - 270530 - Sarpy - NE - US - 41.09 - -96.09 - 0 - 0 - OAX - - - NEZ068 - 270680 - Otoe - NE - US - 40.66 - -96.09 - 0 - 0 - OAX - - - IAZ031 - 150310 - Woodbury - IA - US - 42.39 - -96.08 - 0 - 0 - FSD - - - TXZ105 - 431050 - Hunt - TX - US - 33.13 - -96.07 - 0 - 0 - FWD - - - MNZ013 - 230130 - Pennington - MN - US - 48.05 - -96.04 - 0 - 0 - FGF - - - OKZ048 - 360480 - Atoka - OK - US - 34.43 - -96.04 - 0 - 0 - OUN - - - OKZ060 - 360600 - Tulsa - OK - US - 36.15 - -96.03 - 0 - 0 - TSA - - - IAZ043 - 150430 - Monona - IA - US - 42.04 - -96.02 - 0 - 0 - OAX - - - MNZ030 - 230300 - West_Otter_Tail - MN - US - 46.41 - -96.02 - 0 - 0 - FGF - - - KSZ011 - 160110 - Nemaha - KS - US - 39.78 - -96.01 - 0 - 0 - TOP - - - MNZ040 - 230400 - Grant - MN - US - 45.93 - -96.01 - 0 - 0 - FGF - - - MNZ047 - 230470 - Stevens - MN - US - 45.59 - -96.00 - 0 - 0 - MPX - - - TXZ212 - 432120 - Waller - TX - US - 29.99 - -96.00 - 0 - 0 - HGX - - - MNZ008 - 230080 - East_Marshall - MN - US - 48.36 - -95.99 - 0 - 0 - FGF - - - TXZ162 - 431620 - Leon - TX - US - 31.32 - -95.99 - 0 - 0 - FWD - - - TXZ198 - 431980 - Grimes - TX - US - 30.55 - -95.99 - 0 - 0 - HGX - - - MNZ015 - 230150 - East_Polk - MN - US - 47.72 - -95.95 - 0 - 0 - FGF - - - OKZ066 - 360660 - Okmulgee - OK - US - 35.62 - -95.95 - 0 - 0 - TSA - - - TXZ135 - 431350 - Henderson - TX - US - 32.19 - -95.94 - 0 - 0 - FWD - - - TXZ236 - 432360 - Matagorda - TX - US - 28.81 - -95.94 - 0 - 0 - HGX - - - MNZ027 - 230270 - West_Becker - MN - US - 46.94 - -95.93 - 0 - 0 - FGF - - - TXZ176 - 431760 - Madison - TX - US - 30.97 - -95.93 - 0 - 0 - HGX - - - MNZ064 - 230640 - Yellow_Medicine - MN - US - 44.74 - -95.91 - 0 - 0 - MPX - - - OKZ055 - 360550 - Washington - OK - US - 36.71 - -95.90 - 0 - 0 - TSA - - - MNZ072 - 230720 - Lyon - MN - US - 44.41 - -95.84 - 0 - 0 - FSD - - - IAZ055 - 150550 - Harrison - IA - US - 41.69 - -95.82 - 0 - 0 - OAX - - - MNZ022 - 230220 - Mahnomen - MN - US - 47.33 - -95.81 - 0 - 0 - FGF - - - NEZ091 - 270910 - Nemaha - NE - US - 40.41 - -95.80 - 0 - 0 - OAX - - - TXZ123 - 431230 - Rains - TX - US - 32.85 - -95.80 - 0 - 0 - FWD - - - KSZ024 - 160240 - Jackson - KS - US - 39.43 - -95.79 - 0 - 0 - TOP - - - MNZ080 - 230800 - Murray - MN - US - 44.02 - -95.77 - 0 - 0 - FSD - - - KSZ039 - 160390 - Shawnee - KS - US - 39.04 - -95.76 - 0 - 0 - TOP - - - MNZ089 - 230890 - Nobles - MN - US - 43.67 - -95.76 - 0 - 0 - FSD - - - TXZ122 - 431220 - Van_Zandt - TX - US - 32.61 - -95.76 - 0 - 0 - FWD - - - MNZ005 - 230050 - Roseau - MN - US - 48.77 - -95.75 - 0 - 0 - FGF - - - TXZ227 - 432270 - Fort_Bend - TX - US - 29.53 - -95.75 - 0 - 0 - HGX - - - KSZ095 - 160950 - Wilson - KS - US - 37.56 - -95.74 - 0 - 0 - ICT - - - KSZ099 - 160990 - Montgomery - KS - US - 37.19 - -95.74 - 0 - 0 - ICT - - - KSZ058 - 160580 - Coffey - KS - US - 38.23 - -95.73 - 0 - 0 - TOP - - - KSZ071 - 160710 - Woodson - KS - US - 37.88 - -95.73 - 0 - 0 - ICT - - - KSZ055 - 160550 - Osage - KS - US - 38.65 - -95.72 - 0 - 0 - TOP - - - OKZ073 - 360730 - Pittsburg - OK - US - 34.95 - -95.72 - 0 - 0 - TSA - - - MNZ055 - 230550 - Swift - MN - US - 45.28 - -95.69 - 0 - 0 - MPX - - - OKZ071 - 360710 - McIntosh - OK - US - 35.35 - -95.66 - 0 - 0 - TSA - - - TXZ148 - 431480 - Anderson - TX - US - 31.80 - -95.66 - 0 - 0 - FWD - - - MNZ056 - 230560 - Chippewa - MN - US - 44.96 - -95.65 - 0 - 0 - MPX - - - NEZ093 - 270930 - Richardson - NE - US - 40.13 - -95.65 - 0 - 0 - OAX - - - IAZ079 - 150790 - Mills - IA - US - 41.03 - -95.64 - 0 - 0 - OAX - - - IAZ002 - 150020 - Osceola - IA - US - 43.38 - -95.63 - 0 - 0 - FSD - - - IAZ013 - 150130 - O'Brien - IA - US - 43.09 - -95.63 - 0 - 0 - FSD - - - IAZ021 - 150210 - Cherokee - IA - US - 42.74 - -95.63 - 0 - 0 - FSD - - - IAZ090 - 150900 - Fremont - IA - US - 40.75 - -95.63 - 0 - 0 - OAX - - - OKZ056 - 360560 - Nowata - OK - US - 36.80 - -95.61 - 0 - 0 - TSA - - - TXZ177 - 431770 - Walker - TX - US - 30.79 - -95.60 - 0 - 0 - HGX - - - IAZ069 - 150690 - Pottawattamie - IA - US - 41.34 - -95.59 - 0 - 0 - OAX - - - TXZ095 - 430950 - Lamar - TX - US - 33.66 - -95.58 - 0 - 0 - FWD - - - TXZ106 - 431060 - Delta - TX - US - 33.36 - -95.58 - 0 - 0 - FWD - - - TXZ107 - 431070 - Hopkins - TX - US - 33.18 - -95.58 - 0 - 0 - FWD - - - OKZ053 - 360530 - Choctaw - OK - US - 34.02 - -95.57 - 0 - 0 - TSA - - - OKZ061 - 360610 - Rogers - OK - US - 36.34 - -95.57 - 0 - 0 - TSA - - - KSZ012 - 160120 - Brown - KS - US - 39.82 - -95.56 - 0 - 0 - TOP - - - IAZ032 - 150320 - Ida - IA - US - 42.39 - -95.54 - 0 - 0 - FSD - - - OKZ067 - 360670 - Wagoner - OK - US - 35.97 - -95.51 - 0 - 0 - TSA - - - MOZ001 - 250010 - Atchison - MO - US - 40.43 - -95.48 - 0 - 0 - EAX - - - TXZ237 - 432370 - Brazoria - TX - US - 29.21 - -95.47 - 0 - 0 - HGX - - - MNZ031 - 230310 - East_Otter_Tail - MN - US - 46.41 - -95.46 - 0 - 0 - FGF - - - TXZ199 - 431990 - Montgomery - TX - US - 30.33 - -95.46 - 0 - 0 - HGX - - - MNZ041 - 230410 - Douglas - MN - US - 45.93 - -95.45 - 0 - 0 - MPX - - - MNZ048 - 230480 - Pope - MN - US - 45.58 - -95.44 - 0 - 0 - MPX - - - TXZ213 - 432130 - Harris - TX - US - 29.84 - -95.44 - 0 - 0 - HGX - - - OKZ070 - 360700 - Muskogee - OK - US - 35.57 - -95.42 - 0 - 0 - TSA - - - MNZ028 - 230280 - East_Becker - MN - US - 46.93 - -95.41 - 0 - 0 - FGF - - - TXZ124 - 431240 - Wood - TX - US - 32.78 - -95.40 - 0 - 0 - SHV - - - IAZ044 - 150440 - Crawford - IA - US - 42.04 - -95.39 - 0 - 0 - DMX - - - MNZ016 - 230160 - North_Clearwater - MN - US - 47.76 - -95.39 - 0 - 0 - FGF - - - KSZ026 - 160260 - Jefferson - KS - US - 39.22 - -95.38 - 0 - 0 - TOP - - - TXZ163 - 431630 - Houston - TX - US - 31.27 - -95.37 - 0 - 0 - HGX - - - MNZ023 - 230230 - South_Clearwater - MN - US - 47.32 - -95.36 - 0 - 0 - FGF - - - OKZ049 - 360490 - Pushmataha - OK - US - 34.42 - -95.36 - 0 - 0 - TSA - - - IAZ056 - 150560 - Shelby - IA - US - 41.68 - -95.31 - 0 - 0 - OAX - - - KSZ072 - 160720 - Allen - KS - US - 37.88 - -95.30 - 0 - 0 - ICT - - - KSZ096 - 160960 - Neosho - KS - US - 37.56 - -95.30 - 0 - 0 - ICT - - - KSZ059 - 160590 - Anderson - KS - US - 38.21 - -95.29 - 0 - 0 - TOP - - - KSZ100 - 161000 - Labette - KS - US - 37.19 - -95.29 - 0 - 0 - ICT - - - TXZ136 - 431360 - Smith - TX - US - 32.42 - -95.29 - 0 - 0 - SHV - - - KSZ056 - 160560 - Franklin - KS - US - 38.56 - -95.28 - 0 - 0 - TOP - - - KSZ040 - 160400 - Douglas - KS - US - 38.90 - -95.27 - 0 - 0 - TOP - - - KSZ025 - 160250 - Atchison - KS - US - 39.53 - -95.26 - 0 - 0 - EAX - - - MOZ011 - 250110 - Holt - MO - US - 40.07 - -95.26 - 0 - 0 - EAX - - - MNZ073 - 230730 - Redwood - MN - US - 44.45 - -95.23 - 0 - 0 - MPX - - - OKZ062 - 360620 - Mayes - OK - US - 36.30 - -95.23 - 0 - 0 - TSA - - - OKZ057 - 360570 - Craig - OK - US - 36.76 - -95.22 - 0 - 0 - TSA - - - OKZ075 - 360750 - Latimer - OK - US - 34.88 - -95.22 - 0 - 0 - TSA - - - TXZ108 - 431080 - Franklin - TX - US - 33.18 - -95.21 - 0 - 0 - SHV - - - MNZ081 - 230810 - Cottonwood - MN - US - 44.02 - -95.17 - 0 - 0 - FSD - - - TXZ149 - 431490 - Cherokee - TX - US - 31.79 - -95.17 - 0 - 0 - SHV - - - IAZ003 - 150030 - Dickinson - IA - US - 43.38 - -95.16 - 0 - 0 - FSD - - - IAZ014 - 150140 - Clay - IA - US - 43.08 - -95.16 - 0 - 0 - FSD - - - IAZ022 - 150220 - Buena_Vista - IA - US - 42.74 - -95.16 - 0 - 0 - FSD - - - IAZ080 - 150800 - Montgomery - IA - US - 41.04 - -95.16 - 0 - 0 - OAX - - - IAZ091 - 150910 - Page - IA - US - 40.74 - -95.16 - 0 - 0 - OAX - - - MNZ090 - 230900 - Jackson - MN - US - 43.67 - -95.16 - 0 - 0 - FSD - - - IAZ033 - 150330 - Sac - IA - US - 42.39 - -95.13 - 0 - 0 - DMX - - - OKZ074 - 360740 - Haskell - OK - US - 35.27 - -95.13 - 0 - 0 - TSA - - - TXZ164 - 431640 - Trinity - TX - US - 31.11 - -95.13 - 0 - 0 - HGX - - - KSZ102 - 161020 - Doniphan - KS - US - 39.81 - -95.10 - 0 - 0 - EAX - - - TXZ178 - 431780 - San_Jacinto - TX - US - 30.62 - -95.10 - 0 - 0 - HGX - - - OKZ068 - 360680 - Cherokee - OK - US - 35.91 - -95.04 - 0 - 0 - TSA - - - TXZ096 - 430960 - Red_River - TX - US - 33.65 - -95.02 - 0 - 0 - SHV - - - MNZ009 - 230090 - North_Beltrami - MN - US - 48.20 - -95.01 - 0 - 0 - FGF - - - MNZ057 - 230570 - Kandiyohi - MN - US - 45.15 - -95.01 - 0 - 0 - MPX - - - KSZ103 - 161030 - Leavenworth - KS - US - 39.19 - -94.99 - 0 - 0 - EAX - - - MNZ065 - 230650 - Renville - MN - US - 44.67 - -94.99 - 0 - 0 - MPX - - - TXZ109 - 431090 - Titus - TX - US - 33.19 - -94.97 - 0 - 0 - SHV - - - MNZ032 - 230320 - Wadena - MN - US - 46.59 - -94.95 - 0 - 0 - FGF - - - IAZ070 - 150700 - Cass - IA - US - 41.33 - -94.94 - 0 - 0 - DMX - - - TXZ110 - 431100 - Camp - TX - US - 33.00 - -94.94 - 0 - 0 - SHV - - - MNZ024 - 230240 - Hubbard - MN - US - 47.11 - -94.92 - 0 - 0 - FGF - - - TXZ125 - 431250 - Upshur - TX - US - 32.72 - -94.92 - 0 - 0 - SHV - - - IAZ057 - 150570 - Audubon - IA - US - 41.68 - -94.91 - 0 - 0 - DMX - - - MOZ002 - 250020 - Nodaway - MO - US - 40.36 - -94.91 - 0 - 0 - EAX - - - MNZ042 - 230420 - Todd - MN - US - 46.07 - -94.90 - 0 - 0 - MPX - - - MNZ006 - 230060 - Lake_of_The_Woods - MN - US - 48.87 - -94.89 - 0 - 0 - FGF - - - IAZ045 - 150450 - Carroll - IA - US - 42.03 - -94.87 - 0 - 0 - DMX - - - TXZ179 - 431790 - Polk - TX - US - 30.82 - -94.87 - 0 - 0 - HGX - - - MOZ020 - 250200 - Buchanan - MO - US - 39.68 - -94.86 - 0 - 0 - EAX - - - KSZ073 - 160730 - Bourbon - KS - US - 37.85 - -94.85 - 0 - 0 - SGF - - - KSZ097 - 160970 - Crawford - KS - US - 37.50 - -94.85 - 0 - 0 - SGF - - - KSZ101 - 161010 - Cherokee - KS - US - 37.16 - -94.85 - 0 - 0 - SGF - - - MOZ028 - 250280 - Platte - MO - US - 39.34 - -94.85 - 0 - 0 - EAX - - - KSZ057 - 160570 - Miami - KS - US - 38.56 - -94.84 - 0 - 0 - EAX - - - KSZ060 - 160600 - Linn - KS - US - 38.21 - -94.84 - 0 - 0 - EAX - - - MOZ012 - 250120 - Andrew - MO - US - 39.97 - -94.84 - 0 - 0 - EAX - - - KSZ105 - 161050 - Johnson - KS - US - 38.89 - -94.83 - 0 - 0 - EAX - - - OKZ058 - 360580 - Ottawa - OK - US - 36.83 - -94.83 - 0 - 0 - TSA - - - MNZ017 - 230170 - South_Beltrami - MN - US - 47.63 - -94.81 - 0 - 0 - FGF - - - OKZ077 - 360770 - McCurtain - OK - US - 34.07 - -94.81 - 0 - 0 - SHV - - - TXZ200 - 432000 - Liberty - TX - US - 30.19 - -94.81 - 0 - 0 - HGX - - - TXZ238 - 432380 - Galveston - TX - US - 29.34 - -94.81 - 0 - 0 - HGX - - - OKZ063 - 360630 - Delaware - OK - US - 36.42 - -94.79 - 0 - 0 - TSA - - - OKZ072 - 360720 - Sequoyah - OK - US - 35.46 - -94.78 - 0 - 0 - TSA - - - TXZ137 - 431370 - Gregg - TX - US - 32.51 - -94.78 - 0 - 0 - SHV - - - KSZ104 - 161040 - Wyandotte - KS - US - 39.09 - -94.75 - 0 - 0 - EAX - - - MNZ074 - 230740 - Brown - MN - US - 44.30 - -94.74 - 0 - 0 - MPX - - - OKZ076 - 360760 - Le_Flore - OK - US - 34.95 - -94.74 - 0 - 0 - TSA - - - TXZ111 - 431110 - Morris - TX - US - 33.13 - -94.74 - 0 - 0 - SHV - - - TXZ150 - 431500 - Rusk - TX - US - 32.13 - -94.72 - 0 - 0 - SHV - - - IAZ081 - 150810 - Adams - IA - US - 41.03 - -94.71 - 0 - 0 - DMX - - - IAZ092 - 150920 - Taylor - IA - US - 40.74 - -94.71 - 0 - 0 - DMX - - - IAZ004 - 150040 - Emmet - IA - US - 43.38 - -94.69 - 0 - 0 - DMX - - - IAZ015 - 150150 - Palo_Alto - IA - US - 43.08 - -94.69 - 0 - 0 - DMX - - - IAZ023 - 150230 - Pocahontas - IA - US - 42.74 - -94.69 - 0 - 0 - DMX - - - TXZ214 - 432140 - Chambers - TX - US - 29.71 - -94.67 - 0 - 0 - HGX - - - IAZ034 - 150340 - Calhoun - IA - US - 42.38 - -94.66 - 0 - 0 - DMX - - - OKZ069 - 360690 - Adair - OK - US - 35.91 - -94.64 - 0 - 0 - TSA - - - TXZ152 - 431520 - Nacogdoches - TX - US - 31.54 - -94.64 - 0 - 0 - SHV - - - MNZ082 - 230820 - Watonwan - MN - US - 43.98 - -94.62 - 0 - 0 - MPX - - - MNZ049 - 230490 - Stearns - MN - US - 45.53 - -94.59 - 0 - 0 - MPX - - - TXZ165 - 431650 - Angelina - TX - US - 31.28 - -94.57 - 0 - 0 - SHV - - - MNZ033 - 230330 - South_Cass - MN - US - 46.54 - -94.56 - 0 - 0 - DLH - - - MNZ091 - 230910 - Martin - MN - US - 43.67 - -94.55 - 0 - 0 - MPX - - - MNZ058 - 230580 - Meeker - MN - US - 45.11 - -94.51 - 0 - 0 - MPX - - - IAZ058 - 150580 - Guthrie - IA - US - 41.68 - -94.50 - 0 - 0 - DMX - - - IAZ071 - 150710 - Adair - IA - US - 41.33 - -94.48 - 0 - 0 - DMX - - - MOZ003 - 250030 - Worth - MO - US - 40.48 - -94.43 - 0 - 0 - EAX - - - MOZ004 - 250040 - Gentry - MO - US - 40.21 - -94.42 - 0 - 0 - EAX - - - MOZ021 - 250210 - Clinton - MO - US - 39.60 - -94.42 - 0 - 0 - EAX - - - MOZ029 - 250290 - Clay - MO - US - 39.28 - -94.42 - 0 - 0 - EAX - - - IAZ046 - 150460 - Greene - IA - US - 42.03 - -94.41 - 0 - 0 - DMX - - - MOZ013 - 250130 - De_Kalb - MO - US - 39.89 - -94.41 - 0 - 0 - EAX - - - TXZ201 - 432010 - Hardin - TX - US - 30.31 - -94.40 - 0 - 0 - LCH - - - TXZ097 - 430970 - Bowie - TX - US - 33.47 - -94.39 - 0 - 0 - SHV - - - TXZ126 - 431260 - Marion - TX - US - 32.79 - -94.38 - 0 - 0 - SHV - - - TXZ138 - 431380 - Harrison - TX - US - 32.56 - -94.37 - 0 - 0 - SHV - - - MNZ075 - 230750 - Nicollet - MN - US - 44.31 - -94.36 - 0 - 0 - MPX - - - MOZ037 - 250370 - Jackson - MO - US - 39.03 - -94.36 - 0 - 0 - EAX - - - MOZ077 - 250770 - Barton - MO - US - 37.50 - -94.35 - 0 - 0 - SGF - - - MOZ101 - 251010 - McDonald - MO - US - 36.63 - -94.35 - 0 - 0 - SGF - - - TXZ112 - 431120 - Cass - TX - US - 33.10 - -94.35 - 0 - 0 - SHV - - - TXZ180 - 431800 - Tyler - TX - US - 30.79 - -94.35 - 0 - 0 - LCH - - - MOZ043 - 250430 - Cass - MO - US - 38.64 - -94.34 - 0 - 0 - EAX - - - MOZ053 - 250530 - Bates - MO - US - 38.25 - -94.34 - 0 - 0 - EAX - - - MOZ066 - 250660 - Vernon - MO - US - 37.85 - -94.34 - 0 - 0 - SGF - - - MOZ088 - 250880 - Jasper - MO - US - 37.21 - -94.34 - 0 - 0 - SGF - - - MOZ093 - 250930 - Newton - MO - US - 36.90 - -94.34 - 0 - 0 - SGF - - - TXZ151 - 431510 - Panola - TX - US - 32.18 - -94.30 - 0 - 0 - SHV - - - MNZ066 - 230660 - McLeod - MN - US - 44.81 - -94.26 - 0 - 0 - MPX - - - IAZ082 - 150820 - Union - IA - US - 41.03 - -94.25 - 0 - 0 - DMX - - - IAZ093 - 150930 - Ringgold - IA - US - 40.74 - -94.25 - 0 - 0 - DMX - - - ARZ001 - 40010 - Benton - AR - US - 36.30 - -94.24 - 0 - 0 - TSA - - - ARZ029 - 40290 - Sebastian - AR - US - 35.19 - -94.24 - 0 - 0 - TSA - - - ARZ010 - 40100 - Washington - AR - US - 36.00 - -94.22 - 0 - 0 - TSA - - - ARZ050 - 40500 - Sevier - AR - US - 33.97 - -94.22 - 0 - 0 - SHV - - - IAZ005 - 150050 - Kossuth - IA - US - 43.21 - -94.22 - 0 - 0 - DMX - - - IAZ024 - 150240 - Humboldt - IA - US - 42.78 - -94.22 - 0 - 0 - DMX - - - MNZ025 - 230250 - North_Cass - MN - US - 47.14 - -94.22 - 0 - 0 - DLH - - - MNZ043 - 230430 - Morrison - MN - US - 46.06 - -94.21 - 0 - 0 - MPX - - - ARZ040 - 40400 - Polk - AR - US - 34.47 - -94.20 - 0 - 0 - LZK - - - MNZ067 - 230670 - Sibley - MN - US - 44.59 - -94.20 - 0 - 0 - MPX - - - ARZ019 - 40190 - Crawford - AR - US - 35.56 - -94.19 - 0 - 0 - TSA - - - IAZ035 - 150350 - Webster - IA - US - 42.43 - -94.19 - 0 - 0 - DMX - - - TXZ166 - 431660 - San_Augustine - TX - US - 31.38 - -94.19 - 0 - 0 - SHV - - - TXZ153 - 431530 - Shelby - TX - US - 31.78 - -94.15 - 0 - 0 - SHV - - - ARZ059 - 40590 - Little_River - AR - US - 33.74 - -94.14 - 0 - 0 - SHV - - - TXZ215 - 432150 - Jefferson - TX - US - 29.87 - -94.14 - 0 - 0 - LCH - - - ARZ037 - 40370 - Scott - AR - US - 34.89 - -94.08 - 0 - 0 - LZK - - - MNZ034 - 230340 - Crow_Wing - MN - US - 46.48 - -94.08 - 0 - 0 - DLH - - - MNZ083 - 230830 - Blue_Earth - MN - US - 44.06 - -94.07 - 0 - 0 - MPX - - - MNZ050 - 230500 - Benton - MN - US - 45.69 - -94.06 - 0 - 0 - MPX - - - IAZ059 - 150590 - Dallas - IA - US - 41.68 - -94.04 - 0 - 0 - DMX - - - ARZ051 - 40510 - Howard - AR - US - 34.05 - -94.03 - 0 - 0 - SHV - - - IAZ072 - 150720 - Madison - IA - US - 41.34 - -94.02 - 0 - 0 - DMX - - - MOZ005 - 250050 - Harrison - MO - US - 40.36 - -94.00 - 0 - 0 - EAX - - - MOZ014 - 250140 - Daviess - MO - US - 39.96 - -94.00 - 0 - 0 - EAX - - - TXZ181 - 431810 - Jasper - TX - US - 30.70 - -94.00 - 0 - 0 - LCH - - - MOZ022 - 250220 - Caldwell - MO - US - 39.66 - -93.99 - 0 - 0 - EAX - - - MOZ030 - 250300 - Ray - MO - US - 39.33 - -93.99 - 0 - 0 - EAX - - - MNZ092 - 230920 - Faribault - MN - US - 43.67 - -93.95 - 0 - 0 - MPX - - - IAZ047 - 150470 - Boone - IA - US - 42.03 - -93.94 - 0 - 0 - DMX - - - TXZ216 - 432160 - Orange - TX - US - 30.10 - -93.90 - 0 - 0 - LCH - - - MNZ059 - 230590 - Wright - MN - US - 45.20 - -93.89 - 0 - 0 - MPX - - - ARZ020 - 40200 - Franklin - AR - US - 35.49 - -93.88 - 0 - 0 - TSA - - - MOZ089 - 250890 - Dade - MO - US - 37.43 - -93.86 - 0 - 0 - SGF - - - ARZ070 - 40700 - Miller - AR - US - 33.31 - -93.85 - 0 - 0 - SHV - - - MOZ078 - 250780 - Cedar - MO - US - 37.73 - -93.85 - 0 - 0 - SGF - - - MOZ094 - 250940 - Lawrence - MO - US - 37.11 - -93.84 - 0 - 0 - SGF - - - MNZ051 - 230510 - Sherburne - MN - US - 45.41 - -93.83 - 0 - 0 - MPX - - - MOZ102 - 251020 - Barry - MO - US - 36.71 - -93.83 - 0 - 0 - SGF - - - MOZ044 - 250440 - Johnson - MO - US - 38.75 - -93.82 - 0 - 0 - EAX - - - TXZ167 - 431670 - Sabine - TX - US - 31.37 - -93.82 - 0 - 0 - SHV - - - MOZ038 - 250380 - Lafayette - MO - US - 39.09 - -93.80 - 0 - 0 - EAX - - - IAZ083 - 150830 - Clarke - IA - US - 41.03 - -93.79 - 0 - 0 - DMX - - - IAZ094 - 150940 - Decatur - IA - US - 40.74 - -93.79 - 0 - 0 - DMX - - - MOZ054 - 250540 - Henry - MO - US - 38.38 - -93.79 - 0 - 0 - EAX - - - MOZ067 - 250670 - St._Clair - MO - US - 38.02 - -93.79 - 0 - 0 - SGF - - - MNZ076 - 230760 - Le_Sueur - MN - US - 44.37 - -93.78 - 0 - 0 - MPX - - - LAZ001 - 180010 - Caddo - LA - US - 32.61 - -93.77 - 0 - 0 - SHV - - - MNZ068 - 230680 - Carver - MN - US - 44.81 - -93.77 - 0 - 0 - MPX - - - MNZ010 - 230100 - Koochiching - MN - US - 48.28 - -93.76 - 0 - 0 - DLH - - - IAZ006 - 150060 - Winnebago - IA - US - 43.38 - -93.74 - 0 - 0 - DMX - - - IAZ016 - 150160 - Hancock - IA - US - 43.08 - -93.74 - 0 - 0 - DMX - - - IAZ025 - 150250 - Wright - IA - US - 42.73 - -93.74 - 0 - 0 - DMX - - - MNZ018 - 230180 - North_Itasca - MN - US - 47.66 - -93.74 - 0 - 0 - DLH - - - IAZ036 - 150360 - Hamilton - IA - US - 42.38 - -93.72 - 0 - 0 - DMX - - - ARZ030 - 40300 - Logan - AR - US - 35.22 - -93.71 - 0 - 0 - LZK - - - ARZ060 - 40600 - Hempstead - AR - US - 33.75 - -93.71 - 0 - 0 - SHV - - - TXZ182 - 431820 - Newton - TX - US - 30.72 - -93.71 - 0 - 0 - LCH - - - ARZ011 - 40110 - Madison - AR - US - 36.03 - -93.70 - 0 - 0 - TSA - - - LAZ010 - 180100 - De_Soto - LA - US - 32.10 - -93.69 - 0 - 0 - SHV - - - ARZ041 - 40410 - Montgomery - AR - US - 34.55 - -93.66 - 0 - 0 - LZK - - - ARZ052 - 40520 - Pike - AR - US - 34.15 - -93.65 - 0 - 0 - LZK - - - MNZ044 - 230440 - Mille_Lacs - MN - US - 45.90 - -93.62 - 0 - 0 - MPX - - - ARZ071 - 40710 - Lafayette - AR - US - 33.25 - -93.61 - 0 - 0 - SHV - - - LAZ002 - 180020 - Bossier - LA - US - 32.63 - -93.61 - 0 - 0 - SHV - - - MNZ069 - 230690 - Scott - MN - US - 44.68 - -93.60 - 0 - 0 - MPX - - - MNZ084 - 230840 - Waseca - MN - US - 44.02 - -93.59 - 0 - 0 - MPX - - - ARZ002 - 40020 - Carroll - AR - US - 36.31 - -93.58 - 0 - 0 - TSA - - - MOZ006 - 250060 - Mercer - MO - US - 40.42 - -93.58 - 0 - 0 - EAX - - - IAZ060 - 150600 - Polk - IA - US - 41.68 - -93.57 - 0 - 0 - DMX - - - MNZ026 - 230260 - South_Itasca - MN - US - 47.24 - -93.57 - 0 - 0 - DLH - - - MOZ015 - 250150 - Grundy - MO - US - 40.11 - -93.57 - 0 - 0 - EAX - - - IAZ073 - 150730 - Warren - IA - US - 41.34 - -93.56 - 0 - 0 - DMX - - - LAZ017 - 180170 - Sabine - LA - US - 31.51 - -93.55 - 0 - 0 - SHV - - - MOZ023 - 250230 - Livingston - MO - US - 39.79 - -93.52 - 0 - 0 - EAX - - - IAZ048 - 150480 - Story - IA - US - 42.03 - -93.47 - 0 - 0 - DMX - - - MNZ060 - 230600 - Hennepin - MN - US - 45.02 - -93.47 - 0 - 0 - MPX - - - MOZ103 - 251030 - Stone - MO - US - 36.74 - -93.47 - 0 - 0 - SGF - - - MOZ031 - 250310 - Carroll - MO - US - 39.41 - -93.44 - 0 - 0 - EAX - - - ARZ021 - 40210 - Johnson - AR - US - 35.55 - -93.43 - 0 - 0 - LZK - - - MNZ036 - 230360 - South_Aitkin - MN - US - 46.39 - -93.43 - 0 - 0 - DLH - - - MNZ035 - 230350 - Northern_Aitkin - MN - US - 46.83 - -93.42 - 0 - 0 - DLH - - - MOZ079 - 250790 - Polk - MO - US - 37.62 - -93.41 - 0 - 0 - SGF - - - LAZ011 - 180110 - Red_River - LA - US - 32.07 - -93.36 - 0 - 0 - SHV - - - LAZ030 - 180300 - Beauregard - LA - US - 30.65 - -93.36 - 0 - 0 - LCH - - - MNZ093 - 230930 - Freeborn - MN - US - 43.67 - -93.35 - 0 - 0 - MPX - - - MOZ090 - 250900 - Greene - MO - US - 37.26 - -93.35 - 0 - 0 - SGF - - - IAZ084 - 150840 - Lucas - IA - US - 41.03 - -93.33 - 0 - 0 - DMX - - - IAZ095 - 150950 - Wayne - IA - US - 40.74 - -93.33 - 0 - 0 - DMX - - - LAZ003 - 180030 - Webster - LA - US - 32.72 - -93.33 - 0 - 0 - SHV - - - ARZ038 - 40380 - Yell - AR - US - 35.03 - -93.32 - 0 - 0 - LZK - - - LAZ041 - 180410 - Calcasieu - LA - US - 30.27 - -93.32 - 0 - 0 - LCH - - - MOZ068 - 250680 - Hickory - MO - US - 37.93 - -93.32 - 0 - 0 - SGF - - - ARZ061 - 40610 - Nevada - AR - US - 33.70 - -93.29 - 0 - 0 - SHV - - - MNZ045 - 230450 - Kanabec - MN - US - 45.95 - -93.29 - 0 - 0 - MPX - - - MNZ077 - 230770 - Rice - MN - US - 44.37 - -93.29 - 0 - 0 - MPX - - - MOZ045 - 250450 - Pettis - MO - US - 38.72 - -93.29 - 0 - 0 - EAX - - - MOZ055 - 250550 - Benton - MO - US - 38.30 - -93.29 - 0 - 0 - SGF - - - MNZ052 - 230520 - Isanti - MN - US - 45.57 - -93.27 - 0 - 0 - MPX - - - MNZ061 - 230610 - Anoka - MN - US - 45.23 - -93.27 - 0 - 0 - MPX - - - IAZ007 - 150070 - Worth - IA - US - 43.38 - -93.26 - 0 - 0 - DMX - - - IAZ017 - 150170 - Cerro_Gordo - IA - US - 43.08 - -93.26 - 0 - 0 - DMX - - - IAZ026 - 150260 - Franklin - IA - US - 42.73 - -93.26 - 0 - 0 - DMX - - - MOZ095 - 250950 - Christian - MO - US - 36.95 - -93.26 - 0 - 0 - SGF - - - IAZ037 - 150370 - Hardin - IA - US - 42.38 - -93.25 - 0 - 0 - DMX - - - LAZ051 - 180510 - Cameron - LA - US - 29.83 - -93.25 - 0 - 0 - LCH - - - MNZ085 - 230850 - Steele - MN - US - 44.02 - -93.23 - 0 - 0 - MPX - - - ARZ012 - 40120 - Newton - AR - US - 35.93 - -93.22 - 0 - 0 - LZK - - - ARZ072 - 40720 - Columbia - AR - US - 33.24 - -93.22 - 0 - 0 - SHV - - - ARZ053 - 40530 - Clark - AR - US - 34.06 - -93.19 - 0 - 0 - LZK - - - LAZ027 - 180270 - Vernon - LA - US - 31.12 - -93.19 - 0 - 0 - LCH - - - MOZ039 - 250390 - Saline - MO - US - 39.17 - -93.18 - 0 - 0 - EAX - - - MNZ062 - 230620 - Ramsey - MN - US - 45.01 - -93.11 - 0 - 0 - MPX - - - MOZ016 - 250160 - Sullivan - MO - US - 40.21 - -93.11 - 0 - 0 - EAX - - - MOZ024 - 250240 - Linn - MO - US - 39.87 - -93.11 - 0 - 0 - EAX - - - IAZ074 - 150740 - Marion - IA - US - 41.34 - -93.10 - 0 - 0 - DMX - - - LAZ012 - 180120 - Bienville - LA - US - 32.37 - -93.10 - 0 - 0 - SHV - - - ARZ042 - 40420 - Garland - AR - US - 34.58 - -93.09 - 0 - 0 - LZK - - - LAZ018 - 180180 - Natchitoches - LA - US - 31.75 - -93.08 - 0 - 0 - SHV - - - ARZ003 - 40030 - Boone - AR - US - 36.31 - -93.07 - 0 - 0 - LZK - - - IAZ061 - 150610 - Jasper - IA - US - 41.69 - -93.06 - 0 - 0 - DMX - - - ARZ022 - 40220 - Pope - AR - US - 35.43 - -93.05 - 0 - 0 - LZK - - - MOZ104 - 251040 - Taney - MO - US - 36.66 - -93.05 - 0 - 0 - SGF - - - ARZ054 - 40540 - Hot_Spring - AR - US - 34.33 - -93.04 - 0 - 0 - LZK - - - MNZ070 - 230700 - Dakota - MN - US - 44.71 - -93.03 - 0 - 0 - MPX - - - MOZ007 - 250070 - Putnam - MO - US - 40.46 - -93.02 - 0 - 0 - EAX - - - MOZ080 - 250800 - Dallas - MO - US - 37.66 - -93.02 - 0 - 0 - SGF - - - IAZ049 - 150490 - Marshall - IA - US - 42.04 - -93.01 - 0 - 0 - DMX - - - MOZ032 - 250320 - Chariton - MO - US - 39.46 - -92.99 - 0 - 0 - EAX - - - LAZ004 - 180040 - Claiborne - LA - US - 32.80 - -92.97 - 0 - 0 - SHV - - - ARZ039 - 40390 - Perry - AR - US - 34.94 - -92.92 - 0 - 0 - LZK - - - MNZ053 - 230530 - Chisago - MN - US - 45.52 - -92.89 - 0 - 0 - MPX - - - MNZ063 - 230630 - Washington - MN - US - 45.02 - -92.88 - 0 - 0 - MPX - - - MOZ091 - 250910 - Webster - MO - US - 37.28 - -92.88 - 0 - 0 - SGF - - - IAZ085 - 150850 - Monroe - IA - US - 41.03 - -92.87 - 0 - 0 - DMX - - - IAZ096 - 150960 - Appanoose - IA - US - 40.74 - -92.87 - 0 - 0 - DMX - - - MNZ086 - 230860 - Dodge - MN - US - 44.02 - -92.87 - 0 - 0 - ARX - - - LAZ031 - 180310 - Allen - LA - US - 30.66 - -92.85 - 0 - 0 - LCH - - - LAZ042 - 180420 - Jefferson_Davis - LA - US - 30.27 - -92.85 - 0 - 0 - LCH - - - MOZ056 - 250560 - Morgan - MO - US - 38.44 - -92.85 - 0 - 0 - SGF - - - ARZ066 - 40660 - Ouachita - AR - US - 33.60 - -92.83 - 0 - 0 - LZK - - - IAZ008 - 150080 - Mitchell - IA - US - 43.36 - -92.79 - 0 - 0 - ARX - - - IAZ018 - 150180 - Floyd - IA - US - 43.06 - -92.79 - 0 - 0 - ARX - - - IAZ027 - 150270 - Butler - IA - US - 42.73 - -92.79 - 0 - 0 - DMX - - - IAZ038 - 150380 - Grundy - IA - US - 42.38 - -92.79 - 0 - 0 - DMX - - - MOZ046 - 250460 - Cooper - MO - US - 38.87 - -92.78 - 0 - 0 - EAX - - - ARZ031 - 40310 - Conway - AR - US - 35.27 - -92.76 - 0 - 0 - LZK - - - MNZ094 - 230940 - Mower - MN - US - 43.67 - -92.75 - 0 - 0 - ARX - - - MOZ069 - 250690 - Camden - MO - US - 38.03 - -92.74 - 0 - 0 - SGF - - - MNZ038 - 230380 - Pine - MN - US - 46.07 - -92.71 - 0 - 0 - DLH - - - MOZ040 - 250400 - Howard - MO - US - 39.16 - -92.69 - 0 - 0 - EAX - - - ARZ013 - 40130 - Searcy - AR - US - 35.92 - -92.68 - 0 - 0 - LZK - - - ARZ004 - 40040 - Marion - AR - US - 36.28 - -92.65 - 0 - 0 - LZK - - - ARZ043 - 40430 - Saline - AR - US - 34.64 - -92.65 - 0 - 0 - LZK - - - ARZ062 - 40620 - Dallas - AR - US - 33.98 - -92.65 - 0 - 0 - LZK - - - IAZ075 - 150750 - Mahaska - IA - US - 41.34 - -92.65 - 0 - 0 - DMX - - - MNZ078 - 230780 - Goodhue - MN - US - 44.45 - -92.65 - 0 - 0 - MPX - - - LAZ005 - 180050 - Lincoln - LA - US - 32.61 - -92.64 - 0 - 0 - SHV - - - LAZ019 - 180190 - Winn - LA - US - 31.93 - -92.64 - 0 - 0 - SHV - - - MOZ047 - 250470 - Moniteau - MO - US - 38.67 - -92.62 - 0 - 0 - LSX - - - MOZ017 - 250170 - Adair - MO - US - 40.19 - -92.61 - 0 - 0 - EAX - - - LAZ020 - 180200 - Grant - LA - US - 31.60 - -92.58 - 0 - 0 - SHV - - - MOZ025 - 250250 - Macon - MO - US - 39.82 - -92.57 - 0 - 0 - EAX - - - LAZ013 - 180130 - Jackson - LA - US - 32.33 - -92.56 - 0 - 0 - SHV - - - MOZ081 - 250810 - Laclede - MO - US - 37.69 - -92.56 - 0 - 0 - SGF - - - ARZ023 - 40230 - Van_Buren - AR - US - 35.58 - -92.54 - 0 - 0 - LZK - - - ARZ067 - 40670 - Calhoun - AR - US - 33.54 - -92.54 - 0 - 0 - LZK - - - IAZ050 - 150500 - Tama - IA - US - 42.08 - -92.54 - 0 - 0 - DMX - - - IAZ062 - 150620 - Poweshiek - IA - US - 41.69 - -92.54 - 0 - 0 - DMX - - - MOZ008 - 250080 - Schuyler - MO - US - 40.47 - -92.54 - 0 - 0 - EAX - - - ARZ073 - 40730 - Union - AR - US - 33.20 - -92.52 - 0 - 0 - SHV - - - LAZ028 - 180280 - Rapides - LA - US - 31.21 - -92.52 - 0 - 0 - LCH - - - WIZ014 - 490140 - Polk - WI - US - 45.47 - -92.52 - 0 - 0 - MPX - - - MOZ033 - 250330 - Randolph - MO - US - 39.43 - -92.51 - 0 - 0 - EAX - - - MOZ096 - 250960 - Douglas - MO - US - 36.93 - -92.50 - 0 - 0 - SGF - - - MOZ092 - 250920 - Wright - MO - US - 37.27 - -92.47 - 0 - 0 - SGF - - - WIZ023 - 490230 - St._Croix - WI - US - 45.04 - -92.47 - 0 - 0 - MPX - - - WIZ024 - 490240 - Pierce - WI - US - 44.70 - -92.47 - 0 - 0 - MPX - - - WIZ006 - 490060 - Burnett - WI - US - 45.90 - -92.46 - 0 - 0 - DLH - - - MOZ105 - 251050 - Ozark - MO - US - 36.65 - -92.45 - 0 - 0 - SGF - - - ARZ055 - 40550 - Grant - AR - US - 34.28 - -92.44 - 0 - 0 - LZK - - - MNZ011 - 230110 - North_St._Louis - MN - US - 48.24 - -92.44 - 0 - 0 - DLH - - - MNZ019 - 230190 - Central_St._Louis - MN - US - 47.43 - -92.44 - 0 - 0 - DLH - - - MOZ057 - 250570 - Miller - MO - US - 38.22 - -92.44 - 0 - 0 - SGF - - - MNZ037 - 230370 - Carlton/South_St._Louis - MN - US - 46.72 - -92.43 - 0 - 0 - DLH - - - IAZ097 - 150970 - Davis - IA - US - 40.75 - -92.42 - 0 - 0 - DMX - - - IAZ086 - 150860 - Wapello - IA - US - 41.03 - -92.41 - 0 - 0 - DMX - - - ARZ044 - 40440 - Pulaski - AR - US - 34.76 - -92.39 - 0 - 0 - LZK - - - LAZ032 - 180320 - Evangeline - LA - US - 30.74 - -92.39 - 0 - 0 - LCH - - - MNZ087 - 230870 - Olmsted - MN - US - 44.01 - -92.39 - 0 - 0 - ARX - - - LAZ006 - 180060 - Union - LA - US - 32.80 - -92.38 - 0 - 0 - SHV - - - LAZ043 - 180430 - Acadia - LA - US - 30.28 - -92.38 - 0 - 0 - LCH - - - ARZ005 - 40050 - Baxter - AR - US - 36.24 - -92.37 - 0 - 0 - LZK - - - ARZ032 - 40320 - Faulkner - AR - US - 35.12 - -92.36 - 0 - 0 - LZK - - - LAZ052 - 180520 - Vermilion - LA - US - 29.85 - -92.34 - 0 - 0 - LCH - - - MOZ041 - 250410 - Boone - MO - US - 38.94 - -92.34 - 0 - 0 - LSX - - - IAZ009 - 150090 - Howard - IA - US - 43.36 - -92.32 - 0 - 0 - ARX - - - IAZ019 - 150190 - Chickasaw - IA - US - 43.07 - -92.32 - 0 - 0 - ARX - - - IAZ028 - 150280 - Bremer - IA - US - 42.78 - -92.32 - 0 - 0 - DMX - - - IAZ039 - 150390 - Black_Hawk - IA - US - 42.47 - -92.31 - 0 - 0 - DMX - - - MOZ048 - 250480 - Cole - MO - US - 38.53 - -92.22 - 0 - 0 - LSX - - - MOZ070 - 250700 - Pulaski - MO - US - 37.81 - -92.22 - 0 - 0 - SGF - - - ARZ063 - 40630 - Cleveland - AR - US - 33.89 - -92.20 - 0 - 0 - LZK - - - MNZ079 - 230790 - Wabasha - MN - US - 44.28 - -92.20 - 0 - 0 - ARX - - - LAZ022 - 180220 - La_Salle - LA - US - 31.63 - -92.19 - 0 - 0 - SHV - - - IAZ076 - 150760 - Keokuk - IA - US - 41.33 - -92.18 - 0 - 0 - DVN - - - ARZ068 - 40680 - Bradley - AR - US - 33.44 - -92.16 - 0 - 0 - LZK - - - LAZ014 - 180140 - Ouachita - LA - US - 32.50 - -92.16 - 0 - 0 - SHV - - - MOZ009 - 250090 - Scotland - MO - US - 40.46 - -92.15 - 0 - 0 - DVN - - - MOZ018 - 250180 - Knox - MO - US - 40.13 - -92.15 - 0 - 0 - LSX - - - ARZ014 - 40140 - Stone - AR - US - 35.91 - -92.12 - 0 - 0 - LZK - - - LAZ021 - 180210 - Caldwell - LA - US - 32.11 - -92.09 - 0 - 0 - SHV - - - LAZ044 - 180440 - Lafayette - LA - US - 30.22 - -92.09 - 0 - 0 - LCH - - - MNZ095 - 230950 - Fillmore - MN - US - 43.67 - -92.09 - 0 - 0 - ARX - - - WIZ026 - 490260 - Pepin - WI - US - 44.55 - -92.09 - 0 - 0 - MPX - - - LAZ033 - 180330 - St._Landry - LA - US - 30.58 - -92.08 - 0 - 0 - LCH - - - IAZ051 - 150510 - Benton - IA - US - 42.08 - -92.07 - 0 - 0 - DVN - - - MOZ026 - 250260 - Shelby - MO - US - 39.78 - -92.07 - 0 - 0 - LSX - - - IAZ063 - 150630 - Iowa - IA - US - 41.68 - -92.06 - 0 - 0 - DVN - - - ARZ024 - 40240 - Cleburne - AR - US - 35.54 - -92.02 - 0 - 0 - LZK - - - MOZ034 - 250340 - Monroe - MO - US - 39.50 - -92.01 - 0 - 0 - LSX - - - LAZ029 - 180290 - Avoyelles - LA - US - 31.10 - -91.97 - 0 - 0 - LCH - - - MOZ082 - 250820 - Texas - MO - US - 37.33 - -91.96 - 0 - 0 - SGF - - - IAZ087 - 150870 - Jefferson - IA - US - 41.03 - -91.95 - 0 - 0 - DVN - - - IAZ098 - 150980 - Van_Buren - IA - US - 40.75 - -91.95 - 0 - 0 - DVN - - - ARZ015 - 40150 - Izard - AR - US - 36.06 - -91.94 - 0 - 0 - LZK - - - MOZ050 - 250500 - Callaway - MO - US - 38.81 - -91.93 - 0 - 0 - LSX - - - MOZ049 - 250490 - Osage - MO - US - 38.50 - -91.92 - 0 - 0 - LSX - - - MOZ058 - 250580 - Maries - MO - US - 38.15 - -91.92 - 0 - 0 - SGF - - - WIZ001 - 490010 - Douglas - WI - US - 46.46 - -91.92 - 0 - 0 - DLH - - - LAZ024 - 180240 - Catahoula - LA - US - 31.60 - -91.91 - 0 - 0 - JAN - - - WIZ025 - 490250 - Dunn - WI - US - 44.95 - -91.91 - 0 - 0 - MPX - - - MOZ097 - 250970 - Howell - MO - US - 36.78 - -91.90 - 0 - 0 - SGF - - - ARZ045 - 40450 - Lonoke - AR - US - 34.78 - -91.88 - 0 - 0 - LZK - - - MOZ042 - 250420 - Audrain - MO - US - 39.21 - -91.87 - 0 - 0 - LSX - - - IAZ010 - 150100 - Winneshiek - IA - US - 43.29 - -91.85 - 0 - 0 - ARX - - - IAZ029 - 150290 - Fayette - IA - US - 42.86 - -91.85 - 0 - 0 - ARX - - - WIZ015 - 490150 - Barron - WI - US - 45.43 - -91.85 - 0 - 0 - MPX - - - IAZ040 - 150400 - Buchanan - IA - US - 42.47 - -91.84 - 0 - 0 - DVN - - - ARZ056 - 40560 - Jefferson - AR - US - 34.28 - -91.83 - 0 - 0 - LZK - - - LAZ053 - 180530 - Iberia - LA - US - 29.93 - -91.81 - 0 - 0 - LCH - - - WIZ032 - 490320 - Buffalo - WI - US - 44.32 - -91.81 - 0 - 0 - ARX - - - ARZ006 - 40060 - Fulton - AR - US - 36.38 - -91.80 - 0 - 0 - LZK - - - ARZ074 - 40740 - Ashley - AR - US - 33.20 - -91.79 - 0 - 0 - JAN - - - WIZ007 - 490070 - Washburn - WI - US - 45.90 - -91.79 - 0 - 0 - DLH - - - MOZ071 - 250710 - Phelps - MO - US - 37.88 - -91.78 - 0 - 0 - SGF - - - LAZ007 - 180070 - Morehouse - LA - US - 32.77 - -91.75 - 0 - 0 - JAN - - - ARZ033 - 40330 - White - AR - US - 35.28 - -91.73 - 0 - 0 - LZK - - - LAZ015 - 180150 - Richland - LA - US - 32.42 - -91.73 - 0 - 0 - JAN - - - ARZ069 - 40690 - Drew - AR - US - 33.59 - -91.72 - 0 - 0 - LZK - - - IAZ077 - 150770 - Washington - IA - US - 41.34 - -91.71 - 0 - 0 - DVN - - - MOZ010 - 250100 - Clark - MO - US - 40.43 - -91.70 - 0 - 0 - DVN - - - MOZ019 - 250190 - Lewis - MO - US - 40.10 - -91.70 - 0 - 0 - LSX - - - ARZ064 - 40640 - Lincoln - AR - US - 33.98 - -91.69 - 0 - 0 - LZK - - - MNZ088 - 230880 - Winona - MN - US - 44.02 - -91.69 - 0 - 0 - ARX - - - LAZ023 - 180230 - Franklin - LA - US - 32.14 - -91.68 - 0 - 0 - JAN - - - LAZ034 - 180340 - Pointe_Coupee - LA - US - 30.76 - -91.67 - 0 - 0 - LIX - - - LAZ045 - 180450 - Upper_St._Martin - LA - US - 30.27 - -91.67 - 0 - 0 - LCH - - - LAZ026 - 180260 - Concordia - LA - US - 31.37 - -91.61 - 0 - 0 - JAN - - - IAZ052 - 150520 - Linn - IA - US - 42.07 - -91.60 - 0 - 0 - DVN - - - IAZ064 - 150640 - Johnson - IA - US - 41.64 - -91.60 - 0 - 0 - DVN - - - MOZ027 - 250270 - Marion - MO - US - 39.80 - -91.58 - 0 - 0 - LSX - - - ARZ046 - 40460 - Prairie - AR - US - 34.79 - -91.57 - 0 - 0 - LZK - - - ARZ016 - 40160 - Independence - AR - US - 35.73 - -91.54 - 0 - 0 - LZK - - - IAZ088 - 150880 - Henry - IA - US - 40.99 - -91.54 - 0 - 0 - DVN - - - MNZ020 - 230200 - Southern_Lake/North_Shore - MN - US - 47.31 - -91.51 - 0 - 0 - DLH - - - MOZ059 - 250590 - Gasconade - MO - US - 38.44 - -91.51 - 0 - 0 - LSX - - - ARZ007 - 40070 - Sharp - AR - US - 36.19 - -91.49 - 0 - 0 - LZK - - - MOZ083 - 250830 - Dent - MO - US - 37.60 - -91.49 - 0 - 0 - SGF - - - MNZ096 - 230960 - Houston - MN - US - 43.67 - -91.48 - 0 - 0 - ARX - - - LAZ054 - 180540 - St._Mary - LA - US - 29.72 - -91.47 - 0 - 0 - LCH - - - LAZ035 - 180350 - West_Feliciana - LA - US - 30.86 - -91.46 - 0 - 0 - LIX - - - MOZ035 - 250350 - Ralls - MO - US - 39.50 - -91.46 - 0 - 0 - LSX - - - MOZ051 - 250510 - Montgomery - MO - US - 38.91 - -91.46 - 0 - 0 - LSX - - - LAZ008 - 180080 - West_Carroll - LA - US - 32.80 - -91.44 - 0 - 0 - JAN - - - IAZ099 - 150990 - Lee - IA - US - 40.59 - -91.42 - 0 - 0 - DVN - - - MNZ012 - 230120 - Northern_Cook/Northern_Lake - MN - US - 47.70 - -91.41 - 0 - 0 - DLH - - - MOZ106 - 251060 - Oregon - MO - US - 36.69 - -91.40 - 0 - 0 - SGF - - - MSZ060 - 240600 - Adams - MS - US - 31.49 - -91.40 - 0 - 0 - JAN - - - WIZ033 - 490330 - Trempealeau - WI - US - 44.29 - -91.38 - 0 - 0 - ARX - - - ARZ057 - 40570 - Arkansas - AR - US - 34.25 - -91.37 - 0 - 0 - LZK - - - IAZ041 - 150410 - Delaware - IA - US - 42.47 - -91.37 - 0 - 0 - DVN - - - LAZ046 - 180460 - Iberville - LA - US - 30.27 - -91.35 - 0 - 0 - LIX - - - MOZ098 - 250980 - Shannon - MO - US - 37.15 - -91.35 - 0 - 0 - SGF - - - IAZ011 - 150110 - Allamakee - IA - US - 43.29 - -91.34 - 0 - 0 - ARX - - - MSZ068 - 240680 - Wilkinson - MS - US - 31.19 - -91.34 - 0 - 0 - LIX - - - MOZ072 - 250720 - Crawford - MO - US - 37.95 - -91.32 - 0 - 0 - LSX - - - ARZ025 - 40250 - Jackson - AR - US - 35.63 - -91.31 - 0 - 0 - LZK - - - LAZ047 - 180470 - West_Baton_Rouge - LA - US - 30.49 - -91.31 - 0 - 0 - LIX - - - LAZ025 - 180250 - Tensas - LA - US - 32.00 - -91.30 - 0 - 0 - JAN - - - WIZ027 - 490270 - Chippewa - WI - US - 45.07 - -91.29 - 0 - 0 - MPX - - - WIZ028 - 490280 - Eau_Claire - WI - US - 44.73 - -91.29 - 0 - 0 - MPX - - - LAZ055 - 180550 - Lower_St._Martin - LA - US - 29.85 - -91.28 - 0 - 0 - LCH - - - ARZ034 - 40340 - Woodruff - AR - US - 35.18 - -91.26 - 0 - 0 - LZK - - - ARZ075 - 40750 - Chicot - AR - US - 33.29 - -91.25 - 0 - 0 - JAN - - - IAZ030 - 150300 - Clayton - IA - US - 42.86 - -91.25 - 0 - 0 - ARX - - - LAZ009 - 180090 - East_Carroll - LA - US - 32.78 - -91.23 - 0 - 0 - JAN - - - IAZ078 - 150780 - Louisa - IA - US - 41.25 - -91.22 - 0 - 0 - DVN - - - ILZ095 - 130950 - Adams - IL - US - 39.98 - -91.22 - 0 - 0 - LSX - - - ARZ047 - 40470 - Monroe - AR - US - 34.67 - -91.21 - 0 - 0 - LZK - - - ARZ065 - 40650 - Desha - AR - US - 33.82 - -91.21 - 0 - 0 - LZK - - - ILZ034 - 130340 - Hancock - IL - US - 40.42 - -91.21 - 0 - 0 - DVN - - - LAZ016 - 180160 - Madison - LA - US - 32.35 - -91.21 - 0 - 0 - JAN - - - MOZ060 - 250600 - Warren - MO - US - 38.77 - -91.19 - 0 - 0 - LSX - - - IAZ089 - 150890 - Des_Moines - IA - US - 40.89 - -91.18 - 0 - 0 - DVN - - - WIZ041 - 490410 - La_Crosse - WI - US - 43.91 - -91.17 - 0 - 0 - ARX - - - WIZ002 - 490020 - Bayfield - WI - US - 46.58 - -91.15 - 0 - 0 - DLH - - - IAZ065 - 150650 - Cedar - IA - US - 41.77 - -91.14 - 0 - 0 - DVN - - - IAZ053 - 150530 - Jones - IA - US - 42.12 - -91.13 - 0 - 0 - DVN - - - WIZ008 - 490080 - Sawyer - WI - US - 45.90 - -91.12 - 0 - 0 - DLH - - - WIZ016 - 490160 - Rusk - WI - US - 45.47 - -91.11 - 0 - 0 - MPX - - - MOZ036 - 250360 - Pike - MO - US - 39.37 - -91.10 - 0 - 0 - LSX - - - ARZ008 - 40080 - Randolph - AR - US - 36.32 - -91.08 - 0 - 0 - MEG - - - IAZ067 - 150670 - Muscatine - IA - US - 41.47 - -91.08 - 0 - 0 - DVN - - - LAZ048 - 180480 - East_Baton_Rouge - LA - US - 30.52 - -91.08 - 0 - 0 - LIX - - - LAZ036 - 180360 - East_Feliciana - LA - US - 30.83 - -91.07 - 0 - 0 - LIX - - - LAZ056 - 180560 - Assumption - LA - US - 29.86 - -91.07 - 0 - 0 - LIX - - - MOZ062 - 250620 - Franklin - MO - US - 38.45 - -91.06 - 0 - 0 - LSX - - - ARZ017 - 40170 - Lawrence - AR - US - 36.07 - -91.05 - 0 - 0 - MEG - - - MSZ059 - 240590 - Jefferson - MS - US - 31.75 - -91.05 - 0 - 0 - JAN - - - MOZ099 - 250990 - Reynolds - MO - US - 37.33 - -91.03 - 0 - 0 - LSX - - - MSZ040 - 240400 - Issaquena - MS - US - 32.73 - -91.01 - 0 - 0 - JAN - - - ILZ025 - 130250 - Henderson - IL - US - 40.85 - -91.00 - 0 - 0 - DVN - - - MSZ053 - 240530 - Claiborne - MS - US - 32.01 - -90.98 - 0 - 0 - JAN - - - ILZ097 - 130970 - Pike - IL - US - 39.62 - -90.97 - 0 - 0 - LSX - - - MOZ052 - 250520 - Lincoln - MO - US - 39.05 - -90.97 - 0 - 0 - LSX - - - MOZ107 - 251070 - Carter - MO - US - 36.96 - -90.95 - 0 - 0 - PAH - - - MSZ034 - 240340 - Washington - MS - US - 33.28 - -90.95 - 0 - 0 - JAN - - - MSZ018 - 240180 - Bolivar - MS - US - 33.83 - -90.94 - 0 - 0 - JAN - - - WIZ054 - 490540 - Crawford - WI - US - 43.21 - -90.94 - 0 - 0 - ARX - - - MSZ061 - 240610 - Franklin - MS - US - 31.47 - -90.89 - 0 - 0 - JAN - - - LAZ049 - 180490 - Ascension - LA - US - 30.21 - -90.87 - 0 - 0 - LIX - - - MOZ073 - 250730 - Washington - MO - US - 37.97 - -90.87 - 0 - 0 - LSX - - - LAZ066 - 180660 - Lower_Terrebonne - LA - US - 29.34 - -90.86 - 0 - 0 - LIX - - - MOZ108 - 251080 - Ripley - MO - US - 36.66 - -90.86 - 0 - 0 - PAH - - - MSZ047 - 240470 - Warren - MS - US - 32.34 - -90.86 - 0 - 0 - JAN - - - ARZ058 - 40580 - Phillips - AR - US - 34.39 - -90.82 - 0 - 0 - MEG - - - IAZ042 - 150420 - Dubuque - IA - US - 42.49 - -90.82 - 0 - 0 - DVN - - - LAZ065 - 180650 - Upper_Terrebonne - LA - US - 29.67 - -90.82 - 0 - 0 - LIX - - - MSZ069 - 240690 - Amite - MS - US - 31.18 - -90.82 - 0 - 0 - LIX - - - MSZ041 - 240410 - Sharkey - MS - US - 32.89 - -90.81 - 0 - 0 - JAN - - - LAZ057 - 180570 - St._James - LA - US - 30.03 - -90.80 - 0 - 0 - LIX - - - WIZ053 - 490530 - Vernon - WI - US - 43.58 - -90.79 - 0 - 0 - ARX - - - WIZ061 - 490610 - Grant - WI - US - 42.86 - -90.79 - 0 - 0 - ARX - - - ARZ035 - 40350 - Cross - AR - US - 35.30 - -90.77 - 0 - 0 - MEG - - - ARZ048 - 40480 - St._Francis - AR - US - 35.01 - -90.77 - 0 - 0 - MEG - - - ILZ024 - 130240 - Mercer - IL - US - 41.20 - -90.77 - 0 - 0 - DVN - - - ARZ049 - 40490 - Lee - AR - US - 34.77 - -90.75 - 0 - 0 - MEG - - - WIZ034 - 490340 - Jackson - WI - US - 44.33 - -90.74 - 0 - 0 - ARX - - - LAZ037 - 180370 - St._Helena - LA - US - 30.83 - -90.73 - 0 - 0 - LIX - - - ILZ096 - 130960 - Brown - IL - US - 39.98 - -90.72 - 0 - 0 - LSX - - - LAZ050 - 180500 - Livingston - LA - US - 30.42 - -90.72 - 0 - 0 - LIX - - - ILZ098 - 130980 - Calhoun - IL - US - 39.14 - -90.71 - 0 - 0 - LSX - - - ILZ035 - 130350 - McDonough - IL - US - 40.46 - -90.68 - 0 - 0 - DVN - - - MOZ084 - 250840 - Iron - MO - US - 37.51 - -90.67 - 0 - 0 - LSX - - - MSZ010 - 240100 - Coahoma - MS - US - 34.26 - -90.67 - 0 - 0 - MEG - - - ARZ026 - 40260 - Craighead - AR - US - 35.85 - -90.66 - 0 - 0 - MEG - - - ARZ027 - 40270 - Poinsett - AR - US - 35.58 - -90.66 - 0 - 0 - MEG - - - WIZ042 - 490420 - Monroe - WI - US - 43.94 - -90.64 - 0 - 0 - ARX - - - ILZ026 - 130260 - Warren - IL - US - 40.85 - -90.62 - 0 - 0 - DVN - - - MNZ021 - 230210 - Southern_Cook/North_Shore - MN - US - 47.75 - -90.62 - 0 - 0 - DLH - - - WIZ003 - 490030 - Ashland - WI - US - 46.53 - -90.62 - 0 - 0 - DLH - - - WIZ029 - 490290 - Clark - WI - US - 44.73 - -90.62 - 0 - 0 - ARX - - - IAZ068 - 150680 - Scott - IA - US - 41.61 - -90.61 - 0 - 0 - DVN - - - MSZ019 - 240190 - Sunflower - MS - US - 33.63 - -90.61 - 0 - 0 - JAN - - - ILZ040 - 130400 - Schuyler - IL - US - 40.13 - -90.57 - 0 - 0 - ILX - - - LAZ059 - 180590 - Upper_Lafourche - LA - US - 29.74 - -90.57 - 0 - 0 - LIX - - - MOZ061 - 250610 - St._Charles - MO - US - 38.75 - -90.54 - 0 - 0 - LSX - - - MOZ074 - 250740 - St._Francois - MO - US - 37.86 - -90.54 - 0 - 0 - LSX - - - MSZ035 - 240350 - Humphreys - MS - US - 33.13 - -90.53 - 0 - 0 - JAN - - - IAZ054 - 150540 - Jackson - IA - US - 42.21 - -90.52 - 0 - 0 - DVN - - - IAZ066 - 150660 - Clinton - IA - US - 41.88 - -90.52 - 0 - 0 - DVN - - - MOZ065 - 250650 - Jefferson - MO - US - 38.25 - -90.52 - 0 - 0 - LSX - - - ARZ018 - 40180 - Greene - AR - US - 36.12 - -90.51 - 0 - 0 - MEG - - - LAZ058 - 180580 - St._John_The_Baptist - LA - US - 30.09 - -90.50 - 0 - 0 - LIX - - - MSZ062 - 240620 - Lincoln - MS - US - 31.54 - -90.49 - 0 - 0 - JAN - - - WIZ017 - 490170 - Taylor - WI - US - 45.21 - -90.48 - 0 - 0 - ARX - - - ILZ049 - 130490 - Scott - IL - US - 39.66 - -90.47 - 0 - 0 - ILX - - - MOZ100 - 251000 - Wayne - MO - US - 37.12 - -90.45 - 0 - 0 - PAH - - - ARZ009 - 40090 - Clay - AR - US - 36.35 - -90.43 - 0 - 0 - MEG - - - MOZ063 - 250630 - St._Louis - MO - US - 38.64 - -90.43 - 0 - 0 - LSX - - - WIZ055 - 490550 - Richland - WI - US - 43.36 - -90.43 - 0 - 0 - ARX - - - MSZ054 - 240540 - Copiah - MS - US - 31.87 - -90.42 - 0 - 0 - JAN - - - MOZ109 - 251090 - Butler - MO - US - 36.71 - -90.41 - 0 - 0 - PAH - - - LAZ038 - 180380 - Tangipahoa - LA - US - 30.65 - -90.40 - 0 - 0 - LIX - - - MSZ070 - 240700 - Pike - MS - US - 31.18 - -90.40 - 0 - 0 - LIX - - - ILZ058 - 130580 - Greene - IL - US - 39.32 - -90.39 - 0 - 0 - LSX - - - MSZ007 - 240070 - Tunica - MS - US - 34.66 - -90.39 - 0 - 0 - MEG - - - MSZ048 - 240480 - Hinds - MS - US - 32.31 - -90.39 - 0 - 0 - JAN - - - ILZ099 - 130990 - Jersey - IL - US - 39.09 - -90.38 - 0 - 0 - LSX - - - MSZ042 - 240420 - Yazoo - MS - US - 32.77 - -90.36 - 0 - 0 - JAN - - - WIZ009 - 490090 - Price - WI - US - 45.68 - -90.36 - 0 - 0 - DLH - - - MOZ085 - 250850 - Madison - MO - US - 37.48 - -90.35 - 0 - 0 - LSX - - - LAZ060 - 180600 - St._Charles - LA - US - 29.89 - -90.34 - 0 - 0 - LIX - - - ILZ015 - 130150 - Rock_Island - IL - US - 41.56 - -90.31 - 0 - 0 - DVN - - - ILZ001 - 130010 - Jo_Daviess - IL - US - 42.35 - -90.29 - 0 - 0 - DVN - - - ILZ047 - 130470 - Cass - IL - US - 40.00 - -90.29 - 0 - 0 - ILX - - - LAZ067 - 180670 - Lower_Lafourche - LA - US - 29.31 - -90.29 - 0 - 0 - LIX - - - MSZ011 - 240110 - Quitman - MS - US - 34.30 - -90.29 - 0 - 0 - MEG - - - ARZ036 - 40360 - Crittenden - AR - US - 35.14 - -90.28 - 0 - 0 - MEG - - - ILZ050 - 130500 - Morgan - IL - US - 39.70 - -90.27 - 0 - 0 - ILX - - - MSZ025 - 240250 - Leflore - MS - US - 33.53 - -90.27 - 0 - 0 - JAN - - - MOZ064 - 250640 - St._Louis_City - MO - US - 38.65 - -90.24 - 0 - 0 - LSX - - - WIZ004 - 490040 - Iron - WI - US - 46.29 - -90.23 - 0 - 0 - DLH - - - ILZ027 - 130270 - Knox - IL - US - 40.93 - -90.22 - 0 - 0 - ILX - - - MOZ075 - 250750 - Ste._Genevieve - MO - US - 37.90 - -90.20 - 0 - 0 - LSX - - - MSZ020 - 240200 - Tallahatchie - MS - US - 33.93 - -90.19 - 0 - 0 - MEG - - - ILZ036 - 130360 - Fulton - IL - US - 40.45 - -90.16 - 0 - 0 - ILX - - - ILZ016 - 130160 - Henry - IL - US - 41.37 - -90.15 - 0 - 0 - DVN - - - ILZ102 - 131020 - Monroe - IL - US - 38.30 - -90.14 - 0 - 0 - LSX - - - LAZ061 - 180610 - Upper_Jefferson - LA - US - 29.81 - -90.14 - 0 - 0 - LIX - - - WIZ062 - 490620 - Iowa - WI - US - 43.01 - -90.13 - 0 - 0 - MKX - - - WIZ067 - 490670 - Lafayette - WI - US - 42.66 - -90.13 - 0 - 0 - MKX - - - MSZ063 - 240630 - Lawrence - MS - US - 31.55 - -90.10 - 0 - 0 - JAN - - - MSZ036 - 240360 - Holmes - MS - US - 33.13 - -90.09 - 0 - 0 - JAN - - - MSZ043 - 240430 - Madison - MS - US - 32.65 - -90.08 - 0 - 0 - JAN - - - LAZ068 - 180680 - Lower_Jefferson - LA - US - 29.56 - -90.07 - 0 - 0 - LIX - - - MSZ071 - 240710 - Walthall - MS - US - 31.18 - -90.05 - 0 - 0 - LIX - - - WIZ043 - 490430 - Juneau - WI - US - 43.95 - -90.05 - 0 - 0 - ARX - - - MOZ086 - 250860 - Bollinger - MO - US - 37.32 - -90.04 - 0 - 0 - PAH - - - LAZ039 - 180390 - Washington - LA - US - 30.84 - -90.03 - 0 - 0 - LIX - - - WIZ035 - 490350 - Wood - WI - US - 44.47 - -90.02 - 0 - 0 - GRB - - - ILZ007 - 130070 - Carroll - IL - US - 42.06 - -90.01 - 0 - 0 - DVN - - - MOZ113 - 251130 - Dunklin - MO - US - 36.31 - -90.01 - 0 - 0 - MEG - - - MSZ001 - 240010 - De_Soto - MS - US - 34.86 - -90.01 - 0 - 0 - MEG - - - ILZ101 - 131010 - St._Clair - IL - US - 38.44 - -89.99 - 0 - 0 - LSX - - - ILZ041 - 130410 - Mason - IL - US - 40.25 - -89.98 - 0 - 0 - ILX - - - MOZ110 - 251100 - Stoddard - MO - US - 36.88 - -89.98 - 0 - 0 - PAH - - - MSZ049 - 240490 - Rankin - MS - US - 32.33 - -89.98 - 0 - 0 - JAN - - - TNZ088 - 420880 - Shelby - TN - US - 35.21 - -89.97 - 0 - 0 - MEG - - - ARZ028 - 40280 - Mississippi - AR - US - 35.71 - -89.96 - 0 - 0 - MEG - - - LAZ063 - 180630 - Upper_Plaquemines - LA - US - 29.77 - -89.96 - 0 - 0 - LIX - - - MSZ012 - 240120 - Panola - MS - US - 34.36 - -89.96 - 0 - 0 - MEG - - - WIZ056 - 490560 - Sauk - WI - US - 43.40 - -89.96 - 0 - 0 - MKX - - - ILZ009 - 130090 - Whiteside - IL - US - 41.76 - -89.95 - 0 - 0 - DVN - - - MSZ008 - 240080 - Tate - MS - US - 34.67 - -89.95 - 0 - 0 - MEG - - - ILZ100 - 131000 - Madison - IL - US - 38.83 - -89.94 - 0 - 0 - LSX - - - MSZ055 - 240550 - Simpson - MS - US - 31.91 - -89.94 - 0 - 0 - JAN - - - ILZ059 - 130590 - Macoupin - IL - US - 39.26 - -89.93 - 0 - 0 - LSX - - - MSZ027 - 240270 - Carroll - MS - US - 33.45 - -89.91 - 0 - 0 - JAN - - - ILZ079 - 130790 - Randolph - IL - US - 38.01 - -89.90 - 0 - 0 - LSX - - - LAZ040 - 180400 - St._Tammany - LA - US - 30.44 - -89.89 - 0 - 0 - LIX - - - LAZ062 - 180620 - Orleans - LA - US - 30.03 - -89.88 - 0 - 0 - LIX - - - LAZ064 - 180640 - Upper_St._Bernard - LA - US - 29.91 - -89.86 - 0 - 0 - LIX - - - MSZ072 - 240720 - Marion - MS - US - 31.22 - -89.85 - 0 - 0 - JAN - - - MOZ076 - 250760 - Perry - MO - US - 37.74 - -89.83 - 0 - 0 - PAH - - - ILZ028 - 130280 - Stark - IL - US - 41.11 - -89.82 - 0 - 0 - ILX - - - MSZ026 - 240260 - Grenada - MS - US - 33.79 - -89.82 - 0 - 0 - JAN - - - TNZ049 - 420490 - Tipton - TN - US - 35.51 - -89.82 - 0 - 0 - MEG - - - WIZ044 - 490440 - Adams - WI - US - 43.95 - -89.81 - 0 - 0 - ARX - - - ILZ048 - 130480 - Menard - IL - US - 40.04 - -89.79 - 0 - 0 - ILX - - - MSZ064 - 240640 - Jefferson_Davis - MS - US - 31.59 - -89.78 - 0 - 0 - JAN - - - WIZ030 - 490300 - Marathon - WI - US - 44.90 - -89.76 - 0 - 0 - GRB - - - MOZ115 - 251150 - Pemiscot - MO - US - 36.21 - -89.75 - 0 - 0 - MEG - - - WIZ018 - 490180 - Lincoln - WI - US - 45.34 - -89.73 - 0 - 0 - GRB - - - ILZ029 - 130290 - Peoria - IL - US - 40.75 - -89.72 - 0 - 0 - ILX - - - MSZ021 - 240210 - Yalobusha - MS - US - 34.03 - -89.72 - 0 - 0 - MEG - - - MIZ009 - 220090 - Gogebic - MI - US - 46.44 - -89.70 - 0 - 0 - MQT - - - ILZ002 - 130020 - Stephenson - IL - US - 42.35 - -89.66 - 0 - 0 - DVN - - - MOZ114 - 251140 - New_Madrid - MO - US - 36.61 - -89.66 - 0 - 0 - PAH - - - MOZ087 - 250870 - Cape_Girardeau - MO - US - 37.37 - -89.65 - 0 - 0 - PAH - - - TNZ048 - 420480 - Lauderdale - TN - US - 35.75 - -89.65 - 0 - 0 - MEG - - - MSZ037 - 240370 - Attala - MS - US - 33.09 - -89.64 - 0 - 0 - JAN - - - ILZ051 - 130510 - Sangamon - IL - US - 39.75 - -89.61 - 0 - 0 - ILX - - - ILZ037 - 130370 - Tazewell - IL - US - 40.54 - -89.60 - 0 - 0 - ILX - - - WIZ068 - 490680 - Green - WI - US - 42.68 - -89.60 - 0 - 0 - MKX - - - LAZ070 - 180700 - Lower_St._Bernard - LA - US - 29.85 - -89.59 - 0 - 0 - LIX - - - MSZ077 - 240770 - Pearl_River - MS - US - 30.74 - -89.59 - 0 - 0 - LIX - - - MSZ028 - 240280 - Montgomery - MS - US - 33.49 - -89.58 - 0 - 0 - JAN - - - MSZ065 - 240650 - Covington - MS - US - 31.62 - -89.57 - 0 - 0 - JAN - - - MOZ111 - 251110 - Scott - MO - US - 37.06 - -89.55 - 0 - 0 - PAH - - - MSZ050 - 240500 - Scott - MS - US - 32.43 - -89.55 - 0 - 0 - JAN - - - WIZ010 - 490100 - Oneida - WI - US - 45.68 - -89.54 - 0 - 0 - GRB - - - MSZ056 - 240560 - Smith - MS - US - 32.01 - -89.53 - 0 - 0 - JAN - - - WIZ036 - 490360 - Portage - WI - US - 44.46 - -89.53 - 0 - 0 - GRB - - - ILZ017 - 130170 - Bureau - IL - US - 41.37 - -89.52 - 0 - 0 - DVN - - - MSZ044 - 240440 - Leake - MS - US - 32.76 - -89.52 - 0 - 0 - JAN - - - TNZ001 - 420010 - Lake - TN - US - 36.34 - -89.52 - 0 - 0 - MEG - - - MSZ073 - 240730 - Lamar - MS - US - 31.21 - -89.50 - 0 - 0 - JAN - - - MSZ080 - 240800 - Hancock - MS - US - 30.42 - -89.50 - 0 - 0 - LIX - - - LAZ069 - 180690 - Lower_Plaquemines - LA - US - 29.37 - -89.48 - 0 - 0 - LIX - - - MSZ002 - 240020 - Marshall - MS - US - 34.75 - -89.48 - 0 - 0 - MEG - - - MSZ013 - 240130 - Lafayette - MS - US - 34.37 - -89.48 - 0 - 0 - MEG - - - WIZ005 - 490050 - Vilas - WI - US - 46.08 - -89.48 - 0 - 0 - GRB - - - ILZ064 - 130640 - Bond - IL - US - 38.88 - -89.45 - 0 - 0 - LSX - - - TNZ019 - 420190 - Dyer - TN - US - 36.05 - -89.44 - 0 - 0 - MEG - - - ILZ069 - 130690 - Clinton - IL - US - 38.58 - -89.43 - 0 - 0 - LSX - - - ILZ074 - 130740 - Washington - IL - US - 38.36 - -89.43 - 0 - 0 - LSX - - - ILZ060 - 130600 - Montgomery - IL - US - 39.26 - -89.42 - 0 - 0 - LSX - - - ILZ084 - 130840 - Jackson - IL - US - 37.76 - -89.42 - 0 - 0 - PAH - - - TNZ089 - 420890 - Fayette - TN - US - 35.20 - -89.42 - 0 - 0 - MEG - - - WIZ063 - 490630 - Dane - WI - US - 43.07 - -89.42 - 0 - 0 - MKX - - - WIZ057 - 490570 - Columbia - WI - US - 43.47 - -89.39 - 0 - 0 - MKX - - - ILZ042 - 130420 - Logan - IL - US - 40.12 - -89.38 - 0 - 0 - ILX - - - WIZ046 - 490460 - Marquette - WI - US - 43.81 - -89.38 - 0 - 0 - MKX - - - MIZ002 - 220020 - Ontonagon - MI - US - 46.68 - -89.37 - 0 - 0 - MQT - - - ILZ080 - 130800 - Perry - IL - US - 38.08 - -89.36 - 0 - 0 - PAH - - - ILZ030 - 130300 - Marshall - IL - US - 41.04 - -89.35 - 0 - 0 - ILX - - - ILZ008 - 130080 - Ogle - IL - US - 42.04 - -89.32 - 0 - 0 - LOT - - - ILZ018 - 130180 - Putnam - IL - US - 41.21 - -89.32 - 0 - 0 - DVN - - - ILZ092 - 130920 - Alexander - IL - US - 37.16 - -89.32 - 0 - 0 - PAH - - - MOZ112 - 251120 - Mississippi - MO - US - 36.83 - -89.32 - 0 - 0 - PAH - - - MSZ022 - 240220 - Calhoun - MS - US - 33.95 - -89.32 - 0 - 0 - MEG - - - ILZ010 - 130100 - Lee - IL - US - 41.75 - -89.29 - 0 - 0 - LOT - - - ILZ052 - 130520 - Christian - IL - US - 39.58 - -89.29 - 0 - 0 - ILX - - - ILZ088 - 130880 - Union - IL - US - 37.47 - -89.29 - 0 - 0 - PAH - - - MSZ074 - 240740 - Forrest - MS - US - 31.18 - -89.29 - 0 - 0 - JAN - - - TNZ050 - 420500 - Haywood - TN - US - 35.61 - -89.29 - 0 - 0 - MEG - - - MSZ032 - 240320 - Choctaw - MS - US - 33.33 - -89.27 - 0 - 0 - JAN - - - MSZ029 - 240290 - Webster - MS - US - 33.60 - -89.26 - 0 - 0 - JAN - - - ILZ031 - 130310 - Woodford - IL - US - 40.76 - -89.25 - 0 - 0 - ILX - - - WIZ045 - 490450 - Waushara - WI - US - 44.11 - -89.24 - 0 - 0 - GRB - - - KYZ001 - 170010 - Fulton - KY - US - 36.58 - -89.20 - 0 - 0 - PAH - - - ILZ003 - 130030 - Winnebago - IL - US - 42.32 - -89.17 - 0 - 0 - LOT - - - MSZ003 - 240030 - Benton - MS - US - 34.80 - -89.17 - 0 - 0 - MEG - - - MSZ066 - 240660 - Jones - MS - US - 31.63 - -89.16 - 0 - 0 - JAN - - - TNZ002 - 420020 - Obion - TN - US - 36.35 - -89.14 - 0 - 0 - MEG - - - TNZ051 - 420510 - Crockett - TN - US - 35.84 - -89.13 - 0 - 0 - MEG - - - MSZ051 - 240510 - Newton - MS - US - 32.41 - -89.12 - 0 - 0 - JAN - - - MSZ045 - 240450 - Neshoba - MS - US - 32.76 - -89.11 - 0 - 0 - JAN - - - MSZ057 - 240570 - Jasper - MS - US - 32.02 - -89.11 - 0 - 0 - JAN - - - ILZ093 - 130930 - Pulaski - IL - US - 37.20 - -89.10 - 0 - 0 - PAH - - - MSZ078 - 240780 - Stone - MS - US - 30.78 - -89.10 - 0 - 0 - MOB - - - WIZ069 - 490690 - Rock - WI - US - 42.67 - -89.07 - 0 - 0 - MKX - - - MSZ038 - 240380 - Winston - MS - US - 33.11 - -89.06 - 0 - 0 - JAN - - - MSZ081 - 240810 - Harrison - MS - US - 30.44 - -89.06 - 0 - 0 - LIX - - - WIZ047 - 490470 - Green_Lake - WI - US - 43.81 - -89.06 - 0 - 0 - MKX - - - MSZ015 - 240150 - Pontotoc - MS - US - 34.23 - -89.03 - 0 - 0 - MEG - - - WIZ019 - 490190 - Langlade - WI - US - 45.25 - -89.03 - 0 - 0 - GRB - - - KYZ002 - 170020 - Hickman - KY - US - 36.65 - -89.01 - 0 - 0 - PAH - - - KYZ003 - 170030 - Carlisle - KY - US - 36.87 - -89.00 - 0 - 0 - PAH - - - KYZ004 - 170040 - Ballard - KY - US - 37.07 - -89.00 - 0 - 0 - PAH - - - ILZ053 - 130530 - Macon - IL - US - 39.86 - -88.99 - 0 - 0 - ILX - - - TNZ090 - 420900 - Hardeman - TN - US - 35.22 - -88.99 - 0 - 0 - MEG - - - ILZ065 - 130650 - Fayette - IL - US - 38.98 - -88.98 - 0 - 0 - LSX - - - MSZ014 - 240140 - Union - MS - US - 34.49 - -88.98 - 0 - 0 - MEG - - - MSZ075 - 240750 - Perry - MS - US - 31.18 - -88.98 - 0 - 0 - MOB - - - MSZ023 - 240230 - Chickasaw - MS - US - 33.91 - -88.95 - 0 - 0 - MEG - - - TNZ020 - 420200 - Gibson - TN - US - 36.01 - -88.95 - 0 - 0 - MEG - - - ILZ081 - 130810 - Franklin - IL - US - 38.00 - -88.94 - 0 - 0 - PAH - - - ILZ075 - 130750 - Jefferson - IL - US - 38.30 - -88.93 - 0 - 0 - PAH - - - ILZ085 - 130850 - Williamson - IL - US - 37.74 - -88.93 - 0 - 0 - PAH - - - ILZ070 - 130700 - Marion - IL - US - 38.65 - -88.92 - 0 - 0 - LSX - - - WIZ037 - 490370 - Waupaca - WI - US - 44.46 - -88.91 - 0 - 0 - GRB - - - MSZ004 - 240040 - Tippah - MS - US - 34.80 - -88.89 - 0 - 0 - MEG - - - ILZ019 - 130190 - La_Salle - IL - US - 41.28 - -88.88 - 0 - 0 - LOT - - - ILZ089 - 130890 - Johnson - IL - US - 37.45 - -88.88 - 0 - 0 - PAH - - - ILZ038 - 130380 - McLean - IL - US - 40.52 - -88.87 - 0 - 0 - ILX - - - ILZ043 - 130430 - De_Witt - IL - US - 40.17 - -88.87 - 0 - 0 - ILX - - - MSZ033 - 240330 - Oktibbeha - MS - US - 33.43 - -88.87 - 0 - 0 - JAN - - - MIZ001 - 220010 - Keweenaw - MI - US - 48.01 - -88.84 - 0 - 0 - MQT - - - TNZ052 - 420520 - Madison - TN - US - 35.62 - -88.84 - 0 - 0 - MEG - - - ILZ004 - 130040 - Boone - IL - US - 42.32 - -88.83 - 0 - 0 - LOT - - - MIZ084 - 220840 - Southern_Houghton - MI - US - 46.64 - -88.83 - 0 - 0 - MQT - - - ILZ061 - 130610 - Shelby - IL - US - 39.43 - -88.81 - 0 - 0 - ILX - - - ILZ011 - 130110 - DeKalb - IL - US - 41.89 - -88.77 - 0 - 0 - LOT - - - WIZ064 - 490640 - Jefferson - WI - US - 43.02 - -88.77 - 0 - 0 - MKX - - - MSZ030 - 240300 - Clay - MS - US - 33.66 - -88.75 - 0 - 0 - JAN - - - TNZ003 - 420030 - Weakley - TN - US - 36.28 - -88.73 - 0 - 0 - MEG - - - WIZ011 - 490110 - Forest - WI - US - 45.72 - -88.73 - 0 - 0 - GRB - - - WIZ020 - 490200 - Menominee - WI - US - 44.99 - -88.73 - 0 - 0 - GRB - - - WIZ031 - 490310 - Shawano - WI - US - 44.81 - -88.73 - 0 - 0 - GRB - - - ILZ094 - 130940 - Massac - IL - US - 37.20 - -88.71 - 0 - 0 - PAH - - - KYZ005 - 170050 - McCracken - KY - US - 37.08 - -88.71 - 0 - 0 - PAH - - - WIZ058 - 490580 - Dodge - WI - US - 43.42 - -88.70 - 0 - 0 - MKX - - - MSZ067 - 240670 - Wayne - MS - US - 31.66 - -88.69 - 0 - 0 - MOB - - - MSZ016 - 240160 - Lee - MS - US - 34.30 - -88.68 - 0 - 0 - MEG - - - MSZ058 - 240580 - Clarke - MS - US - 32.03 - -88.68 - 0 - 0 - JAN - - - KYZ006 - 170060 - Graves - KY - US - 36.73 - -88.66 - 0 - 0 - PAH - - - MSZ052 - 240520 - Lauderdale - MS - US - 32.40 - -88.66 - 0 - 0 - JAN - - - ILZ054 - 130540 - Moultrie - IL - US - 39.62 - -88.64 - 0 - 0 - ILX - - - MSZ079 - 240790 - George - MS - US - 30.87 - -88.64 - 0 - 0 - MOB - - - WIZ048 - 490480 - Winnebago - WI - US - 44.07 - -88.64 - 0 - 0 - GRB - - - MSZ046 - 240460 - Kemper - MS - US - 32.76 - -88.63 - 0 - 0 - JAN - - - MSZ076 - 240760 - Greene - MS - US - 31.22 - -88.63 - 0 - 0 - MOB - - - MSZ082 - 240820 - Jackson - MS - US - 30.47 - -88.63 - 0 - 0 - LIX - - - ILZ044 - 130440 - Piatt - IL - US - 40.04 - -88.61 - 0 - 0 - ILX - - - TNZ053 - 420530 - Chester - TN - US - 35.42 - -88.61 - 0 - 0 - MEG - - - ILZ032 - 130320 - Livingston - IL - US - 40.87 - -88.59 - 0 - 0 - LOT - - - ILZ066 - 130660 - Effingham - IL - US - 39.06 - -88.59 - 0 - 0 - ILX - - - MSZ005 - 240050 - Alcorn - MS - US - 34.88 - -88.58 - 0 - 0 - MEG - - - TNZ091 - 420910 - McNairy - TN - US - 35.20 - -88.58 - 0 - 0 - MEG - - - MIZ003 - 220030 - Northern_Houghton - MI - US - 47.05 - -88.57 - 0 - 0 - MQT - - - ILZ090 - 130900 - Pope - IL - US - 37.34 - -88.56 - 0 - 0 - PAH - - - MSZ039 - 240390 - Noxubee - MS - US - 33.11 - -88.56 - 0 - 0 - JAN - - - MIZ010 - 220100 - Iron - MI - US - 46.18 - -88.55 - 0 - 0 - MQT - - - ILZ082 - 130820 - Hamilton - IL - US - 38.08 - -88.54 - 0 - 0 - PAH - - - ILZ086 - 130860 - Saline - IL - US - 37.76 - -88.54 - 0 - 0 - PAH - - - WIZ070 - 490700 - Walworth - WI - US - 42.67 - -88.53 - 0 - 0 - MKX - - - MSZ009 - 240090 - Prentiss - MS - US - 34.61 - -88.52 - 0 - 0 - MEG - - - WIZ051 - 490510 - Fond_Du_Lac - WI - US - 43.74 - -88.52 - 0 - 0 - MKX - - - ILZ071 - 130710 - Clay - IL - US - 38.76 - -88.48 - 0 - 0 - ILX - - - MSZ024 - 240240 - Monroe - MS - US - 33.87 - -88.46 - 0 - 0 - MEG - - - MSZ031 - 240310 - Lowndes - MS - US - 33.52 - -88.46 - 0 - 0 - JAN - - - WIZ038 - 490380 - Outagamie - WI - US - 44.42 - -88.46 - 0 - 0 - GRB - - - ILZ005 - 130050 - McHenry - IL - US - 42.32 - -88.45 - 0 - 0 - LOT - - - ILZ020 - 130200 - Kendall - IL - US - 41.59 - -88.44 - 0 - 0 - LOT - - - TNZ021 - 420210 - Carroll - TN - US - 35.97 - -88.44 - 0 - 0 - MEG - - - ILZ012 - 130120 - Kane - IL - US - 41.94 - -88.43 - 0 - 0 - LOT - - - ILZ076 - 130760 - Wayne - IL - US - 38.43 - -88.43 - 0 - 0 - PAH - - - ILZ021 - 130210 - Grundy - IL - US - 41.29 - -88.42 - 0 - 0 - LOT - - - TNZ054 - 420540 - Henderson - TN - US - 35.62 - -88.39 - 0 - 0 - MEG - - - WIZ021 - 490210 - Northern_Oconto_County - WI - US - 45.20 - -88.39 - 0 - 0 - GRB - - - KYZ007 - 170070 - Livingston - KY - US - 37.20 - -88.38 - 0 - 0 - PAH - - - WIZ012 - 490120 - Florence - WI - US - 45.87 - -88.36 - 0 - 0 - GRB - - - MSZ017 - 240170 - Itawamba - MS - US - 34.28 - -88.35 - 0 - 0 - MEG - - - MIZ004 - 220040 - Baraga - MI - US - 46.69 - -88.33 - 0 - 0 - MQT - - - KYZ008 - 170080 - Marshall - KY - US - 36.91 - -88.31 - 0 - 0 - PAH - - - WIZ065 - 490650 - Waukesha - WI - US - 43.02 - -88.30 - 0 - 0 - MKX - - - KYZ009 - 170090 - Calloway - KY - US - 36.63 - -88.27 - 0 - 0 - PAH - - - TNZ004 - 420040 - Henry - TN - US - 36.32 - -88.26 - 0 - 0 - MEG - - - ILZ091 - 130910 - Hardin - IL - US - 37.51 - -88.25 - 0 - 0 - PAH - - - ILZ062 - 130620 - Cumberland - IL - US - 39.28 - -88.24 - 0 - 0 - ILX - - - ILZ056 - 130560 - Coles - IL - US - 39.53 - -88.22 - 0 - 0 - ILX - - - MSZ006 - 240060 - Tishomingo - MS - US - 34.73 - -88.22 - 0 - 0 - MEG - - - WIZ049 - 490490 - Calumet - WI - US - 44.07 - -88.22 - 0 - 0 - GRB - - - WIZ059 - 490590 - Washington - WI - US - 43.37 - -88.22 - 0 - 0 - MKX - - - ALZ063 - 10630 - Lower_Mobile - AL - US - 30.44 - -88.21 - 0 - 0 - MOB - - - ILZ055 - 130550 - Douglas - IL - US - 39.77 - -88.21 - 0 - 0 - ILX - - - ILZ087 - 130870 - Gallatin - IL - US - 37.75 - -88.21 - 0 - 0 - PAH - - - ALZ051 - 10510 - Choctaw - AL - US - 32.01 - -88.20 - 0 - 0 - MOB - - - ILZ039 - 130390 - Ford - IL - US - 40.70 - -88.20 - 0 - 0 - LOT - - - ILZ045 - 130450 - Champaign - IL - US - 40.14 - -88.20 - 0 - 0 - ILX - - - ALZ052 - 10520 - Washington - AL - US - 31.41 - -88.18 - 0 - 0 - MOB - - - ALZ061 - 10610 - Upper_Mobile - AL - US - 30.93 - -88.18 - 0 - 0 - MOB - - - TNZ092 - 420920 - Hardin - TN - US - 35.22 - -88.18 - 0 - 0 - MEG - - - ILZ067 - 130670 - Jasper - IL - US - 39.02 - -88.16 - 0 - 0 - ILX - - - ILZ083 - 130830 - White - IL - US - 38.08 - -88.15 - 0 - 0 - PAH - - - ALZ030 - 10300 - Sumter - AL - US - 32.65 - -88.13 - 0 - 0 - BMX - - - WIZ074 - 490740 - Southern_Oconto_County - WI - US - 44.85 - -88.12 - 0 - 0 - GRB - - - ALZ012 - 10120 - Lamar - AL - US - 33.80 - -88.11 - 0 - 0 - BMX - - - ILZ072 - 130720 - Richland - IL - US - 38.72 - -88.11 - 0 - 0 - ILX - - - TNZ055 - 420550 - Decatur - TN - US - 35.62 - -88.10 - 0 - 0 - MEG - - - WIZ013 - 490130 - Northern_Marinette_County - WI - US - 45.57 - -88.10 - 0 - 0 - GRB - - - ALZ022 - 10220 - Pickens - AL - US - 33.26 - -88.09 - 0 - 0 - BMX - - - ILZ013 - 130130 - DuPage - IL - US - 41.85 - -88.09 - 0 - 0 - LOT - - - KYZ010 - 170100 - Crittenden - KY - US - 37.34 - -88.09 - 0 - 0 - PAH - - - KYZ011 - 170110 - Lyon - KY - US - 37.03 - -88.07 - 0 - 0 - PAH - - - TNZ022 - 420220 - Benton - TN - US - 36.09 - -88.07 - 0 - 0 - OHX - - - ILZ077 - 130770 - Edwards - IL - US - 38.42 - -88.05 - 0 - 0 - PAH - - - WIZ072 - 490720 - Kenosha - WI - US - 42.58 - -88.05 - 0 - 0 - MKX - - - WIZ071 - 490710 - Racine - WI - US - 42.73 - -88.03 - 0 - 0 - MKX - - - WIZ039 - 490390 - Brown - WI - US - 44.46 - -87.99 - 0 - 0 - GRB - - - ILZ006 - 130060 - Lake - IL - US - 42.32 - -87.98 - 0 - 0 - LOT - - - ALZ031 - 10310 - Greene - AL - US - 32.84 - -87.96 - 0 - 0 - BMX - - - KYZ014 - 170140 - Union - KY - US - 37.69 - -87.95 - 0 - 0 - PAH - - - WIZ066 - 490660 - Milwaukee - WI - US - 43.02 - -87.94 - 0 - 0 - MKX - - - WIZ073 - 490730 - Southern_Marinette_County - WI - US - 45.18 - -87.94 - 0 - 0 - GRB - - - WIZ052 - 490520 - Sheboygan - WI - US - 43.72 - -87.93 - 0 - 0 - MKX - - - ALZ011 - 10110 - Marion - AL - US - 34.12 - -87.92 - 0 - 0 - BMX - - - KYZ012 - 170120 - Trigg - KY - US - 36.83 - -87.92 - 0 - 0 - PAH - - - WIZ060 - 490600 - Ozaukee - WI - US - 43.37 - -87.92 - 0 - 0 - MKX - - - ILZ014 - 130140 - Cook - IL - US - 41.81 - -87.90 - 0 - 0 - LOT - - - ILZ022 - 130220 - Will - IL - US - 41.47 - -87.90 - 0 - 0 - LOT - - - INZ085 - 140850 - Posey - IN - US - 38.01 - -87.90 - 0 - 0 - PAH - - - ILZ023 - 130230 - Kankakee - IL - US - 41.15 - -87.89 - 0 - 0 - LOT - - - KYZ013 - 170130 - Caldwell - KY - US - 37.17 - -87.89 - 0 - 0 - PAH - - - MIZ011 - 220110 - Dickinson - MI - US - 45.99 - -87.87 - 0 - 0 - MQT - - - ALZ003 - 10030 - Franklin - AL - US - 34.45 - -87.85 - 0 - 0 - HUN - - - TNZ056 - 420560 - Perry - TN - US - 35.64 - -87.85 - 0 - 0 - OHX - - - ALZ053 - 10530 - Clarke - AL - US - 31.60 - -87.84 - 0 - 0 - MOB - - - ILZ033 - 130330 - Iroquois - IL - US - 40.75 - -87.83 - 0 - 0 - LOT - - - TNZ005 - 420050 - Stewart - TN - US - 36.50 - -87.83 - 0 - 0 - OHX - - - ILZ078 - 130780 - Wabash - IL - US - 38.41 - -87.82 - 0 - 0 - PAH - - - TNZ093 - 420930 - Wayne - TN - US - 35.26 - -87.80 - 0 - 0 - OHX - - - ALZ039 - 10390 - Marengo - AL - US - 32.27 - -87.79 - 0 - 0 - BMX - - - ALZ002 - 10020 - Colbert - AL - US - 34.74 - -87.78 - 0 - 0 - HUN - - - ILZ063 - 130630 - Clark - IL - US - 39.33 - -87.78 - 0 - 0 - ILX - - - TNZ024 - 420240 - Humphreys - TN - US - 36.03 - -87.77 - 0 - 0 - OHX - - - WIZ050 - 490500 - Manitowoc - WI - US - 44.11 - -87.77 - 0 - 0 - GRB - - - ILZ057 - 130570 - Edgar - IL - US - 39.68 - -87.75 - 0 - 0 - ILX - - - TNZ023 - 420230 - Houston - TN - US - 36.28 - -87.75 - 0 - 0 - OHX - - - ILZ046 - 130460 - Vermilion - IL - US - 40.19 - -87.74 - 0 - 0 - ILX - - - ILZ068 - 130680 - Crawford - IL - US - 39.02 - -87.74 - 0 - 0 - ILX - - - ALZ062 - 10620 - Upper_Baldwin - AL - US - 31.01 - -87.72 - 0 - 0 - MOB - - - ILZ073 - 130730 - Lawrence - IL - US - 38.72 - -87.71 - 0 - 0 - ILX - - - ALZ001 - 10010 - Lauderdale - AL - US - 34.88 - -87.70 - 0 - 0 - HUN - - - ALZ064 - 10640 - Lower_Baldwin - AL - US - 30.45 - -87.70 - 0 - 0 - MOB - - - ALZ013 - 10130 - Fayette - AL - US - 33.73 - -87.68 - 0 - 0 - BMX - - - KYZ015 - 170150 - Webster - KY - US - 37.50 - -87.66 - 0 - 0 - PAH - - - INZ081 - 140810 - Gibson - IN - US - 38.35 - -87.65 - 0 - 0 - PAH - - - ALZ032 - 10320 - Hale - AL - US - 32.75 - -87.64 - 0 - 0 - BMX - - - KYZ018 - 170180 - Henderson - KY - US - 37.81 - -87.61 - 0 - 0 - PAH - - - MIZ005 - 220050 - Marquette - MI - US - 46.48 - -87.61 - 0 - 0 - MQT - - - INZ086 - 140860 - Vanderburgh - IN - US - 38.00 - -87.58 - 0 - 0 - PAH - - - KYZ016 - 170160 - Hopkins - KY - US - 37.34 - -87.58 - 0 - 0 - PAH - - - MIZ012 - 220120 - Menominee - MI - US - 45.55 - -87.57 - 0 - 0 - MQT - - - WIZ040 - 490400 - Kewaunee - WI - US - 44.50 - -87.57 - 0 - 0 - GRB - - - KYZ017 - 170170 - Christian - KY - US - 36.90 - -87.50 - 0 - 0 - PAH - - - TNZ058 - 420580 - Lewis - TN - US - 35.53 - -87.49 - 0 - 0 - OHX - - - TNZ057 - 420570 - Hickman - TN - US - 35.81 - -87.47 - 0 - 0 - OHX - - - INZ060 - 140600 - Sullivan - IN - US - 39.08 - -87.46 - 0 - 0 - IND - - - ALZ023 - 10230 - Tuscaloosa - AL - US - 33.32 - -87.45 - 0 - 0 - BMX - - - INZ043 - 140430 - Vermillion - IN - US - 39.89 - -87.45 - 0 - 0 - IND - - - INZ067 - 140670 - Knox - IN - US - 38.66 - -87.43 - 0 - 0 - IND - - - INZ051 - 140510 - Vigo - IN - US - 39.43 - -87.42 - 0 - 0 - IND - - - FLZ001 - 90010 - Inland_Escambia - FL - US - 30.86 - -87.40 - 0 - 0 - MOB - - - INZ010 - 140100 - Newton - IN - US - 40.98 - -87.40 - 0 - 0 - LOT - - - TNZ094 - 420940 - Lawrence - TN - US - 35.24 - -87.40 - 0 - 0 - OHX - - - INZ001 - 140010 - Lake - IN - US - 41.44 - -87.38 - 0 - 0 - LOT - - - TNZ006 - 420060 - Montgomery - TN - US - 36.49 - -87.38 - 0 - 0 - OHX - - - ALZ014 - 10140 - Winston - AL - US - 34.15 - -87.37 - 0 - 0 - BMX - - - ALZ055 - 10550 - Monroe - AL - US - 31.54 - -87.35 - 0 - 0 - MOB - - - TNZ025 - 420250 - Dickson - TN - US - 36.15 - -87.35 - 0 - 0 - OHX - - - ALZ004 - 10040 - Lawrence - AL - US - 34.56 - -87.32 - 0 - 0 - HUN - - - INZ019 - 140190 - Benton - IN - US - 40.61 - -87.32 - 0 - 0 - LOT - - - INZ028 - 140280 - Warren - IN - US - 40.31 - -87.32 - 0 - 0 - IND - - - ALZ015 - 10150 - Walker - AL - US - 33.76 - -87.30 - 0 - 0 - BMX - - - INZ082 - 140820 - Pike - IN - US - 38.39 - -87.28 - 0 - 0 - PAH - - - KYZ020 - 170200 - McLean - KY - US - 37.54 - -87.28 - 0 - 0 - PAH - - - ALZ033 - 10330 - Perry - AL - US - 32.59 - -87.27 - 0 - 0 - BMX - - - INZ035 - 140350 - Fountain - IN - US - 40.17 - -87.27 - 0 - 0 - IND - - - WIZ022 - 490220 - Door - WI - US - 45.05 - -87.27 - 0 - 0 - GRB - - - ALZ054 - 10540 - Wilcox - AL - US - 32.05 - -87.26 - 0 - 0 - MOB - - - INZ087 - 140870 - Warrick - IN - US - 38.06 - -87.25 - 0 - 0 - PAH - - - INZ044 - 140440 - Parke - IN - US - 39.79 - -87.23 - 0 - 0 - IND - - - FLZ002 - 90020 - Coastal_Escambia - FL - US - 30.50 - -87.20 - 0 - 0 - MOB - - - KYZ022 - 170220 - Todd - KY - US - 36.86 - -87.20 - 0 - 0 - PAH - - - ALZ059 - 10590 - Escambia - AL - US - 31.13 - -87.16 - 0 - 0 - MOB - - - ALZ034 - 10340 - Bibb - AL - US - 33.04 - -87.15 - 0 - 0 - BMX - - - ALZ040 - 10400 - Dallas - AL - US - 32.38 - -87.14 - 0 - 0 - BMX - - - KYZ021 - 170210 - Muhlenberg - KY - US - 37.23 - -87.14 - 0 - 0 - PAH - - - KYZ019 - 170190 - Daviess - KY - US - 37.75 - -87.12 - 0 - 0 - PAH - - - INZ011 - 140110 - Jasper - IN - US - 41.01 - -87.11 - 0 - 0 - LOT - - - INZ052 - 140520 - Clay - IN - US - 39.39 - -87.10 - 0 - 0 - IND - - - INZ068 - 140680 - Daviess - IN - US - 38.70 - -87.10 - 0 - 0 - IND - - - TNZ026 - 420260 - Cheatham - TN - US - 36.26 - -87.09 - 0 - 0 - OHX - - - INZ002 - 140020 - Porter - IN - US - 41.47 - -87.08 - 0 - 0 - LOT - - - TNZ060 - 420600 - Maury - TN - US - 35.64 - -87.07 - 0 - 0 - OHX - - - ALZ056 - 10560 - Conecuh - AL - US - 31.47 - -87.04 - 0 - 0 - MOB - - - FLZ003 - 90030 - Inland_Santa_Rosa - FL - US - 30.86 - -87.04 - 0 - 0 - MOB - - - ALZ005 - 10050 - Limestone - AL - US - 34.78 - -87.02 - 0 - 0 - HUN - - - INZ088 - 140880 - Spencer - IN - US - 37.99 - -87.02 - 0 - 0 - PAH - - - TNZ095 - 420950 - Giles - TN - US - 35.23 - -87.02 - 0 - 0 - OHX - - - INZ061 - 140610 - Greene - IN - US - 39.03 - -86.98 - 0 - 0 - IND - - - ALZ024 - 10240 - Jefferson - AL - US - 33.55 - -86.93 - 0 - 0 - BMX - - - MIZ013 - 220130 - Delta - MI - US - 45.82 - -86.91 - 0 - 0 - MQT - - - TNZ059 - 420590 - Williamson - TN - US - 35.88 - -86.91 - 0 - 0 - OHX - - - INZ029 - 140290 - Tippecanoe - IN - US - 40.40 - -86.90 - 0 - 0 - IND - - - INZ036 - 140360 - Montgomery - IN - US - 40.05 - -86.90 - 0 - 0 - IND - - - FLZ004 - 90040 - Coastal_Santa_Rosa - FL - US - 30.53 - -86.89 - 0 - 0 - MOB - - - INZ083 - 140830 - Dubois - IN - US - 38.36 - -86.88 - 0 - 0 - LMK - - - KYZ026 - 170260 - Ohio - KY - US - 37.48 - -86.86 - 0 - 0 - LMK - - - INZ053 - 140530 - Owen - IN - US - 39.31 - -86.85 - 0 - 0 - IND - - - KYZ070 - 170700 - Logan - KY - US - 36.86 - -86.85 - 0 - 0 - LMK - - - INZ020 - 140200 - White - IN - US - 40.75 - -86.84 - 0 - 0 - IWX - - - ALZ007 - 10070 - Morgan - AL - US - 34.50 - -86.83 - 0 - 0 - HUN - - - INZ045 - 140450 - Putnam - IN - US - 39.67 - -86.83 - 0 - 0 - IND - - - TNZ007 - 420070 - Robertson - TN - US - 36.50 - -86.82 - 0 - 0 - OHX - - - INZ069 - 140690 - Martin - IN - US - 38.70 - -86.81 - 0 - 0 - IND - - - KYZ023 - 170230 - Hancock - KY - US - 37.83 - -86.81 - 0 - 0 - LMK - - - ALZ016 - 10160 - Cullman - AL - US - 34.09 - -86.78 - 0 - 0 - HUN - - - TNZ027 - 420270 - Davidson - TN - US - 36.19 - -86.78 - 0 - 0 - OHX - - - TNZ061 - 420610 - Marshall - TN - US - 35.49 - -86.77 - 0 - 0 - OHX - - - INZ003 - 140030 - La_Porte - IN - US - 41.50 - -86.71 - 0 - 0 - IWX - - - ALZ035 - 10350 - Chilton - AL - US - 32.87 - -86.70 - 0 - 0 - BMX - - - INZ012 - 140120 - Starke - IN - US - 41.31 - -86.70 - 0 - 0 - IWX - - - INZ013 - 140130 - Pulaski - IN - US - 41.05 - -86.70 - 0 - 0 - IWX - - - ALZ025 - 10250 - Shelby - AL - US - 33.29 - -86.68 - 0 - 0 - BMX - - - ALZ057 - 10570 - Butler - AL - US - 31.75 - -86.68 - 0 - 0 - MOB - - - KYZ061 - 170610 - Butler - KY - US - 37.20 - -86.67 - 0 - 0 - LMK - - - ALZ041 - 10410 - Autauga - AL - US - 32.52 - -86.66 - 0 - 0 - BMX - - - ALZ042 - 10420 - Lowndes - AL - US - 32.19 - -86.66 - 0 - 0 - BMX - - - ALZ017 - 10170 - Blount - AL - US - 34.01 - -86.64 - 0 - 0 - BMX - - - INZ089 - 140890 - Perry - IN - US - 38.05 - -86.63 - 0 - 0 - LMK - - - FLZ006 - 90060 - Coastal_Okaloosa - FL - US - 30.55 - -86.59 - 0 - 0 - MOB - - - KYZ072 - 170720 - Simpson - KY - US - 36.77 - -86.59 - 0 - 0 - LMK - - - FLZ005 - 90050 - Inland_Okaloosa - FL - US - 30.86 - -86.58 - 0 - 0 - MOB - - - INZ021 - 140210 - Carroll - IN - US - 40.59 - -86.57 - 0 - 0 - IND - - - TNZ096 - 420960 - Lincoln - TN - US - 35.19 - -86.57 - 0 - 0 - HUN - - - MIZ077 - 220770 - Berrien - MI - US - 42.01 - -86.53 - 0 - 0 - IWX - - - ALZ006 - 10060 - Madison - AL - US - 34.74 - -86.52 - 0 - 0 - HUN - - - INZ046 - 140460 - Hendricks - IN - US - 39.77 - -86.52 - 0 - 0 - IND - - - INZ062 - 140620 - Monroe - IN - US - 39.16 - -86.52 - 0 - 0 - IND - - - INZ076 - 140760 - Orange - IN - US - 38.54 - -86.50 - 0 - 0 - LMK - - - INZ070 - 140700 - Lawrence - IN - US - 38.84 - -86.49 - 0 - 0 - IND - - - INZ037 - 140370 - Boone - IN - US - 40.06 - -86.48 - 0 - 0 - IND - - - INZ054 - 140540 - Morgan - IN - US - 39.48 - -86.48 - 0 - 0 - IND - - - MIZ006 - 220060 - Alger - MI - US - 46.43 - -86.48 - 0 - 0 - MQT - - - TNZ008 - 420080 - Sumner - TN - US - 36.45 - -86.48 - 0 - 0 - OHX - - - INZ030 - 140300 - Clinton - IN - US - 40.31 - -86.47 - 0 - 0 - IND - - - INZ084 - 140840 - Crawford - IN - US - 38.26 - -86.46 - 0 - 0 - LMK - - - TNZ075 - 420750 - Bedford - TN - US - 35.52 - -86.45 - 0 - 0 - OHX - - - ALZ060 - 10600 - Covington - AL - US - 31.26 - -86.44 - 0 - 0 - MOB - - - KYZ024 - 170240 - Breckinridge - KY - US - 37.81 - -86.42 - 0 - 0 - LMK - - - TNZ062 - 420620 - Rutherford - TN - US - 35.86 - -86.41 - 0 - 0 - OHX - - - KYZ071 - 170710 - Warren - KY - US - 36.99 - -86.40 - 0 - 0 - LMK - - - INZ022 - 140220 - Cass - IN - US - 40.75 - -86.38 - 0 - 0 - IWX - - - TNZ076 - 420760 - Moore - TN - US - 35.28 - -86.38 - 0 - 0 - HUN - - - KYZ027 - 170270 - Grayson - KY - US - 37.47 - -86.35 - 0 - 0 - LMK - - - ALZ008 - 10080 - Marshall - AL - US - 34.36 - -86.32 - 0 - 0 - HUN - - - ALZ058 - 10580 - Crenshaw - AL - US - 31.75 - -86.32 - 0 - 0 - MOB - - - ALZ026 - 10260 - St._Clair - AL - US - 33.69 - -86.31 - 0 - 0 - BMX - - - INZ004 - 140040 - St._Joseph - IN - US - 41.60 - -86.30 - 0 - 0 - IWX - - - MIZ043 - 220430 - Oceana - MI - US - 43.64 - -86.29 - 0 - 0 - GRR - - - TNZ028 - 420280 - Wilson - TN - US - 36.15 - -86.29 - 0 - 0 - OHX - - - MIZ037 - 220370 - Mason - MI - US - 44.00 - -86.28 - 0 - 0 - GRR - - - ALZ036 - 10360 - Coosa - AL - US - 32.93 - -86.27 - 0 - 0 - BMX - - - INZ014 - 140140 - Marshall - IN - US - 41.33 - -86.27 - 0 - 0 - IWX - - - KYZ062 - 170620 - Edmonson - KY - US - 37.20 - -86.27 - 0 - 0 - LMK - - - INZ063 - 140630 - Brown - IN - US - 39.19 - -86.24 - 0 - 0 - IND - - - KYZ025 - 170250 - Meade - KY - US - 38.00 - -86.24 - 0 - 0 - LMK - - - MIZ085 - 220850 - Northern_Schoolcraft - MI - US - 46.33 - -86.23 - 0 - 0 - MQT - - - ALZ044 - 10440 - Montgomery - AL - US - 32.24 - -86.21 - 0 - 0 - BMX - - - FLZ007 - 90070 - Inland_Walton - FL - US - 30.85 - -86.21 - 0 - 0 - TAE - - - INZ015 - 140150 - Fulton - IN - US - 41.05 - -86.21 - 0 - 0 - IWX - - - KYZ073 - 170730 - Allen - KY - US - 36.78 - -86.19 - 0 - 0 - LMK - - - MIZ014 - 220140 - Southern_Schoolcraft - MI - US - 46.00 - -86.17 - 0 - 0 - MQT - - - ALZ027 - 10270 - Talladega - AL - US - 33.40 - -86.15 - 0 - 0 - BMX - - - ALZ043 - 10430 - Elmore - AL - US - 32.59 - -86.14 - 0 - 0 - BMX - - - INZ047 - 140470 - Marion - IN - US - 39.78 - -86.14 - 0 - 0 - IND - - - INZ090 - 140900 - Harrison - IN - US - 38.19 - -86.13 - 0 - 0 - LMK - - - MIZ050 - 220500 - Muskegon - MI - US - 43.30 - -86.13 - 0 - 0 - GRR - - - TNZ029 - 420290 - Trousdale - TN - US - 36.40 - -86.13 - 0 - 0 - OHX - - - FLZ008 - 90080 - Coastal_Walton - FL - US - 30.49 - -86.12 - 0 - 0 - TAE - - - INZ031 - 140310 - Howard - IN - US - 40.48 - -86.12 - 0 - 0 - IND - - - INZ055 - 140550 - Johnson - IN - US - 39.49 - -86.11 - 0 - 0 - IND - - - MIZ031 - 220310 - Manistee - MI - US - 44.35 - -86.10 - 0 - 0 - APX - - - TNZ097 - 420970 - Franklin - TN - US - 35.18 - -86.10 - 0 - 0 - HUN - - - INZ077 - 140770 - Washington - IN - US - 38.60 - -86.09 - 0 - 0 - LMK - - - INZ071 - 140710 - Jackson - IN - US - 38.90 - -86.07 - 0 - 0 - IND - - - MIZ071 - 220710 - Van_Buren - MI - US - 42.25 - -86.07 - 0 - 0 - GRR - - - TNZ077 - 420770 - Coffee - TN - US - 35.50 - -86.07 - 0 - 0 - OHX - - - INZ039 - 140390 - Hamilton - IN - US - 40.08 - -86.06 - 0 - 0 - IND - - - ALZ018 - 10180 - Etowah - AL - US - 34.03 - -86.05 - 0 - 0 - BMX - - - INZ038 - 140380 - Tipton - IN - US - 40.32 - -86.05 - 0 - 0 - IND - - - TNZ063 - 420630 - Cannon - TN - US - 35.81 - -86.05 - 0 - 0 - OHX - - - MIZ025 - 220250 - Benzie - MI - US - 44.65 - -86.04 - 0 - 0 - APX - - - MIZ056 - 220560 - Ottawa - MI - US - 42.99 - -86.03 - 0 - 0 - GRR - - - INZ023 - 140230 - Miami - IN - US - 40.79 - -86.02 - 0 - 0 - IWX - - - MIZ078 - 220780 - Cass - MI - US - 41.92 - -86.00 - 0 - 0 - IWX - - - TNZ009 - 420090 - Macon - TN - US - 36.53 - -86.00 - 0 - 0 - OHX - - - ALZ065 - 10650 - Coffee - AL - US - 31.41 - -85.99 - 0 - 0 - TAE - - - KYZ028 - 170280 - Hardin - KY - US - 37.72 - -85.98 - 0 - 0 - LMK - - - ALZ009 - 10090 - Jackson - AL - US - 34.74 - -85.97 - 0 - 0 - HUN - - - KYZ074 - 170740 - Barren - KY - US - 36.95 - -85.96 - 0 - 0 - LMK - - - TNZ030 - 420300 - Smith - TN - US - 36.26 - -85.96 - 0 - 0 - OHX - - - ALZ049 - 10490 - Pike - AL - US - 31.85 - -85.93 - 0 - 0 - BMX - - - ALZ028 - 10280 - Clay - AL - US - 33.30 - -85.91 - 0 - 0 - BMX - - - KYZ063 - 170630 - Hart - KY - US - 37.30 - -85.91 - 0 - 0 - LMK - - - MIZ064 - 220640 - Allegan - MI - US - 42.60 - -85.91 - 0 - 0 - GRR - - - INZ064 - 140640 - Bartholomew - IN - US - 39.19 - -85.90 - 0 - 0 - IND - - - INZ091 - 140910 - Floyd - IN - US - 38.30 - -85.90 - 0 - 0 - LMK - - - INZ016 - 140160 - Kosciusko - IN - US - 41.25 - -85.87 - 0 - 0 - IWX - - - INZ005 - 140050 - Elkhart - IN - US - 41.60 - -85.86 - 0 - 0 - IWX - - - TNZ064 - 420640 - DeKalb - TN - US - 35.98 - -85.84 - 0 - 0 - OHX - - - ALZ019 - 10190 - Calhoun - AL - US - 33.76 - -85.83 - 0 - 0 - BMX - - - ALZ068 - 10680 - Geneva - AL - US - 31.10 - -85.83 - 0 - 0 - TAE - - - ALZ010 - 10100 - De_Kalb - AL - US - 34.53 - -85.82 - 0 - 0 - HUN - - - ALZ037 - 10370 - Tallapoosa - AL - US - 32.81 - -85.80 - 0 - 0 - BMX - - - INZ024 - 140240 - Wabash - IN - US - 40.85 - -85.80 - 0 - 0 - IWX - - - INZ056 - 140560 - Shelby - IN - US - 39.52 - -85.80 - 0 - 0 - IND - - - MIZ038 - 220380 - Lake - MI - US - 43.99 - -85.80 - 0 - 0 - GRR - - - MIZ044 - 220440 - Newaygo - MI - US - 43.56 - -85.80 - 0 - 0 - GRR - - - FLZ009 - 90090 - Holmes - FL - US - 30.86 - -85.77 - 0 - 0 - TAE - - - INZ048 - 140480 - Hancock - IN - US - 39.83 - -85.77 - 0 - 0 - IND - - - TNZ078 - 420780 - Warren - TN - US - 35.68 - -85.77 - 0 - 0 - OHX - - - INZ078 - 140780 - Scott - IN - US - 38.69 - -85.74 - 0 - 0 - LMK - - - ALZ045 - 10450 - Macon - AL - US - 32.42 - -85.72 - 0 - 0 - BMX - - - INZ040 - 140400 - Madison - IN - US - 40.17 - -85.72 - 0 - 0 - IND - - - ALZ046 - 10460 - Bullock - AL - US - 32.10 - -85.71 - 0 - 0 - BMX - - - FLZ010 - 90100 - Washington - FL - US - 30.62 - -85.71 - 0 - 0 - TAE - - - INZ092 - 140920 - Clark - IN - US - 38.44 - -85.71 - 0 - 0 - LMK - - - KYZ075 - 170750 - Monroe - KY - US - 36.73 - -85.71 - 0 - 0 - LMK - - - MIZ020 - 220200 - Leelanau - MI - US - 44.99 - -85.71 - 0 - 0 - APX - - - KYZ029 - 170290 - Bullitt - KY - US - 37.97 - -85.70 - 0 - 0 - LMK - - - TNZ079 - 420790 - Grundy - TN - US - 35.38 - -85.70 - 0 - 0 - OHX - - - KYZ030 - 170300 - Jefferson - KY - US - 38.19 - -85.69 - 0 - 0 - LMK - - - KYZ053 - 170530 - Larue - KY - US - 37.57 - -85.69 - 0 - 0 - LMK - - - FLZ012 - 90120 - Bay - FL - US - 30.31 - -85.68 - 0 - 0 - TAE - - - TNZ031 - 420310 - Jackson - TN - US - 36.37 - -85.67 - 0 - 0 - OHX - - - INZ032 - 140320 - Grant - IN - US - 40.53 - -85.66 - 0 - 0 - IWX - - - INZ072 - 140720 - Jennings - IN - US - 39.00 - -85.63 - 0 - 0 - IND - - - ALZ020 - 10200 - Cherokee - AL - US - 34.23 - -85.62 - 0 - 0 - BMX - - - KYZ076 - 170760 - Metcalfe - KY - US - 37.01 - -85.62 - 0 - 0 - LMK - - - TNZ098 - 420980 - Marion - TN - US - 35.16 - -85.62 - 0 - 0 - MRX - - - ALZ066 - 10660 - Dale - AL - US - 31.41 - -85.61 - 0 - 0 - TAE - - - ALZ021 - 10210 - Cleburne - AL - US - 33.72 - -85.60 - 0 - 0 - BMX - - - MIZ026 - 220260 - Grand_Traverse - MI - US - 44.75 - -85.58 - 0 - 0 - APX - - - MIZ032 - 220320 - Wexford - MI - US - 44.34 - -85.58 - 0 - 0 - APX - - - MIZ057 - 220570 - Kent - MI - US - 43.03 - -85.56 - 0 - 0 - GRR - - - MIZ079 - 220790 - St._Joseph - MI - US - 41.92 - -85.55 - 0 - 0 - IWX - - - MIZ007 - 220070 - Luce - MI - US - 46.50 - -85.54 - 0 - 0 - MQT - - - TNZ010 - 420100 - Clay - TN - US - 36.52 - -85.54 - 0 - 0 - OHX - - - KYZ064 - 170640 - Green - KY - US - 37.29 - -85.53 - 0 - 0 - LMK - - - MIZ072 - 220720 - Kalamazoo - MI - US - 42.25 - -85.53 - 0 - 0 - GRR - - - INZ017 - 140170 - Whitley - IN - US - 41.15 - -85.50 - 0 - 0 - IWX - - - INZ065 - 140650 - Decatur - IN - US - 39.29 - -85.50 - 0 - 0 - IND - - - INZ025 - 140250 - Huntington - IN - US - 40.84 - -85.49 - 0 - 0 - IWX - - - GAZ001 - 100010 - Dade - GA - US - 34.81 - -85.48 - 0 - 0 - FFC - - - INZ057 - 140570 - Rush - IN - US - 39.62 - -85.48 - 0 - 0 - IND - - - KYZ031 - 170310 - Oldham - KY - US - 38.42 - -85.47 - 0 - 0 - LMK - - - INZ079 - 140790 - Jefferson - IN - US - 38.75 - -85.45 - 0 - 0 - LMK - - - KYZ045 - 170450 - Nelson - KY - US - 37.76 - -85.45 - 0 - 0 - LMK - - - TNZ032 - 420320 - Putnam - TN - US - 36.15 - -85.45 - 0 - 0 - OHX - - - ALZ029 - 10290 - Randolph - AL - US - 33.31 - -85.44 - 0 - 0 - BMX - - - TNZ065 - 420650 - White - TN - US - 35.94 - -85.44 - 0 - 0 - OHX - - - INZ006 - 140060 - Lagrange - IN - US - 41.65 - -85.43 - 0 - 0 - IWX - - - INZ008 - 140080 - Noble - IN - US - 41.41 - -85.43 - 0 - 0 - IWX - - - TNZ080 - 420800 - Van_Buren - TN - US - 35.69 - -85.43 - 0 - 0 - OHX - - - KYZ081 - 170810 - Cumberland - KY - US - 36.78 - -85.42 - 0 - 0 - LMK - - - TNZ081 - 420810 - Sequatchie - TN - US - 35.36 - -85.42 - 0 - 0 - MRX - - - ALZ050 - 10500 - Barbour - AL - US - 31.89 - -85.40 - 0 - 0 - BMX - - - INZ041 - 140410 - Delaware - IN - US - 40.24 - -85.40 - 0 - 0 - IND - - - INZ049 - 140490 - Henry - IN - US - 39.94 - -85.40 - 0 - 0 - IND - - - ALZ038 - 10380 - Chambers - AL - US - 32.93 - -85.36 - 0 - 0 - BMX - - - ALZ069 - 10690 - Houston - AL - US - 31.16 - -85.35 - 0 - 0 - TAE - - - ALZ047 - 10470 - Lee - AL - US - 32.58 - -85.34 - 0 - 0 - BMX - - - KYZ065 - 170650 - Taylor - KY - US - 37.33 - -85.34 - 0 - 0 - LMK - - - MIZ039 - 220390 - Osceola - MI - US - 43.99 - -85.33 - 0 - 0 - GRR - - - MIZ045 - 220450 - Mecosta - MI - US - 43.64 - -85.33 - 0 - 0 - GRR - - - INZ033 - 140330 - Blackford - IN - US - 40.49 - -85.32 - 0 - 0 - IWX - - - GAZ011 - 100110 - Chattooga - GA - US - 34.44 - -85.31 - 0 - 0 - FFC - - - KYZ032 - 170320 - Trimble - KY - US - 38.62 - -85.31 - 0 - 0 - LMK - - - KYZ038 - 170380 - Spencer - KY - US - 38.05 - -85.31 - 0 - 0 - LMK - - - MIZ065 - 220650 - Barry - MI - US - 42.60 - -85.31 - 0 - 0 - GRR - - - GAZ002 - 100020 - Walker - GA - US - 34.79 - -85.29 - 0 - 0 - FFC - - - KYZ077 - 170770 - Adair - KY - US - 37.12 - -85.29 - 0 - 0 - LMK - - - KYZ054 - 170540 - Marion - KY - US - 37.57 - -85.28 - 0 - 0 - LMK - - - TNZ033 - 420330 - Overton - TN - US - 36.35 - -85.28 - 0 - 0 - OHX - - - INZ073 - 140730 - Ripley - IN - US - 39.11 - -85.27 - 0 - 0 - ILN - - - INZ026 - 140260 - Wells - IN - US - 40.76 - -85.26 - 0 - 0 - IWX - - - ALZ067 - 10670 - Henry - AL - US - 31.55 - -85.23 - 0 - 0 - TAE - - - FLZ011 - 90110 - Jackson - FL - US - 30.79 - -85.23 - 0 - 0 - TAE - - - GAZ019 - 100190 - Floyd - GA - US - 34.34 - -85.23 - 0 - 0 - FFC - - - FLZ014 - 90140 - Gulf - FL - US - 29.94 - -85.22 - 0 - 0 - TAE - - - KYZ034 - 170340 - Shelby - KY - US - 38.20 - -85.22 - 0 - 0 - LMK - - - GAZ041 - 100410 - Haralson - GA - US - 33.78 - -85.21 - 0 - 0 - FFC - - - KYZ046 - 170460 - Washington - KY - US - 37.77 - -85.20 - 0 - 0 - LMK - - - MIZ051 - 220510 - Montcalm - MI - US - 43.30 - -85.20 - 0 - 0 - GRR - - - TNZ099 - 420990 - Hamilton - TN - US - 35.23 - -85.20 - 0 - 0 - MRX - - - GAZ030 - 100300 - Polk - GA - US - 34.00 - -85.17 - 0 - 0 - FFC - - - INZ058 - 140580 - Fayette - IN - US - 39.65 - -85.17 - 0 - 0 - ILN - - - ALZ048 - 10480 - Russell - AL - US - 32.29 - -85.16 - 0 - 0 - BMX - - - FLZ013 - 90130 - Calhoun - FL - US - 30.40 - -85.16 - 0 - 0 - TAE - - - TNZ082 - 420820 - Bledsoe - TN - US - 35.57 - -85.16 - 0 - 0 - MRX - - - KYZ082 - 170820 - Clinton - KY - US - 36.75 - -85.15 - 0 - 0 - LMK - - - MIZ021 - 220210 - Antrim - MI - US - 45.01 - -85.15 - 0 - 0 - APX - - - KYZ089 - 170890 - Carroll - KY - US - 38.68 - -85.14 - 0 - 0 - ILN - - - TNZ011 - 420110 - Pickett - TN - US - 36.52 - -85.14 - 0 - 0 - OHX - - - GAZ003 - 100030 - Catoosa - GA - US - 34.88 - -85.12 - 0 - 0 - FFC - - - KYZ033 - 170330 - Henry - KY - US - 38.47 - -85.12 - 0 - 0 - LMK - - - GAZ052 - 100520 - Heard - GA - US - 33.28 - -85.11 - 0 - 0 - FFC - - - MIZ033 - 220330 - Missaukee - MI - US - 44.34 - -85.10 - 0 - 0 - APX - - - MIZ027 - 220270 - Kalkaska - MI - US - 44.69 - -85.09 - 0 - 0 - APX - - - MIZ058 - 220580 - Ionia - MI - US - 42.95 - -85.08 - 0 - 0 - GRR - - - GAZ042 - 100420 - Carroll - GA - US - 33.62 - -85.07 - 0 - 0 - FFC - - - INZ018 - 140180 - Allen - IN - US - 41.11 - -85.07 - 0 - 0 - IWX - - - KYZ078 - 170780 - Russell - KY - US - 37.01 - -85.07 - 0 - 0 - LMK - - - INZ066 - 140660 - Franklin - IN - US - 39.39 - -85.06 - 0 - 0 - ILN - - - MIZ019 - 220190 - Charlevoix - MI - US - 45.25 - -85.06 - 0 - 0 - APX - - - MIZ080 - 220800 - Branch - MI - US - 41.92 - -85.06 - 0 - 0 - IWX - - - GAZ066 - 100660 - Troup - GA - US - 33.04 - -85.04 - 0 - 0 - FFC - - - GAZ120 - 101200 - Quitman - GA - US - 31.88 - -85.02 - 0 - 0 - TAE - - - INZ050 - 140500 - Wayne - IN - US - 39.87 - -85.02 - 0 - 0 - ILN - - - INZ034 - 140340 - Jay - IN - US - 40.45 - -85.01 - 0 - 0 - IWX - - - INZ042 - 140420 - Randolph - IN - US - 40.17 - -85.01 - 0 - 0 - IND - - - MIZ073 - 220730 - Calhoun - MI - US - 42.25 - -85.01 - 0 - 0 - GRR - - - INZ080 - 140800 - Switzerland - IN - US - 38.81 - -85.00 - 0 - 0 - ILN - - - KYZ039 - 170390 - Anderson - KY - US - 38.00 - -85.00 - 0 - 0 - LMK - - - INZ007 - 140070 - Steuben - IN - US - 41.65 - -84.99 - 0 - 0 - IWX - - - INZ009 - 140090 - De_Kalb - IN - US - 41.41 - -84.99 - 0 - 0 - IWX - - - INZ075 - 140750 - Ohio - IN - US - 38.97 - -84.99 - 0 - 0 - ILN - - - MIZ015 - 220150 - Mackinac - MI - US - 46.04 - -84.99 - 0 - 0 - APX - - - GAZ004 - 100040 - Whitfield - GA - US - 34.80 - -84.98 - 0 - 0 - FFC - - - INZ074 - 140740 - Dearborn - IN - US - 39.12 - -84.98 - 0 - 0 - ILN - - - TNZ066 - 420660 - Cumberland - TN - US - 35.96 - -84.98 - 0 - 0 - OHX - - - GAZ121 - 101210 - Clay - GA - US - 31.64 - -84.96 - 0 - 0 - TAE - - - KYZ066 - 170660 - Casey - KY - US - 37.33 - -84.95 - 0 - 0 - LMK - - - MIZ016 - 220160 - Emmet - MI - US - 45.53 - -84.95 - 0 - 0 - APX - - - INZ027 - 140270 - Adams - IN - US - 40.76 - -84.94 - 0 - 0 - IWX - - - INZ059 - 140590 - Union - IN - US - 39.62 - -84.93 - 0 - 0 - ILN - - - GAZ078 - 100780 - Harris - GA - US - 32.73 - -84.92 - 0 - 0 - FFC - - - TNZ083 - 420830 - Rhea - TN - US - 35.62 - -84.92 - 0 - 0 - MRX - - - KYZ035 - 170350 - Franklin - KY - US - 38.23 - -84.89 - 0 - 0 - LMK - - - TNZ034 - 420340 - Fentress - TN - US - 36.36 - -84.89 - 0 - 0 - OHX - - - GAZ031 - 100310 - Paulding - GA - US - 33.93 - -84.88 - 0 - 0 - FFC - - - GAZ012 - 100120 - Gordon - GA - US - 34.51 - -84.87 - 0 - 0 - FFC - - - GAZ089 - 100890 - Muscogee - GA - US - 32.49 - -84.87 - 0 - 0 - FFC - - - GAZ142 - 101420 - Early - GA - US - 31.30 - -84.87 - 0 - 0 - TAE - - - GAZ155 - 101550 - Seminole - GA - US - 30.90 - -84.87 - 0 - 0 - TAE - - - KYZ047 - 170470 - Mercer - KY - US - 37.82 - -84.87 - 0 - 0 - LMK - - - KYZ055 - 170550 - Boyle - KY - US - 37.63 - -84.86 - 0 - 0 - LMK - - - FLZ026 - 90260 - Liberty - FL - US - 30.29 - -84.85 - 0 - 0 - TAE - - - GAZ102 - 101020 - Stewart - GA - US - 32.07 - -84.85 - 0 - 0 - FFC - - - KYZ090 - 170900 - Gallatin - KY - US - 38.77 - -84.85 - 0 - 0 - ILN - - - MIZ040 - 220400 - Clare - MI - US - 43.99 - -84.85 - 0 - 0 - GRR - - - MIZ046 - 220460 - Isabella - MI - US - 43.64 - -84.85 - 0 - 0 - GRR - - - TNZ100 - 421000 - Bradley - TN - US - 35.18 - -84.85 - 0 - 0 - MRX - - - GAZ020 - 100200 - Bartow - GA - US - 34.25 - -84.84 - 0 - 0 - FFC - - - MIZ066 - 220660 - Eaton - MI - US - 42.60 - -84.84 - 0 - 0 - GRR - - - KYZ083 - 170830 - Wayne - KY - US - 36.80 - -84.83 - 0 - 0 - JKL - - - KYZ094 - 170940 - Owen - KY - US - 38.53 - -84.83 - 0 - 0 - ILN - - - GAZ090 - 100900 - Chattahoochee - GA - US - 32.38 - -84.82 - 0 - 0 - FFC - - - TNZ084 - 420840 - Meigs - TN - US - 35.52 - -84.82 - 0 - 0 - MRX - - - FLZ015 - 90150 - Franklin - FL - US - 29.80 - -84.77 - 0 - 0 - TAE - - - GAZ005 - 100050 - Murray - GA - US - 34.79 - -84.76 - 0 - 0 - FFC - - - KYZ040 - 170400 - Woodford - KY - US - 38.02 - -84.76 - 0 - 0 - LMK - - - GAZ053 - 100530 - Coweta - GA - US - 33.35 - -84.75 - 0 - 0 - FFC - - - KYZ091 - 170910 - Boone - KY - US - 38.96 - -84.75 - 0 - 0 - ILN - - - GAZ043 - 100430 - Douglas - GA - US - 33.69 - -84.74 - 0 - 0 - FFC - - - GAZ122 - 101220 - Randolph - GA - US - 31.77 - -84.74 - 0 - 0 - TAE - - - GAZ143 - 101430 - Miller - GA - US - 31.17 - -84.72 - 0 - 0 - TAE - - - GAZ067 - 100670 - Meriwether - GA - US - 33.03 - -84.67 - 0 - 0 - FFC - - - KYZ067 - 170670 - Lincoln - KY - US - 37.44 - -84.66 - 0 - 0 - LMK - - - OHZ060 - 350600 - Preble - OH - US - 39.74 - -84.65 - 0 - 0 - ILN - - - KYZ095 - 170950 - Grant - KY - US - 38.64 - -84.64 - 0 - 0 - ILN - - - TNZ085 - 420850 - McMinn - TN - US - 35.45 - -84.63 - 0 - 0 - MRX - - - GAZ123 - 101230 - Calhoun - GA - US - 31.54 - -84.62 - 0 - 0 - TAE - - - GAZ156 - 101560 - Decatur - GA - US - 30.89 - -84.62 - 0 - 0 - TAE - - - MIZ022 - 220220 - Otsego - MI - US - 45.03 - -84.62 - 0 - 0 - APX - - - OHZ034 - 350340 - Mercer - OH - US - 40.54 - -84.62 - 0 - 0 - ILN - - - OHZ042 - 350420 - Darke - OH - US - 40.14 - -84.62 - 0 - 0 - ILN - - - TNZ035 - 420350 - Morgan - TN - US - 36.14 - -84.62 - 0 - 0 - MRX - - - FLZ016 - 90160 - Gadsden - FL - US - 30.56 - -84.61 - 0 - 0 - TAE - - - KYZ079 - 170790 - Pulaski - KY - US - 37.12 - -84.61 - 0 - 0 - JKL - - - MIZ028 - 220280 - Crawford - MI - US - 44.69 - -84.61 - 0 - 0 - APX - - - MIZ034 - 220340 - Roscommon - MI - US - 44.34 - -84.61 - 0 - 0 - APX - - - MIZ052 - 220520 - Gratiot - MI - US - 43.30 - -84.61 - 0 - 0 - GRR - - - MIZ059 - 220590 - Clinton - MI - US - 42.95 - -84.60 - 0 - 0 - GRR - - - MIZ081 - 220810 - Hillsdale - MI - US - 41.89 - -84.60 - 0 - 0 - IWX - - - GAZ044 - 100440 - South_Fulton - GA - US - 33.62 - -84.59 - 0 - 0 - FFC - - - KYZ036 - 170360 - Scott - KY - US - 38.30 - -84.59 - 0 - 0 - LMK - - - KYZ048 - 170480 - Jessamine - KY - US - 37.87 - -84.59 - 0 - 0 - LMK - - - OHZ070 - 350700 - Butler - OH - US - 39.44 - -84.58 - 0 - 0 - ILN - - - OHZ015 - 350150 - Paulding - OH - US - 41.12 - -84.57 - 0 - 0 - IWX - - - OHZ024 - 350240 - Van_Wert - OH - US - 40.84 - -84.57 - 0 - 0 - IWX - - - TNZ101 - 421010 - West_Polk - TN - US - 35.14 - -84.57 - 0 - 0 - MRX - - - GAZ032 - 100320 - Cobb - GA - US - 33.93 - -84.56 - 0 - 0 - FFC - - - OHZ001 - 350010 - Williams - OH - US - 41.57 - -84.56 - 0 - 0 - IWX - - - KYZ056 - 170560 - Garrard - KY - US - 37.65 - -84.55 - 0 - 0 - LMK - - - GAZ103 - 101030 - Webster - GA - US - 32.07 - -84.54 - 0 - 0 - FFC - - - OHZ077 - 350770 - Hamilton - OH - US - 39.16 - -84.54 - 0 - 0 - ILN - - - GAZ091 - 100910 - Marion - GA - US - 32.35 - -84.52 - 0 - 0 - FFC - - - KYZ084 - 170840 - McCreary - KY - US - 36.78 - -84.52 - 0 - 0 - JKL - - - KYZ092 - 170920 - Kenton - KY - US - 38.94 - -84.52 - 0 - 0 - ILN - - - TNZ067 - 420670 - Roane - TN - US - 35.85 - -84.52 - 0 - 0 - MRX - - - OHZ004 - 350040 - Defiance - OH - US - 41.29 - -84.51 - 0 - 0 - IWX - - - TNZ012 - 420120 - Scott - TN - US - 36.39 - -84.51 - 0 - 0 - MRX - - - GAZ054 - 100540 - Fayette - GA - US - 33.41 - -84.49 - 0 - 0 - FFC - - - GAZ079 - 100790 - Talbot - GA - US - 32.70 - -84.49 - 0 - 0 - FFC - - - KYZ041 - 170410 - Fayette - KY - US - 38.03 - -84.48 - 0 - 0 - LMK - - - MIZ017 - 220170 - Cheboygan - MI - US - 45.49 - -84.47 - 0 - 0 - APX - - - GAZ013 - 100130 - Pickens - GA - US - 34.47 - -84.46 - 0 - 0 - FFC - - - GAZ021 - 100210 - Cherokee - GA - US - 34.25 - -84.46 - 0 - 0 - FFC - - - TNZ102 - 421020 - East_Polk - TN - US - 35.12 - -84.44 - 0 - 0 - MRX - - - MIZ074 - 220740 - Jackson - MI - US - 42.25 - -84.43 - 0 - 0 - GRR - - - GAZ007 - 100070 - Gilmer - GA - US - 34.70 - -84.42 - 0 - 0 - FFC - - - GAZ124 - 101240 - Terrell - GA - US - 31.79 - -84.42 - 0 - 0 - TAE - - - FLZ027 - 90270 - Wakulla - FL - US - 30.14 - -84.40 - 0 - 0 - TAE - - - GAZ068 - 100680 - Pike - GA - US - 33.09 - -84.39 - 0 - 0 - FFC - - - GAZ144 - 101440 - Baker - GA - US - 31.27 - -84.39 - 0 - 0 - TAE - - - MIZ041 - 220410 - Gladwin - MI - US - 43.99 - -84.39 - 0 - 0 - APX - - - MIZ047 - 220470 - Midland - MI - US - 43.65 - -84.39 - 0 - 0 - DTX - - - KYZ093 - 170930 - Campbell - KY - US - 38.96 - -84.37 - 0 - 0 - ILN - - - KYZ096 - 170960 - Pendleton - KY - US - 38.70 - -84.37 - 0 - 0 - ILN - - - MIZ067 - 220670 - Ingham - MI - US - 42.60 - -84.37 - 0 - 0 - GRR - - - GAZ033 - 100330 - North_Fulton - GA - US - 33.92 - -84.35 - 0 - 0 - FFC - - - GAZ055 - 100550 - Clayton - GA - US - 33.50 - -84.35 - 0 - 0 - FFC - - - MIZ008 - 220080 - Chippewa - MI - US - 46.34 - -84.35 - 0 - 0 - APX - - - TNZ068 - 420680 - Loudon - TN - US - 35.76 - -84.35 - 0 - 0 - MRX - - - FLZ017 - 90170 - Leon - FL - US - 30.49 - -84.34 - 0 - 0 - TAE - - - KYZ037 - 170370 - Harrison - KY - US - 38.43 - -84.33 - 0 - 0 - LMK - - - KYZ068 - 170680 - Rockcastle - KY - US - 37.35 - -84.33 - 0 - 0 - JKL - - - GAZ069 - 100690 - Upson - GA - US - 32.85 - -84.32 - 0 - 0 - FFC - - - KYZ057 - 170570 - Madison - KY - US - 37.72 - -84.31 - 0 - 0 - LMK - - - GAZ092 - 100920 - Schley - GA - US - 32.29 - -84.30 - 0 - 0 - FFC - - - GAZ056 - 100560 - Spalding - GA - US - 33.27 - -84.29 - 0 - 0 - FFC - - - TNZ086 - 420860 - Northwest_Monroe - TN - US - 35.46 - -84.28 - 0 - 0 - MRX - - - OHZ061 - 350610 - Montgomery - OH - US - 39.75 - -84.27 - 0 - 0 - ILN - - - GAZ145 - 101450 - Mitchell - GA - US - 31.26 - -84.25 - 0 - 0 - TAE - - - GAZ080 - 100800 - Taylor - GA - US - 32.55 - -84.23 - 0 - 0 - FFC - - - GAZ006 - 100060 - Fannin - GA - US - 34.80 - -84.22 - 0 - 0 - FFC - - - GAZ157 - 101570 - Grady - GA - US - 30.88 - -84.22 - 0 - 0 - TAE - - - OHZ051 - 350510 - Miami - OH - US - 40.04 - -84.22 - 0 - 0 - ILN - - - GAZ125 - 101250 - Dougherty - GA - US - 31.55 - -84.21 - 0 - 0 - TAE - - - KYZ042 - 170420 - Bourbon - KY - US - 38.22 - -84.21 - 0 - 0 - LMK - - - OHZ043 - 350430 - Shelby - OH - US - 40.33 - -84.21 - 0 - 0 - ILN - - - TNZ036 - 420360 - Anderson - TN - US - 36.10 - -84.20 - 0 - 0 - MRX - - - GAZ045 - 100450 - DeKalb - GA - US - 33.79 - -84.19 - 0 - 0 - FFC - - - GAZ104 - 101040 - Sumter - GA - US - 32.05 - -84.18 - 0 - 0 - FFC - - - KYZ049 - 170490 - Clark - KY - US - 37.97 - -84.17 - 0 - 0 - LMK - - - OHZ071 - 350710 - Warren - OH - US - 39.42 - -84.17 - 0 - 0 - ILN - - - OHZ035 - 350350 - Auglaize - OH - US - 40.52 - -84.16 - 0 - 0 - ILN - - - GAZ014 - 100140 - Dawson - GA - US - 34.48 - -84.15 - 0 - 0 - FFC - - - GAZ070 - 100700 - Lamar - GA - US - 33.06 - -84.15 - 0 - 0 - FFC - - - MIZ060 - 220600 - Shiawassee - MI - US - 42.96 - -84.15 - 0 - 0 - DTX - - - OHZ078 - 350780 - Clermont - OH - US - 39.02 - -84.15 - 0 - 0 - ILN - - - TNZ087 - 420870 - Southeast_Monroe - TN - US - 35.38 - -84.15 - 0 - 0 - MRX - - - GAZ057 - 100570 - Henry - GA - US - 33.48 - -84.14 - 0 - 0 - FFC - - - TNZ013 - 420130 - Campbell - TN - US - 36.39 - -84.14 - 0 - 0 - MRX - - - GAZ126 - 101260 - Lee - GA - US - 31.77 - -84.13 - 0 - 0 - TAE - - - MIZ023 - 220230 - Montmorency - MI - US - 45.03 - -84.13 - 0 - 0 - APX - - - MIZ029 - 220290 - Oscoda - MI - US - 44.68 - -84.13 - 0 - 0 - APX - - - MIZ035 - 220350 - Ogemaw - MI - US - 44.34 - -84.13 - 0 - 0 - APX - - - OHZ016 - 350160 - Putnam - OH - US - 41.01 - -84.13 - 0 - 0 - IWX - - - OHZ025 - 350250 - Allen - OH - US - 40.78 - -84.13 - 0 - 0 - IWX - - - KYZ080 - 170800 - Laurel - KY - US - 37.13 - -84.12 - 0 - 0 - JKL - - - KYZ085 - 170850 - Whitley - KY - US - 36.78 - -84.12 - 0 - 0 - JKL - - - OHZ002 - 350020 - Fulton - OH - US - 41.60 - -84.12 - 0 - 0 - IWX - - - OHZ005 - 350050 - Henry - OH - US - 41.32 - -84.10 - 0 - 0 - IWX - - - GAZ022 - 100220 - Forsyth - GA - US - 34.19 - -84.09 - 0 - 0 - FFC - - - KYZ097 - 170970 - Bracken - KY - US - 38.68 - -84.08 - 0 - 0 - ILN - - - KYZ098 - 170980 - Robertson - KY - US - 38.51 - -84.08 - 0 - 0 - ILN - - - MIZ082 - 220820 - Lenawee - MI - US - 41.90 - -84.07 - 0 - 0 - DTX - - - MIZ048 - 220480 - Bay - MI - US - 43.74 - -84.06 - 0 - 0 - DTX - - - GAZ046 - 100460 - Rockdale - GA - US - 33.66 - -84.04 - 0 - 0 - FFC - - - GAZ093 - 100930 - Macon - GA - US - 32.35 - -84.04 - 0 - 0 - FFC - - - GAZ034 - 100340 - Gwinnett - GA - US - 33.96 - -84.03 - 0 - 0 - FFC - - - MIZ053 - 220530 - Saginaw - MI - US - 43.35 - -84.03 - 0 - 0 - DTX - - - KYZ043 - 170430 - Nicholas - KY - US - 38.33 - -84.02 - 0 - 0 - LMK - - - GAZ015 - 100150 - Lumpkin - GA - US - 34.57 - -84.01 - 0 - 0 - FFC - - - NCZ060 - 330600 - Cherokee - NC - US - 35.14 - -84.01 - 0 - 0 - MRX - - - KYZ069 - 170690 - Jackson - KY - US - 37.42 - -84.00 - 0 - 0 - JKL - - - GAZ008 - 100080 - Union - GA - US - 34.81 - -83.98 - 0 - 0 - FFC - - - GAZ058 - 100580 - Butts - GA - US - 33.32 - -83.97 - 0 - 0 - FFC - - - GAZ081 - 100810 - Crawford - GA - US - 32.69 - -83.97 - 0 - 0 - FFC - - - TNZ069 - 420690 - Knox - TN - US - 35.99 - -83.96 - 0 - 0 - MRX - - - KYZ058 - 170580 - Estill - KY - US - 37.70 - -83.93 - 0 - 0 - JKL - - - GAZ071 - 100710 - Monroe - GA - US - 33.02 - -83.92 - 0 - 0 - FFC - - - GAZ158 - 101580 - Thomas - GA - US - 30.87 - -83.92 - 0 - 0 - TAE - - - KYZ050 - 170500 - Montgomery - KY - US - 38.05 - -83.92 - 0 - 0 - JKL - - - TNZ071 - 420710 - NW_Blount - TN - US - 35.71 - -83.92 - 0 - 0 - MRX - - - MIZ068 - 220680 - Livingston - MI - US - 42.61 - -83.91 - 0 - 0 - DTX - - - OHZ062 - 350620 - Greene - OH - US - 39.70 - -83.88 - 0 - 0 - ILN - - - MIZ042 - 220420 - Arenac - MI - US - 44.04 - -83.87 - 0 - 0 - APX - - - GAZ048 - 100480 - Newton - GA - US - 33.56 - -83.86 - 0 - 0 - FFC - - - GAZ094 - 100940 - Peach - GA - US - 32.56 - -83.86 - 0 - 0 - FFC - - - OHZ079 - 350790 - Brown - OH - US - 38.95 - -83.86 - 0 - 0 - ILN - - - FLZ018 - 90180 - Jefferson - FL - US - 30.38 - -83.84 - 0 - 0 - TAE - - - GAZ023 - 100230 - Hall - GA - US - 34.30 - -83.84 - 0 - 0 - FFC - - - GAZ127 - 101270 - Worth - GA - US - 31.59 - -83.84 - 0 - 0 - TAE - - - KYZ059 - 170590 - Powell - KY - US - 37.83 - -83.84 - 0 - 0 - JKL - - - KYZ086 - 170860 - Knox - KY - US - 36.87 - -83.84 - 0 - 0 - JKL - - - MIZ075 - 220750 - Washtenaw - MI - US - 42.26 - -83.84 - 0 - 0 - DTX - - - TNZ037 - 420370 - Union - TN - US - 36.30 - -83.84 - 0 - 0 - MRX - - - TNZ072 - 420720 - Blount_Smoky_Mountains - TN - US - 35.57 - -83.84 - 0 - 0 - MRX - - - GAZ105 - 101050 - Dooly - GA - US - 32.16 - -83.82 - 0 - 0 - FFC - - - KYZ099 - 170990 - Mason - KY - US - 38.62 - -83.82 - 0 - 0 - ILN - - - MIZ018 - 220180 - Presque_Isle - MI - US - 45.42 - -83.82 - 0 - 0 - APX - - - NCZ058 - 330580 - Graham - NC - US - 35.34 - -83.81 - 0 - 0 - GSP - - - OHZ072 - 350720 - Clinton - OH - US - 39.39 - -83.79 - 0 - 0 - ILN - - - GAZ106 - 101060 - Crisp - GA - US - 31.91 - -83.78 - 0 - 0 - FFC - - - OHZ053 - 350530 - Clark - OH - US - 39.90 - -83.78 - 0 - 0 - ILN - - - OHZ044 - 350440 - Logan - OH - US - 40.38 - -83.76 - 0 - 0 - ILN - - - OHZ052 - 350520 - Champaign - OH - US - 40.14 - -83.76 - 0 - 0 - ILN - - - GAZ016 - 100160 - White - GA - US - 34.65 - -83.75 - 0 - 0 - FFC - - - GAZ047 - 100470 - Walton - GA - US - 33.76 - -83.75 - 0 - 0 - FFC - - - GAZ146 - 101460 - Colquitt - GA - US - 31.18 - -83.75 - 0 - 0 - TAE - - - NCZ061 - 330610 - Clay - NC - US - 35.07 - -83.75 - 0 - 0 - MRX - - - GAZ009 - 100090 - Towns - GA - US - 34.89 - -83.74 - 0 - 0 - FFC - - - KYZ116 - 171160 - Clay - KY - US - 37.15 - -83.74 - 0 - 0 - JKL - - - OHZ003 - 350030 - Lucas - OH - US - 41.57 - -83.74 - 0 - 0 - CLE - - - KYZ051 - 170510 - Bath - KY - US - 38.15 - -83.73 - 0 - 0 - JKL - - - KYZ044 - 170440 - Fleming - KY - US - 38.36 - -83.72 - 0 - 0 - JKL - - - KYZ111 - 171110 - Lee - KY - US - 37.60 - -83.72 - 0 - 0 - JKL - - - KYZ087 - 170870 - Bell - KY - US - 36.77 - -83.71 - 0 - 0 - JKL - - - KYZ114 - 171140 - Owsley - KY - US - 37.40 - -83.71 - 0 - 0 - JKL - - - GAZ035 - 100350 - Barrow - GA - US - 34.01 - -83.70 - 0 - 0 - FFC - - - GAZ059 - 100590 - Jasper - GA - US - 33.33 - -83.69 - 0 - 0 - FFC - - - GAZ082 - 100820 - Bibb - GA - US - 32.80 - -83.69 - 0 - 0 - FFC - - - MIZ061 - 220610 - Genesee - MI - US - 43.00 - -83.69 - 0 - 0 - DTX - - - TNZ014 - 420140 - Claiborne - TN - US - 36.47 - -83.69 - 0 - 0 - MRX - - - GAZ095 - 100950 - Houston - GA - US - 32.49 - -83.67 - 0 - 0 - FFC - - - FLZ028 - 90280 - Taylor - FL - US - 29.99 - -83.65 - 0 - 0 - TAE - - - OHZ026 - 350260 - Hardin - OH - US - 40.66 - -83.65 - 0 - 0 - ILN - - - OHZ006 - 350060 - Wood - OH - US - 41.39 - -83.64 - 0 - 0 - CLE - - - OHZ017 - 350170 - Hancock - OH - US - 40.99 - -83.64 - 0 - 0 - CLE - - - GAZ128 - 101280 - Turner - GA - US - 31.71 - -83.63 - 0 - 0 - TAE - - - KYZ060 - 170600 - Menifee - KY - US - 37.94 - -83.61 - 0 - 0 - JKL - - - OHZ080 - 350800 - Highland - OH - US - 39.20 - -83.61 - 0 - 0 - ILN - - - MIZ036 - 220360 - Iosco - MI - US - 44.34 - -83.60 - 0 - 0 - APX - - - GAZ025 - 100250 - Jackson - GA - US - 34.13 - -83.59 - 0 - 0 - FFC - - - MIZ030 - 220300 - Alcona - MI - US - 44.69 - -83.59 - 0 - 0 - APX - - - GAZ072 - 100720 - Jones - GA - US - 33.01 - -83.58 - 0 - 0 - FFC - - - NCZ051 - 330510 - Swain - NC - US - 35.48 - -83.56 - 0 - 0 - GSP - - - GAZ159 - 101590 - Brooks - GA - US - 30.85 - -83.55 - 0 - 0 - TAE - - - MIZ024 - 220240 - Alpena - MI - US - 45.03 - -83.54 - 0 - 0 - APX - - - TNZ073 - 420730 - North_Sevier - TN - US - 35.87 - -83.53 - 0 - 0 - MRX - - - GAZ017 - 100170 - Habersham - GA - US - 34.63 - -83.51 - 0 - 0 - GSP - - - GAZ024 - 100240 - Banks - GA - US - 34.35 - -83.50 - 0 - 0 - FFC - - - GAZ129 - 101290 - Tift - GA - US - 31.46 - -83.50 - 0 - 0 - TAE - - - TNZ038 - 420380 - Grainger - TN - US - 36.25 - -83.50 - 0 - 0 - MRX - - - FLZ019 - 90190 - Madison - FL - US - 30.46 - -83.49 - 0 - 0 - TAE - - - OHZ081 - 350810 - Adams - OH - US - 38.82 - -83.49 - 0 - 0 - ILN - - - GAZ049 - 100490 - Morgan - GA - US - 33.62 - -83.48 - 0 - 0 - FFC - - - KYZ108 - 171080 - Wolfe - KY - US - 37.75 - -83.48 - 0 - 0 - JKL - - - MIZ083 - 220830 - Monroe - MI - US - 41.91 - -83.48 - 0 - 0 - DTX - - - TNZ070 - 420700 - Jefferson - TN - US - 36.04 - -83.47 - 0 - 0 - MRX - - - GAZ037 - 100370 - Oconee - GA - US - 33.83 - -83.46 - 0 - 0 - FFC - - - GAZ107 - 101070 - Pulaski - GA - US - 32.25 - -83.46 - 0 - 0 - FFC - - - OHZ063 - 350630 - Fayette - OH - US - 39.54 - -83.46 - 0 - 0 - ILN - - - TNZ074 - 420740 - Sevier_Smoky_Mountains - TN - US - 35.69 - -83.46 - 0 - 0 - MRX - - - GAZ147 - 101470 - Cook - GA - US - 31.19 - -83.43 - 0 - 0 - TAE - - - OHZ054 - 350540 - Madison - OH - US - 39.90 - -83.43 - 0 - 0 - ILN - - - KYZ052 - 170520 - Rowan - KY - US - 38.21 - -83.42 - 0 - 0 - JKL - - - NCZ062 - 330620 - Macon - NC - US - 35.16 - -83.42 - 0 - 0 - GSP - - - GAZ083 - 100830 - Twiggs - GA - US - 32.67 - -83.41 - 0 - 0 - FFC - - - MIZ054 - 220540 - Tuscola - MI - US - 43.51 - -83.40 - 0 - 0 - DTX - - - GAZ108 - 101080 - Wilcox - GA - US - 31.98 - -83.39 - 0 - 0 - FFC - - - MIZ069 - 220690 - Oakland - MI - US - 42.66 - -83.39 - 0 - 0 - DTX - - - GAZ010 - 100100 - Rabun - GA - US - 34.85 - -83.38 - 0 - 0 - GSP - - - GAZ036 - 100360 - Clarke - GA - US - 33.95 - -83.38 - 0 - 0 - FFC - - - KYZ117 - 171170 - Leslie - KY - US - 37.11 - -83.36 - 0 - 0 - JKL - - - OHZ045 - 350450 - Union - OH - US - 40.30 - -83.36 - 0 - 0 - ILN - - - GAZ060 - 100600 - Putnam - GA - US - 33.32 - -83.34 - 0 - 0 - FFC - - - KYZ100 - 171000 - Lewis - KY - US - 38.52 - -83.34 - 0 - 0 - ILN - - - GAZ096 - 100960 - Bleckley - GA - US - 32.42 - -83.32 - 0 - 0 - FFC - - - OHZ027 - 350270 - Wyandot - OH - US - 40.84 - -83.31 - 0 - 0 - CLE - - - GAZ018 - 100180 - Stephens - GA - US - 34.57 - -83.29 - 0 - 0 - GSP - - - KYZ112 - 171120 - Breathitt - KY - US - 37.52 - -83.28 - 0 - 0 - JKL - - - KYZ115 - 171150 - Perry - KY - US - 37.22 - -83.28 - 0 - 0 - JKL - - - TNZ039 - 420390 - Hamblen - TN - US - 36.23 - -83.28 - 0 - 0 - MRX - - - GAZ131 - 101310 - Irwin - GA - US - 31.62 - -83.25 - 0 - 0 - TAE - - - GAZ160 - 101600 - Lowndes - GA - US - 30.82 - -83.25 - 0 - 0 - TAE - - - GAZ073 - 100730 - Baldwin - GA - US - 33.05 - -83.24 - 0 - 0 - FFC - - - GAZ130 - 101300 - Ben_Hill - GA - US - 31.75 - -83.24 - 0 - 0 - TAE - - - GAZ026 - 100260 - Franklin - GA - US - 34.39 - -83.23 - 0 - 0 - GSP - - - GAZ148 - 101480 - Berrien - GA - US - 31.25 - -83.23 - 0 - 0 - TAE - - - KYZ106 - 171060 - Morgan - KY - US - 37.92 - -83.23 - 0 - 0 - JKL - - - MIZ062 - 220620 - Lapeer - MI - US - 43.11 - -83.22 - 0 - 0 - DTX - - - MIZ076 - 220760 - Wayne - MI - US - 42.25 - -83.21 - 0 - 0 - DTX - - - GAZ027 - 100270 - Madison - GA - US - 34.13 - -83.19 - 0 - 0 - FFC - - - KYZ088 - 170880 - Harlan - KY - US - 36.85 - -83.19 - 0 - 0 - JKL - - - GAZ050 - 100500 - Greene - GA - US - 33.56 - -83.18 - 0 - 0 - FFC - - - GAZ084 - 100840 - Wilkinson - GA - US - 32.79 - -83.18 - 0 - 0 - FFC - - - FLZ034 - 90340 - Dixie - FL - US - 29.56 - -83.16 - 0 - 0 - TAE - - - NCZ059 - 330590 - Northern_Jackson - NC - US - 35.37 - -83.14 - 0 - 0 - GSP - - - OHZ036 - 350360 - Marion - OH - US - 40.57 - -83.14 - 0 - 0 - CLE - - - TNZ015 - 420150 - Hancock - TN - US - 36.50 - -83.14 - 0 - 0 - MRX - - - TNZ040 - 420400 - Northwest_Cocke - TN - US - 36.00 - -83.13 - 0 - 0 - MRX - - - FLZ029 - 90290 - Lafayette - FL - US - 30.04 - -83.12 - 0 - 0 - TAE - - - GAZ109 - 101090 - Dodge - GA - US - 32.17 - -83.12 - 0 - 0 - FFC - - - OHZ008 - 350080 - Sandusky - OH - US - 41.37 - -83.12 - 0 - 0 - CLE - - - OHZ018 - 350180 - Seneca - OH - US - 41.12 - -83.12 - 0 - 0 - CLE - - - SCZ001 - 400010 - Oconee_Mountains - SC - US - 34.83 - -83.12 - 0 - 0 - GSP - - - TNZ041 - 420410 - Cocke_Smoky_Mountains - TN - US - 35.86 - -83.09 - 0 - 0 - MRX - - - GAZ161 - 101610 - Lanier - GA - US - 31.02 - -83.08 - 0 - 0 - TAE - - - KYZ104 - 171040 - Elliott - KY - US - 38.14 - -83.08 - 0 - 0 - JKL - - - KYZ109 - 171090 - Magoffin - KY - US - 37.69 - -83.08 - 0 - 0 - JKL - - - OHZ082 - 350820 - Pike - OH - US - 39.07 - -83.08 - 0 - 0 - ILN - - - NCZ063 - 330630 - Southern_Jackson - NC - US - 35.15 - -83.07 - 0 - 0 - GSP - - - OHZ073 - 350730 - Ross - OH - US - 39.34 - -83.07 - 0 - 0 - ILN - - - KYZ102 - 171020 - Carter - KY - US - 38.34 - -83.06 - 0 - 0 - RLX - - - OHZ007 - 350070 - Ottawa - OH - US - 41.54 - -83.06 - 0 - 0 - CLE - - - GAZ038 - 100380 - Oglethorpe - GA - US - 33.87 - -83.04 - 0 - 0 - FFC - - - MIZ049 - 220490 - Huron - MI - US - 43.87 - -83.04 - 0 - 0 - DTX - - - GAZ061 - 100610 - Hancock - GA - US - 33.27 - -83.02 - 0 - 0 - FFC - - - OHZ055 - 350550 - Franklin - OH - US - 39.96 - -83.01 - 0 - 0 - ILN - - - FLZ021 - 90210 - Suwannee - FL - US - 30.17 - -83.00 - 0 - 0 - JAX - - - NCZ052 - 330520 - Haywood - NC - US - 35.54 - -83.00 - 0 - 0 - GSP - - - OHZ064 - 350640 - Pickaway - OH - US - 39.63 - -83.00 - 0 - 0 - ILN - - - SCZ004 - 400040 - Greater_Oconee - SC - US - 34.64 - -83.00 - 0 - 0 - GSP - - - VAZ001 - 460010 - Lee - VA - US - 36.74 - -83.00 - 0 - 0 - MRX - - - OHZ046 - 350460 - Delaware - OH - US - 40.28 - -82.99 - 0 - 0 - ILN - - - FLZ020 - 90200 - Hamilton - FL - US - 30.48 - -82.96 - 0 - 0 - JAX - - - OHZ088 - 350880 - Scioto - OH - US - 38.79 - -82.96 - 0 - 0 - ILN - - - GAZ028 - 100280 - Hart - GA - US - 34.35 - -82.95 - 0 - 0 - GSP - - - TNZ016 - 420160 - Hawkins - TN - US - 36.42 - -82.94 - 0 - 0 - MRX - - - GAZ097 - 100970 - Laurens - GA - US - 32.43 - -82.93 - 0 - 0 - FFC - - - GAZ110 - 101100 - Telfair - GA - US - 31.96 - -82.93 - 0 - 0 - FFC - - - KYZ101 - 171010 - Greenup - KY - US - 38.56 - -82.92 - 0 - 0 - RLX - - - KYZ113 - 171130 - Knott - KY - US - 37.36 - -82.92 - 0 - 0 - JKL - - - MIZ070 - 220700 - Macomb - MI - US - 42.68 - -82.92 - 0 - 0 - DTX - - - OHZ028 - 350280 - Crawford - OH - US - 40.85 - -82.91 - 0 - 0 - CLE - - - GAZ149 - 101490 - Atkinson - GA - US - 31.30 - -82.88 - 0 - 0 - JAX - - - TNZ042 - 420420 - Northwest_Greene - TN - US - 36.21 - -82.88 - 0 - 0 - MRX - - - GAZ132 - 101320 - Coffee - GA - US - 31.59 - -82.87 - 0 - 0 - JAX - - - GAZ162 - 101620 - Echols - GA - US - 30.73 - -82.86 - 0 - 0 - JAX - - - KYZ118 - 171180 - Letcher - KY - US - 37.12 - -82.86 - 0 - 0 - JKL - - - GAZ051 - 100510 - Taliaferro - GA - US - 33.59 - -82.85 - 0 - 0 - FFC - - - GAZ029 - 100290 - Elbert - GA - US - 34.12 - -82.84 - 0 - 0 - GSP - - - KYZ107 - 171070 - Johnson - KY - US - 37.86 - -82.82 - 0 - 0 - JKL - - - OHZ037 - 350370 - Morrow - OH - US - 40.53 - -82.82 - 0 - 0 - CLE - - - FLZ035 - 90350 - Gilchrist - FL - US - 29.75 - -82.81 - 0 - 0 - JAX - - - MIZ055 - 220550 - Sanilac - MI - US - 43.43 - -82.81 - 0 - 0 - DTX - - - NCZ064 - 330640 - Transylvania - NC - US - 35.22 - -82.81 - 0 - 0 - GSP - - - GAZ074 - 100740 - Washington - GA - US - 32.99 - -82.79 - 0 - 0 - FFC - - - FLZ039 - 90390 - Levy - FL - US - 29.30 - -82.78 - 0 - 0 - TBW - - - TNZ043 - 420430 - Southeast_Greene - TN - US - 36.01 - -82.77 - 0 - 0 - MRX - - - KYZ110 - 171100 - Floyd - KY - US - 37.52 - -82.76 - 0 - 0 - JKL - - - GAZ111 - 101110 - Wheeler - GA - US - 32.11 - -82.75 - 0 - 0 - FFC - - - KYZ105 - 171050 - Lawrence - KY - US - 38.08 - -82.75 - 0 - 0 - RLX - - - GAZ039 - 100390 - Wilkes - GA - US - 33.79 - -82.74 - 0 - 0 - FFC - - - SCZ002 - 400020 - Pickens_Mountains - SC - US - 34.95 - -82.73 - 0 - 0 - GSP - - - FLZ050 - 90500 - Pinellas - FL - US - 27.89 - -82.71 - 0 - 0 - TBW - - - MIZ063 - 220630 - St._Clair - MI - US - 42.85 - -82.71 - 0 - 0 - DTX - - - GAZ085 - 100850 - Johnson - GA - US - 32.67 - -82.70 - 0 - 0 - FFC - - - KYZ103 - 171030 - Boyd - KY - US - 38.37 - -82.70 - 0 - 0 - RLX - - - GAZ163 - 101630 - Clinch - GA - US - 30.88 - -82.69 - 0 - 0 - JAX - - - SCZ005 - 400050 - Greater_Pickens - SC - US - 34.79 - -82.69 - 0 - 0 - GSP - - - NCZ048 - 330480 - Madison - NC - US - 35.87 - -82.68 - 0 - 0 - GSP - - - SCZ010 - 400100 - Anderson - SC - US - 34.51 - -82.65 - 0 - 0 - GSP - - - VAZ005 - 460050 - Scott - VA - US - 36.74 - -82.64 - 0 - 0 - MRX - - - GAZ062 - 100620 - Warren - GA - US - 33.43 - -82.63 - 0 - 0 - FFC - - - GAZ133 - 101330 - Jeff_Davis - GA - US - 31.82 - -82.63 - 0 - 0 - JAX - - - FLZ022 - 90220 - Columbia - FL - US - 30.21 - -82.62 - 0 - 0 - JAX - - - OHZ009 - 350090 - Erie - OH - US - 41.39 - -82.62 - 0 - 0 - CLE - - - OHZ083 - 350830 - Jackson - OH - US - 39.02 - -82.62 - 0 - 0 - RLX - - - OHZ065 - 350650 - Fairfield - OH - US - 39.74 - -82.60 - 0 - 0 - ILN - - - GAZ075 - 100750 - Glascock - GA - US - 33.23 - -82.59 - 0 - 0 - FFC - - - VAZ002 - 460020 - Wise - VA - US - 37.00 - -82.59 - 0 - 0 - MRX - - - OHZ019 - 350190 - Huron - OH - US - 41.14 - -82.58 - 0 - 0 - CLE - - - GAZ098 - 100980 - Treutlen - GA - US - 32.40 - -82.56 - 0 - 0 - FFC - - - OHZ087 - 350870 - Lawrence - OH - US - 38.62 - -82.56 - 0 - 0 - RLX - - - GAZ112 - 101120 - Montgomery - GA - US - 32.15 - -82.53 - 0 - 0 - FFC - - - NCZ053 - 330530 - Buncombe - NC - US - 35.62 - -82.53 - 0 - 0 - GSP - - - OHZ029 - 350290 - Richland - OH - US - 40.77 - -82.53 - 0 - 0 - CLE - - - OHZ084 - 350840 - Vinton - OH - US - 39.21 - -82.51 - 0 - 0 - RLX - - - KYZ119 - 171190 - Martin - KY - US - 37.82 - -82.50 - 0 - 0 - JKL - - - NCZ065 - 330650 - Henderson - NC - US - 35.32 - -82.50 - 0 - 0 - GSP - - - SCZ003 - 400030 - Greenville_Mountains - SC - US - 35.09 - -82.49 - 0 - 0 - GSP - - - SCZ011 - 400110 - Abbeville - SC - US - 34.25 - -82.49 - 0 - 0 - GSP - - - TNZ044 - 420440 - Washington - TN - US - 36.27 - -82.49 - 0 - 0 - MRX - - - OHZ056 - 350560 - Licking - OH - US - 40.09 - -82.48 - 0 - 0 - ILN - - - GAZ063 - 100630 - McDuffie - GA - US - 33.49 - -82.47 - 0 - 0 - CAE - - - FLZ042 - 90420 - Citrus - FL - US - 28.86 - -82.46 - 0 - 0 - TBW - - - OHZ047 - 350470 - Knox - OH - US - 40.40 - -82.46 - 0 - 0 - CLE - - - FLZ049 - 90490 - Pasco - FL - US - 28.32 - -82.45 - 0 - 0 - TBW - - - OHZ074 - 350740 - Hocking - OH - US - 39.50 - -82.45 - 0 - 0 - ILN - - - GAZ040 - 100400 - Lincoln - GA - US - 33.81 - -82.44 - 0 - 0 - CAE - - - GAZ076 - 100760 - Jefferson - GA - US - 33.04 - -82.44 - 0 - 0 - FFC - - - GAZ134 - 101340 - Bacon - GA - US - 31.56 - -82.42 - 0 - 0 - JAX - - - GAZ150 - 101500 - Ware - GA - US - 31.02 - -82.41 - 0 - 0 - JAX - - - TNZ045 - 420450 - Unicoi - TN - US - 36.11 - -82.41 - 0 - 0 - MRX - - - WVZ005 - 480050 - Wayne - WV - US - 38.14 - -82.41 - 0 - 0 - RLX - - - FLZ055 - 90550 - Manatee - FL - US - 27.43 - -82.40 - 0 - 0 - TBW - - - FLZ048 - 90480 - Hernando - FL - US - 28.56 - -82.37 - 0 - 0 - TBW - - - FLZ030 - 90300 - Union - FL - US - 30.03 - -82.35 - 0 - 0 - JAX - - - FLZ036 - 90360 - Alachua - FL - US - 29.68 - -82.35 - 0 - 0 - JAX - - - FLZ051 - 90510 - Hillsborough - FL - US - 27.91 - -82.35 - 0 - 0 - TBW - - - FLZ060 - 90600 - Sarasota - FL - US - 27.17 - -82.35 - 0 - 0 - TBW - - - KYZ120 - 171200 - Pike - KY - US - 37.47 - -82.35 - 0 - 0 - JKL - - - OHZ086 - 350860 - Gallia - OH - US - 38.81 - -82.34 - 0 - 0 - RLX - - - SCZ006 - 400060 - Greater_Greenville - SC - US - 34.77 - -82.34 - 0 - 0 - GSP - - - VAZ003 - 460030 - Dickenson - VA - US - 37.13 - -82.34 - 0 - 0 - RLX - - - GAZ113 - 101130 - Toombs - GA - US - 32.13 - -82.33 - 0 - 0 - FFC - - - GAZ086 - 100860 - Emanuel - GA - US - 32.56 - -82.32 - 0 - 0 - FFC - - - SCZ018 - 400180 - McCormick - SC - US - 33.83 - -82.32 - 0 - 0 - CAE - - - NCZ049 - 330490 - Yancey - NC - US - 35.89 - -82.31 - 0 - 0 - GSP - - - NCZ509 - 335090 - Polk_Mountains - NC - US - 35.29 - -82.31 - 0 - 0 - GSP - - - GAZ135 - 101350 - Appling - GA - US - 31.72 - -82.30 - 0 - 0 - JAX - - - OHZ030 - 350300 - Ashland - OH - US - 40.81 - -82.28 - 0 - 0 - CLE - - - WVZ006 - 480060 - Cabell - WV - US - 38.41 - -82.27 - 0 - 0 - RLX - - - TNZ017 - 420170 - Sullivan - TN - US - 36.51 - -82.26 - 0 - 0 - MRX - - - FLZ023 - 90230 - Baker - FL - US - 30.36 - -82.25 - 0 - 0 - JAX - - - GAZ064 - 100640 - Columbia - GA - US - 33.53 - -82.24 - 0 - 0 - CAE - - - OHZ066 - 350660 - Perry - OH - US - 39.74 - -82.24 - 0 - 0 - RLX - - - FLZ031 - 90310 - Bradford - FL - US - 29.93 - -82.23 - 0 - 0 - JAX - - - GAZ151 - 101510 - Pierce - GA - US - 31.37 - -82.20 - 0 - 0 - JAX - - - NCZ507 - 335070 - Rutherford_Mountains - NC - US - 35.46 - -82.18 - 0 - 0 - GSP - - - GAZ164 - 101640 - Charlton - GA - US - 30.71 - -82.15 - 0 - 0 - JAX - - - TNZ046 - 420460 - Northwest_Carter - TN - US - 36.38 - -82.15 - 0 - 0 - MRX - - - FLZ043 - 90430 - Sumter - FL - US - 28.63 - -82.13 - 0 - 0 - TBW - - - NCZ510 - 335100 - Eastern_Polk - NC - US - 35.29 - -82.13 - 0 - 0 - GSP - - - NCZ050 - 330500 - Mitchell - NC - US - 35.98 - -82.12 - 0 - 0 - GSP - - - OHZ010 - 350100 - Lorain - OH - US - 41.29 - -82.11 - 0 - 0 - CLE - - - TNZ047 - 420470 - Southeast_Carter - TN - US - 36.23 - -82.11 - 0 - 0 - MRX - - - WVZ024 - 480240 - Mingo - WV - US - 37.74 - -82.11 - 0 - 0 - RLX - - - NCZ505 - 335050 - McDowell_Mountains - NC - US - 35.74 - -82.10 - 0 - 0 - GSP - - - SCZ019 - 400190 - Greenwood - SC - US - 34.18 - -82.10 - 0 - 0 - GSP - - - FLZ040 - 90400 - Marion - FL - US - 29.24 - -82.09 - 0 - 0 - JAX - - - GAZ065 - 100650 - Richmond - GA - US - 33.39 - -82.09 - 0 - 0 - CAE - - - VAZ006 - 460060 - Russell - VA - US - 36.93 - -82.09 - 0 - 0 - MRX - - - GAZ099 - 100990 - Candler - GA - US - 32.41 - -82.08 - 0 - 0 - CHS - - - WVZ013 - 480130 - Lincoln - WV - US - 38.16 - -82.04 - 0 - 0 - RLX - - - OHZ085 - 350850 - Meigs - OH - US - 39.04 - -82.03 - 0 - 0 - RLX - - - OHZ075 - 350750 - Athens - OH - US - 39.36 - -82.01 - 0 - 0 - RLX - - - VAZ004 - 460040 - Buchanan - VA - US - 37.29 - -82.01 - 0 - 0 - RLX - - - GAZ114 - 101140 - Tattnall - GA - US - 32.05 - -82.00 - 0 - 0 - CHS - - - GAZ152 - 101520 - Brantley - GA - US - 31.19 - -82.00 - 0 - 0 - JAX - - - WVZ007 - 480070 - Mason - WV - US - 38.75 - -82.00 - 0 - 0 - RLX - - - SCZ012 - 400120 - Laurens - SC - US - 34.49 - -81.98 - 0 - 0 - GSP - - - FLZ062 - 90620 - Charlotte - FL - US - 26.90 - -81.97 - 0 - 0 - TBW - - - VAZ008 - 460080 - Washington - VA - US - 36.76 - -81.97 - 0 - 0 - MRX - - - GAZ087 - 100870 - Jenkins - GA - US - 32.78 - -81.96 - 0 - 0 - CHS - - - OHZ057 - 350570 - Muskingum - OH - US - 39.96 - -81.96 - 0 - 0 - PBZ - - - SCZ007 - 400070 - Spartanburg - SC - US - 34.89 - -81.96 - 0 - 0 - GSP - - - NCZ506 - 335060 - Eastern_McDowell - NC - US - 35.64 - -81.95 - 0 - 0 - GSP - - - GAZ077 - 100770 - Burke - GA - US - 33.05 - -81.94 - 0 - 0 - CAE - - - NCZ508 - 335080 - Greater_Rutherford - NC - US - 35.39 - -81.94 - 0 - 0 - GSP - - - OHZ038 - 350380 - Holmes - OH - US - 40.56 - -81.93 - 0 - 0 - CLE - - - FLZ065 - 90650 - Lee - FL - US - 26.55 - -81.92 - 0 - 0 - TBW - - - OHZ020 - 350200 - Medina - OH - US - 41.13 - -81.92 - 0 - 0 - CLE - - - NCZ033 - 330330 - Avery - NC - US - 36.10 - -81.91 - 0 - 0 - GSP - - - SCZ025 - 400250 - Edgefield - SC - US - 33.76 - -81.91 - 0 - 0 - CAE - - - OHZ048 - 350480 - Coshocton - OH - US - 40.30 - -81.90 - 0 - 0 - PBZ - - - WVZ025 - 480250 - Logan - WV - US - 37.83 - -81.90 - 0 - 0 - RLX - - - GAZ136 - 101360 - Wayne - GA - US - 31.58 - -81.88 - 0 - 0 - JAX - - - OHZ031 - 350310 - Wayne - OH - US - 40.83 - -81.88 - 0 - 0 - CLE - - - WVZ014 - 480140 - Putnam - WV - US - 38.48 - -81.88 - 0 - 0 - RLX - - - GAZ115 - 101150 - Evans - GA - US - 32.16 - -81.87 - 0 - 0 - CHS - - - NCZ503 - 335030 - Burke_Mountains - NC - US - 35.88 - -81.85 - 0 - 0 - GSP - - - TNZ018 - 420180 - Johnson - TN - US - 36.44 - -81.85 - 0 - 0 - MRX - - - OHZ067 - 350670 - Morgan - OH - US - 39.61 - -81.83 - 0 - 0 - RLX - - - FLZ032 - 90320 - Clay - FL - US - 29.96 - -81.82 - 0 - 0 - JAX - - - FLZ056 - 90560 - Hardee - FL - US - 27.49 - -81.81 - 0 - 0 - TBW - - - FLZ061 - 90610 - De_Soto - FL - US - 27.19 - -81.81 - 0 - 0 - TBW - - - FLZ144 - 91440 - Southern_Lake_County - FL - US - 28.56 - -81.80 - 0 - 0 - MLB - - - GAZ165 - 101650 - Inland_Camden - GA - US - 30.95 - -81.76 - 0 - 0 - JAX - - - FLZ037 - 90370 - Putnam - FL - US - 29.58 - -81.75 - 0 - 0 - JAX - - - FLZ024 - 90240 - Nassau - FL - US - 30.54 - -81.74 - 0 - 0 - JAX - - - SCZ026 - 400260 - Saluda - SC - US - 33.99 - -81.74 - 0 - 0 - CAE - - - FLZ069 - 90690 - Coastal_Collier_County - FL - US - 26.07 - -81.73 - 0 - 0 - MFL - - - GAZ100 - 101000 - Bulloch - GA - US - 32.40 - -81.73 - 0 - 0 - CHS - - - GAZ137 - 101370 - Long - GA - US - 31.77 - -81.73 - 0 - 0 - CHS - - - WVZ026 - 480260 - Boone - WV - US - 38.00 - -81.72 - 0 - 0 - RLX - - - FLZ025 - 90250 - Duval - FL - US - 30.34 - -81.71 - 0 - 0 - JAX - - - WVZ008 - 480080 - Jackson - WV - US - 38.83 - -81.71 - 0 - 0 - RLX - - - NCZ018 - 330180 - Watauga - NC - US - 36.25 - -81.68 - 0 - 0 - RNK - - - NCZ504 - 335040 - Greater_Burke - NC - US - 35.72 - -81.66 - 0 - 0 - GSP - - - OHZ011 - 350110 - Cuyahoga - OH - US - 41.45 - -81.66 - 0 - 0 - CLE - - - WVZ033 - 480330 - McDowell - WV - US - 37.38 - -81.65 - 0 - 0 - RLX - - - FLZ044 - 90440 - Northern_Lake_County - FL - US - 29.03 - -81.64 - 0 - 0 - MLB - - - SCZ013 - 400130 - Union - SC - US - 34.68 - -81.64 - 0 - 0 - GSP - - - GAZ088 - 100880 - Screven - GA - US - 32.77 - -81.63 - 0 - 0 - CHS - - - GAZ153 - 101530 - Inland_Glynn - GA - US - 31.28 - -81.63 - 0 - 0 - JAX - - - FLZ052 - 90520 - Polk - FL - US - 28.00 - -81.62 - 0 - 0 - TBW - - - SCZ008 - 400080 - Cherokee - SC - US - 35.01 - -81.62 - 0 - 0 - GSP - - - SCZ020 - 400200 - Newberry - SC - US - 34.29 - -81.62 - 0 - 0 - CAE - - - NCZ501 - 335010 - Caldwell_Mountains - NC - US - 36.01 - -81.61 - 0 - 0 - GSP - - - SCZ030 - 400300 - Aiken - SC - US - 33.54 - -81.60 - 0 - 0 - CAE - - - VAZ007 - 460070 - Tazewell - VA - US - 37.14 - -81.56 - 0 - 0 - RNK - - - WVZ015 - 480150 - Kanawha - WV - US - 38.30 - -81.56 - 0 - 0 - RLX - - - FLZ078 - 90780 - Monroe/Lower_Keys - FL - US - 24.64 - -81.55 - 0 - 0 - KEY - - - GAZ166 - 101660 - Coastal_Camden - GA - US - 30.91 - -81.55 - 0 - 0 - JAX - - - GAZ138 - 101380 - Inland_Liberty - GA - US - 31.87 - -81.54 - 0 - 0 - CHS - - - NCZ068 - 330680 - Cleveland - NC - US - 35.36 - -81.54 - 0 - 0 - GSP - - - VAZ009 - 460090 - Smyth - VA - US - 36.82 - -81.54 - 0 - 0 - RNK - - - WVZ034 - 480340 - Wyoming - WV - US - 37.60 - -81.54 - 0 - 0 - RLX - - - OHZ021 - 350210 - Summit - OH - US - 41.13 - -81.53 - 0 - 0 - CLE - - - NCZ502 - 335020 - Greater_Caldwell - NC - US - 35.91 - -81.52 - 0 - 0 - GSP - - - GAZ116 - 101160 - Inland_Bryan - GA - US - 32.00 - -81.50 - 0 - 0 - CHS - - - WVZ009 - 480090 - Wood - WV - US - 39.22 - -81.50 - 0 - 0 - RLX - - - NCZ001 - 330010 - Ashe - NC - US - 36.41 - -81.49 - 0 - 0 - RNK - - - OHZ039 - 350390 - Tuscarawas - OH - US - 40.43 - -81.49 - 0 - 0 - PBZ - - - GAZ140 - 101400 - Inland_McIntosh - GA - US - 31.52 - -81.48 - 0 - 0 - CHS - - - SCZ035 - 400350 - Barnwell - SC - US - 33.29 - -81.48 - 0 - 0 - CAE - - - OHZ058 - 350580 - Guernsey - OH - US - 40.02 - -81.47 - 0 - 0 - PBZ - - - OHZ068 - 350680 - Noble - OH - US - 39.76 - -81.46 - 0 - 0 - PBZ - - - FLZ033 - 90330 - St._Johns - FL - US - 29.94 - -81.45 - 0 - 0 - JAX - - - OHZ076 - 350760 - Washington - OH - US - 39.43 - -81.45 - 0 - 0 - RLX - - - GAZ154 - 101540 - Coastal_Glynn - GA - US - 31.23 - -81.41 - 0 - 0 - JAX - - - WVZ017 - 480170 - Wirt - WV - US - 39.04 - -81.38 - 0 - 0 - RLX - - - FLZ041 - 90410 - Inland_Volusia_County - FL - US - 29.10 - -81.37 - 0 - 0 - MLB - - - OHZ032 - 350320 - Stark - OH - US - 40.81 - -81.36 - 0 - 0 - CLE - - - SCZ040 - 400400 - Allendale - SC - US - 32.95 - -81.34 - 0 - 0 - CHS - - - GAZ101 - 101010 - Effingham - GA - US - 32.35 - -81.33 - 0 - 0 - CHS - - - GAZ141 - 101410 - Coastal_McIntosh - GA - US - 31.46 - -81.33 - 0 - 0 - CHS - - - WVZ016 - 480160 - Roane - WV - US - 38.74 - -81.32 - 0 - 0 - RLX - - - FLZ038 - 90380 - Flagler - FL - US - 29.47 - -81.31 - 0 - 0 - JAX - - - FLZ070 - 90700 - Inland_Collier_County - FL - US - 26.16 - -81.31 - 0 - 0 - MFL - - - FLZ045 - 90450 - Orange - FL - US - 28.56 - -81.27 - 0 - 0 - MLB - - - FLZ053 - 90530 - Osceola - FL - US - 27.99 - -81.26 - 0 - 0 - MLB - - - FLZ057 - 90570 - Highlands - FL - US - 27.34 - -81.26 - 0 - 0 - TBW - - - VAZ015 - 460150 - Grayson - VA - US - 36.69 - -81.26 - 0 - 0 - RNK - - - GAZ118 - 101180 - Inland_Chatham - GA - US - 32.07 - -81.24 - 0 - 0 - CHS - - - OHZ012 - 350120 - Lake - OH - US - 41.71 - -81.24 - 0 - 0 - CLE - - - SCZ027 - 400270 - Lexington - SC - US - 33.92 - -81.24 - 0 - 0 - CAE - - - NCZ056 - 330560 - Catawba - NC - US - 35.68 - -81.23 - 0 - 0 - GSP - - - NCZ069 - 330690 - Lincoln - NC - US - 35.48 - -81.23 - 0 - 0 - GSP - - - FLZ046 - 90460 - Seminole - FL - US - 28.74 - -81.22 - 0 - 0 - MLB - - - FLZ063 - 90630 - Glades - FL - US - 26.99 - -81.22 - 0 - 0 - MFL - - - FLZ066 - 90660 - Hendry - FL - US - 26.52 - -81.22 - 0 - 0 - MFL - - - WVZ035 - 480350 - Raleigh - WV - US - 37.75 - -81.22 - 0 - 0 - RLX - - - GAZ139 - 101390 - Coastal_Liberty - GA - US - 31.66 - -81.21 - 0 - 0 - CHS - - - NCZ019 - 330190 - Wilkes - NC - US - 36.21 - -81.21 - 0 - 0 - RNK - - - GAZ117 - 101170 - Coastal_Bryan - GA - US - 31.83 - -81.20 - 0 - 0 - CHS - - - OHZ013 - 350130 - Geauga - OH - US - 41.53 - -81.19 - 0 - 0 - CLE - - - OHZ022 - 350220 - Portage - OH - US - 41.17 - -81.19 - 0 - 0 - CLE - - - WVZ010 - 480100 - Pleasants - WV - US - 39.37 - -81.19 - 0 - 0 - RLX - - - NCZ070 - 330700 - Gaston - NC - US - 35.28 - -81.18 - 0 - 0 - GSP - - - SCZ009 - 400090 - York - SC - US - 34.99 - -81.18 - 0 - 0 - GSP - - - SCZ014 - 400140 - Chester - SC - US - 34.68 - -81.18 - 0 - 0 - GSP - - - NCZ035 - 330350 - Alexander - NC - US - 35.90 - -81.17 - 0 - 0 - GSP - - - VAZ010 - 460100 - Bland - VA - US - 37.13 - -81.15 - 0 - 0 - RNK - - - WVZ018 - 480180 - Calhoun - WV - US - 38.83 - -81.13 - 0 - 0 - RLX - - - FLZ075 - 90750 - Mainland_Monroe - FL - US - 25.46 - -81.12 - 0 - 0 - MFL - - - NCZ002 - 330020 - Alleghany - NC - US - 36.47 - -81.12 - 0 - 0 - RNK - - - SCZ042 - 400420 - Hampton - SC - US - 32.79 - -81.12 - 0 - 0 - CHS - - - OHZ049 - 350490 - Harrison - OH - US - 40.29 - -81.10 - 0 - 0 - PBZ - - - SCZ021 - 400210 - Fairfield - SC - US - 34.37 - -81.10 - 0 - 0 - CAE - - - WVZ042 - 480420 - Mercer - WV - US - 37.42 - -81.10 - 0 - 0 - RNK - - - OHZ040 - 350400 - Carroll - OH - US - 40.57 - -81.09 - 0 - 0 - PBZ - - - OHZ069 - 350690 - Monroe - OH - US - 39.70 - -81.07 - 0 - 0 - PBZ - - - WVZ019 - 480190 - Ritchie - WV - US - 39.20 - -81.07 - 0 - 0 - RLX - - - WVZ036 - 480360 - Fayette - WV - US - 38.04 - -81.07 - 0 - 0 - RLX - - - VAZ012 - 460120 - Wythe - VA - US - 36.92 - -81.06 - 0 - 0 - RNK - - - SCZ047 - 400470 - Inland_Jasper - SC - US - 32.42 - -81.05 - 0 - 0 - CHS - - - WVZ027 - 480270 - Clay - WV - US - 38.47 - -81.05 - 0 - 0 - RLX - - - FLZ141 - 91410 - Coastal_Volusia_County - FL - US - 29.02 - -81.03 - 0 - 0 - MLB - - - GAZ119 - 101190 - Coastal_Chatham - GA - US - 31.91 - -81.02 - 0 - 0 - CHS - - - SCZ041 - 400410 - Bamberg - SC - US - 33.23 - -81.01 - 0 - 0 - CAE - - - SCZ051 - 400510 - Coastal_Jasper - SC - US - 32.27 - -81.00 - 0 - 0 - CHS - - - OHZ059 - 350590 - Belmont - OH - US - 40.00 - -80.97 - 0 - 0 - PBZ - - - SCZ028 - 400280 - Richland - SC - US - 34.00 - -80.97 - 0 - 0 - CAE - - - FLZ077 - 90770 - Monroe/Middle_Keys - FL - US - 24.76 - -80.96 - 0 - 0 - KEY - - - FLZ058 - 90580 - Okeechobee - FL - US - 27.38 - -80.94 - 0 - 0 - MLB - - - NCZ036 - 330360 - Iredell - NC - US - 35.78 - -80.90 - 0 - 0 - GSP - - - WVZ011 - 480110 - Tyler - WV - US - 39.45 - -80.87 - 0 - 0 - RLX - - - WVZ043 - 480430 - Summers - WV - US - 37.65 - -80.87 - 0 - 0 - RNK - - - FLZ147 - 91470 - Northern_Brevard_County - FL - US - 28.56 - -80.86 - 0 - 0 - MLB - - - WVZ037 - 480370 - Nicholas - WV - US - 38.32 - -80.84 - 0 - 0 - RLX - - - WVZ029 - 480290 - Gilmer - WV - US - 38.92 - -80.83 - 0 - 0 - RLX - - - NCZ071 - 330710 - Mecklenburg - NC - US - 35.26 - -80.80 - 0 - 0 - GSP - - - OHZ033 - 350330 - Mahoning - OH - US - 41.01 - -80.80 - 0 - 0 - CLE - - - OHZ041 - 350410 - Columbiana - OH - US - 40.76 - -80.80 - 0 - 0 - PBZ - - - SCZ036 - 400360 - Orangeburg - SC - US - 33.44 - -80.79 - 0 - 0 - CAE - - - OHZ050 - 350500 - Jefferson - OH - US - 40.37 - -80.77 - 0 - 0 - PBZ - - - SCZ037 - 400370 - Calhoun - SC - US - 33.67 - -80.77 - 0 - 0 - CAE - - - OHZ014 - 350140 - Ashtabula_Inland - OH - US - 41.71 - -80.76 - 0 - 0 - CLE - - - OHZ023 - 350230 - Trumbull - OH - US - 41.31 - -80.76 - 0 - 0 - CLE - - - OHZ089 - 350890 - Ashtabula_Lakeshore - OH - US - 41.88 - -80.76 - 0 - 0 - CLE - - - VAZ016 - 460160 - Carroll - VA - US - 36.74 - -80.75 - 0 - 0 - RNK - - - WVZ028 - 480280 - Braxton - WV - US - 38.71 - -80.74 - 0 - 0 - RLX - - - SCZ043 - 400430 - Inland_Colleton - SC - US - 32.92 - -80.73 - 0 - 0 - CHS - - - WVZ020 - 480200 - Doddridge - WV - US - 39.27 - -80.73 - 0 - 0 - RLX - - - SCZ048 - 400480 - Beaufort - SC - US - 32.39 - -80.72 - 0 - 0 - CHS - - - VAZ011 - 460110 - Giles - VA - US - 37.31 - -80.72 - 0 - 0 - RNK - - - VAZ013 - 460130 - Pulaski - VA - US - 37.06 - -80.72 - 0 - 0 - RNK - - - NCZ003 - 330030 - Surry - NC - US - 36.40 - -80.70 - 0 - 0 - RNK - - - WVZ004 - 480040 - Marshall - WV - US - 39.88 - -80.70 - 0 - 0 - PBZ - - - WVZ012 - 480120 - Wetzel - WV - US - 39.58 - -80.67 - 0 - 0 - PBZ - - - FLZ047 - 90470 - Southern_Brevard_County - FL - US - 28.08 - -80.66 - 0 - 0 - MLB - - - NCZ020 - 330200 - Yadkin - NC - US - 36.16 - -80.66 - 0 - 0 - RNK - - - SCZ015 - 400150 - Lancaster - SC - US - 34.76 - -80.66 - 0 - 0 - CAE - - - FLZ174 - 91740 - Far_South_Miami-Dade_County - FL - US - 25.30 - -80.63 - 0 - 0 - MFL - - - WVZ003 - 480030 - Ohio - WV - US - 40.11 - -80.63 - 0 - 0 - PBZ - - - FLZ073 - 90730 - Inland_Miami-Dade_County - FL - US - 25.69 - -80.61 - 0 - 0 - MFL - - - FLZ054 - 90540 - Indian_River - FL - US - 27.71 - -80.60 - 0 - 0 - MLB - - - WVZ001 - 480010 - Hancock - WV - US - 40.52 - -80.60 - 0 - 0 - PBZ - - - WVZ002 - 480020 - Brooke - WV - US - 40.28 - -80.60 - 0 - 0 - PBZ - - - FLZ071 - 90710 - Inland_Broward_County - FL - US - 26.15 - -80.59 - 0 - 0 - MFL - - - SCZ022 - 400220 - Kershaw - SC - US - 34.34 - -80.58 - 0 - 0 - CAE - - - NCZ082 - 330820 - Union - NC - US - 35.01 - -80.56 - 0 - 0 - GSP - - - FLZ067 - 90670 - Inland_Palm_Beach_County - FL - US - 26.64 - -80.54 - 0 - 0 - MFL - - - NCZ072 - 330720 - Cabarrus - NC - US - 35.35 - -80.54 - 0 - 0 - GSP - - - WVZ044 - 480440 - Monroe - WV - US - 37.55 - -80.54 - 0 - 0 - RNK - - - NCZ037 - 330370 - Davie - NC - US - 35.90 - -80.53 - 0 - 0 - GSP - - - WVZ030 - 480300 - Lewis - WV - US - 38.94 - -80.52 - 0 - 0 - RLX - - - NCZ057 - 330570 - Rowan - NC - US - 35.67 - -80.47 - 0 - 0 - GSP - - - SCZ049 - 400490 - Coastal_Colleton - SC - US - 32.61 - -80.46 - 0 - 0 - CHS - - - FLZ059 - 90590 - St._Lucie - FL - US - 27.38 - -80.44 - 0 - 0 - MLB - - - SCZ044 - 400440 - Dorchester - SC - US - 33.07 - -80.44 - 0 - 0 - CHS - - - WVZ038 - 480380 - Webster - WV - US - 38.49 - -80.43 - 0 - 0 - RLX - - - WVZ045 - 480450 - Greenbrier - WV - US - 37.98 - -80.43 - 0 - 0 - RNK - - - VAZ014 - 460140 - Montgomery - VA - US - 37.17 - -80.40 - 0 - 0 - RNK - - - WVZ031 - 480310 - Harrison - WV - US - 39.28 - -80.39 - 0 - 0 - RLX - - - FLZ064 - 90640 - Martin - FL - US - 27.11 - -80.38 - 0 - 0 - MLB - - - FLZ076 - 90760 - Monroe/Upper_Keys - FL - US - 25.15 - -80.38 - 0 - 0 - KEY - - - VAZ017 - 460170 - Floyd - VA - US - 36.92 - -80.37 - 0 - 0 - RNK - - - PAZ020 - 380200 - Beaver - PA - US - 40.67 - -80.34 - 0 - 0 - PBZ - - - VAZ032 - 460320 - Patrick - VA - US - 36.71 - -80.33 - 0 - 0 - RNK - - - PAZ013 - 380130 - Lawrence - PA - US - 40.99 - -80.31 - 0 - 0 - PBZ - - - FLZ173 - 91730 - Coastal_Miami_Dade_County - FL - US - 25.64 - -80.30 - 0 - 0 - MFL - - - FLZ072 - 90720 - Metro_Broward_County - FL - US - 26.15 - -80.28 - 0 - 0 - MFL - - - FLZ074 - 90740 - Metropolitan_Miami_Dade - FL - US - 25.78 - -80.28 - 0 - 0 - MFL - - - NCZ073 - 330730 - Stanly - NC - US - 35.33 - -80.28 - 0 - 0 - RAH - - - NCZ021 - 330210 - Forsyth - NC - US - 36.11 - -80.27 - 0 - 0 - RAH - - - SCZ031 - 400310 - Sumter - SC - US - 33.90 - -80.27 - 0 - 0 - CAE - - - NCZ038 - 330380 - Davidson - NC - US - 35.76 - -80.26 - 0 - 0 - RAH - - - PAZ007 - 380070 - Mercer - PA - US - 41.28 - -80.26 - 0 - 0 - PBZ - - - NCZ004 - 330040 - Stokes - NC - US - 36.40 - -80.24 - 0 - 0 - RNK - - - SCZ029 - 400290 - Lee - SC - US - 34.16 - -80.23 - 0 - 0 - CAE - - - WVZ039 - 480390 - Upshur - WV - US - 38.90 - -80.23 - 0 - 0 - RLX - - - PAZ031 - 380310 - Greene - PA - US - 39.87 - -80.22 - 0 - 0 - PBZ - - - VAZ018 - 460180 - Craig - VA - US - 37.49 - -80.22 - 0 - 0 - RNK - - - WVZ021 - 480210 - Marion - WV - US - 39.51 - -80.22 - 0 - 0 - PBZ - - - SCZ038 - 400380 - Clarendon - SC - US - 33.69 - -80.21 - 0 - 0 - CAE - - - PAZ029 - 380290 - Washington - PA - US - 40.22 - -80.19 - 0 - 0 - PBZ - - - SCZ016 - 400160 - Chesterfield - SC - US - 34.59 - -80.17 - 0 - 0 - CAE - - - FLZ068 - 90680 - Metro_Palm_Beach_County - FL - US - 26.64 - -80.14 - 0 - 0 - MFL - - - PAZ001 - 380010 - Northern_Erie - PA - US - 42.10 - -80.14 - 0 - 0 - CLE - - - FLZ172 - 91720 - Coastal_Broward_County - FL - US - 26.15 - -80.12 - 0 - 0 - MFL - - - WVZ022 - 480220 - Monongalia - WV - US - 39.58 - -80.10 - 0 - 0 - PBZ - - - NCZ083 - 330830 - Anson - NC - US - 35.01 - -80.09 - 0 - 0 - RAH - - - PAZ002 - 380020 - Southern_Erie - PA - US - 42.03 - -80.07 - 0 - 0 - CLE - - - PAZ003 - 380030 - Crawford - PA - US - 41.67 - -80.07 - 0 - 0 - CLE - - - FLZ168 - 91680 - Coastal_Palm_Beach_County - FL - US - 26.65 - -80.06 - 0 - 0 - MFL - - - WVZ032 - 480320 - Taylor - WV - US - 39.34 - -80.06 - 0 - 0 - RLX - - - VAZ022 - 460220 - Roanoke - VA - US - 37.26 - -80.05 - 0 - 0 - RNK - - - PAZ021 - 380210 - Allegheny - PA - US - 40.44 - -80.03 - 0 - 0 - PBZ - - - WVZ040 - 480400 - Barbour - WV - US - 39.12 - -80.02 - 0 - 0 - RLX - - - WVZ046 - 480460 - Pocahontas - WV - US - 38.39 - -80.00 - 0 - 0 - RLX - - - SCZ023 - 400230 - Darlington - SC - US - 34.31 - -79.98 - 0 - 0 - ILM - - - VAZ019 - 460190 - Alleghany - VA - US - 37.78 - -79.95 - 0 - 0 - RNK - - - PAZ014 - 380140 - Butler - PA - US - 40.92 - -79.93 - 0 - 0 - PBZ - - - VAZ033 - 460330 - Franklin - VA - US - 37.01 - -79.92 - 0 - 0 - RNK - - - SCZ045 - 400450 - Berkeley - SC - US - 33.17 - -79.90 - 0 - 0 - CHS - - - NCZ074 - 330740 - Montgomery - NC - US - 35.32 - -79.89 - 0 - 0 - RAH - - - VAZ043 - 460430 - Henry - VA - US - 36.70 - -79.87 - 0 - 0 - RNK - - - SCZ050 - 400500 - Charleston - SC - US - 32.85 - -79.86 - 0 - 0 - CHS - - - WVZ047 - 480470 - Randolph - WV - US - 38.75 - -79.81 - 0 - 0 - RLX - - - NCZ039 - 330390 - Randolph - NC - US - 35.71 - -79.80 - 0 - 0 - RAH - - - NCZ022 - 330220 - Guilford - NC - US - 36.07 - -79.79 - 0 - 0 - RAH - - - VAZ023 - 460230 - Botetourt - VA - US - 37.55 - -79.79 - 0 - 0 - RNK - - - NCZ005 - 330050 - Rockingham - NC - US - 36.39 - -79.77 - 0 - 0 - RNK - - - NCZ084 - 330840 - Richmond - NC - US - 34.99 - -79.76 - 0 - 0 - RAH - - - VAZ020 - 460200 - Bath - VA - US - 38.06 - -79.75 - 0 - 0 - RNK - - - PAZ008 - 380080 - Venango - PA - US - 41.40 - -79.74 - 0 - 0 - PBZ - - - SCZ039 - 400390 - Williamsburg - SC - US - 33.59 - -79.71 - 0 - 0 - ILM - - - WVZ023 - 480230 - Preston - WV - US - 39.46 - -79.70 - 0 - 0 - PBZ - - - SCZ017 - 400170 - Marlboro - SC - US - 34.55 - -79.69 - 0 - 0 - ILM - - - SCZ032 - 400320 - Florence - SC - US - 34.04 - -79.69 - 0 - 0 - ILM - - - PAZ032 - 380320 - Fayette - PA - US - 39.93 - -79.66 - 0 - 0 - PBZ - - - WVZ041 - 480410 - Tucker - WV - US - 39.11 - -79.57 - 0 - 0 - PBZ - - - VAZ021 - 460210 - Highland - VA - US - 38.39 - -79.56 - 0 - 0 - LWX - - - VAZ034 - 460340 - Bedford - VA - US - 37.31 - -79.52 - 0 - 0 - RNK - - - NCZ085 - 330850 - Scotland - NC - US - 34.84 - -79.51 - 0 - 0 - RAH - - - PAZ015 - 380150 - Clarion - PA - US - 41.20 - -79.46 - 0 - 0 - PBZ - - - PAZ022 - 380220 - Armstrong - PA - US - 40.85 - -79.46 - 0 - 0 - PBZ - - - PAZ030 - 380300 - Westmoreland - PA - US - 40.36 - -79.44 - 0 - 0 - PBZ - - - WVZ501 - 485010 - Western_Grant - WV - US - 39.20 - -79.44 - 0 - 0 - LWX - - - NCZ075 - 330750 - Moore - NC - US - 35.28 - -79.43 - 0 - 0 - RAH - - - NYZ019 - 320190 - Chautauqua - NY - US - 42.29 - -79.41 - 0 - 0 - BUF - - - VAZ024 - 460240 - Rockbridge - VA - US - 37.81 - -79.41 - 0 - 0 - RNK - - - VAZ044 - 460440 - Pittsylvania - VA - US - 36.84 - -79.41 - 0 - 0 - RNK - - - NCZ023 - 330230 - Alamance - NC - US - 36.04 - -79.39 - 0 - 0 - RAH - - - SCZ024 - 400240 - Dillon - SC - US - 34.42 - -79.36 - 0 - 0 - ILM - - - SCZ033 - 400330 - Marion - SC - US - 34.00 - -79.35 - 0 - 0 - ILM - - - WVZ054 - 480540 - Pendleton - WV - US - 38.68 - -79.35 - 0 - 0 - LWX - - - NCZ006 - 330060 - Caswell - NC - US - 36.39 - -79.34 - 0 - 0 - RNK - - - SCZ046 - 400460 - Georgetown - SC - US - 33.45 - -79.34 - 0 - 0 - ILM - - - PAZ004 - 380040 - Warren - PA - US - 41.81 - -79.27 - 0 - 0 - CTP - - - NCZ086 - 330860 - Hoke - NC - US - 35.02 - -79.24 - 0 - 0 - RAH - - - PAZ009 - 380090 - Forest - PA - US - 41.47 - -79.24 - 0 - 0 - PBZ - - - NCZ040 - 330400 - Chatham - NC - US - 35.69 - -79.23 - 0 - 0 - RAH - - - MDZ001 - 200010 - Garrett - MD - US - 39.46 - -79.21 - 0 - 0 - PBZ - - - NCZ076 - 330760 - Lee - NC - US - 35.46 - -79.17 - 0 - 0 - RAH - - - WVZ502 - 485020 - Eastern_Grant - WV - US - 39.06 - -79.17 - 0 - 0 - LWX - - - VAZ035 - 460350 - Amherst - VA - US - 37.59 - -79.16 - 0 - 0 - RNK - - - PAZ023 - 380230 - Indiana - PA - US - 40.64 - -79.14 - 0 - 0 - PBZ - - - NCZ087 - 330870 - Robeson - NC - US - 34.63 - -79.13 - 0 - 0 - ILM - - - VAZ025 - 460250 - Augusta - VA - US - 38.18 - -79.13 - 0 - 0 - LWX - - - VAZ045 - 460450 - Campbell - VA - US - 37.25 - -79.13 - 0 - 0 - RNK - - - WVZ503 - 485030 - Western_Mineral - WV - US - 39.40 - -79.13 - 0 - 0 - LWX - - - NCZ024 - 330240 - Orange - NC - US - 36.04 - -79.11 - 0 - 0 - RAH - - - PAZ033 - 380330 - Somerset - PA - US - 40.00 - -79.04 - 0 - 0 - CTP - - - NCZ007 - 330070 - Person - NC - US - 36.39 - -78.98 - 0 - 0 - RAH - - - PAZ016 - 380160 - Jefferson - PA - US - 41.14 - -78.96 - 0 - 0 - PBZ - - - SCZ034 - 400340 - Horry - SC - US - 33.94 - -78.94 - 0 - 0 - ILM - - - MDZ501 - 205010 - Extreme_Western_Allegany - MD - US - 39.58 - -78.92 - 0 - 0 - LWX - - - VAZ036 - 460360 - Nelson - VA - US - 37.79 - -78.92 - 0 - 0 - LWX - - - WVZ504 - 485040 - Eastern_Mineral - WV - US - 39.44 - -78.89 - 0 - 0 - LWX - - - NCZ077 - 330770 - Harnett - NC - US - 35.38 - -78.88 - 0 - 0 - RAH - - - VAZ058 - 460580 - Halifax - VA - US - 36.80 - -78.88 - 0 - 0 - RNK - - - NCZ025 - 330250 - Durham - NC - US - 36.05 - -78.86 - 0 - 0 - RAH - - - VAZ026 - 460260 - Rockingham - VA - US - 38.53 - -78.86 - 0 - 0 - LWX - - - VAZ046 - 460460 - Appomattox - VA - US - 37.38 - -78.81 - 0 - 0 - RNK - - - WVZ055 - 480550 - Hardy - WV - US - 39.00 - -78.81 - 0 - 0 - LWX - - - NCZ088 - 330880 - Cumberland - NC - US - 35.04 - -78.80 - 0 - 0 - RAH - - - NYZ085 - 320850 - Southern_Erie - NY - US - 42.62 - -78.80 - 0 - 0 - BUF - - - NYZ001 - 320010 - Niagara - NY - US - 43.20 - -78.77 - 0 - 0 - BUF - - - NYZ010 - 320100 - Northern_Erie - NY - US - 42.94 - -78.74 - 0 - 0 - BUF - - - PAZ024 - 380240 - Cambria - PA - US - 40.48 - -78.71 - 0 - 0 - CTP - - - NYZ020 - 320200 - Cattaraugus - NY - US - 42.27 - -78.68 - 0 - 0 - BUF - - - VAZ059 - 460590 - Charlotte - VA - US - 36.98 - -78.68 - 0 - 0 - RNK - - - PAZ010 - 380100 - Elk - PA - US - 41.42 - -78.67 - 0 - 0 - CTP - - - WVZ050 - 480500 - Hampshire - WV - US - 39.32 - -78.66 - 0 - 0 - LWX - - - MDZ502 - 205020 - Central_and_Eastern_Allegany - MD - US - 39.58 - -78.65 - 0 - 0 - LWX - - - NCZ008 - 330080 - Granville - NC - US - 36.28 - -78.63 - 0 - 0 - RAH - - - NCZ041 - 330410 - Wake - NC - US - 35.79 - -78.63 - 0 - 0 - RAH - - - NCZ099 - 330990 - Columbus - NC - US - 34.21 - -78.61 - 0 - 0 - ILM - - - PAZ005 - 380050 - McKean - PA - US - 41.80 - -78.58 - 0 - 0 - CTP - - - VAZ027 - 460270 - Shenandoah - VA - US - 38.86 - -78.58 - 0 - 0 - LWX - - - VAZ047 - 460470 - Buckingham - VA - US - 37.56 - -78.55 - 0 - 0 - RNK - - - NCZ096 - 330960 - Bladen - NC - US - 34.61 - -78.53 - 0 - 0 - ILM - - - VAZ037 - 460370 - Albemarle - VA - US - 38.00 - -78.52 - 0 - 0 - LWX - - - PAZ034 - 380340 - Bedford - PA - US - 40.02 - -78.48 - 0 - 0 - CTP - - - VAZ029 - 460290 - Page - VA - US - 38.62 - -78.48 - 0 - 0 - LWX - - - VAZ038 - 460380 - Greene - VA - US - 38.33 - -78.47 - 0 - 0 - LWX - - - VAZ060 - 460600 - Prince_Edward - VA - US - 37.24 - -78.46 - 0 - 0 - AKQ - - - PAZ017 - 380170 - Clearfield - PA - US - 40.99 - -78.43 - 0 - 0 - CTP - - - NCZ009 - 330090 - Vance - NC - US - 36.35 - -78.40 - 0 - 0 - RAH - - - NCZ042 - 330420 - Johnston - NC - US - 35.53 - -78.39 - 0 - 0 - RAH - - - NCZ089 - 330890 - Sampson - NC - US - 34.93 - -78.39 - 0 - 0 - RAH - - - VAZ065 - 460650 - Mecklenburg - VA - US - 36.72 - -78.39 - 0 - 0 - AKQ - - - PAZ025 - 380250 - Blair - PA - US - 40.50 - -78.37 - 0 - 0 - CTP - - - NCZ100 - 331000 - Brunswick - NC - US - 34.10 - -78.30 - 0 - 0 - ILM - - - VAZ028 - 460280 - Frederick - VA - US - 39.23 - -78.29 - 0 - 0 - LWX - - - NCZ026 - 330260 - Franklin - NC - US - 36.04 - -78.28 - 0 - 0 - RAH - - - VAZ048 - 460480 - Fluvanna - VA - US - 37.85 - -78.28 - 0 - 0 - AKQ - - - VAZ061 - 460610 - Cumberland - VA - US - 37.52 - -78.28 - 0 - 0 - AKQ - - - VAZ039 - 460390 - Madison - VA - US - 38.43 - -78.27 - 0 - 0 - LWX - - - VAZ066 - 460660 - Lunenburg - VA - US - 36.95 - -78.25 - 0 - 0 - AKQ - - - WVZ051 - 480510 - Morgan - WV - US - 39.54 - -78.25 - 0 - 0 - LWX - - - NYZ002 - 320020 - Orleans - NY - US - 43.25 - -78.23 - 0 - 0 - BUF - - - NYZ012 - 320120 - Wyoming - NY - US - 42.70 - -78.22 - 0 - 0 - BUF - - - PAZ011 - 380110 - Cameron - PA - US - 41.42 - -78.21 - 0 - 0 - CTP - - - VAZ030 - 460300 - Warren - VA - US - 38.90 - -78.20 - 0 - 0 - LWX - - - NYZ011 - 320110 - Genesee - NY - US - 43.00 - -78.18 - 0 - 0 - BUF - - - VAZ040 - 460400 - Rappahannock - VA - US - 38.69 - -78.14 - 0 - 0 - LWX - - - PAZ035 - 380350 - Fulton - PA - US - 39.94 - -78.13 - 0 - 0 - CTP - - - NCZ010 - 330100 - Warren - NC - US - 36.37 - -78.11 - 0 - 0 - RAH - - - NCZ078 - 330780 - Wayne - NC - US - 35.37 - -78.06 - 0 - 0 - RAH - - - VAZ050 - 460500 - Orange - VA - US - 38.26 - -78.04 - 0 - 0 - LWX - - - VAZ067 - 460670 - Nottoway - VA - US - 37.14 - -78.03 - 0 - 0 - AKQ - - - WVZ052 - 480520 - Berkeley - WV - US - 39.44 - -78.03 - 0 - 0 - LWX - - - NYZ021 - 320210 - Allegany - NY - US - 42.26 - -78.01 - 0 - 0 - BUF - - - PAZ018 - 380180 - Northern_Centre - PA - US - 41.00 - -78.01 - 0 - 0 - CTP - - - VAZ049 - 460490 - Louisa - VA - US - 37.94 - -78.00 - 0 - 0 - AKQ - - - VAZ031 - 460310 - Clarke - VA - US - 39.12 - -77.99 - 0 - 0 - LWX - - - NCZ027 - 330270 - Nash - NC - US - 35.96 - -77.98 - 0 - 0 - RAH - - - PAZ026 - 380260 - Huntingdon - PA - US - 40.40 - -77.97 - 0 - 0 - CTP - - - VAZ068 - 460680 - Amelia - VA - US - 37.34 - -77.95 - 0 - 0 - AKQ - - - NCZ043 - 330430 - Wilson - NC - US - 35.71 - -77.93 - 0 - 0 - RAH - - - NCZ090 - 330900 - Duplin - NC - US - 34.95 - -77.93 - 0 - 0 - MHX - - - VAZ051 - 460510 - Culpeper - VA - US - 38.51 - -77.93 - 0 - 0 - LWX - - - PAZ006 - 380060 - Potter - PA - US - 41.74 - -77.91 - 0 - 0 - CTP - - - VAZ062 - 460620 - Goochland - VA - US - 37.73 - -77.90 - 0 - 0 - AKQ - - - VAZ069 - 460690 - Powhatan - VA - US - 37.55 - -77.90 - 0 - 0 - AKQ - - - NCZ097 - 330970 - Pender - NC - US - 34.51 - -77.89 - 0 - 0 - ILM - - - NCZ101 - 331010 - New_Hanover - NC - US - 34.16 - -77.88 - 0 - 0 - ILM - - - WVZ053 - 480530 - Jefferson - WV - US - 39.32 - -77.88 - 0 - 0 - LWX - - - VAZ079 - 460790 - Brunswick - VA - US - 36.79 - -77.86 - 0 - 0 - AKQ - - - VAZ041 - 460410 - Fauquier - VA - US - 38.71 - -77.84 - 0 - 0 - LWX - - - PAZ036 - 380360 - Franklin - PA - US - 40.01 - -77.78 - 0 - 0 - CTP - - - NYZ013 - 320130 - Livingston - NY - US - 42.73 - -77.77 - 0 - 0 - BUF - - - MDZ003 - 200030 - Washington - MD - US - 39.52 - -77.72 - 0 - 0 - LWX - - - PAZ012 - 380120 - Northern_Clinton - PA - US - 41.28 - -77.71 - 0 - 0 - CTP - - - PAZ019 - 380190 - Southern_Centre - PA - US - 40.89 - -77.69 - 0 - 0 - CTP - - - NYZ003 - 320030 - Monroe - NY - US - 43.16 - -77.68 - 0 - 0 - BUF - - - VAZ056 - 460560 - Spotsylvania - VA - US - 38.19 - -77.66 - 0 - 0 - LWX - - - NCZ079 - 330790 - Greene - NC - US - 35.50 - -77.65 - 0 - 0 - MHX - - - VAZ080 - 460800 - Dinwiddie - VA - US - 37.07 - -77.65 - 0 - 0 - AKQ - - - VAZ042 - 460420 - Loudoun - VA - US - 39.09 - -77.64 - 0 - 0 - LWX - - - NCZ011 - 330110 - Halifax - NC - US - 36.25 - -77.62 - 0 - 0 - RAH - - - NCZ091 - 330910 - Lenoir - NC - US - 35.21 - -77.61 - 0 - 0 - MHX - - - PAZ027 - 380270 - Mifflin - PA - US - 40.61 - -77.60 - 0 - 0 - CTP - - - NCZ028 - 330280 - Edgecombe - NC - US - 35.91 - -77.59 - 0 - 0 - RAH - - - VAZ070 - 460700 - Chesterfield - VA - US - 37.39 - -77.56 - 0 - 0 - AKQ - - - VAZ087 - 460870 - Greensville - VA - US - 36.72 - -77.56 - 0 - 0 - AKQ - - - PAZ028 - 380280 - Juniata - PA - US - 40.48 - -77.50 - 0 - 0 - CTP - - - NCZ012 - 330120 - Northampton - NC - US - 36.36 - -77.49 - 0 - 0 - AKQ - - - VAZ052 - 460520 - Pr_William/Manassas/Manassas_Pk - VA - US - 38.72 - -77.47 - 0 - 0 - LWX - - - VAZ055 - 460550 - Stafford - VA - US - 38.42 - -77.46 - 0 - 0 - LWX - - - VAZ063 - 460630 - Hanover - VA - US - 37.78 - -77.46 - 0 - 0 - AKQ - - - VAZ071 - 460710 - Henrico - VA - US - 37.53 - -77.42 - 0 - 0 - AKQ - - - MDZ004 - 200040 - Frederick - MD - US - 39.47 - -77.40 - 0 - 0 - LWX - - - NCZ044 - 330440 - Pitt - NC - US - 35.58 - -77.40 - 0 - 0 - MHX - - - NCZ092 - 330920 - Jones - NC - US - 35.01 - -77.39 - 0 - 0 - MHX - - - PAZ045 - 380450 - Southern_Clinton - PA - US - 41.09 - -77.39 - 0 - 0 - CTP - - - NYZ022 - 320220 - Steuben - NY - US - 42.29 - -77.36 - 0 - 0 - BGM - - - VAZ064 - 460640 - Caroline - VA - US - 38.01 - -77.36 - 0 - 0 - AKQ - - - NYZ014 - 320140 - Ontario - NY - US - 42.81 - -77.29 - 0 - 0 - BUF - - - PAZ056 - 380560 - Perry - PA - US - 40.41 - -77.29 - 0 - 0 - CTP - - - VAZ053 - 460530 - Fairfax - VA - US - 38.84 - -77.29 - 0 - 0 - LWX - - - VAZ088 - 460880 - Sussex - VA - US - 36.91 - -77.29 - 0 - 0 - AKQ - - - NCZ098 - 330980 - Onslow - NC - US - 34.72 - -77.26 - 0 - 0 - MHX - - - PAZ037 - 380370 - Tioga - PA - US - 41.77 - -77.25 - 0 - 0 - CTP - - - PAZ063 - 380630 - Cumberland - PA - US - 40.14 - -77.24 - 0 - 0 - CTP - - - PAZ064 - 380640 - Adams - PA - US - 39.90 - -77.22 - 0 - 0 - CTP - - - VAZ081 - 460810 - Prince_George - VA - US - 37.16 - -77.22 - 0 - 0 - AKQ - - - MDZ009 - 200090 - Montgomery - MD - US - 39.14 - -77.20 - 0 - 0 - LWX - - - VAZ057 - 460570 - King_George - VA - US - 38.28 - -77.18 - 0 - 0 - LWX - - - VAZ092 - 460920 - Southampton - VA - US - 36.78 - -77.16 - 0 - 0 - AKQ - - - NYZ015 - 320150 - Yates - NY - US - 42.61 - -77.13 - 0 - 0 - BGM - - - VAZ054 - 460540 - Arlington/Falls_Ch/Alexandria - VA - US - 38.86 - -77.12 - 0 - 0 - LWX - - - PAZ041 - 380410 - Northern_Lycoming - PA - US - 41.41 - -77.11 - 0 - 0 - CTP - - - PAZ049 - 380490 - Union - PA - US - 40.98 - -77.10 - 0 - 0 - CTP - - - NCZ029 - 330290 - Martin - NC - US - 35.86 - -77.09 - 0 - 0 - MHX - - - PAZ050 - 380500 - Snyder - PA - US - 40.76 - -77.09 - 0 - 0 - CTP - - - VAZ082 - 460820 - Charles_City - VA - US - 37.36 - -77.08 - 0 - 0 - AKQ - - - VAZ072 - 460720 - King_William - VA - US - 37.71 - -77.06 - 0 - 0 - AKQ - - - MDZ005 - 200050 - Carroll - MD - US - 39.53 - -77.05 - 0 - 0 - LWX - - - NCZ093 - 330930 - Craven - NC - US - 35.13 - -77.05 - 0 - 0 - MHX - - - NYZ004 - 320040 - Wayne - NY - US - 43.18 - -77.04 - 0 - 0 - BUF - - - DCZ001 - 510010 - District_of_Columbia - DC - US - 38.89 - -77.02 - 0 - 0 - LWX - - - NCZ030 - 330300 - Bertie - NC - US - 36.03 - -77.01 - 0 - 0 - AKQ - - - VAZ083 - 460830 - New_Kent - VA - US - 37.50 - -76.99 - 0 - 0 - AKQ - - - MDZ016 - 200160 - Charles - MD - US - 38.48 - -76.98 - 0 - 0 - LWX - - - NCZ013 - 330130 - Hertford - NC - US - 36.39 - -76.96 - 0 - 0 - AKQ - - - MDZ010 - 200100 - Howard - MD - US - 39.23 - -76.94 - 0 - 0 - LWX - - - VAZ074 - 460740 - Essex - VA - US - 37.95 - -76.93 - 0 - 0 - AKQ - - - VAZ073 - 460730 - King_and_Queen - VA - US - 37.70 - -76.92 - 0 - 0 - AKQ - - - VAZ089 - 460890 - Surry - VA - US - 37.10 - -76.91 - 0 - 0 - AKQ - - - MDZ013 - 200130 - Prince_Georges - MD - US - 38.83 - -76.88 - 0 - 0 - LWX - - - PAZ046 - 380460 - Southern_Lycoming - PA - US - 41.22 - -76.88 - 0 - 0 - CTP - - - NYZ023 - 320230 - Schuyler - NY - US - 42.40 - -76.86 - 0 - 0 - BGM - - - NCZ080 - 330800 - Beaufort - NC - US - 35.48 - -76.84 - 0 - 0 - MHX - - - VAZ075 - 460750 - Westmoreland - VA - US - 38.12 - -76.80 - 0 - 0 - AKQ - - - PAZ057 - 380570 - Dauphin - PA - US - 40.40 - -76.79 - 0 - 0 - CTP - - - NYZ016 - 320160 - Seneca - NY - US - 42.79 - -76.78 - 0 - 0 - BGM - - - NYZ024 - 320240 - Chemung - NY - US - 42.15 - -76.75 - 0 - 0 - BGM - - - VAZ090 - 460900 - James_City - VA - US - 37.32 - -76.75 - 0 - 0 - AKQ - - - VAZ076 - 460760 - Richmond - VA - US - 37.95 - -76.73 - 0 - 0 - AKQ - - - NCZ014 - 330140 - Gates - NC - US - 36.42 - -76.71 - 0 - 0 - AKQ - - - NCZ094 - 330940 - Pamlico - NC - US - 35.15 - -76.71 - 0 - 0 - MHX - - - VAZ093 - 460930 - Isle_of_Wight - VA - US - 36.89 - -76.71 - 0 - 0 - AKQ - - - PAZ065 - 380650 - York - PA - US - 39.97 - -76.69 - 0 - 0 - CTP - - - PAZ052 - 380520 - Northumberland - PA - US - 40.89 - -76.67 - 0 - 0 - CTP - - - VAZ096 - 460960 - Suffolk - VA - US - 36.74 - -76.67 - 0 - 0 - AKQ - - - NCZ031 - 330310 - Chowan - NC - US - 36.17 - -76.66 - 0 - 0 - AKQ - - - PAZ051 - 380510 - Montour - PA - US - 41.02 - -76.66 - 0 - 0 - CTP - - - MDZ006 - 200060 - Northern_Baltimore - MD - US - 39.57 - -76.64 - 0 - 0 - LWX - - - VAZ085 - 460850 - Middlesex - VA - US - 37.65 - -76.64 - 0 - 0 - AKQ - - - MDZ011 - 200110 - Southern_Baltimore - MD - US - 39.31 - -76.61 - 0 - 0 - LWX - - - MDZ014 - 200140 - Anne_Arundel - MD - US - 38.97 - -76.61 - 0 - 0 - LWX - - - NCZ045 - 330450 - Washington - NC - US - 35.84 - -76.60 - 0 - 0 - MHX - - - NCZ095 - 330950 - Carteret - NC - US - 34.85 - -76.60 - 0 - 0 - MHX - - - NYZ005 - 320050 - Northern_Cayuga - NY - US - 43.22 - -76.60 - 0 - 0 - BUF - - - MDZ017 - 200170 - St._Marys - MD - US - 38.28 - -76.59 - 0 - 0 - LWX - - - VAZ084 - 460840 - Gloucester - VA - US - 37.43 - -76.55 - 0 - 0 - AKQ - - - MDZ018 - 200180 - Calvert - MD - US - 38.54 - -76.54 - 0 - 0 - LWX - - - PAZ038 - 380380 - Bradford - PA - US - 41.77 - -76.53 - 0 - 0 - BGM - - - PAZ042 - 380420 - Sullivan - PA - US - 41.44 - -76.52 - 0 - 0 - CTP - - - VAZ091 - 460910 - York - VA - US - 37.23 - -76.51 - 0 - 0 - AKQ - - - NYZ017 - 320170 - Southern_Cayuga - NY - US - 42.82 - -76.50 - 0 - 0 - BGM - - - VAZ094 - 460940 - Newport_News/Hampton - VA - US - 37.10 - -76.50 - 0 - 0 - AKQ - - - NYZ025 - 320250 - Tompkins - NY - US - 42.45 - -76.47 - 0 - 0 - BGM - - - VAZ078 - 460780 - Lancaster - VA - US - 37.73 - -76.45 - 0 - 0 - AKQ - - - VAZ077 - 460770 - Northumberland - VA - US - 37.86 - -76.44 - 0 - 0 - AKQ - - - PAZ053 - 380530 - Columbia - PA - US - 41.04 - -76.43 - 0 - 0 - CTP - - - PAZ059 - 380590 - Lebanon - PA - US - 40.38 - -76.42 - 0 - 0 - CTP - - - NCZ032 - 330320 - Perquimans - NC - US - 36.22 - -76.40 - 0 - 0 - AKQ - - - MDZ007 - 200070 - Harford - MD - US - 39.50 - -76.32 - 0 - 0 - LWX - - - NYZ055 - 320550 - Tioga - NY - US - 42.20 - -76.32 - 0 - 0 - BGM - - - PAZ066 - 380660 - Lancaster - PA - US - 40.02 - -76.31 - 0 - 0 - CTP - - - VAZ095 - 460950 - Norfolk/Portsmouth - VA - US - 36.87 - -76.30 - 0 - 0 - AKQ - - - VAZ086 - 460860 - Mathews - VA - US - 37.42 - -76.29 - 0 - 0 - AKQ - - - NCZ015 - 330150 - Pasquotank - NC - US - 36.31 - -76.28 - 0 - 0 - AKQ - - - VAZ097 - 460970 - Chesapeake - VA - US - 36.71 - -76.28 - 0 - 0 - AKQ - - - NCZ081 - 330810 - Western_Hyde - NC - US - 35.51 - -76.26 - 0 - 0 - MHX - - - PAZ058 - 380580 - Schuylkill - PA - US - 40.72 - -76.23 - 0 - 0 - CTP - - - NCZ046 - 330460 - Tyrrell - NC - US - 35.79 - -76.21 - 0 - 0 - MHX - - - NYZ006 - 320060 - Oswego - NY - US - 43.43 - -76.19 - 0 - 0 - BUF - - - NYZ018 - 320180 - Onondaga - NY - US - 43.02 - -76.19 - 0 - 0 - BGM - - - NCZ016 - 330160 - Camden - NC - US - 36.36 - -76.17 - 0 - 0 - AKQ - - - MDZ012 - 200120 - Kent - MD - US - 39.20 - -76.15 - 0 - 0 - PHI - - - MDZ019 - 200190 - Talbot - MD - US - 38.76 - -76.15 - 0 - 0 - PHI - - - NYZ044 - 320440 - Cortland - NY - US - 42.60 - -76.07 - 0 - 0 - BGM - - - MDZ015 - 200150 - Queen_Anne's - MD - US - 39.06 - -76.06 - 0 - 0 - PHI - - - VAZ098 - 460980 - Virginia_Beach - VA - US - 36.74 - -76.05 - 0 - 0 - AKQ - - - MDZ021 - 200210 - Dorchester - MD - US - 38.41 - -76.03 - 0 - 0 - AKQ - - - PAZ043 - 380430 - Wyoming - PA - US - 41.52 - -76.01 - 0 - 0 - BGM - - - PAZ060 - 380600 - Berks - PA - US - 40.41 - -75.99 - 0 - 0 - PHI - - - PAZ047 - 380470 - Luzerne - PA - US - 41.16 - -75.96 - 0 - 0 - BGM - - - NYZ007 - 320070 - Jefferson - NY - US - 44.03 - -75.95 - 0 - 0 - BUF - - - VAZ100 - 461000 - Northampton - VA - US - 37.34 - -75.95 - 0 - 0 - AKQ - - - NCZ017 - 330170 - Western_Currituck - NC - US - 36.31 - -75.94 - 0 - 0 - AKQ - - - MDZ008 - 200080 - Cecil - MD - US - 39.55 - -75.93 - 0 - 0 - PHI - - - NCZ104 - 331040 - Eastern_Hyde - NC - US - 35.13 - -75.92 - 0 - 0 - MHX - - - NCZ047 - 330470 - Western_Dare - NC - US - 35.77 - -75.87 - 0 - 0 - MHX - - - MDZ020 - 200200 - Caroline - MD - US - 38.90 - -75.86 - 0 - 0 - PHI - - - NCZ102 - 331020 - Eastern_Currituck - NC - US - 36.37 - -75.84 - 0 - 0 - AKQ - - - PAZ039 - 380390 - Susquehanna - PA - US - 41.82 - -75.81 - 0 - 0 - BGM - - - MDZ023 - 200230 - Somerset - MD - US - 38.10 - -75.80 - 0 - 0 - AKQ - - - NYZ056 - 320560 - Broome - NY - US - 42.21 - -75.76 - 0 - 0 - BGM - - - PAZ067 - 380670 - Chester - PA - US - 39.99 - -75.76 - 0 - 0 - PHI - - - PAZ054 - 380540 - Carbon - PA - US - 40.94 - -75.74 - 0 - 0 - PHI - - - PAZ044 - 380440 - Lackawanna - PA - US - 41.40 - -75.64 - 0 - 0 - BGM - - - VAZ099 - 460990 - Accomack - VA - US - 37.74 - -75.64 - 0 - 0 - AKQ - - - MDZ022 - 200220 - Wicomico - MD - US - 38.39 - -75.62 - 0 - 0 - AKQ - - - NYZ036 - 320360 - Madison - NY - US - 42.96 - -75.62 - 0 - 0 - BGM - - - PAZ061 - 380610 - Lehigh - PA - US - 40.60 - -75.62 - 0 - 0 - PHI - - - DEZ001 - 80010 - New_Castle - DE - US - 39.57 - -75.60 - 0 - 0 - PHI - - - NYZ045 - 320450 - Chenango - NY - US - 42.47 - -75.59 - 0 - 0 - BGM - - - DEZ002 - 80020 - Kent - DE - US - 39.10 - -75.53 - 0 - 0 - PHI - - - NCZ103 - 331030 - Eastern_Dare - NC - US - 35.48 - -75.48 - 0 - 0 - MHX - - - NYZ008 - 320080 - Lewis - NY - US - 43.82 - -75.48 - 0 - 0 - BUF - - - NYZ009 - 320090 - Northern_Oneida - NY - US - 43.38 - -75.48 - 0 - 0 - BGM - - - PAZ070 - 380700 - Delaware - PA - US - 39.93 - -75.43 - 0 - 0 - PHI - - - DEZ003 - 80030 - Inland_Sussex - DE - US - 38.70 - -75.42 - 0 - 0 - PHI - - - NYZ037 - 320370 - Southern_Oneida - NY - US - 43.08 - -75.41 - 0 - 0 - BGM - - - MDZ024 - 200240 - Inland_Worcester - MD - US - 38.23 - -75.39 - 0 - 0 - AKQ - - - PAZ068 - 380680 - Montgomery - PA - US - 40.21 - -75.36 - 0 - 0 - PHI - - - PAZ062 - 380620 - Northampton - PA - US - 40.75 - -75.34 - 0 - 0 - PHI - - - NJZ016 - 300160 - Salem - NJ - US - 39.58 - -75.32 - 0 - 0 - PHI - - - PAZ055 - 380550 - Monroe - PA - US - 41.03 - -75.31 - 0 - 0 - PHI - - - PAZ072 - 380720 - Southern_Wayne - PA - US - 41.44 - -75.28 - 0 - 0 - BGM - - - PAZ040 - 380400 - Northern_Wayne - PA - US - 41.80 - -75.27 - 0 - 0 - BGM - - - NYZ087 - 320870 - Southwestern_St._Lawrence - NY - US - 44.46 - -75.23 - 0 - 0 - BTV - - - MDZ025 - 200250 - Maryland_Beaches - MD - US - 38.17 - -75.18 - 0 - 0 - AKQ - - - NJZ017 - 300170 - Gloucester - NJ - US - 39.70 - -75.16 - 0 - 0 - PHI - - - NJZ021 - 300210 - Cumberland - NJ - US - 39.37 - -75.14 - 0 - 0 - PHI - - - PAZ071 - 380710 - Philadelphia - PA - US - 39.99 - -75.13 - 0 - 0 - PHI - - - PAZ069 - 380690 - Bucks - PA - US - 40.32 - -75.11 - 0 - 0 - PHI - - - DEZ004 - 80040 - Delaware_Beaches - DE - US - 38.63 - -75.09 - 0 - 0 - PHI - - - PAZ048 - 380480 - Pike - PA - US - 41.34 - -75.03 - 0 - 0 - BGM - - - NYZ046 - 320460 - Otsego - NY - US - 42.61 - -75.02 - 0 - 0 - BGM - - - NJZ007 - 300070 - Warren - NJ - US - 40.83 - -74.99 - 0 - 0 - PHI - - - NYZ026 - 320260 - Northern_St._Lawrence - NY - US - 44.86 - -74.99 - 0 - 0 - BTV - - - NYZ032 - 320320 - Northern_Herkimer - NY - US - 43.71 - -74.97 - 0 - 0 - ALY - - - NJZ009 - 300090 - Hunterdon - NJ - US - 40.56 - -74.96 - 0 - 0 - PHI - - - NJZ018 - 300180 - Camden - NJ - US - 39.79 - -74.95 - 0 - 0 - PHI - - - NYZ038 - 320380 - Southern_Herkimer - NY - US - 43.08 - -74.95 - 0 - 0 - ALY - - - NYZ029 - 320290 - Southeastern_St._Lawrence - NY - US - 44.39 - -74.93 - 0 - 0 - BTV - - - NYZ057 - 320570 - Delaware - NY - US - 42.19 - -74.93 - 0 - 0 - BGM - - - NJZ023 - 300230 - Cape_May - NJ - US - 39.15 - -74.81 - 0 - 0 - PHI - - - NJZ019 - 300190 - Northwestern_Burlington - NJ - US - 39.97 - -74.77 - 0 - 0 - PHI - - - NJZ024 - 300240 - Atlantic_Coastal_Cape_May - NJ - US - 39.11 - -74.76 - 0 - 0 - PHI - - - NYZ062 - 320620 - Sullivan - NY - US - 41.72 - -74.76 - 0 - 0 - BGM - - - NJZ015 - 300150 - Mercer - NJ - US - 40.27 - -74.71 - 0 - 0 - PHI - - - NJZ022 - 300220 - Atlantic - NJ - US - 39.50 - -74.69 - 0 - 0 - PHI - - - NJZ001 - 300010 - Sussex - NJ - US - 41.13 - -74.68 - 0 - 0 - PHI - - - NJZ010 - 300100 - Somerset - NJ - US - 40.56 - -74.60 - 0 - 0 - PHI - - - NJZ027 - 300270 - Southeastern_Burlington - NJ - US - 39.73 - -74.60 - 0 - 0 - PHI - - - NJZ008 - 300080 - Morris - NJ - US - 40.86 - -74.58 - 0 - 0 - PHI - - - NJZ025 - 300250 - Coastal_Atlantic - NJ - US - 39.40 - -74.46 - 0 - 0 - PHI - - - NYZ033 - 320330 - Hamilton - NY - US - 43.66 - -74.46 - 0 - 0 - ALY - - - NYZ039 - 320390 - Southern_Fulton - NY - US - 43.05 - -74.44 - 0 - 0 - ALY - - - NYZ047 - 320470 - Schoharie - NY - US - 42.59 - -74.44 - 0 - 0 - ALY - - - NYZ082 - 320820 - Northern_Fulton - NY - US - 43.17 - -74.44 - 0 - 0 - ALY - - - NJZ012 - 300120 - Middlesex - NJ - US - 40.42 - -74.43 - 0 - 0 - PHI - - - NYZ040 - 320400 - Montgomery - NY - US - 42.91 - -74.43 - 0 - 0 - ALY - - - NYZ063 - 320630 - Western_Ulster - NY - US - 41.88 - -74.43 - 0 - 0 - ALY - - - NYZ027 - 320270 - Northern_Franklin - NY - US - 44.86 - -74.39 - 0 - 0 - BTV - - - NJZ002 - 300020 - Western_Passaic - NJ - US - 41.09 - -74.36 - 0 - 0 - OKX - - - NYZ067 - 320670 - Orange - NY - US - 41.39 - -74.36 - 0 - 0 - OKX - - - NJZ013 - 300130 - Western_Monmouth - NJ - US - 40.26 - -74.32 - 0 - 0 - PHI - - - NJZ020 - 300200 - Ocean - NJ - US - 39.85 - -74.32 - 0 - 0 - PHI - - - NJZ011 - 300110 - Union - NJ - US - 40.66 - -74.31 - 0 - 0 - OKX - - - NYZ058 - 320580 - Western_Greene - NY - US - 42.26 - -74.28 - 0 - 0 - ALY - - - NJZ026 - 300260 - Coastal_Ocean - NJ - US - 39.64 - -74.26 - 0 - 0 - PHI - - - NYZ030 - 320300 - Southern_Franklin - NY - US - 44.54 - -74.26 - 0 - 0 - BTV - - - NJZ005 - 300050 - Essex - NJ - US - 40.79 - -74.25 - 0 - 0 - OKX - - - NJZ004 - 300040 - Eastern_Passaic - NJ - US - 40.91 - -74.20 - 0 - 0 - OKX - - - NYZ048 - 320480 - Western_Schenectady - NY - US - 42.80 - -74.17 - 0 - 0 - ALY - - - NYZ074 - 320740 - Richmond_(Staten_Is.) - NY - US - 40.58 - -74.15 - 0 - 0 - OKX - - - NYZ051 - 320510 - Western_Albany - NY - US - 42.58 - -74.14 - 0 - 0 - ALY - - - NYZ064 - 320640 - Eastern_Ulster - NY - US - 41.88 - -74.09 - 0 - 0 - ALY - - - NJZ003 - 300030 - Bergen - NJ - US - 40.94 - -74.08 - 0 - 0 - OKX - - - NJZ006 - 300060 - Hudson - NJ - US - 40.74 - -74.07 - 0 - 0 - OKX - - - NYZ069 - 320690 - Rockland - NY - US - 41.16 - -74.07 - 0 - 0 - OKX - - - NJZ014 - 300140 - Eastern_Monmouth - NJ - US - 40.28 - -74.03 - 0 - 0 - PHI - - - NYZ049 - 320490 - Eastern_Schenectady - NY - US - 42.85 - -73.96 - 0 - 0 - ALY - - - NYZ072 - 320720 - New_York_(Manhattan) - NY - US - 40.79 - -73.96 - 0 - 0 - OKX - - - NYZ075 - 320750 - Kings_(Brooklyn) - NY - US - 40.66 - -73.94 - 0 - 0 - OKX - - - NYZ059 - 320590 - Eastern_Greene - NY - US - 42.30 - -73.91 - 0 - 0 - ALY - - - NYZ034 - 320340 - Western_Essex - NY - US - 44.10 - -73.90 - 0 - 0 - BTV - - - NYZ050 - 320500 - Southern_Saratoga - NY - US - 42.94 - -73.88 - 0 - 0 - ALY - - - NYZ041 - 320410 - Northern_Saratoga - NY - US - 43.17 - -73.87 - 0 - 0 - ALY - - - NYZ052 - 320520 - Eastern_Albany - NY - US - 42.62 - -73.86 - 0 - 0 - ALY - - - NYZ065 - 320650 - Western_Dutchess - NY - US - 41.76 - -73.85 - 0 - 0 - ALY - - - NYZ073 - 320730 - Bronx - NY - US - 40.86 - -73.85 - 0 - 0 - OKX - - - NYZ042 - 320420 - Northern_Warren - NY - US - 43.58 - -73.84 - 0 - 0 - ALY - - - NYZ076 - 320760 - Queens - NY - US - 40.68 - -73.83 - 0 - 0 - OKX - - - NYZ031 - 320310 - Western_Clinton - NY - US - 44.71 - -73.79 - 0 - 0 - BTV - - - NYZ071 - 320710 - Southern_Westchester - NY - US - 40.99 - -73.78 - 0 - 0 - OKX - - - NYZ068 - 320680 - Putnam - NY - US - 41.43 - -73.76 - 0 - 0 - OKX - - - NYZ060 - 320600 - Western_Columbia - NY - US - 42.24 - -73.75 - 0 - 0 - ALY - - - NYZ083 - 320830 - Southeast_Warren - NY - US - 43.34 - -73.74 - 0 - 0 - ALY - - - NYZ070 - 320700 - Northern_Westchester - NY - US - 41.18 - -73.73 - 0 - 0 - OKX - - - NYZ053 - 320530 - Western_Rensselaer - NY - US - 42.70 - -73.62 - 0 - 0 - ALY - - - NYZ066 - 320660 - Eastern_Dutchess - NY - US - 41.78 - -73.62 - 0 - 0 - ALY - - - NYZ077 - 320770 - Nassau - NY - US - 40.75 - -73.59 - 0 - 0 - OKX - - - NYZ028 - 320280 - Eastern_Clinton - NY - US - 44.74 - -73.57 - 0 - 0 - BTV - - - NYZ061 - 320610 - Eastern_Columbia - NY - US - 42.24 - -73.52 - 0 - 0 - ALY - - - NYZ043 - 320430 - Northern_Washington - NY - US - 43.56 - -73.44 - 0 - 0 - ALY - - - NYZ084 - 320840 - Southern_Washington - NY - US - 43.18 - -73.44 - 0 - 0 - ALY - - - NYZ035 - 320350 - Eastern_Essex - NY - US - 44.17 - -73.43 - 0 - 0 - BTV - - - NYZ054 - 320540 - Eastern_Rensselaer - NY - US - 42.72 - -73.42 - 0 - 0 - ALY - - - CTZ009 - 70090 - Southern_Fairfield - CT - US - 41.13 - -73.41 - 0 - 0 - OKX - - - CTZ005 - 70050 - Northern_Fairfield - CT - US - 41.41 - -73.31 - 0 - 0 - OKX - - - VTZ001 - 450010 - Grand_Isle - VT - US - 44.78 - -73.29 - 0 - 0 - BTV - - - MAZ025 - 210250 - Southern_Berkshire - MA - US - 42.23 - -73.25 - 0 - 0 - ALY - - - CTZ013 - 70130 - Southern_Litchfield - CT - US - 41.64 - -73.24 - 0 - 0 - ALY - - - VTZ009 - 450090 - Western_Addison - VT - US - 44.02 - -73.23 - 0 - 0 - BTV - - - CTZ001 - 70010 - Northern_Litchfield - CT - US - 41.86 - -73.20 - 0 - 0 - ALY - - - NYZ078 - 320780 - Northwest_Suffolk - NY - US - 40.88 - -73.18 - 0 - 0 - OKX - - - VTZ011 - 450110 - Western_Rutland - VT - US - 43.57 - -73.18 - 0 - 0 - BTV - - - MAZ001 - 210010 - Northern_Berkshire - MA - US - 42.56 - -73.16 - 0 - 0 - ALY - - - NYZ080 - 320800 - Southwest_Suffolk - NY - US - 40.73 - -73.15 - 0 - 0 - OKX - - - VTZ005 - 450050 - Western_Chittenden - VT - US - 44.49 - -73.13 - 0 - 0 - BTV - - - VTZ013 - 450130 - Bennington - VT - US - 43.02 - -73.06 - 0 - 0 - ALY - - - CTZ006 - 70060 - Northern_New_Haven - CT - US - 41.47 - -73.03 - 0 - 0 - OKX - - - VTZ002 - 450020 - Western_Franklin - VT - US - 44.82 - -73.03 - 0 - 0 - BTV - - - VTZ017 - 450170 - Eastern_Chittenden - VT - US - 44.40 - -72.94 - 0 - 0 - BTV - - - VTZ018 - 450180 - Eastern_Addison - VT - US - 44.05 - -72.94 - 0 - 0 - BTV - - - MAZ009 - 210090 - Western_Hampden - MA - US - 42.19 - -72.93 - 0 - 0 - BOX - - - MAZ008 - 210080 - Western_Hampshire - MA - US - 42.39 - -72.87 - 0 - 0 - BOX - - - VTZ019 - 450190 - Eastern_Rutland - VT - US - 43.57 - -72.86 - 0 - 0 - BTV - - - CTZ010 - 70100 - Southern_New_Haven - CT - US - 41.30 - -72.82 - 0 - 0 - OKX - - - MAZ002 - 210020 - Western_Franklin - MA - US - 42.59 - -72.80 - 0 - 0 - BOX - - - VTZ014 - 450140 - Western_Windham - VT - US - 43.00 - -72.78 - 0 - 0 - ALY - - - VTZ016 - 450160 - Eastern_Franklin - VT - US - 44.83 - -72.77 - 0 - 0 - BTV - - - CTZ002 - 70020 - Hartford - CT - US - 41.79 - -72.72 - 0 - 0 - BOX - - - VTZ006 - 450060 - Lamoille - VT - US - 44.60 - -72.65 - 0 - 0 - BTV - - - VTZ012 - 450120 - Windsor - VT - US - 43.59 - -72.59 - 0 - 0 - BTV - - - VTZ008 - 450080 - Washington - VT - US - 44.26 - -72.58 - 0 - 0 - BTV - - - VTZ015 - 450150 - Eastern_Windham - VT - US - 42.98 - -72.57 - 0 - 0 - ALY - - - CTZ007 - 70070 - Northern_Middlesex - CT - US - 41.48 - -72.53 - 0 - 0 - OKX - - - MAZ010 - 210100 - Eastern_Hampshire - MA - US - 42.31 - -72.51 - 0 - 0 - BOX - - - MAZ011 - 210110 - Eastern_Hampden - MA - US - 42.14 - -72.50 - 0 - 0 - BOX - - - CTZ011 - 70110 - Southern_Middlesex - CT - US - 41.33 - -72.46 - 0 - 0 - OKX - - - MAZ003 - 210030 - Eastern_Franklin - MA - US - 42.52 - -72.46 - 0 - 0 - BOX - - - NYZ079 - 320790 - Northeast_Suffolk - NY - US - 41.07 - -72.41 - 0 - 0 - OKX - - - VTZ010 - 450100 - Orange - VT - US - 43.99 - -72.41 - 0 - 0 - BTV - - - NYZ081 - 320810 - Southeast_Suffolk - NY - US - 40.90 - -72.37 - 0 - 0 - OKX - - - CTZ003 - 70030 - Tolland - CT - US - 41.81 - -72.31 - 0 - 0 - BOX - - - NHZ011 - 290110 - Cheshire - NH - US - 42.94 - -72.24 - 0 - 0 - BOX - - - VTZ003 - 450030 - Orleans - VT - US - 44.77 - -72.23 - 0 - 0 - BTV - - - NHZ007 - 290070 - Sullivan - NH - US - 43.36 - -72.20 - 0 - 0 - GYX - - - CTZ008 - 70080 - Northern_New_London - CT - US - 41.53 - -72.13 - 0 - 0 - OKX - - - VTZ007 - 450070 - Caledonia - VT - US - 44.46 - -72.13 - 0 - 0 - BTV - - - CTZ004 - 70040 - Windham - CT - US - 41.83 - -72.02 - 0 - 0 - BOX - - - CTZ012 - 70120 - Southern_New_London - CT - US - 41.36 - -71.96 - 0 - 0 - OKX - - - NHZ005 - 290050 - Southern_Grafton - NH - US - 43.71 - -71.93 - 0 - 0 - GYX - - - MAZ004 - 210040 - Northern_Worcester - MA - US - 42.43 - -71.92 - 0 - 0 - BOX - - - MAZ012 - 210120 - Southern_Worcester - MA - US - 42.18 - -71.81 - 0 - 0 - BOX - - - NHZ015 - 290150 - Wrn_And_Central_Hillsborough - NH - US - 42.95 - -71.78 - 0 - 0 - BOX - - - NHZ003 - 290030 - Northern_Grafton - NH - US - 44.13 - -71.76 - 0 - 0 - GYX - - - VTZ004 - 450040 - Essex - VT - US - 44.68 - -71.74 - 0 - 0 - BTV - - - NHZ008 - 290080 - Merrimack - NH - US - 43.31 - -71.67 - 0 - 0 - GYX - - - RIZ003 - 390030 - Western_Kent - RI - US - 41.66 - -71.66 - 0 - 0 - BOX - - - RIZ006 - 390060 - Washington - RI - US - 41.48 - -71.66 - 0 - 0 - BOX - - - MAZ026 - 210260 - Northwest_Middlesex_County - MA - US - 42.61 - -71.59 - 0 - 0 - BOX - - - RIZ001 - 390010 - Northwest_Providence - RI - US - 41.87 - -71.59 - 0 - 0 - BOX - - - RIZ008 - 390080 - Block_Island - RI - US - 41.19 - -71.57 - 0 - 0 - BOX - - - NHZ012 - 290120 - Eastern_Hillsborough - NH - US - 42.88 - -71.50 - 0 - 0 - BOX - - - RIZ004 - 390040 - Eastern_Kent - RI - US - 41.68 - -71.46 - 0 - 0 - BOX - - - NHZ009 - 290090 - Belknap - NH - US - 43.52 - -71.45 - 0 - 0 - GYX - - - RIZ002 - 390020 - Southeast_Providence - RI - US - 41.81 - -71.45 - 0 - 0 - BOX - - - NHZ002 - 290020 - Southern_Coos - NH - US - 44.41 - -71.39 - 0 - 0 - GYX - - - MAZ005 - 210050 - Central_Middlesex_County - MA - US - 42.44 - -71.33 - 0 - 0 - BOX - - - NHZ001 - 290010 - Northern_Coos - NH - US - 45.02 - -71.33 - 0 - 0 - GYX - - - RIZ005 - 390050 - Bristol - RI - US - 41.71 - -71.27 - 0 - 0 - BOX - - - NHZ006 - 290060 - Southern_Carroll - NH - US - 43.71 - -71.26 - 0 - 0 - GYX - - - RIZ007 - 390070 - Newport - RI - US - 41.56 - -71.26 - 0 - 0 - BOX - - - MAZ013 - 210130 - Western_Norfolk - MA - US - 42.15 - -71.24 - 0 - 0 - BOX - - - NHZ004 - 290040 - Northern_Carroll - NH - US - 44.10 - -71.22 - 0 - 0 - GYX - - - MAZ017 - 210170 - Northern_Bristol - MA - US - 41.93 - -71.18 - 0 - 0 - BOX - - - NHZ013 - 290130 - Interior_Rockingham - NH - US - 43.01 - -71.17 - 0 - 0 - GYX - - - MAZ014 - 210140 - Southeast_Middlesex - MA - US - 42.41 - -71.16 - 0 - 0 - BOX - - - MAZ006 - 210060 - Western_Essex - MA - US - 42.72 - -71.08 - 0 - 0 - BOX - - - MAZ015 - 210150 - Suffolk - MA - US - 42.34 - -71.07 - 0 - 0 - BOX - - - MAZ020 - 210200 - Southern_Bristol - MA - US - 41.65 - -71.07 - 0 - 0 - BOX - - - NHZ010 - 290100 - Strafford - NH - US - 43.33 - -71.03 - 0 - 0 - GYX - - - MAZ016 - 210160 - Eastern_Norfolk - MA - US - 42.22 - -71.02 - 0 - 0 - BOX - - - MAZ018 - 210180 - Western_Plymouth - MA - US - 42.00 - -70.88 - 0 - 0 - BOX - - - MAZ007 - 210070 - Eastern_Essex - MA - US - 42.65 - -70.83 - 0 - 0 - BOX - - - NHZ014 - 290140 - Coastal_Rockingham - NH - US - 42.99 - -70.82 - 0 - 0 - GYX - - - MEZ007 - 190070 - Northern_Oxford - ME - US - 44.88 - -70.80 - 0 - 0 - GYX - - - MAZ021 - 210210 - Southern_Plymouth - MA - US - 41.72 - -70.77 - 0 - 0 - BOX - - - MAZ019 - 210190 - Eastern_Plymouth - MA - US - 42.03 - -70.73 - 0 - 0 - BOX - - - MEZ018 - 190180 - Interior_York - ME - US - 43.52 - -70.73 - 0 - 0 - GYX - - - MAZ023 - 210230 - Dukes - MA - US - 41.38 - -70.70 - 0 - 0 - BOX - - - MEZ012 - 190120 - Southern_Oxford - ME - US - 44.20 - -70.63 - 0 - 0 - GYX - - - MEZ023 - 190230 - Coastal_York - ME - US - 43.34 - -70.58 - 0 - 0 - GYX - - - MEZ019 - 190190 - Interior_Cumberland - ME - US - 43.91 - -70.49 - 0 - 0 - GYX - - - MEZ008 - 190080 - Northern_Franklin - ME - US - 45.14 - -70.48 - 0 - 0 - GYX - - - MEZ024 - 190240 - Coastal_Cumberland - ME - US - 43.75 - -70.26 - 0 - 0 - GYX - - - MEZ020 - 190200 - Androscoggin - ME - US - 44.20 - -70.24 - 0 - 0 - GYX - - - MEZ013 - 190130 - Southern_Franklin - ME - US - 44.67 - -70.23 - 0 - 0 - GYX - - - MEZ009 - 190090 - Central_Somerset - ME - US - 45.42 - -70.10 - 0 - 0 - GYX - - - MEZ003 - 190030 - Northern_Somerset - ME - US - 46.27 - -70.01 - 0 - 0 - CAR - - - MAZ024 - 210240 - Nantucket - MA - US - 41.31 - -70.00 - 0 - 0 - BOX - - - MAZ022 - 210220 - Barnstable - MA - US - 41.80 - -69.99 - 0 - 0 - BOX - - - MEZ025 - 190250 - Sagadahoc - ME - US - 43.94 - -69.89 - 0 - 0 - GYX - - - MEZ021 - 190210 - Kennebec - ME - US - 44.42 - -69.75 - 0 - 0 - GYX - - - MEZ014 - 190140 - Southern_Somerset - ME - US - 44.85 - -69.67 - 0 - 0 - GYX - - - MEZ026 - 190260 - Lincoln - ME - US - 44.05 - -69.54 - 0 - 0 - GYX - - - MEZ010 - 190100 - Central_Piscataquis - ME - US - 45.55 - -69.38 - 0 - 0 - CAR - - - MEZ004 - 190040 - Northern_Piscataquis - ME - US - 46.12 - -69.27 - 0 - 0 - CAR - - - MEZ027 - 190270 - Knox - ME - US - 44.14 - -69.23 - 0 - 0 - GYX - - - MEZ031 - 190310 - Southern_Piscataquis - ME - US - 45.27 - -69.22 - 0 - 0 - CAR - - - MEZ022 - 190220 - Interior_Waldo - ME - US - 44.53 - -69.16 - 0 - 0 - GYX - - - MEZ001 - 190010 - Northwest_Aroostook - ME - US - 47.01 - -69.06 - 0 - 0 - CAR - - - MEZ028 - 190280 - Coastal_Waldo - ME - US - 44.36 - -69.04 - 0 - 0 - GYX - - - MEZ015 - 190150 - Southern_Penobscot - ME - US - 44.93 - -68.81 - 0 - 0 - CAR - - - MEZ005 - 190050 - Northern_Penobscot - ME - US - 45.95 - -68.69 - 0 - 0 - CAR - - - MEZ011 - 190110 - Central_Penobscot - ME - US - 45.39 - -68.41 - 0 - 0 - CAR - - - MEZ016 - 190160 - Interior_Hancock - ME - US - 44.88 - -68.41 - 0 - 0 - CAR - - - MEZ029 - 190290 - Coastal_Hancock - ME - US - 44.45 - -68.39 - 0 - 0 - CAR - - - MEZ002 - 190020 - Northeast_Aroostook - ME - US - 46.83 - -68.30 - 0 - 0 - CAR - - - MEZ006 - 190060 - Southeast_Aroostook - ME - US - 45.97 - -68.09 - 0 - 0 - CAR - - - MEZ032 - 190320 - Northern_Washington - ME - US - 45.48 - -67.73 - 0 - 0 - CAR - - - MEZ017 - 190170 - Central_Washington - ME - US - 45.00 - -67.57 - 0 - 0 - CAR - - - MEZ030 - 190300 - Coastal_Washington - ME - US - 44.67 - -67.49 - 0 - 0 - CAR - - - PRZ010 - 530100 - Mayaguez_and_Vicinity - PR - US - 18.26 - -67.12 - 0 - 0 - SJU - - - PRZ011 - 530110 - Southwest - PR - US - 18.05 - -67.04 - 0 - 0 - SJU - - - PRZ008 - 530080 - Northwest - PR - US - 18.42 - -66.97 - 0 - 0 - SJU - - - PRZ009 - 530090 - Western_Interior - PR - US - 18.21 - -66.82 - 0 - 0 - SJU - - - PRZ007 - 530070 - Ponce_and_Vicinity - PR - US - 18.03 - -66.63 - 0 - 0 - SJU - - - PRZ005 - 530050 - North_Central - PR - US - 18.40 - -66.48 - 0 - 0 - SJU - - - PRZ006 - 530060 - Central_Interior - PR - US - 18.20 - -66.43 - 0 - 0 - SJU - - - PRZ001 - 530010 - San_Juan_and_Vicinity - PR - US - 18.37 - -66.11 - 0 - 0 - SJU - - - PRZ003 - 530030 - Southeast - PR - US - 18.02 - -66.07 - 0 - 0 - SJU - - - PRZ004 - 530040 - Eastern_Interior - PR - US - 18.17 - -66.04 - 0 - 0 - SJU - - - PRZ002 - 530020 - Northeast - PR - US - 18.26 - -65.76 - 0 - 0 - SJU - - - PRZ013 - 530130 - Vieques - PR - US - 18.13 - -65.42 - 0 - 0 - SJU - - - PRZ012 - 530120 - Culebra - PR - US - 18.32 - -65.31 - 0 - 0 - SJU - - - VIZ001 - 520010 - St._Thomas...St._John..._and_Adj - VI - US - 18.34 - -64.87 - 0 - 0 - SJU - - - VIZ002 - 520020 - St_Croix - VI - US - 17.73 - -64.73 - 0 - 0 - SJU - - - CAZ000 - 50000 - No_name - CA - US - 32.92 - -118.48 - 0 - 0 - - - - GUZ012 - 540120 - Sonsorol - GU - US - 5.30 - 132.22 - 0 - 0 - GUM - - - GUZ011 - 540110 - Koror - GU - US - 7.53 - 134.56 - 0 - 0 - GUM - - - GUZ013 - 540130 - Kayangel - GU - US - 8.08 - 134.72 - 0 - 0 - GUM - - - GUZ022 - 540220 - Ngulu - GU - US - 8.30 - 137.51 - 0 - 0 - GUM - - - GUZ021 - 540210 - Yap - GU - US - 9.54 - 138.12 - 0 - 0 - GUM - - - GUZ023 - 540230 - Ulithi - GU - US - 10.02 - 139.79 - 0 - 0 - GUM - - - GUZ024 - 540240 - Sorol - GU - US - 8.21 - 140.70 - 0 - 0 - GUM - - - GUZ025 - 540250 - Woleai - GU - US - 7.38 - 143.92 - 0 - 0 - GUM - - - GUZ001 - 540010 - Guam - GU - US - 13.44 - 144.79 - 0 - 0 - GUM - - - GUZ002 - 540020 - Rota - GU - US - 14.15 - 145.20 - 0 - 0 - GUM - - - GUZ003 - 540030 - Tinian - GU - US - 15.01 - 145.63 - 0 - 0 - GUM - - - GUZ005 - 540050 - Agrihan - GU - US - 18.76 - 145.66 - 0 - 0 - GUM - - - GUZ004 - 540040 - Saipan - GU - US - 15.19 - 145.76 - 0 - 0 - GUM - - - GUZ026 - 540260 - Satawal - GU - US - 7.36 - 147.04 - 0 - 0 - GUM - - - GUZ032 - 540320 - Puluwat - GU - US - 7.38 - 149.18 - 0 - 0 - GUM - - - GUZ031 - 540310 - Chuuk - GU - US - 7.35 - 151.83 - 0 - 0 - GUM - - - GUZ033 - 540330 - Lukunor - GU - US - 5.50 - 153.82 - 0 - 0 - GUM - - - GUZ041 - 540410 - Pohnpei - GU - US - 6.88 - 158.22 - 0 - 0 - GUM - - - GUZ042 - 540420 - Mokil - GU - US - 6.68 - 159.79 - 0 - 0 - GUM - - - GUZ043 - 540430 - Pingelap - GU - US - 6.21 - 160.71 - 0 - 0 - GUM - - - GUZ062 - 540620 - Ujelang - GU - US - 9.76 - 160.97 - 0 - 0 - GUM - - - GUZ063 - 540630 - Enewetak - GU - US - 11.34 - 162.33 - 0 - 0 - GUM - - - GUZ051 - 540510 - Kosrae - GU - US - 5.32 - 162.97 - 0 - 0 - GUM - - - GUZ081 - 540810 - Wake_Island - GU - US - 19.30 - 166.63 - 0 - 0 - GUM - - - GUZ064 - 540640 - Ailinglaplap - GU - US - 7.29 - 168.75 - 0 - 0 - GUM - - - GUZ065 - 540650 - Jaluit - GU - US - 5.85 - 169.53 - 0 - 0 - GUM - - - GUZ066 - 540660 - Utirik - GU - US - 11.24 - 169.86 - 0 - 0 - GUM - - - GUZ067 - 540670 - Wotje - GU - US - 9.55 - 170.24 - 0 - 0 - GUM - - - GUZ061 - 540610 - Majuro - GU - US - 7.11 - 171.08 - 0 - 0 - GUM - - - GUZ068 - 540680 - Mili - GU - US - 6.04 - 171.95 - 0 - 0 - GUM - - - AKZ191 - 21910 - Western_Aleutians - AK - US - 51.51 - 179.05 - 0 - 0 - AFC - - - PKZ175 - 691750 - Adak_to_Kiska - - US - 51.71 - -178.59 - 0 - 0 - AFC - - - PKZ185 - 691850 - St_Matthew_Island_Waters - - US - 60.43 - -174.18 - 0 - 0 - AFC - - - PKZ172 - 691720 - Nikolski_to_Adak - - US - 52.26 - -173.19 - 0 - 0 - AFC - - - PSZ152 - 721520 - Coastal_waters_of_Swain's_I - - US - -11.08 - -171.03 - 0 - 0 - STU - - - PSZ150 - 721500 - Cstal_wtrs_of_Tututila_and_Aunuu - - US - -14.31 - -170.77 - 0 - 0 - STU - - - PKZ179 - 691790 - Pribilof_Is_Nearshore_Waters - - US - 56.90 - -169.97 - 0 - 0 - AFC - - - PKZ210 - 692100 - Dall_Point_to_Wales - - US - 63.31 - -169.57 - 0 - 0 - AFG - - - PSZ151 - 721510 - Coastal_waters_of_Manua - - US - -14.21 - -169.45 - 0 - 0 - STU - - - PKZ225 - 692250 - Cape_Thompson_to_Cape_Beaufort - - US - 69.01 - -167.45 - 0 - 0 - AFG - - - PKZ170 - 691700 - Cape_Sarichef_to_Nikoski - - US - 53.72 - -166.78 - 0 - 0 - AFC - - - PKZ220 - 692200 - Wales_to_Cape_Thompson - - US - 66.97 - -166.69 - 0 - 0 - AFG - - - PKZ171 - 691710 - Unalaska_Bay - - US - 53.92 - -166.59 - 0 - 0 - AFC - - - PKZ180 - 691800 - Cape_Newenham_to_Dall_Point - - US - 59.92 - -165.98 - 0 - 0 - AFC - - - PKZ200 - 692000 - Norton_Sound - - US - 63.99 - -163.30 - 0 - 0 - AFG - - - PKZ230 - 692300 - Cape_Beaufort_to_Point_Franklin - - US - 70.53 - -163.03 - 0 - 0 - AFG - - - PKZ165 - 691650 - Port_Heiden_to_Cape_Sarichef - - US - 56.01 - -162.88 - 0 - 0 - AFC - - - PKZ215 - 692150 - Kotzebue_Sound - - US - 66.65 - -162.83 - 0 - 0 - AFG - - - PKZ155 - 691550 - Castle_Cape_to_Cape_Sarichef - - US - 54.50 - -160.72 - 0 - 0 - AFC - - - PKZ160 - 691600 - Cape_Newenham_to_Port_Heiden - - US - 57.98 - -160.52 - 0 - 0 - AFC - - - PHZ110 - 701100 - Kauai_Northwest_Waters - - US - 22.44 - -159.99 - 0 - 0 - HFO - - - PHZ112 - 701120 - Kauai_Leeward_Waters - - US - 21.64 - -159.99 - 0 - 0 - HFO - - - PHZ111 - 701110 - Kauai_Windward_Waters - - US - 22.41 - -159.03 - 0 - 0 - HFO - - - PHZ113 - 701130 - Kauai_Channel - - US - 21.62 - -159.00 - 0 - 0 - HFO - - - PHZ115 - 701150 - Oahu_Leeward_Waters - - US - 21.04 - -158.18 - 0 - 0 - HFO - - - PHZ114 - 701140 - Oahu_Windward_Waters - - US - 21.88 - -157.59 - 0 - 0 - HFO - - - PHZ116 - 701160 - Kaiwi_Channel - - US - 21.22 - -157.49 - 0 - 0 - HFO - - - PHZ118 - 701180 - Maui_County_Leeward_Waters - - US - 20.70 - -157.49 - 0 - 0 - HFO - - - PHZ120 - 701200 - Pailolo_Channel - - US - 21.03 - -156.91 - 0 - 0 - HFO - - - PHZ119 - 701190 - Maalaea_Bay - - US - 20.75 - -156.53 - 0 - 0 - HFO - - - PHZ121 - 701210 - Alenuihaha_Channel - - US - 20.30 - -156.44 - 0 - 0 - HFO - - - PHZ123 - 701230 - Big_Island_Leeward_Waters - - US - 19.34 - -156.40 - 0 - 0 - HFO - - - PHZ117 - 701170 - Maui_County_Windward_Waters - - US - 21.32 - -156.39 - 0 - 0 - HFO - - - PKZ235 - 692350 - Point_Franklin_to_Cape_Halkett - - US - 71.66 - -156.01 - 0 - 0 - AFG - - - PKZ150 - 691500 - Sitkinak_to_Castle_Cape - - US - 55.91 - -155.76 - 0 - 0 - AFC - - - PHZ124 - 701240 - Big_Island_Southeast_Waters - - US - 18.71 - -155.37 - 0 - 0 - HFO - - - PHZ122 - 701220 - Big_Island_Windward_Waters - - US - 19.92 - -154.97 - 0 - 0 - HFO - - - PKZ138 - 691380 - _Shelikof_Strait - - US - 57.83 - -153.52 - 0 - 0 - AFC - - - PKZ137 - 691370 - _Marmot_Bay - - US - 58.00 - -152.62 - 0 - 0 - AFC - - - PKZ136 - 691360 - _Chiniak_Bay - - US - 57.70 - -152.37 - 0 - 0 - AFC - - - PKZ132 - 691320 - Shuyak_Island_To_Sitkinak - - US - 56.92 - -152.20 - 0 - 0 - AFC - - - PKZ140 - 691400 - Cook_Inlt_N_of_Kamishak_Bay_and_ - - US - 60.34 - -151.89 - 0 - 0 - AFC - - - PKZ141 - 691410 - Kachemak_Bay - - US - 59.56 - -151.45 - 0 - 0 - AFC - - - PKZ130 - 691300 - Barren_Is_And_Kamishak_Bay_Wtrs - - US - 58.64 - -151.33 - 0 - 0 - AFC - - - PKZ121 - 691210 - _Resurrection_Bay - - US - 60.06 - -149.39 - 0 - 0 - AFC - - - PKZ240 - 692400 - Cape_Halkett_to_Flaxman_Island - - US - 71.09 - -149.19 - 0 - 0 - AFG - - - PKZ129 - 691290 - Passage_Canal - - US - 60.81 - -148.58 - 0 - 0 - AFC - - - PKZ125 - 691250 - Prince_William_Sound - - US - 60.48 - -147.34 - 0 - 0 - AFC - - - PKZ120 - 691200 - Cape_Suckling_to_Gore_Point - - US - 59.42 - -147.01 - 0 - 0 - AFC - - - PKZ128 - 691280 - _Valdez_Arm - - US - 60.94 - -146.86 - 0 - 0 - AFC - - - PKZ127 - 691270 - _Valdez_Narrows - - US - 61.05 - -146.67 - 0 - 0 - AFC - - - PKZ126 - 691260 - _Port_of_Valdez - - US - 61.11 - -146.44 - 0 - 0 - AFC - - - PKZ245 - 692450 - Flaxman_I_to_Demarcation_Point - - US - 70.60 - -143.39 - 0 - 0 - AFG - - - PKZ052 - 690520 - Icy_Cape_to_Cape_Suckling - - US - 59.40 - -142.97 - 0 - 0 - AJK - - - PKZ051 - 690510 - Cape_Fairweather_to_Icy_Cape - - US - 58.95 - -140.30 - 0 - 0 - AJK - - - PKZ053 - 690530 - Yakutat_Bay - - US - 59.80 - -139.76 - 0 - 0 - AJK - - - PKZ043 - 690430 - SE_AK_Outside_Wtrs_From_C_Edgecu - - US - 57.59 - -137.69 - 0 - 0 - AJK - - - PKZ022 - 690220 - Cross_Sound - - US - 58.14 - -136.36 - 0 - 0 - AJK - - - PKZ011 - 690110 - _Glacier_Bay - - US - 58.72 - -136.23 - 0 - 0 - AJK - - - PKZ042 - 690420 - Cape_Decision_to_Cape_Edgecumbe - - US - 56.23 - -136.12 - 0 - 0 - AJK - - - PKZ021 - 690210 - Icy_Strait - - US - 58.27 - -135.73 - 0 - 0 - AJK - - - PKZ012 - 690120 - Northern_Lynn_Canal - - US - 59.10 - -135.30 - 0 - 0 - AJK - - - PKZ013 - 690130 - Southern_Lynn_Canal - - US - 58.59 - -135.07 - 0 - 0 - AJK - - - PKZ032 - 690320 - Northern_Chatham_Strait - - US - 57.61 - -134.77 - 0 - 0 - AJK - - - PKZ033 - 690330 - Southern_Chatham_Strait - - US - 56.54 - -134.55 - 0 - 0 - AJK - - - PKZ041 - 690410 - Dixon_Entrance_to_Cape_Decision - - US - 55.04 - -134.31 - 0 - 0 - AJK - - - PKZ031 - 690310 - Stephens_Passage - - US - 57.94 - -134.29 - 0 - 0 - AJK - - - PKZ034 - 690340 - Frederick_Sound - - US - 56.99 - -134.28 - 0 - 0 - AJK - - - PKZ035 - 690350 - Sumner_Strait - - US - 56.40 - -133.28 - 0 - 0 - AJK - - - PKZ036 - 690360 - Clarence_Strait - - US - 55.40 - -131.52 - 0 - 0 - AJK - - - PZZ170 - 611700 - Cstal_Wtrs_From_C_Flattery_To_Ja - - US - 48.22 - -125.73 - 0 - 0 - SEW - - - PZZ173 - 611730 - Wtrs_From_James_I_To_Pt_Grenvl_2 - - US - 47.57 - -125.40 - 0 - 0 - SEW - - - PZZ376 - 613760 - Wtrs_fr_C_Blanco_OR_to_Pt._St._G - - US - 42.33 - -125.39 - 0 - 0 - MFR - - - PZZ370 - 613700 - Wtrs_fr_Florence_to_C_Blanco_OR_ - - US - 43.40 - -125.19 - 0 - 0 - MFR - - - PZZ275 - 612750 - Wtrs_fr_Cascade_Hd_to_Florence_O - - US - 44.59 - -125.15 - 0 - 0 - PQR - - - PZZ470 - 614700 - Wtrs_fr_Pt._St._Geo_to_C_Mendoci - - US - 41.14 - -125.08 - 0 - 0 - EKA - - - PZZ176 - 611760 - Cstal_Wtrs_From_Pt_Grenvl_To_C_S - - US - 46.97 - -125.06 - 0 - 0 - SEW - - - PZZ153 - 611530 - Cstal_Wtrs_From_James_I_To_Pt_Gr - - US - 47.74 - -124.99 - 0 - 0 - SEW - - - PZZ270 - 612700 - Wtrs_fr_C_Shoalwtr_WA_to_Cascade - - US - 45.92 - -124.99 - 0 - 0 - PQR - - - PZZ150 - 611500 - Cstal_Wtrs_From_C_Flattery_To_Ja - - US - 48.17 - -124.89 - 0 - 0 - SEW - - - PZZ475 - 614750 - Wtrs_fr_C_Mendocino_to_Pt._Arena - - US - 39.69 - -124.74 - 0 - 0 - EKA - - - PZZ350 - 613500 - Cstal_wtrs_fr_Florence_to_C_Blan - - US - 43.47 - -124.68 - 0 - 0 - MFR - - - PZZ330 - 613300 - Chetco_River_Bar - - US - 42.31 - -124.60 - 0 - 0 - MFR - - - PZZ130 - 611300 - W_Entr_U.S._Wtrs_St_Of_Juan_De_F - - US - 48.37 - -124.48 - 0 - 0 - SEW - - - PZZ310 - 613100 - Coos_Bay_Bar - - US - 43.43 - -124.47 - 0 - 0 - MFR - - - PZZ156 - 611560 - Cstal_Wtrs_From_Pt_Grenvl_To_C_S - - US - 47.02 - -124.44 - 0 - 0 - SEW - - - PZZ356 - 613560 - Cstal_wtrs_fr_C_Blanco_OR_to_Pt. - - US - 42.24 - -124.43 - 0 - 0 - MFR - - - PZZ450 - 614500 - Cstal_wtrs_fr_Pt._St._Geo_to_C_M - - US - 41.11 - -124.33 - 0 - 0 - EKA - - - PZZ250 - 612500 - Cstal_wtrs_fr_C_Shoalwtr_WA_to_C - - US - 45.93 - -124.20 - 0 - 0 - PQR - - - PZZ410 - 614100 - Humboldt_Bay_Bar - - US - 40.77 - -124.19 - 0 - 0 - EKA - - - PZZ255 - 612550 - Cstal_wtrs_fr_Cascade_Hd_to_Flor - - US - 44.47 - -124.10 - 0 - 0 - PQR - - - PZZ110 - 611100 - Grays_Harbor_Bar - - US - 46.93 - -123.99 - 0 - 0 - SEW - - - PZZ570 - 615700 - Wtrs_fr_Pt._Arena_to_Pigeon_Pt._ - - US - 38.08 - -123.99 - 0 - 0 - MTR - - - PZZ455 - 614550 - Cstal_wtrs_fr_C_Mendocino_to_Pt. - - US - 39.69 - -123.91 - 0 - 0 - EKA - - - PZZ131 - 611310 - Ctrl_U.S._Wtrs_St_Of_Juan_De_Fuc - - US - 48.27 - -123.68 - 0 - 0 - SEW - - - PZZ210 - 612100 - Columbia_River_Bar - - US - 46.21 - -123.68 - 0 - 0 - PQR - - - PZZ540 - 615400 - Cstal_Wtrs_fr_Pt_Arena_to_Pt_Rey - - US - 38.48 - -123.53 - 0 - 0 - MTR - - - PZZ132 - 611320 - E_Entr_U.S._Wtrs_St_Of_Juan_De_F - - US - 48.21 - -122.96 - 0 - 0 - SEW - - - PZZ133 - 611330 - Nrn_Inlnd_Wtrs_Incl_The_Sn_Juan_ - - US - 48.58 - -122.78 - 0 - 0 - SEW - - - PZZ575 - 615750 - Wtrs_fr_Pigeon_Pt._to_Pt._Piedra - - US - 36.41 - -122.76 - 0 - 0 - MTR - - - PZZ545 - 615450 - Cstal_Wtrs_fr_Pt_Reyes_to_Pigeon - - US - 37.58 - -122.72 - 0 - 0 - MTR - - - PZZ134 - 611340 - Admiralty_Inlet - - US - 48.06 - -122.68 - 0 - 0 - SEW - - - PZZ560 - 615600 - Cstal_Wtrs_fr_Pigeon_Pt_to_Pt_Pi - - US - 36.99 - -122.59 - 0 - 0 - MTR - - - PZZ135 - 611350 - Puget_Sound_and_Hood_Canal - - US - 47.56 - -122.47 - 0 - 0 - SEW - - - PZZ530 - 615300 - Sn_Francisco/Sn_Pablo/Suisun_Bay - - US - 37.83 - -122.39 - 0 - 0 - MTR - - - PZZ535 - 615350 - Monterey_Bay - - US - 36.79 - -121.89 - 0 - 0 - MTR - - - PZZ565 - 615650 - Cstal_Wtrs_fr_Pt_Pinos_to_Pt_Pie - - US - 36.11 - -121.84 - 0 - 0 - MTR - - - PZZ670 - 616700 - The_Wtrs_fr_Pt._Piedras_Blancas_ - - US - 35.14 - -121.55 - 0 - 0 - LOX - - - PZZ673 - 616730 - Wtrs_fr_Pt._Arguello_to_Sta_Cruz - - US - 34.18 - -120.98 - 0 - 0 - LOX - - - PZZ650 - 616500 - E_Sta_Barbara_Chnl_fr_Pt._Concep - - US - 34.28 - -119.87 - 0 - 0 - LOX - - - PZZ676 - 616760 - Out_wtrs_fr_Sta_Cruz_I_to_Sn_Cle - - US - 33.54 - -119.79 - 0 - 0 - LOX - - - PZZ655 - 616550 - Inr_wtrs_fr_Pt_Mugu_to_Sn_Mateo_ - - US - 33.59 - -118.55 - 0 - 0 - LOX - - - PZZ775 - 617750 - Wtrs_fr_Sn_Mateo_point_to_the_Me - - US - 32.83 - -118.20 - 0 - 0 - SGX - - - PZZ750 - 617500 - Cstal_Wtrs_fr_Sn_Mateo_Pt_to_the - - US - 32.92 - -117.55 - 0 - 0 - SGX - - - GMZ135 - 681350 - Laguna_Madre_From_5_nm_N_Of_Port - - US - 26.93 - -97.44 - 0 - 0 - BRO - - - GMZ132 - 681320 - Laguna_Madre_From_The_Arroyo_Col - - US - 26.49 - -97.37 - 0 - 0 - BRO - - - GMZ230 - 682300 - Bays_and_Wtrways_fr_Baffin_Bay_t - - US - 27.54 - -97.31 - 0 - 0 - CRP - - - GMZ130 - 681300 - Laguna_Madre_From_the_Port_Of_Br - - US - 26.19 - -97.30 - 0 - 0 - BRO - - - GMZ155 - 681550 - Cstal_wtrs_fr_Baffin_Bay_to_Port - - US - 26.92 - -97.23 - 0 - 0 - BRO - - - GMZ250 - 682500 - Cstal_wtrs_fr_Baffin_Bay_to_Port - - US - 27.52 - -97.10 - 0 - 0 - CRP - - - GMZ150 - 681500 - Cstal_wtrs_fr_Port_Mansfield_TX_ - - US - 26.28 - -97.04 - 0 - 0 - BRO - - - GMZ235 - 682350 - Bays_and_Wtrways_fr_Port_Aransas - - US - 28.16 - -96.82 - 0 - 0 - CRP - - - GMZ175 - 681750 - Wtrs_fr_Baffin_Bay_to_Port_Mansf - - US - 26.87 - -96.68 - 0 - 0 - BRO - - - GMZ255 - 682550 - Cstal_wtrs_fr_Port_Aransas_to_Ma - - US - 28.06 - -96.66 - 0 - 0 - CRP - - - GMZ270 - 682700 - Wtrs_fr_Baffin_Bay_to_Port_Arans - - US - 27.35 - -96.51 - 0 - 0 - CRP - - - GMZ170 - 681700 - Wtrs_fr_Port_Mansfield_TX_to_the - - US - 26.26 - -96.50 - 0 - 0 - BRO - - - GMZ330 - 683300 - Matagorda_Bay - - US - 28.60 - -96.32 - 0 - 0 - HGX - - - GMZ275 - 682750 - Wtrs_fr_Port_Aransas_to_Matagord - - US - 27.74 - -96.12 - 0 - 0 - CRP - - - GMZ350 - 683500 - Cstal_wtrs_fr_Freeport_to_Matago - - US - 28.52 - -95.70 - 0 - 0 - HGX - - - GMZ370 - 683700 - Wtrs_fr_Freeport_to_Matagorda_Sh - - US - 28.13 - -95.38 - 0 - 0 - HGX - - - GMZ335 - 683350 - Galveston_Bay - - US - 29.41 - -94.87 - 0 - 0 - HGX - - - GMZ355 - 683550 - Cstal_wtrs_fr_Hi_I_to_Freeport_T - - US - 29.10 - -94.78 - 0 - 0 - HGX - - - GMZ375 - 683750 - Wtrs_fr_Hi_I_to_Freeport_TX_fr_2 - - US - 28.66 - -94.60 - 0 - 0 - HGX - - - GMZ450 - 684500 - Cstal_wtrs_fr_Cameron_LA_to_Hi_I - - US - 29.58 - -93.95 - 0 - 0 - LCH - - - GMZ430 - 684300 - Sabine_Lake - - US - 29.62 - -93.85 - 0 - 0 - LCH - - - GMZ470 - 684700 - Wtrs_fr_Cameron_LA_to_Hi_I_TX_fr - - US - 29.07 - -93.82 - 0 - 0 - LCH - - - GMZ432 - 684320 - Calcasieu_Lake - - US - 29.92 - -93.31 - 0 - 0 - LCH - - - GMZ452 - 684520 - Cstal_wtrs_fr_Intracoastal_Cty_t - - US - 29.48 - -92.72 - 0 - 0 - LCH - - - GMZ472 - 684720 - Wtrs_fr__Intracoastal_Cty_to_Cam - - US - 28.95 - -92.68 - 0 - 0 - LCH - - - LSZ145 - 651450 - Duluth_MN_to_Port_Wing_WI - - US - 46.76 - -91.84 - 0 - 0 - DLH - - - LSZ144 - 651440 - Two_Harbors_to_Duluth_MN - - US - 46.89 - -91.82 - 0 - 0 - DLH - - - GMZ475 - 684750 - Wtrs_fr_Lwr_Atchafalaya_Riv_to_I - - US - 28.70 - -91.72 - 0 - 0 - LCH - - - GMZ435 - 684350 - Vermillion_Bay - - US - 29.38 - -91.70 - 0 - 0 - LCH - - - GMZ455 - 684550 - Cstal_wtrs_fr_Lwr_Atchafalaya_Ri - - US - 29.32 - -91.69 - 0 - 0 - LCH - - - LSZ143 - 651430 - Silver_Bay_Hbr_to_2_Hbrs_MN - - US - 47.13 - -91.40 - 0 - 0 - DLH - - - LSZ146 - 651460 - Port_Wing_to_Sand_Island_WI - - US - 46.91 - -91.19 - 0 - 0 - DLH - - - LSZ142 - 651420 - Taconite_Hbr_to_Silver_Bay_Hbr_M - - US - 47.38 - -91.05 - 0 - 0 - DLH - - - LSZ121 - 651210 - Chequamegon_Bay-Bayfield_to_Oak_ - - US - 46.69 - -90.81 - 0 - 0 - DLH - - - LSZ147 - 651470 - Sand_Island_to_Bayfield_WI - - US - 46.91 - -90.71 - 0 - 0 - DLH - - - LSZ148 - 651480 - Oak_Point_to_Saxon_Harbor_WI - - US - 46.67 - -90.59 - 0 - 0 - DLH - - - LSZ141 - 651410 - Grand_Marais_to_Taconite_Hbr_MN - - US - 47.58 - -90.57 - 0 - 0 - DLH - - - LSZ162 - 651620 - L_Sup_W_of_a_line_fr_Saxon_Hbr_W - - US - 47.28 - -90.56 - 0 - 0 - DLH - - - LSZ240 - 652400 - Saxon_Harbor_WI_to_Black_Riv_MI - - US - 46.66 - -90.24 - 0 - 0 - MQT - - - GMZ550 - 685500 - Cstal_wtrs_fr_the_SW_pass_of_the - - US - 29.00 - -90.19 - 0 - 0 - LIX - - - GMZ570 - 685700 - Wtrs_fr_the_SW_Pass_of_the_MS_Ri - - US - 28.39 - -90.18 - 0 - 0 - LIX - - - GMZ530 - 685300 - L_Pontchartrain_and_L_Maurepas - - US - 30.17 - -90.10 - 0 - 0 - LIX - - - LSZ241 - 652410 - Black_River_To_Ontonagon_MI - - US - 46.81 - -89.91 - 0 - 0 - MQT - - - LSZ140 - 651400 - Gnd_Portage_to_Gnd_Marais_MN - - US - 47.84 - -89.85 - 0 - 0 - DLH - - - LSZ263 - 652630 - L_Sup_fr_Saxon_Hbr_WI_to_Upr_Ent - - US - 47.45 - -89.29 - 0 - 0 - MQT - - - GMZ555 - 685550 - Cstal_wtrs_fr_Pascagoula_MS_to_t - - US - 29.72 - -89.09 - 0 - 0 - LIX - - - LSZ242 - 652420 - Ontonagon_to_Upr_Entr_of_Portage - - US - 47.10 - -88.96 - 0 - 0 - MQT - - - GMZ575 - 685750 - Wtrs_fr_Pascagoula_MS_to_the_SW_ - - US - 28.86 - -88.56 - 0 - 0 - LIX - - - LSZ243 - 652430 - Upr_Entr_of_Portage_Canal_to_Eag - - US - 47.37 - -88.47 - 0 - 0 - MQT - - - LSZ247 - 652470 - Portage_L_to_Huron_I_MI_to_Lwr_E - - US - 46.90 - -88.37 - 0 - 0 - MQT - - - LSZ246 - 652460 - Pt_Isabelle_to_Lwr_Entr_of_Porta - - US - 47.15 - -88.22 - 0 - 0 - MQT - - - LSZ264 - 652640 - L_Sup_fr_Upr_Entr_to_Portage_Can - - US - 47.83 - -88.08 - 0 - 0 - MQT - - - GMZ650 - 686500 - Cstal_wtrs_fr_Pensacola_FL_to_Pa - - US - 30.19 - -88.01 - 0 - 0 - MOB - - - LSZ244 - 652440 - Eagle_River_to_Manitou_I_MI - - US - 47.49 - -87.95 - 0 - 0 - MQT - - - GMZ630 - 686300 - Mobile_Bay - - US - 30.53 - -87.93 - 0 - 0 - MOB - - - LMZ644 - 646440 - Port_Washington_to_N_Pt_Lt_WI - - US - 43.24 - -87.87 - 0 - 0 - MKX - - - LMZ522 - 645220 - Grn_Bay_S_of_line_fr__Oconto_WI_ - - US - 44.71 - -87.79 - 0 - 0 - GRB - - - LMZ645 - 646450 - N_Point_Light_to_Wind_Point_WI - - US - 42.93 - -87.77 - 0 - 0 - MKX - - - LMZ740 - 647400 - Winthrop_Hbr_to_Wilmette_Hbr_IL - - US - 42.28 - -87.77 - 0 - 0 - LOT - - - LSZ265 - 652650 - L_Sup_W_of_Line_fr_Manitou_I_to_ - - US - 47.00 - -87.73 - 0 - 0 - MQT - - - LMZ643 - 646430 - Sheboygan_to_Port_Washington_WI - - US - 43.55 - -87.72 - 0 - 0 - MKX - - - LMZ646 - 646460 - Wind_Pt_WI_to_Winthrop_Hbr_IL - - US - 42.64 - -87.72 - 0 - 0 - MKX - - - LSZ245 - 652450 - Manitou_I_to_Point_Isabelle_MI - - US - 47.32 - -87.71 - 0 - 0 - MQT - - - GMZ670 - 686700 - Wtrs_fr_Pensacola_FL_to_Pascagou - - US - 29.60 - -87.65 - 0 - 0 - MOB - - - LMZ543 - 645430 - Two_Rivers_to_Sheboygan_WI - - US - 43.95 - -87.64 - 0 - 0 - GRB - - - LMZ742 - 647420 - Nerly_I_to_Calumet_Harbor_IL - - US - 41.84 - -87.60 - 0 - 0 - LOT - - - LMZ741 - 647410 - Wilmette_Harbor_to_Nerly_I_IL - - US - 41.98 - -87.58 - 0 - 0 - LOT - - - LSZ248 - 652480 - Huron_Islands_to_Marquette_MI - - US - 46.77 - -87.52 - 0 - 0 - MQT - - - LMZ669 - 646690 - L_MI_fr_Sheboygan_to_Port_Washin - - US - 43.63 - -87.44 - 0 - 0 - MKX - - - LMZ743 - 647430 - Calumet_Harbor_IL_to_Gary_IN - - US - 41.70 - -87.42 - 0 - 0 - LOT - - - LMZ671 - 646710 - L_MI_fr_Port_Washington_to_N_Pt_ - - US - 43.20 - -87.41 - 0 - 0 - MKX - - - LMZ673 - 646730 - L_MI_fr_N_Pt_Lt_to_Wind_Pt_WI_5N - - US - 42.93 - -87.40 - 0 - 0 - MKX - - - LMZ521 - 645210 - Grn_Bay_S_of_line_fr__Cedar_Riv_ - - US - 45.11 - -87.39 - 0 - 0 - GRB - - - LMZ542 - 645420 - Sturgeon_Bay_to_Two_Rivers_WI - - US - 44.49 - -87.37 - 0 - 0 - GRB - - - LMZ777 - 647770 - L_MI_fr_Winthrop_Hbr_to_Wilmette - - US - 42.31 - -87.37 - 0 - 0 - LOT - - - LMZ567 - 645670 - L_MI_fr_2_Rivs_to_Sheboygan_WI_5 - - US - 44.05 - -87.33 - 0 - 0 - GRB - - - LMZ675 - 646750 - L_MI_fr_Wind_Pt_WI_to_Winthrop_H - - US - 42.61 - -87.32 - 0 - 0 - MKX - - - LMZ779 - 647790 - L_MI_fr_Wilmette_Hbr_to_MI_Cty_i - - US - 41.95 - -87.26 - 0 - 0 - LOT - - - LMZ744 - 647440 - Gary_to_Burns_Harbor_IN - - US - 41.67 - -87.25 - 0 - 0 - LOT - - - LMZ565 - 645650 - L_MI_fr_Sturgeon_Bay_to_2_Rivs_W - - US - 44.47 - -87.11 - 0 - 0 - GRB - - - LSZ249 - 652490 - Marquette_to_Munising_MI - - US - 46.60 - -87.05 - 0 - 0 - MQT - - - LMZ745 - 647450 - Burns_Harbor_to_MI_City_IN - - US - 41.72 - -87.04 - 0 - 0 - LOT - - - LMZ541 - 645410 - Rock_I_Passage_to_Sturgeon_Bay_W - - US - 45.07 - -86.96 - 0 - 0 - GRB - - - LMZ870 - 648700 - L_MI_fr_Whthall_to_Pentwtr_MI_5N - - US - 43.63 - -86.96 - 0 - 0 - GRR - - - LMZ221 - 642210 - Grn_Bay_N_of_line_fr_Cedar_Riv_M - - US - 45.66 - -86.94 - 0 - 0 - MQT - - - LMZ046 - 640460 - MI_City_IN_to_New_Buffalo_MI - - US - 41.80 - -86.86 - 0 - 0 - IWX - - - LSZ266 - 652660 - L_Sup_E_of_a_line_fr_Manitou_I_t - - US - 47.21 - -86.85 - 0 - 0 - MQT - - - LMZ878 - 648780 - L_MI_fr_St_Joseph_to_S_Haven_MI_ - - US - 42.36 - -86.84 - 0 - 0 - GRR - - - GMZ675 - 686750 - Wtrs_fr_Destin_to_Pensacola_FL_f - - US - 29.72 - -86.83 - 0 - 0 - MOB - - - LMZ080 - 640800 - L_MI_MI_Cty_IN_to_St._Joseph_MI_ - - US - 41.97 - -86.79 - 0 - 0 - IWX - - - LMZ872 - 648720 - L_MI_fr_Gnd_Haven_to_Whthall_MI_ - - US - 43.22 - -86.78 - 0 - 0 - GRR - - - LMZ874 - 648740 - L_MI_fr_Holland_to_Gnd_Haven_MI_ - - US - 42.95 - -86.78 - 0 - 0 - GRR - - - LMZ366 - 643660 - L_MI_fr_Pt_Betsie_to_Manistee_MI - - US - 44.53 - -86.75 - 0 - 0 - APX - - - GMZ655 - 686550 - Cstal_wtrs_fr_Destin_to_Pensacol - - US - 30.24 - -86.72 - 0 - 0 - MOB - - - LMZ043 - 640430 - New_Buffalo_MI_to_St_Joseph_MI - - US - 41.97 - -86.67 - 0 - 0 - IWX - - - LMZ563 - 645630 - L_MI_fr_Rock_I_Passage_to_Sturge - - US - 45.02 - -86.67 - 0 - 0 - GRB - - - LMZ250 - 642500 - 5NM_E_of_a_line_fr_Fairport_MI_t - - US - 45.49 - -86.66 - 0 - 0 - MQT - - - LMZ868 - 648680 - L_MI_fr_Pentwtr_to_Manistee_MI_5 - - US - 43.95 - -86.65 - 0 - 0 - GRR - - - LMZ876 - 648760 - L_MI_fr_S_Haven_to_Holland_MI_5N - - US - 42.60 - -86.65 - 0 - 0 - GRR - - - LMZ849 - 648490 - Pentwater_to_Manistee_MI - - US - 44.03 - -86.57 - 0 - 0 - GRR - - - LMZ848 - 648480 - Whitehall_to_Pentwater_MI - - US - 43.59 - -86.53 - 0 - 0 - GRR - - - LSZ250 - 652500 - Munising_to_Grand_Marais_MI - - US - 46.59 - -86.49 - 0 - 0 - MQT - - - LMZ844 - 648440 - St_Joseph_to_South_Haven_MI - - US - 42.28 - -86.46 - 0 - 0 - GRR - - - LMZ847 - 648470 - Grand_Haven_to_Whitehall_MI - - US - 43.22 - -86.36 - 0 - 0 - GRR - - - LMZ346 - 643460 - Manistee_to_Point_Betsie_MI - - US - 44.48 - -86.33 - 0 - 0 - APX - - - LMZ261 - 642610 - L_MI_fr_Seul_Choix_Pt_to_Rock_I_ - - US - 45.60 - -86.32 - 0 - 0 - MQT - - - LMZ846 - 648460 - Holland_to_Grand_Haven_MI - - US - 42.91 - -86.30 - 0 - 0 - GRR - - - LMZ845 - 648450 - South_Haven_to_Holland_MI - - US - 42.59 - -86.28 - 0 - 0 - GRR - - - LMZ248 - 642480 - Seul_Choix_Pt_to_Pt_Detour_MI - - US - 45.79 - -86.27 - 0 - 0 - MQT - - - LMZ364 - 643640 - L_MI_fr_Charlevoix_to_Pt_Betsie_ - - US - 45.02 - -86.19 - 0 - 0 - APX - - - LMZ345 - 643450 - Pt_Betsie_to_Sleeping_Bear_Pt_MI - - US - 44.82 - -86.18 - 0 - 0 - APX - - - LMZ344 - 643440 - Sleeping_Bear_Pt_to_Gnd_Traverse - - US - 45.09 - -85.79 - 0 - 0 - APX - - - GMZ770 - 687700 - Wtrs_fr_Apalachicola_to_Destin_F - - US - 29.27 - -85.76 - 0 - 0 - TAE - - - LMZ341 - 643410 - Seul_Choix_Pt_to_5NM_W_of_Mackin - - US - 45.96 - -85.71 - 0 - 0 - APX - - - GMZ750 - 687500 - Cstal_wtrs_fr_Apalachicola_to_De - - US - 29.84 - -85.65 - 0 - 0 - TAE - - - LSZ267 - 652670 - L_Sup_fr_Gnd_Marais_MI_to_Whtfis - - US - 47.00 - -85.61 - 0 - 0 - MQT - - - LMZ362 - 643620 - L_MI_S_of_a_line_fr_Seul_Choix_P - - US - 45.60 - -85.57 - 0 - 0 - APX - - - LMZ323 - 643230 - Gnd_Traverse_Bay_S_of_a_line_Gnd - - US - 44.98 - -85.56 - 0 - 0 - APX - - - LSZ251 - 652510 - Grand_Marais_to_Whitefish_Pt_MI - - US - 46.75 - -85.41 - 0 - 0 - MQT - - - LMZ342 - 643420 - Norwood_MI_to_5NM_W_of_Mackinac_ - - US - 45.53 - -85.20 - 0 - 0 - APX - - - LSZ321 - 653210 - Whtfish_Bay_(U.S._Portion)/Whtfi - - US - 46.54 - -84.77 - 0 - 0 - APX - - - LHZ345 - 743450 - Sts_of_Mackinac_within_5NM_of_Ma - - US - 45.81 - -84.71 - 0 - 0 - APX - - - GMZ755 - 687550 - Cstal_Wtrs_From__Ochlockonee_Riv - - US - 29.61 - -84.54 - 0 - 0 - TAE - - - GMZ775 - 687750 - Wtrs_fr__Suwannee_Riv_to_Apalach - - US - 29.15 - -84.35 - 0 - 0 - TAE - - - LHZ347 - 743470 - 5NM_E_of_Mackinac_Br_to_Presque_ - - US - 45.73 - -84.31 - 0 - 0 - APX - - - LHZ346 - 743460 - St_Ignace_to_False_Detour_Chnl - - US - 45.94 - -84.13 - 0 - 0 - APX - - - LSZ322 - 653220 - St._Marys_Riv_Pt_Iroquois_to_E._ - - US - 46.26 - -84.11 - 0 - 0 - APX - - - GMZ730 - 687300 - Apalachee_Bay_or_Cstal_Wtrs_From - - US - 29.90 - -83.95 - 0 - 0 - TAE - - - LHZ361 - 743610 - L_Huron_fr_5NM_E_of_Mackinac_Br_ - - US - 45.63 - -83.69 - 0 - 0 - APX - - - LHZ422 - 744220 - Inr_Saginaw_Bay_SW_of_Pt_Au_Gres - - US - 43.80 - -83.67 - 0 - 0 - DTX - - - GMZ870 - 688700 - Wtrs_fr_Tarpon_Spgs_to_Suwannee_ - - US - 28.60 - -83.54 - 0 - 0 - TBW - - - GMZ765 - 687650 - Cstal_wtrs_fr__Suwannee_Riv_to_K - - US - 29.50 - -83.53 - 0 - 0 - TAE - - - LHZ421 - 744210 - Out_Saginaw_Bay_SW_of_Alabaster_ - - US - 44.07 - -83.38 - 0 - 0 - DTX - - - GMZ873 - 688730 - Wtrs_fr_Englewood_to_Tarpon_Spgs - - US - 27.42 - -83.36 - 0 - 0 - TBW - - - LEZ142 - 631420 - Maumee_Bay_to_Reno_Beach_OH - - US - 41.74 - -83.35 - 0 - 0 - CLE - - - LHZ348 - 743480 - Presque_I_Lt_to_Sturgeon_Pt_MI_I - - US - 45.06 - -83.32 - 0 - 0 - APX - - - LEZ444 - 634440 - MI_Wtrs_of_L_Erie_fr_Detroit_Riv - - US - 41.89 - -83.29 - 0 - 0 - DTX - - - LHZ349 - 743490 - Sturgeon_Point_to_Alabaster_MI - - US - 44.45 - -83.26 - 0 - 0 - APX - - - LEZ162 - 631620 - Detroit_Riv_Lt._to_Maumee_Bay_OH - - US - 41.86 - -83.20 - 0 - 0 - CLE - - - LCZ423 - 604230 - Detroit_River - - US - 42.18 - -83.16 - 0 - 0 - DTX - - - GMZ850 - 688500 - Cstal_wtrs_fr_Tarpon_Spgs_to_Suw - - US - 28.74 - -82.94 - 0 - 0 - TBW - - - LEZ143 - 631430 - Reno_Beach_to_The_Islands_OH - - US - 41.63 - -82.94 - 0 - 0 - CLE - - - LEZ163 - 631630 - Reno_Beach_to_The_Is_OH_beyond_5 - - US - 41.73 - -82.92 - 0 - 0 - CLE - - - GMZ853 - 688530 - Cstal_wtrs_fr_Englewood_to_Tarpo - - US - 27.53 - -82.87 - 0 - 0 - TBW - - - GMZ876 - 688760 - Wtrs_fr_Bonita_Beach_to_Englewoo - - US - 26.39 - -82.86 - 0 - 0 - TBW - - - LHZ362 - 743620 - L_Huron_fr_Presque_I_Lt_to_Sturg - - US - 45.10 - -82.84 - 0 - 0 - APX - - - LCZ460 - 604600 - L_St._Clair_Open_L_(U.S._Portion - - US - 42.52 - -82.76 - 0 - 0 - DTX - - - LHZ363 - 743630 - L_Huron_fr_Sturgeon_Pt_to_Alabas - - US - 44.42 - -82.75 - 0 - 0 - APX - - - LEZ144 - 631440 - The_Islands_to_Vermilion_OH - - US - 41.48 - -82.71 - 0 - 0 - CLE - - - GMZ830 - 688300 - Tampa_Bay_waters - - US - 27.76 - -82.60 - 0 - 0 - TBW - - - LHZ441 - 744410 - Port_Austin_to_Harbor_Beach_MI - - US - 43.93 - -82.59 - 0 - 0 - DTX - - - LHZ442 - 744420 - Harbor_Beach_to_Port_Sanilac_MI - - US - 43.64 - -82.53 - 0 - 0 - DTX - - - GMZ075 - 680750 - Wtrs_fr_Key_W_to_20_NM_W_of_Dry_ - - US - 24.26 - -82.51 - 0 - 0 - KEY - - - LHZ462 - 744620 - L_Huron_fr_Port_Austin_to_Hbr_Be - - US - 44.05 - -82.51 - 0 - 0 - DTX - - - LEZ164 - 631640 - The_Is_to_Vermilion_OH_beyond_5n - - US - 41.59 - -82.48 - 0 - 0 - CLE - - - LCZ422 - 604220 - St._Clair_River - - US - 42.77 - -82.47 - 0 - 0 - DTX - - - LHZ443 - 744430 - Port_Sanilac_to_Port_Huron_MI - - US - 43.21 - -82.43 - 0 - 0 - DTX - - - GMZ676 - 686760 - Wtrs_fr_Chokoloskee_to_Bonita_Be - - US - 25.80 - -82.42 - 0 - 0 - MFL - - - LHZ463 - 744630 - L_Huron_fr_Hbr_Beach_to_Port_Sni - - US - 43.70 - -82.41 - 0 - 0 - DTX - - - LHZ464 - 744640 - L_Huron_fr_Port_Snilac_to_Port_H - - US - 43.33 - -82.40 - 0 - 0 - DTX - - - GMZ856 - 688560 - Cstal_wtrs_fr_Bonita_Beach_to_En - - US - 26.56 - -82.28 - 0 - 0 - TBW - - - LEZ145 - 631450 - Vermilion_to_Avon_Point_OH - - US - 41.51 - -82.17 - 0 - 0 - CLE - - - LEZ165 - 631650 - Vermilion_to_Avon_Pt_OH_beyond_5 - - US - 41.61 - -82.04 - 0 - 0 - CLE - - - GMZ033 - 680330 - Wtrs_fr_E_C_Sable_to_Chokoloskee - - US - 25.27 - -82.00 - 0 - 0 - KEY - - - GMZ656 - 686560 - Cstal_wtrs_fr_Chokoloskee_to_Bon - - US - 25.96 - -81.92 - 0 - 0 - MFL - - - LEZ166 - 631660 - Avon_Pt_to_Willowick_OH_beyond_5 - - US - 41.82 - -81.81 - 0 - 0 - CLE - - - LEZ146 - 631460 - Avon_Point_to_Willowick_OH - - US - 41.54 - -81.66 - 0 - 0 - CLE - - - GMZ054 - 680540 - Cstal_wtrs_fr_the_W_end_of_the_S - - US - 24.48 - -81.61 - 0 - 0 - KEY - - - GMZ032 - 680320 - Gulf_Side_of_the_Lwr_Keys_out_20 - - US - 24.86 - -81.48 - 0 - 0 - KEY - - - GMZ074 - 680740 - Wtrs_fr_the_W_end_of_the_Seven_M - - US - 23.93 - -81.44 - 0 - 0 - KEY - - - GMZ657 - 686570 - Cstal_wtrs_fr_E_C_Sable_to_Choko - - US - 25.47 - -81.41 - 0 - 0 - MFL - - - AMZ450 - 664500 - Cstal_wtrs_fr_Altamaha_Snd_to_Fe - - US - 30.99 - -81.28 - 0 - 0 - JAX - - - LEZ147 - 631470 - Willowick_to_Geneva-on-the_L_OH - - US - 41.80 - -81.22 - 0 - 0 - CLE - - - AMZ452 - 664520 - Cstal_wtrs_fr_Fernandina_Beach_t - - US - 30.28 - -81.18 - 0 - 0 - JAX - - - LEZ167 - 631670 - Willowick_to_Geneva-on-the-L_OH_ - - US - 42.00 - -81.16 - 0 - 0 - CLE - - - AMZ354 - 663540 - Cstal_wtrs_fr_Savannah_GA_to_Alt - - US - 31.67 - -81.05 - 0 - 0 - CHS - - - AMZ550 - 665500 - Flagler_Beach_to_Volusia-Brevard - - US - 29.22 - -80.97 - 0 - 0 - MLB - - - AMZ454 - 664540 - Cstal_wtrs_fr_St._Augustine_to_F - - US - 29.66 - -80.94 - 0 - 0 - JAX - - - GMZ053 - 680530 - Cstal_wtrs_fr_Craig_Key_to_the_W - - US - 24.57 - -80.90 - 0 - 0 - KEY - - - GMZ031 - 680310 - Florida_Bay - - US - 24.99 - -80.86 - 0 - 0 - KEY - - - AMZ610 - 666100 - Lake_Okeechobee - - US - 26.94 - -80.82 - 0 - 0 - MFL - - - GMZ073 - 680730 - Wtrs_fr_Craig_Key_to_the_W_end_o - - US - 24.10 - -80.79 - 0 - 0 - KEY - - - LEZ148 - 631480 - Geneva-on-the-L_to_Conneaut_OH - - US - 41.96 - -80.75 - 0 - 0 - CLE - - - AMZ472 - 664720 - Wtrs_fr_Fernandina_Beach_to_St._ - - US - 30.27 - -80.73 - 0 - 0 - JAX - - - AMZ470 - 664700 - Wtrs_fr_Altamaha_Snd_GA_to_Ferna - - US - 30.90 - -80.71 - 0 - 0 - JAX - - - LEZ168 - 631680 - Geneva-on-the-L_to_Conneaut_OH_b - - US - 42.11 - -80.69 - 0 - 0 - CLE - - - AMZ474 - 664740 - Wtrs_fr_St._Augustine_to_Flagler - - US - 29.71 - -80.54 - 0 - 0 - JAX - - - AMZ552 - 665520 - Volusia-Brevard_Cnty_Line_to_Seb - - US - 28.39 - -80.48 - 0 - 0 - MLB - - - AMZ352 - 663520 - Cstal_wtrs_fr_Edisto_Beach_SC_to - - US - 32.18 - -80.47 - 0 - 0 - CHS - - - AMZ374 - 663740 - Wtrs_fr_Savannah_GA_to_Altamaha_ - - US - 31.48 - -80.45 - 0 - 0 - CHS - - - LEZ169 - 631690 - Conneaut_OH_to_Ripley_NY_beyond_ - - US - 42.33 - -80.35 - 0 - 0 - CLE - - - GMZ052 - 680520 - Cstal_wtrs_fr_O_Reef_to_Craig_Ke - - US - 24.94 - -80.34 - 0 - 0 - KEY - - - AMZ630 - 666300 - Biscayne_Bay - - US - 25.58 - -80.28 - 0 - 0 - MFL - - - AMZ570 - 665700 - Flagler_Beach_to_Volusia-Brevard - - US - 29.20 - -80.22 - 0 - 0 - MLB - - - LEZ149 - 631490 - Conneaut_OH_to_Ripley_NY - - US - 42.15 - -80.15 - 0 - 0 - CLE - - - GMZ072 - 680720 - Wtrs_fr_O_Reef_to_Craig_Key_fr_2 - - US - 24.53 - -80.05 - 0 - 0 - KEY - - - AMZ555 - 665550 - Sebastian_Inlt_to_Jupiter_Inlt_0 - - US - 27.40 - -80.03 - 0 - 0 - MLB - - - AMZ651 - 666510 - Cstal_wtrs_fr_Deerfield_Beach_to - - US - 25.77 - -80.01 - 0 - 0 - MFL - - - AMZ330 - 663300 - Charleston_Harbor - - US - 32.78 - -79.89 - 0 - 0 - CHS - - - AMZ572 - 665720 - Volusia-Brevard_Cnty_Line_to_Seb - - US - 28.42 - -79.87 - 0 - 0 - MLB - - - AMZ650 - 666500 - Cstal_wtrs_fr_Jupiter_Inlt_to_De - - US - 26.59 - -79.74 - 0 - 0 - MFL - - - AMZ370 - 663700 - Wtrs_fr_S_Sntee_Riv_SC_to_Savann - - US - 32.35 - -79.63 - 0 - 0 - CHS - - - LEZ040 - 630400 - Ripley_to_Dunkirk_NY - - US - 42.43 - -79.56 - 0 - 0 - BUF - - - AMZ575 - 665750 - Sebastian_Inlt_to_Jupiter_Inlt_2 - - US - 27.46 - -79.52 - 0 - 0 - MLB - - - AMZ350 - 663500 - Cstal_wtrs_fr_S_Sntee_Riv_to_Edi - - US - 32.65 - -79.51 - 0 - 0 - CHS - - - AMZ671 - 666710 - Wtrs_fr_Deerfield_Beach_to_O_Ree - - US - 25.50 - -79.50 - 0 - 0 - MFL - - - LEZ061 - 630610 - Ripley_to_Buffalo_NY_extending_f - - US - 42.55 - -79.49 - 0 - 0 - BUF - - - AMZ670 - 666700 - Wtrs_fr_Jupiter_Inlt_to_Deerfiel - - US - 26.58 - -79.34 - 0 - 0 - MFL - - - LEZ041 - 630410 - Dunkirk_to_Buffalo_NY - - US - 42.69 - -79.11 - 0 - 0 - BUF - - - LEZ020 - 630200 - Buffalo_Hbr_and_the_Upr_Niagara_ - - US - 43.11 - -79.06 - 0 - 0 - BUF - - - AMZ256 - 662560 - Cstal_wtrs_fr_Murrells_Inlt_to_S - - US - 33.21 - -78.86 - 0 - 0 - ILM - - - LOZ042 - 620420 - Niagara_Riv_to_Hamlin_Beach_NY - - US - 43.36 - -78.79 - 0 - 0 - BUF - - - LOZ062 - 620620 - Niagara_Riv_to_Hamlin_Beach_NY_b - - US - 43.55 - -78.63 - 0 - 0 - BUF - - - AMZ254 - 662540 - Cstal_wtrs_fr_Ltl_Riv_Inlt_to_Mu - - US - 33.62 - -78.59 - 0 - 0 - ILM - - - AMZ252 - 662520 - Cstal_wtrs_fr_C_Fear_NC_to_Ltl_R - - US - 33.69 - -78.01 - 0 - 0 - ILM - - - AMZ270 - 662700 - Wtrs_fr_Surf_Cty_NC_to_S_Sntee_R - - US - 33.49 - -77.96 - 0 - 0 - ILM - - - AMZ250 - 662500 - Cstal_wtrs_fr_Surf_Cty_to_C_Fear - - US - 34.07 - -77.60 - 0 - 0 - ILM - - - LOZ043 - 620430 - Hamlin_Beach_to_Sodus_Bay_NY - - US - 43.33 - -77.46 - 0 - 0 - BUF - - - LOZ063 - 620630 - Hamlin_Beach_to_Sodus_Bay_NY_bey - - US - 43.47 - -77.38 - 0 - 0 - BUF - - - ANZ536 - 675360 - Tidal_Potomac_fr_Ind_Hd_to_Cobb_ - - US - 38.42 - -77.12 - 0 - 0 - LWX - - - ANZ535 - 675350 - Tidal_Potomac_fr_Key_Br_to_Ind_H - - US - 38.75 - -77.04 - 0 - 0 - LWX - - - AMZ158 - 661580 - Cstal_wtrs_fr_C_Lookout_to_Surf_ - - US - 34.52 - -76.95 - 0 - 0 - MHX - - - LOZ064 - 620640 - Sodus_Bay_to_Mex_Bay_NY_beyond_5 - - US - 43.62 - -76.75 - 0 - 0 - BUF - - - LOZ044 - 620440 - Sodus_Bay_to_Mexico_Bay_NY - - US - 43.44 - -76.62 - 0 - 0 - BUF - - - ANZ537 - 675370 - Tidal_Potomac_fr_Cobb_I_MD_to_Sm - - US - 38.15 - -76.58 - 0 - 0 - LWX - - - ANZ533 - 675330 - Chsapke_Bay_fr_N_Beach_to_Drum_P - - US - 38.56 - -76.41 - 0 - 0 - LWX - - - LOZ065 - 620650 - Mex_Bay_NY_to_the_St._Lawrence_R - - US - 43.78 - -76.39 - 0 - 0 - BUF - - - LOZ045 - 620450 - Mex_Bay_NY_to_the_St._Lawrence_R - - US - 43.86 - -76.36 - 0 - 0 - BUF - - - ANZ531 - 675310 - Chsapke_Bay_fr_Pooles_I_to_Sndy_ - - US - 39.18 - -76.35 - 0 - 0 - LWX - - - AMZ156 - 661560 - Cstal_wtrs_fr_Ocracoke_Inlt_to_C - - US - 34.80 - -76.27 - 0 - 0 - MHX - - - ANZ532 - 675320 - Chsapke_Bay_fr_Sndy_Pt_to_N_Beac - - US - 38.90 - -76.27 - 0 - 0 - LWX - - - AMZ135 - 661350 - Pamlico_Sound - - US - 35.30 - -76.13 - 0 - 0 - MHX - - - ANZ632 - 676320 - Chsapke_Bay_fr_New_Pt_Comfort_to - - US - 37.10 - -76.13 - 0 - 0 - AKQ - - - ANZ534 - 675340 - Chsapke_Bay_fr_Drum_Pt_MD_to_Smi - - US - 38.13 - -76.11 - 0 - 0 - LWX - - - AMZ130 - 661300 - Albemarle_Sound - - US - 36.00 - -76.09 - 0 - 0 - MHX - - - ANZ631 - 676310 - Chsapke_Bay_fr_Windmill_Pt_to_Ne - - US - 37.46 - -76.09 - 0 - 0 - AKQ - - - ANZ530 - 675300 - Chesapeake_Bay_N_of_Pooles_I_MD - - US - 39.46 - -76.06 - 0 - 0 - LWX - - - ANZ630 - 676300 - Chsapke_Bay_fr_Smith_Pt_to_Windm - - US - 37.80 - -76.04 - 0 - 0 - AKQ - - - ANZ633 - 676330 - Currituck_Sound - - US - 36.40 - -75.92 - 0 - 0 - AKQ - - - SLZ022 - 730220 - St._Lawrence_Riv_above_Ogdensbg_ - - US - 44.45 - -75.79 - 0 - 0 - BUF - - - ANZ656 - 676560 - Cstal_wtrs_fr_C_Charles_Lt_VA_to - - US - 36.78 - -75.68 - 0 - 0 - AKQ - - - AMZ170 - 661700 - Wtrs_fr_Currituck_Beach_Lt_to_Su - - US - 34.83 - -75.64 - 0 - 0 - MHX - - - ANZ654 - 676540 - Cstal_wtrs_fr_Parramore_I_to_C_C - - US - 37.31 - -75.62 - 0 - 0 - AKQ - - - ANZ658 - 676580 - Cstal_wtrs_fr_NC_VA_border_to_Cu - - US - 36.36 - -75.60 - 0 - 0 - AKQ - - - AMZ154 - 661540 - Cstal_wtrs_fr_C_Hatteras_to_Ocra - - US - 35.05 - -75.58 - 0 - 0 - MHX - - - AMZ150 - 661500 - Cstal_wtrs_fr_Currituck_Beach_Lt - - US - 36.02 - -75.50 - 0 - 0 - MHX - - - ANZ652 - 676520 - Cstal_wtrs_fr_Chincoteague_to_Pa - - US - 37.81 - -75.39 - 0 - 0 - AKQ - - - AMZ152 - 661520 - Cstal_wtrs_fr_Oregon_Inlt_to_C_H - - US - 35.50 - -75.38 - 0 - 0 - MHX - - - ANZ430 - 674300 - DE_Bay_wtrs_N_of_E_Pt_NJ_to_Slau - - US - 39.32 - -75.34 - 0 - 0 - PHI - - - SLZ024 - 730240 - St._Lawrence_Riv_fr_Ogdensbg_to_ - - US - 44.86 - -75.23 - 0 - 0 - BUF - - - ANZ431 - 674310 - DE_Bay_wtrs_S_of_E_Pt_NJ_to_Slau - - US - 39.00 - -75.10 - 0 - 0 - PHI - - - ANZ670 - 676700 - Wtrs_fr_Fenwick_I_DE_to_Currituc - - US - 37.28 - -75.10 - 0 - 0 - AKQ - - - ANZ650 - 676500 - Cstal_wtrs_fr_Fenwick_I_DE_to_Ch - - US - 38.23 - -75.07 - 0 - 0 - AKQ - - - ANZ454 - 674540 - Cstal_wtrs_fr_C_May_NJ_to_C_Henl - - US - 38.80 - -74.89 - 0 - 0 - PHI - - - ANZ455 - 674550 - Cstal_wtrs_fr_C_Henlopen_to_Fenw - - US - 38.48 - -74.74 - 0 - 0 - PHI - - - ANZ453 - 674530 - Cstal_wtrs_fr_Gt_Egg_Inlt_to_C_M - - US - 38.97 - -74.57 - 0 - 0 - PHI - - - ANZ452 - 674520 - Cstal_wtrs_fr_Ltl_Egg_Inlt_to_Gt - - US - 39.26 - -74.36 - 0 - 0 - PHI - - - ANZ338 - 673380 - New_York_Harbor - - US - 40.55 - -74.09 - 0 - 0 - OKX - - - ANZ470 - 674700 - Wtrs_fr_Sndy_Hook_NJ_to_Fenwick_ - - US - 39.18 - -74.02 - 0 - 0 - PHI - - - ANZ451 - 674510 - Cstal_wtrs_fr_Manasquan_Inlt_to_ - - US - 39.65 - -73.95 - 0 - 0 - PHI - - - ANZ450 - 674500 - Cstal_wtrs_fr_Sndy_Hook_to_Manas - - US - 40.16 - -73.78 - 0 - 0 - PHI - - - ANZ355 - 673550 - Sndy_Hook_NJ_to_Fire_I_Inlt_NY_o - - US - 40.41 - -73.51 - 0 - 0 - OKX - - - ANZ335 - 673350 - Long_I_Snd_W_of_New_Haven_CT/Por - - US - 41.04 - -73.36 - 0 - 0 - OKX - - - ANZ353 - 673530 - Fire_I_Inlt_NY_to_Moriches_Inlt_ - - US - 40.55 - -73.04 - 0 - 0 - OKX - - - ANZ345 - 673450 - S_Shore_Bays_fr_Jones_Inlt_throu - - US - 40.74 - -73.00 - 0 - 0 - OKX - - - ANZ370 - 673700 - Wtrs_fr_Montauk_Pt_NY_to_Sndy_Ho - - US - 40.31 - -72.48 - 0 - 0 - OKX - - - ANZ330 - 673300 - Long_I_Snd_E_of_New_Haven_CT/Por - - US - 41.15 - -72.44 - 0 - 0 - OKX - - - ANZ340 - 673400 - Peconic_and_Gardiners_Bays - - US - 41.02 - -72.33 - 0 - 0 - OKX - - - ANZ350 - 673500 - Moriches_Inlt_NY_to_Montauk_Pt_N - - US - 40.75 - -72.21 - 0 - 0 - OKX - - - ANZ237 - 672370 - Block_Island_Sound - - US - 41.21 - -71.61 - 0 - 0 - BOX - - - ANZ236 - 672360 - Narragansett_Bay - - US - 41.62 - -71.29 - 0 - 0 - BOX - - - ANZ235 - 672350 - Rhode_Island_Sound - - US - 41.32 - -71.13 - 0 - 0 - BOX - - - ANZ230 - 672300 - Boston_Harbor - - US - 42.34 - -70.94 - 0 - 0 - BOX - - - ANZ233 - 672330 - Vineyard_Sound - - US - 41.43 - -70.78 - 0 - 0 - BOX - - - ANZ234 - 672340 - Buzzards_Bay - - US - 41.52 - -70.74 - 0 - 0 - BOX - - - ANZ255 - 672550 - Cstal_wtrs_fr_Nantucket_MA_to_Ma - - US - 41.07 - -70.74 - 0 - 0 - BOX - - - ANZ250 - 672500 - Cstal_wtrs_fr_Merrimack_Riv_MA_o - - US - 42.44 - -70.37 - 0 - 0 - BOX - - - ANZ231 - 672310 - Cape_Cod_Bay - - US - 41.92 - -70.34 - 0 - 0 - BOX - - - ANZ154 - 671540 - Cstal_Wtrs_fr_C_Elizabeth,_ME_to - - US - 43.11 - -70.26 - 0 - 0 - GYX - - - ANZ232 - 672320 - Nantucket_Sound - - US - 41.48 - -70.26 - 0 - 0 - BOX - - - ANZ153 - 671530 - Casco_Bay - - US - 43.72 - -70.06 - 0 - 0 - GYX - - - ANZ254 - 672540 - Cstal_wtrs_fr_Provincetown_MA_to - - US - 41.66 - -69.75 - 0 - 0 - BOX - - - ANZ152 - 671520 - Cstal_Wtrs_fr_Port_Clyde,_ME_to_ - - US - 43.57 - -69.47 - 0 - 0 - GYX - - - ANZ170 - 671700 - Wtrs_fr_Stonington_ME_to_Merrima - - US - 43.32 - -69.31 - 0 - 0 - GYX - - - ANZ270 - 672700 - Wtrs_fr_Merrimack_Riv_MA_to_Watc - - US - 41.69 - -69.29 - 0 - 0 - BOX - - - ANZ150 - 671500 - Cstal_Wtrs_fr_Stonington,_ME_to_ - - US - 43.84 - -68.91 - 0 - 0 - GYX - - - ANZ151 - 671510 - Penobscot_Bay - - US - 44.18 - -68.77 - 0 - 0 - GYX - - - ANZ051 - 670510 - Cstal_Wtrs_fr_Schoodic_Pt,_ME_to - - US - 44.00 - -68.25 - 0 - 0 - CAR - - - ANZ052 - 670520 - Intra_Cstal_Wtrs_fr_Schoodic_Pt, - - US - 44.19 - -68.25 - 0 - 0 - CAR - - - ANZ070 - 670700 - Wtrs_fr_Eport_ME_to_Stonington_( - - US - 43.84 - -67.86 - 0 - 0 - CAR - - - AMZ741 - 667410 - Mona_Passage_Southward_to_17N - - US - 17.74 - -67.69 - 0 - 0 - SJU - - - ANZ050 - 670500 - Cstal_Wtrs_fr_Eport,_ME_to_Schoo - - US - 44.30 - -67.48 - 0 - 0 - CAR - - - AMZ742 - 667420 - Cstal_Wtrs_OF_NWrn_Puerto_Rico_o - - US - 18.34 - -67.30 - 0 - 0 - SJU - - - AMZ745 - 667450 - Cstal_Wtrs_OF_SWrn_Puerto_Rico_o - - US - 18.06 - -67.28 - 0 - 0 - SJU - - - AMZ712 - 667120 - Cstal_Wtrs_of_Nrn_Puerto_Rico_ou - - US - 18.60 - -66.63 - 0 - 0 - SJU - - - AMZ735 - 667350 - Cstal_Wtrs_of_Srn_Puerto_Rico_ou - - US - 17.84 - -66.43 - 0 - 0 - SJU - - - AMZ710 - 667100 - Atl_Wtrs_of_Puerto_Rico_AND_USVI - - US - 19.04 - -66.01 - 0 - 0 - SJU - - - AMZ732 - 667320 - Carib_Wtrs_of_Puerto_Rico_fr_10_ - - US - 17.49 - -65.58 - 0 - 0 - SJU - - - AMZ725 - 667250 - Cstal_Wtrs_of_Srn_USVI,_Vieques, - - US - 18.24 - -65.16 - 0 - 0 - SJU - - - AMZ715 - 667150 - Cstal_Wtrs_of_Nrn_USVI_and_Culeb - - US - 18.47 - -64.85 - 0 - 0 - SJU - - - AMZ722 - 667220 - Anegada_Passage_Sward_to_17N - - US - 17.75 - -64.08 - 0 - 0 - SJU - - - PMZ161 - 711610 - Koror_Palau_Coastal_Waters - - US - 7.34 - 134.48 - 0 - 0 - GUM - - - PMZ171 - 711710 - Yap_Coastal_Waters - - US - 9.48 - 138.08 - 0 - 0 - GUM - - - PMZ151 - 711510 - Guam_Coastal_Waters - - US - 13.32 - 144.66 - 0 - 0 - GUM - - - PMZ152 - 711520 - Rota_Coastal_Waters - - US - 14.18 - 145.24 - 0 - 0 - GUM - - - PMZ153 - 711530 - Tinian_Coastal_Waters - - US - 14.83 - 145.45 - 0 - 0 - GUM - - - PMZ154 - 711540 - Saipan_Coastal_Waters - - US - 15.40 - 145.81 - 0 - 0 - GUM - - - PMZ172 - 711720 - Chuuk_Coastal_Waters - - US - 7.45 - 151.83 - 0 - 0 - GUM - - - PMZ173 - 711730 - Pohnpei_Coastal_Waters - - US - 6.97 - 158.23 - 0 - 0 - GUM - - - PMZ174 - 711740 - Kosrae_Coastal_Waters - - US - 5.35 - 162.95 - 0 - 0 - GUM - - - PMZ191 - 711910 - Waters_out_to_40_Nautical_Miles - - US - 19.30 - 166.64 - 0 - 0 - GUM - - - PMZ181 - 711810 - Majuro_Coastal_Waters - - US - 7.08 - 171.38 - 0 - 0 - GUM - - - PKZ176 - 691760 - Kiska_to_Attu - - US - 52.48 - 174.46 - 0 - 0 - AFC - - + + + + + AKZ187 + 21870 + Central_Aleutians + AK + US + 52.22 + -174.23 + 0 + 0 + AFC + + + AKZ213 + 22130 + St_Lawrence_I_and_Bering_St_Cst + AK + US + 63.36 + -170.27 + 0 + 0 + AFG + + + AKZ195 + 21950 + Pribilof_Islands + AK + US + 57.18 + -170.26 + 0 + 0 + AFC + + + AKZ185 + 21850 + Eastern_Aleutians + AK + US + 53.63 + -166.66 + 0 + 0 + AFC + + + AKZ207 + 22070 + Chukchi_Sea_Coast + AK + US + 67.98 + -165.11 + 0 + 0 + AFG + + + AKZ211 + 22110 + Southern_Seward_Peninsula_Coast + AK + US + 64.58 + -164.56 + 0 + 0 + AFG + + + AKZ214 + 22140 + Yukon_Delta + AK + US + 62.24 + -164.37 + 0 + 0 + AFG + + + AKZ155 + 21550 + Kuskokwim_Delta + AK + US + 60.18 + -163.61 + 0 + 0 + AFC + + + AKZ208 + 22080 + Lower_Kobuk_and_Noatak_Valleys + AK + US + 67.77 + -162.75 + 0 + 0 + AFG + + + AKZ210 + 22100 + Nrn_and_Interior_Seward_Penin + AK + US + 65.40 + -162.41 + 0 + 0 + AFG + + + AKZ201 + 22010 + Western_Arctic_Coast + AK + US + 69.84 + -161.53 + 0 + 0 + AFG + + + AKZ181 + 21810 + Alaska_Peninsula + AK + US + 55.82 + -161.44 + 0 + 0 + AFC + + + AKZ209 + 22090 + Baldwin_Penin_and_Selawik_Vly + AK + US + 66.69 + -161.06 + 0 + 0 + AFG + + + AKZ212 + 22120 + Ern_Norton_Snd_and_Nulato_Hills + AK + US + 63.74 + -160.39 + 0 + 0 + AFG + + + HIZ001 + 110010 + Niihau + HI + US + 21.89 + -160.15 + 0 + 0 + HFO + + + AKZ215 + 22150 + Lower_Yukon_Valley + AK + US + 62.56 + -159.94 + 0 + 0 + AFG + + + HIZ003 + 110030 + Kauai_Leeward + HI + US + 22.02 + -159.67 + 0 + 0 + HFO + + + HIZ004 + 110040 + Kauai_Mountains + HI + US + 22.07 + -159.54 + 0 + 0 + HFO + + + HIZ002 + 110020 + Kauai_Windward + HI + US + 22.05 + -159.40 + 0 + 0 + HFO + + + AKZ205 + 22050 + Northwestern_Brooks_Range + AK + US + 69.06 + -158.44 + 0 + 0 + AFG + + + HIZ006 + 110060 + Waianae_Coast + HI + US + 21.48 + -158.21 + 0 + 0 + HFO + + + HIZ011 + 110110 + Waianae_Mountains + HI + US + 21.46 + -158.10 + 0 + 0 + HFO + + + HIZ007 + 110070 + Oahu_North_Shore + HI + US + 21.59 + -158.08 + 0 + 0 + HFO + + + HIZ005 + 110050 + Oahu_South_Shore + HI + US + 21.33 + -158.05 + 0 + 0 + HFO + + + HIZ010 + 110100 + Central_Oahu + HI + US + 21.50 + -158.01 + 0 + 0 + HFO + + + HIZ008 + 110080 + Oahu_Koolau + HI + US + 21.50 + -157.89 + 0 + 0 + HFO + + + HIZ009 + 110090 + Olomana + HI + US + 21.39 + -157.73 + 0 + 0 + HFO + + + HIZ013 + 110130 + Molokai_Leeward + HI + US + 21.14 + -157.09 + 0 + 0 + HFO + + + AKZ217 + 22170 + Upper_Kobuk_and_Noatak_Valleys + AK + US + 67.41 + -156.95 + 0 + 0 + AFG + + + HIZ015 + 110150 + Lanai_Mauka + HI + US + 20.82 + -156.92 + 0 + 0 + HFO + + + HIZ012 + 110120 + Molokai_Windward + HI + US + 21.14 + -156.85 + 0 + 0 + HFO + + + HIZ014 + 110140 + Lanai_Makai + HI + US + 20.83 + -156.84 + 0 + 0 + HFO + + + HIZ018 + 110180 + Maui_Leeward_West + HI + US + 20.89 + -156.67 + 0 + 0 + HFO + + + HIZ016 + 110160 + Kahoolawe + HI + US + 20.56 + -156.62 + 0 + 0 + HFO + + + AKZ216 + 22160 + Lwr_Koyukuk_and_Middle_Yukon_Vly + AK + US + 64.44 + -156.58 + 0 + 0 + AFG + + + HIZ017 + 110170 + Maui_Windward_West + HI + US + 20.92 + -156.58 + 0 + 0 + HFO + + + HIZ019 + 110190 + Maui_Central_Valley + HI + US + 20.85 + -156.45 + 0 + 0 + HFO + + + HIZ021 + 110210 + Leeward_Haleakala + HI + US + 20.72 + -156.31 + 0 + 0 + HFO + + + HIZ022 + 110220 + Haleakala_Summit + HI + US + 20.72 + -156.23 + 0 + 0 + HFO + + + HIZ020 + 110200 + Windward_Haleakala + HI + US + 20.80 + -156.18 + 0 + 0 + HFO + + + AKZ151 + 21510 + Kuskokwim_Valley + AK + US + 62.26 + -156.04 + 0 + 0 + AFC + + + HIZ023 + 110230 + Kona + HI + US + 19.45 + -155.86 + 0 + 0 + HFO + + + HIZ026 + 110260 + Kohala + HI + US + 20.02 + -155.74 + 0 + 0 + HFO + + + AKZ161 + 21610 + Bristol_Bay + AK + US + 58.67 + -155.70 + 0 + 0 + AFC + + + HIZ027 + 110270 + Big_Island_Interior + HI + US + 19.56 + -155.61 + 0 + 0 + HFO + + + HIZ028 + 110280 + Big_Island_Summit + HI + US + 19.44 + -155.58 + 0 + 0 + HFO + + + HIZ024 + 110240 + South_Big_Island + HI + US + 19.19 + -155.42 + 0 + 0 + HFO + + + AKZ202 + 22020 + Northern_Arctic_Coast + AK + US + 70.78 + -155.25 + 0 + 0 + AFG + + + HIZ025 + 110250 + Big_Island_North_and_East + HI + US + 19.81 + -155.19 + 0 + 0 + HFO + + + AKZ171 + 21710 + Kodiak_Island + AK + US + 58.65 + -154.17 + 0 + 0 + AFC + + + AKZ219 + 22190 + Upper_Koyukuk_Valley + AK + US + 66.28 + -152.42 + 0 + 0 + AFG + + + AKZ221 + 22210 + Central_Interior + AK + US + 64.61 + -151.55 + 0 + 0 + AFG + + + AKZ145 + 21450 + Susitna_Valley + AK + US + 61.95 + -150.71 + 0 + 0 + AFC + + + AKZ121 + 21210 + Western_Kenai_Peninsula + AK + US + 60.12 + -150.69 + 0 + 0 + AFC + + + AKZ225 + 22250 + Denali + AK + US + 63.51 + -150.21 + 0 + 0 + AFG + + + AKZ101 + 21010 + Anchorage + AK + US + 61.20 + -149.71 + 0 + 0 + AFC + + + AKZ203 + 22030 + Central_Beaufort_Sea_Coast + AK + US + 70.34 + -149.66 + 0 + 0 + AFG + + + AKZ111 + 21110 + Matanuska_Valley + AK + US + 61.60 + -149.43 + 0 + 0 + AFC + + + AKZ125 + 21250 + Western_Prince_William_Sound + AK + US + 60.28 + -149.43 + 0 + 0 + AFC + + + AKZ218 + 22180 + Southeastern_Brooks_Range + AK + US + 67.94 + -147.78 + 0 + 0 + AFG + + + AKZ206 + 22060 + Northeastern_Brooks_Range + AK + US + 68.97 + -147.55 + 0 + 0 + AFG + + + AKZ222 + 22220 + Middle_Tanana_Valley + AK + US + 64.97 + -147.45 + 0 + 0 + AFG + + + AKZ223 + 22230 + Deltana_and_Tanana_Flats + AK + US + 64.13 + -146.62 + 0 + 0 + AFG + + + AKZ131 + 21310 + Northeast_Prince_William_Sound + AK + US + 61.14 + -146.39 + 0 + 0 + AFC + + + AKZ220 + 22200 + Yukon_Flats_and_Surrounding_Upla + AK + US + 66.46 + -146.25 + 0 + 0 + AFG + + + AKZ135 + 21350 + Southeast_Prince_William_Sound + AK + US + 60.65 + -145.32 + 0 + 0 + AFC + + + AKZ141 + 21410 + Copper_River_Basin + AK + US + 61.88 + -144.85 + 0 + 0 + AFC + + + AKZ204 + 22040 + Eastern_Beaufort_Sea_Coast + AK + US + 69.85 + -143.75 + 0 + 0 + AFG + + + AKZ224 + 22240 + Upr_Tanana_Vly_and_the_Ftymile_C + AK + US + 64.21 + -143.50 + 0 + 0 + AFG + + + AKZ226 + 22260 + Eastern_Alaska_Range + AK + US + 62.77 + -142.76 + 0 + 0 + AFG + + + AKZ017 + 20170 + C_Fairweather_to_C_Suckling_Csta + AK + US + 59.74 + -140.70 + 0 + 0 + AJK + + + AKZ022 + 20220 + Salisbury_Snd_to_C_Fairweather_C + AK + US + 58.68 + -137.66 + 0 + 0 + AJK + + + AKZ020 + 20200 + Glacier_Bay + AK + US + 58.79 + -136.99 + 0 + 0 + AJK + + + AKZ021 + 20210 + Eastern_Chichagof_Island + AK + US + 57.88 + -135.51 + 0 + 0 + AJK + + + AKZ019 + 20190 + Haines_Borough_and_Lynn_Canal + AK + US + 58.95 + -135.41 + 0 + 0 + AJK + + + AKZ018 + 20180 + Taiya_Inlet_and_Klondike_Hiway + AK + US + 59.57 + -135.35 + 0 + 0 + AJK + + + AKZ023 + 20230 + C_Decision_to_Salisbury_Snd_Csta + AK + US + 56.85 + -135.25 + 0 + 0 + AJK + + + AKZ024 + 20240 + Ern_Baranof_I_and_Srn_Admty_I + AK + US + 57.31 + -134.27 + 0 + 0 + AJK + + + AKZ025 + 20250 + Juneau_Borough_and_Nrn_Admty_I + AK + US + 58.08 + -133.64 + 0 + 0 + AJK + + + AKZ027 + 20270 + Dixon_Entr_to_C_Decision_Cstal_A + AK + US + 55.36 + -133.19 + 0 + 0 + AJK + + + AKZ026 + 20260 + Inr_Chnls_fr_Kupreanof_I_to_Etol + AK + US + 56.53 + -133.00 + 0 + 0 + AJK + + + AKZ028 + 20280 + Southern_Inner_Channels + AK + US + 55.71 + -132.71 + 0 + 0 + AJK + + + AKZ029 + 20290 + Misty_Fjords + AK + US + 55.67 + -130.98 + 0 + 0 + AJK + + + WAZ516 + 475160 + North_Coast + WA + US + 47.95 + -124.39 + 0 + 0 + SEW + + + ORZ022 + 370220 + Curry_County_Coast + OR + US + 42.35 + -124.27 + 0 + 0 + MFR + + + WAZ515 + 475150 + Western_Strait_of_Juan_De_Fuca + WA + US + 48.19 + -124.25 + 0 + 0 + SEW + + + ORZ021 + 370210 + South_Central_Oregon_Coast + OR + US + 43.28 + -124.24 + 0 + 0 + MFR + + + WAZ517 + 475170 + Central_Coast + WA + US + 47.16 + -124.06 + 0 + 0 + SEW + + + CAZ001 + 50010 + Redwood_Coast + CA + US + 41.02 + -124.03 + 0 + 0 + EKA + + + ORZ002 + 370020 + Central_Oregon_Coast + OR + US + 44.44 + -124.01 + 0 + 0 + PQR + + + ORZ001 + 370010 + North_Oregon_Coast + OR + US + 45.64 + -123.92 + 0 + 0 + PQR + + + ORZ024 + 370240 + Ern_Curry_Cnty_and_Josephine_Cnt + OR + US + 42.39 + -123.75 + 0 + 0 + MFR + + + CAZ003 + 50030 + North_Coast_Interior + CA + US + 40.99 + -123.72 + 0 + 0 + EKA + + + WAZ021 + 470210 + South_Washington_Coast + WA + US + 46.47 + -123.71 + 0 + 0 + PQR + + + CAZ002 + 50020 + Mendocino_Coast + CA + US + 39.40 + -123.64 + 0 + 0 + EKA + + + ORZ004 + 370040 + Ctrl_Coast_Range_of_Wrn_Oregon + OR + US + 44.42 + -123.62 + 0 + 0 + PQR + + + WAZ513 + 475130 + Olympics + WA + US + 47.71 + -123.61 + 0 + 0 + SEW + + + WAZ512 + 475120 + Lower_Chehalis_Valley_Area + WA + US + 47.09 + -123.52 + 0 + 0 + SEW + + + WAZ020 + 470200 + Willapa_Hills + WA + US + 46.52 + -123.51 + 0 + 0 + PQR + + + ORZ003 + 370030 + Coast_Range_of_Northwest_Oregon + OR + US + 45.59 + -123.40 + 0 + 0 + PQR + + + CAZ076 + 50760 + Mendocino_Interior + CA + US + 39.40 + -123.39 + 0 + 0 + EKA + + + ORZ023 + 370230 + Central_Douglas_County + OR + US + 43.32 + -123.35 + 0 + 0 + MFR + + + WAZ514 + 475140 + Eastern_Strait_of_Juan_de_Fuca + WA + US + 48.07 + -123.28 + 0 + 0 + SEW + + + CAZ080 + 50800 + Western_Siskiyou_County + CA + US + 41.49 + -123.13 + 0 + 0 + MFR + + + ORZ008 + 370080 + South__Willamette_Valley + OR + US + 44.32 + -123.11 + 0 + 0 + PQR + + + CAZ004 + 50040 + Upper_Trinity_River + CA + US + 40.44 + -123.07 + 0 + 0 + EKA + + + CAZ505 + 55050 + Cstal_N_Bay_Incl_Pt_Reyes_Natl_S + CA + US + 38.30 + -122.99 + 0 + 0 + MTR + + + WAZ001 + 470010 + San_Juan_County + WA + US + 48.60 + -122.99 + 0 + 0 + SEW + + + ORZ007 + 370070 + Central_Willamette_Valley + OR + US + 45.05 + -122.94 + 0 + 0 + PQR + + + WAZ511 + 475110 + Hood_Canal_Area + WA + US + 47.52 + -122.94 + 0 + 0 + SEW + + + WAZ022 + 470220 + Lwr_Columbia_and_I_-_5_Corridor_ + WA + US + 46.11 + -122.88 + 0 + 0 + PQR + + + ORZ005 + 370050 + Lower_Columbia + OR + US + 45.97 + -122.87 + 0 + 0 + PQR + + + WAZ504 + 475040 + Southwest_Interior + WA + US + 46.78 + -122.87 + 0 + 0 + SEW + + + ORZ026 + 370260 + Jackson_County + OR + US + 42.48 + -122.86 + 0 + 0 + MFR + + + ORZ006 + 370060 + Greater_Portland_Metro_Area + OR + US + 45.52 + -122.83 + 0 + 0 + PQR + + + CAZ506 + 55060 + North_Bay_Interior_Valleys + CA + US + 38.34 + -122.78 + 0 + 0 + MTR + + + ORZ012 + 370120 + Cascade_Foothills_in_Lane_Cnty + OR + US + 43.91 + -122.77 + 0 + 0 + PQR + + + ORZ025 + 370250 + Ern_Douglas_County_Foothills + OR + US + 43.18 + -122.75 + 0 + 0 + MFR + + + CAZ063 + 50630 + Mtns_SWrn_Shasta_Cnty_to_Nrn_L_C + CA + US + 39.91 + -122.73 + 0 + 0 + STO + + + CAZ064 + 50640 + Clear_Lake/Southern_Lake_County + CA + US + 38.96 + -122.67 + 0 + 0 + STO + + + CAZ081 + 50810 + Central_Siskiyou_County + CA + US + 41.68 + -122.60 + 0 + 0 + MFR + + + WAZ503 + 475030 + Western_Whatcom_County + WA + US + 48.82 + -122.59 + 0 + 0 + SEW + + + WAZ039 + 470390 + Greater_Vancouver_Area + WA + US + 45.73 + -122.54 + 0 + 0 + PQR + + + ORZ010 + 370100 + Nrn_Oregon_Cascade_Foothills + OR + US + 44.86 + -122.52 + 0 + 0 + PQR + + + WAZ509 + 475090 + Tacoma_Area + WA + US + 47.17 + -122.52 + 0 + 0 + SEW + + + WAZ510 + 475100 + Admiralty_Inlet_Area + WA + US + 48.15 + -122.50 + 0 + 0 + SEW + + + WAZ040 + 470400 + S_Washington_Cascade_Foothills + WA + US + 46.00 + -122.48 + 0 + 0 + PQR + + + CAZ006 + 50060 + San_Francisco + CA + US + 37.75 + -122.42 + 0 + 0 + MTR + + + WAZ506 + 475060 + Western_Skagit_County + WA + US + 48.47 + -122.42 + 0 + 0 + SEW + + + CAZ509 + 55090 + San_Francisco_Peninsula_Coast + CA + US + 37.36 + -122.38 + 0 + 0 + MTR + + + WAZ508 + 475080 + Seattle/Bremerton_Area + WA + US + 47.51 + -122.29 + 0 + 0 + SEW + + + CAZ507 + 55070 + North_Bay_Mountains + CA + US + 38.54 + -122.27 + 0 + 0 + MTR + + + CAZ015 + 50150 + Northern_Sacramento_Valley + CA + US + 40.26 + -122.25 + 0 + 0 + STO + + + ORZ013 + 370130 + Cascades_in_Lane_County + OR + US + 43.84 + -122.25 + 0 + 0 + PQR + + + ORZ028 + 370280 + Siskiyou_Mtns_and_Srn_Oregon_Cas + OR + US + 42.41 + -122.24 + 0 + 0 + MFR + + + CAZ013 + 50130 + Shasta_L_Area_/_Nrn_Shasta_Cnty + CA + US + 40.87 + -122.21 + 0 + 0 + STO + + + ORZ027 + 370270 + South_Central_Oregon_Cascades + OR + US + 43.21 + -122.21 + 0 + 0 + MFR + + + CAZ082 + 50820 + South_Central_Siskiyou_County + CA + US + 41.30 + -122.14 + 0 + 0 + MFR + + + WAZ507 + 475070 + Everett_and_Vicinity + WA + US + 48.03 + -122.14 + 0 + 0 + SEW + + + CAZ508 + 55080 + San_Francisco_Bay_Shoreline + CA + US + 37.64 + -122.08 + 0 + 0 + MTR + + + WAZ505 + 475050 + East_Puget_Sound_Lowlands + WA + US + 47.53 + -122.05 + 0 + 0 + SEW + + + WAZ019 + 470190 + South_Washington_Cascades + WA + US + 46.00 + -122.04 + 0 + 0 + PQR + + + CAZ512 + 55120 + Santa_Cruz_Mountains + CA + US + 37.20 + -121.98 + 0 + 0 + MTR + + + CAZ510 + 55100 + East_Bay_Interior_Valleys + CA + US + 37.82 + -121.97 + 0 + 0 + MTR + + + ORZ009 + 370090 + Western_Columbia_River_Gorge + OR + US + 45.61 + -121.96 + 0 + 0 + PQR + + + ORZ011 + 370110 + Northern_Oregon_Cascades + OR + US + 44.93 + -121.94 + 0 + 0 + PQR + + + WAZ023 + 470230 + Western_Columbia_River_Gorge + WA + US + 45.66 + -121.92 + 0 + 0 + PQR + + + CAZ016 + 50160 + Central_Sacramento_Valley + CA + US + 39.40 + -121.90 + 0 + 0 + STO + + + CAZ083 + 50830 + N_Ctrl_and_SE_Siskiyou_County + CA + US + 41.59 + -121.90 + 0 + 0 + MFR + + + CAZ530 + 55300 + Srn_Monterey_Bay_and_Big_Sur_Cst + CA + US + 36.35 + -121.90 + 0 + 0 + MTR + + + WAZ519 + 475190 + W_Slopes_Ctrl_Cascades_and_Passe + WA + US + 47.08 + -121.89 + 0 + 0 + SEW + + + CAZ018 + 50180 + Carquinez_Strait_and_Delta + CA + US + 38.07 + -121.80 + 0 + 0 + STO + + + CAZ529 + 55290 + Northern_Monterey_Bay + CA + US + 36.96 + -121.79 + 0 + 0 + MTR + + + CAZ511 + 55110 + E_Bay_Hills_and_the_Diablo_Rng + CA + US + 37.48 + -121.73 + 0 + 0 + MTR + + + CAZ513 + 55130 + Santa_Clara_Vly_Incl_San_Jose + CA + US + 37.17 + -121.69 + 0 + 0 + MTR + + + CAZ066 + 50660 + NE_Foothills/Sacramento_Valley + CA + US + 40.13 + -121.65 + 0 + 0 + STO + + + CAZ017 + 50170 + Southern_Sacramento_Valley + CA + US + 38.64 + -121.63 + 0 + 0 + STO + + + CAZ084 + 50840 + NE_Siskiyou_and_NW_Modoc_Cnties + CA + US + 41.86 + -121.63 + 0 + 0 + MFR + + + ORZ029 + 370290 + Klamath_Basin + OR + US + 42.47 + -121.63 + 0 + 0 + MFR + + + ORZ014 + 370140 + Upper_Hood_River_Valley + OR + US + 45.56 + -121.58 + 0 + 0 + PQR + + + CAZ528 + 55280 + Nrn_Salinas_Vly/Hollister_Vly_an + CA + US + 36.67 + -121.56 + 0 + 0 + MTR + + + CAZ014 + 50140 + Burney_Basin_/_Ern_Shasta_Cnty + CA + US + 40.88 + -121.52 + 0 + 0 + STO + + + WAZ518 + 475180 + W_Slopes_Nrn_Cascades_and_Passes + WA + US + 48.39 + -121.49 + 0 + 0 + SEW + + + CAZ517 + 55170 + Sta_Lucia_Mtns_and_Los_Padres_Na + CA + US + 36.19 + -121.39 + 0 + 0 + MTR + + + CAZ068 + 50680 + Wrn_Plumas_County/Lassen_Park + CA + US + 40.22 + -121.32 + 0 + 0 + STO + + + ORZ030 + 370300 + Nrn_and_Ern_Klamath_Cnty_and_Wrn + OR + US + 42.80 + -121.24 + 0 + 0 + MFR + + + ORZ042 + 370420 + North_Central_Oregon + OR + US + 45.04 + -121.10 + 0 + 0 + PDT + + + CAZ516 + 55160 + Srn_Salinas_Vly/Arroyo_Seco_and_ + CA + US + 36.09 + -121.09 + 0 + 0 + MTR + + + WAZ024 + 470240 + East_Columbia_River_Gorge + WA + US + 45.70 + -121.06 + 0 + 0 + PDT + + + ORZ041 + 370410 + East_Columbia_River_Gorge + OR + US + 45.64 + -121.02 + 0 + 0 + PDT + + + WAZ501 + 475010 + E_Slopes_of_the_Ctrl_Cascades + WA + US + 47.05 + -120.96 + 0 + 0 + PDT + + + ORZ043 + 370430 + Central_Oregon + OR + US + 44.00 + -120.95 + 0 + 0 + PDT + + + CAZ019 + 50190 + Northern_San_Joaquin_Valley + CA + US + 37.76 + -120.93 + 0 + 0 + STO + + + CAZ518 + 55180 + Mtns_Of_Sn_Benito_Cnty_And_Int_M + CA + US + 36.39 + -120.89 + 0 + 0 + MTR + + + CAZ034 + 50340 + San_Luis_Obispo_Cnty_Ctrl_Coast + CA + US + 35.35 + -120.78 + 0 + 0 + LOX + + + WAZ502 + 475020 + East_Slopes_of_the_Srn_Cascades + WA + US + 46.10 + -120.78 + 0 + 0 + PDT + + + CAZ085 + 50850 + Modoc_County + CA + US + 41.58 + -120.74 + 0 + 0 + MFR + + + CAZ067 + 50670 + Motherlode + CA + US + 38.63 + -120.71 + 0 + 0 + STO + + + CAZ071 + 50710 + Lassen-Ern_Plumas-Ern_Sierra_Cnt + CA + US + 40.31 + -120.66 + 0 + 0 + REV + + + WAZ027 + 470270 + Yakima_Valley + WA + US + 46.43 + -120.45 + 0 + 0 + PDT + + + CAZ035 + 50350 + Santa_Barbara_County_Ctrl_Coast + CA + US + 34.72 + -120.41 + 0 + 0 + LOX + + + CAZ089 + 50890 + West-Central_San_Joaquin_Valley + CA + US + 36.62 + -120.39 + 0 + 0 + HNX + + + WAZ026 + 470260 + Kittitas_Valley + WA + US + 47.00 + -120.39 + 0 + 0 + PDT + + + WAZ042 + 470420 + East_Slopes_Northern_Cascades + WA + US + 48.13 + -120.38 + 0 + 0 + OTX + + + CAZ069 + 50690 + West_Slope_Nrn_Sierra_Nevada + CA + US + 38.76 + -120.37 + 0 + 0 + STO + + + CAZ037 + 50370 + San_Luis_Obispo_Cnty_Int_Vlys + CA + US + 35.41 + -120.31 + 0 + 0 + LOX + + + ORZ031 + 370310 + Central_and_Eastern_Lake_County + OR + US + 42.80 + -120.24 + 0 + 0 + MFR + + + ORZ506 + 375060 + Ochoco-John_Day_Highlands + OR + US + 44.34 + -120.20 + 0 + 0 + PDT + + + WAZ041 + 470410 + Wenatchee_Area + WA + US + 47.61 + -120.18 + 0 + 0 + OTX + + + CAZ051 + 50510 + San_Luis_Obispo_County_Mtns + CA + US + 35.16 + -120.17 + 0 + 0 + LOX + + + CAZ036 + 50360 + Santa_Ynez_Valley + CA + US + 34.72 + -120.14 + 0 + 0 + LOX + + + CAZ070 + 50700 + Surprise_Valley_California + CA + US + 41.58 + -120.11 + 0 + 0 + REV + + + CAZ090 + 50900 + East-Central_San_Joaquin_Valley + CA + US + 37.11 + -120.11 + 0 + 0 + HNX + + + ORZ504 + 375040 + Nrn_Wheeler_and_Srn_Gilliam_Cnti + OR + US + 45.01 + -120.10 + 0 + 0 + PDT + + + CAZ072 + 50720 + Greater_Lake_Tahoe_Area + CA + US + 38.89 + -119.96 + 0 + 0 + REV + + + CAZ039 + 50390 + Santa_Barbara_County_S_Coast + CA + US + 34.45 + -119.95 + 0 + 0 + LOX + + + NVZ002 + 280020 + Greater_Lake_Tahoe_Area + NV + US + 39.19 + -119.90 + 0 + 0 + REV + + + CAZ052 + 50520 + Santa_Barbara_County_Mountains + CA + US + 34.77 + -119.88 + 0 + 0 + LOX + + + CAZ091 + 50910 + Southwestern_San_Joaquin_Valley + CA + US + 35.75 + -119.78 + 0 + 0 + HNX + + + CAZ038 + 50380 + Cuyama_Valley + CA + US + 34.96 + -119.77 + 0 + 0 + LOX + + + NVZ005 + 280050 + Northern_Washoe_County + NV + US + 41.01 + -119.65 + 0 + 0 + REV + + + ORZ044 + 370440 + Lower_Columbia_Basin + OR + US + 45.60 + -119.65 + 0 + 0 + PDT + + + WAZ044 + 470440 + Waterville_Plateau + WA + US + 47.68 + -119.65 + 0 + 0 + OTX + + + CAZ093 + 50930 + Mariposa_Madera_and_Fresno_Cnty_ + CA + US + 37.24 + -119.64 + 0 + 0 + HNX + + + NVZ003 + 280030 + Gter_Reno-Carson_Cty-Minden_Area + NV + US + 39.36 + -119.63 + 0 + 0 + REV + + + ORZ505 + 375050 + John_Day_Basin + OR + US + 44.63 + -119.49 + 0 + 0 + PDT + + + WAZ034 + 470340 + Moses_Lake_Area + WA + US + 47.03 + -119.48 + 0 + 0 + OTX + + + WAZ043 + 470430 + Okanogan_Valley + WA + US + 48.47 + -119.47 + 0 + 0 + OTX + + + WAZ028 + 470280 + Lower_Columbia_Basin + WA + US + 46.21 + -119.43 + 0 + 0 + PDT + + + CAZ044 + 50440 + Ventura_County_Interior_Valleys + CA + US + 34.44 + -119.25 + 0 + 0 + LOX + + + CAZ040 + 50400 + Ventura_County_Coast + CA + US + 34.22 + -119.19 + 0 + 0 + LOX + + + CAZ092 + 50920 + Southeastern_San_Joaquin_Valley + CA + US + 35.82 + -119.14 + 0 + 0 + HNX + + + CAZ096 + 50960 + Sierra_NV_fr_Yosemite_to_Kings_C + CA + US + 37.43 + -119.12 + 0 + 0 + HNX + + + CAZ053 + 50530 + Ventura_County_Mountains + CA + US + 34.65 + -119.10 + 0 + 0 + LOX + + + ORZ501 + 375010 + Foothills_of_the_Blue_Mountains + OR + US + 45.53 + -119.07 + 0 + 0 + PDT + + + ORZ061 + 370610 + Harney_County + OR + US + 43.01 + -119.06 + 0 + 0 + BOI + + + CAZ094 + 50940 + Tulare_County_Foothills + CA + US + 36.23 + -118.96 + 0 + 0 + HNX + + + WAZ035 + 470350 + Upper_Columbia_Basin + WA + US + 47.41 + -118.91 + 0 + 0 + OTX + + + ORZ503 + 375030 + Southern_Blue_Mtns_of_Oregon + OR + US + 45.23 + -118.88 + 0 + 0 + PDT + + + CAZ045 + 50450 + Ventura_County_Coastal_Valleys + CA + US + 34.23 + -118.87 + 0 + 0 + LOX + + + WAZ038 + 470380 + Okanogan_Highlands + WA + US + 48.42 + -118.75 + 0 + 0 + OTX + + + CAZ073 + 50730 + Mono + CA + US + 38.08 + -118.74 + 0 + 0 + REV + + + CAZ095 + 50950 + Kern_County_Mountains + CA + US + 35.30 + -118.71 + 0 + 0 + HNX + + + CAZ046 + 50460 + Santa_Monica_Mtns_Recnl_Area + CA + US + 34.09 + -118.58 + 0 + 0 + LOX + + + CAZ088 + 50880 + Santa_Clarita_Valley + CA + US + 34.46 + -118.55 + 0 + 0 + LOX + + + NVZ001 + 280010 + Mineral_and_Srn_Lyon_Counties + NV + US + 38.56 + -118.55 + 0 + 0 + REV + + + NVZ004 + 280040 + Wrn_NV_Bsn_and_Rng_including_Pyr + NV + US + 40.01 + -118.53 + 0 + 0 + REV + + + CAZ547 + 55470 + Los_Angeles_Cnty_Sn_Fernando_Vly + CA + US + 34.21 + -118.51 + 0 + 0 + LOX + + + CAZ097 + 50970 + Tulare_County_Mountains + CA + US + 36.27 + -118.48 + 0 + 0 + HNX + + + CAZ087 + 50870 + Catalina_Island + CA + US + 33.39 + -118.45 + 0 + 0 + LOX + + + CAZ054 + 50540 + Los_Angeles_Cnty_Mtns_excluding_ + CA + US + 34.48 + -118.26 + 0 + 0 + LOX + + + CAZ519 + 55190 + Ern_Sierra_Slopes_of_Inyo_Cnty + CA + US + 36.63 + -118.26 + 0 + 0 + VEF + + + CAZ041 + 50410 + Los_Angeles_Cnty_Cst_including_D + CA + US + 33.92 + -118.24 + 0 + 0 + LOX + + + CAZ059 + 50590 + Antelope_Valley + CA + US + 34.62 + -118.22 + 0 + 0 + LOX + + + ORZ502 + 375020 + Northern_Blue_Mtns_of_Oregon + OR + US + 45.65 + -118.19 + 0 + 0 + PDT + + + NVZ030 + 280300 + Humboldt_County + NV + US + 41.26 + -118.16 + 0 + 0 + LKN + + + WAZ029 + 470290 + Foothills_of_the_Blue_Mountains + WA + US + 46.31 + -118.16 + 0 + 0 + PDT + + + CAZ520 + 55200 + Owens_Valley + CA + US + 36.63 + -118.08 + 0 + 0 + VEF + + + CAZ521 + 55210 + White_Mountains_of_Inyo_County + CA + US + 36.92 + -118.00 + 0 + 0 + VEF + + + CAZ548 + 55480 + Los_Angeles_Cnty_Sn_Gabriel_Vly + CA + US + 34.05 + -117.96 + 0 + 0 + LOX + + + CAZ099 + 50990 + Southeastern_Kern_County_Desert + CA + US + 35.15 + -117.93 + 0 + 0 + HNX + + + WAZ030 + 470300 + Northwest_Blue_Mountains + WA + US + 46.17 + -117.87 + 0 + 0 + PDT + + + CAZ098 + 50980 + Indian_Wells_Valley + CA + US + 35.62 + -117.82 + 0 + 0 + HNX + + + CAZ042 + 50420 + Orange_County_Coastal_Areas + CA + US + 33.67 + -117.79 + 0 + 0 + SGX + + + WAZ037 + 470370 + Northeast_Mountains + WA + US + 48.36 + -117.71 + 0 + 0 + OTX + + + WAZ036 + 470360 + Spokane_Area + WA + US + 47.60 + -117.70 + 0 + 0 + OTX + + + ORZ049 + 370490 + Grande_Ronde_Valley + OR + US + 45.39 + -117.69 + 0 + 0 + PDT + + + ORZ062 + 370620 + Baker_County + OR + US + 44.66 + -117.65 + 0 + 0 + BOI + + + WAZ033 + 470330 + Washington_Palouse + WA + US + 46.89 + -117.64 + 0 + 0 + OTX + + + ORZ063 + 370630 + Malheur_County + OR + US + 43.21 + -117.62 + 0 + 0 + BOI + + + CAZ057 + 50570 + Santa_Ana_Mtns_and_Foothills + CA + US + 33.63 + -117.45 + 0 + 0 + SGX + + + WAZ031 + 470310 + Northeast_Blue_Mountains + WA + US + 46.21 + -117.37 + 0 + 0 + OTX + + + CAZ043 + 50430 + San_Diego_County_Coastal_Areas + CA + US + 33.00 + -117.28 + 0 + 0 + SGX + + + CAZ048 + 50480 + Sn_Bernardino_and_Rivside_Cnty_V + CA + US + 33.85 + -117.28 + 0 + 0 + SGX + + + ORZ050 + 370500 + Wallowa_County + OR + US + 45.54 + -117.17 + 0 + 0 + PDT + + + WAZ032 + 470320 + Lwr_Garfield_and_Asotin_Cnties + WA + US + 46.35 + -117.16 + 0 + 0 + OTX + + + NVZ014 + 280140 + Esmeralda_and_Ctrl_Nye_County + NV + US + 37.65 + -117.15 + 0 + 0 + VEF + + + CAZ055 + 50550 + San_Bernardino_County_Mountains + CA + US + 34.23 + -117.13 + 0 + 0 + SGX + + + ORZ064 + 370640 + Oregon_Lower_Treasure_Valley + OR + US + 44.02 + -117.11 + 0 + 0 + BOI + + + CAZ050 + 50500 + San_Diego_County_Valleys + CA + US + 33.03 + -117.06 + 0 + 0 + SGX + + + CAZ060 + 50600 + Apple_and_Lucerne_Valleys + CA + US + 34.43 + -117.03 + 0 + 0 + SGX + + + CAZ523 + 55230 + Western_Mojave_Desert + CA + US + 35.27 + -116.98 + 0 + 0 + VEF + + + IDZ003 + 120030 + Idaho_Palouse + ID + US + 46.96 + -116.96 + 0 + 0 + OTX + + + CAZ522 + 55220 + Death_Valley_National_Park + CA + US + 36.63 + -116.85 + 0 + 0 + VEF + + + IDZ002 + 120020 + Coeur_d'Alene_Area + ID + US + 47.62 + -116.83 + 0 + 0 + OTX + + + NVZ037 + 280370 + Srn_Lander_Cnty_and_Srn_Eureka_C + NV + US + 39.62 + -116.78 + 0 + 0 + LKN + + + NVZ036 + 280360 + Nrn_Lander_Cnty_and_Nrn_Eureka_C + NV + US + 40.51 + -116.76 + 0 + 0 + LKN + + + IDZ012 + 120120 + Lower_Treasure_Valley + ID + US + 43.82 + -116.75 + 0 + 0 + BOI + + + IDZ026 + 120260 + Lewiston_Area + ID + US + 46.47 + -116.71 + 0 + 0 + OTX + + + IDZ029 + 120290 + Owyhee_Mountains + ID + US + 43.07 + -116.70 + 0 + 0 + BOI + + + CAZ056 + 50560 + Riverside_County_Mountains + CA + US + 33.73 + -116.60 + 0 + 0 + SGX + + + NVZ013 + 280130 + Northern_Nye_County + NV + US + 38.60 + -116.59 + 0 + 0 + LKN + + + CAZ058 + 50580 + San_Diego_County_Mountains + CA + US + 33.00 + -116.57 + 0 + 0 + SGX + + + IDZ001 + 120010 + Northern_Panhandle + ID + US + 48.36 + -116.55 + 0 + 0 + OTX + + + IDZ027 + 120270 + Lewis_and_Srn_Nez_Perce_Cnties + ID + US + 46.16 + -116.51 + 0 + 0 + OTX + + + IDZ008 + 120080 + Lwr_Hells_Canyon/Salmon_Riv_Rgn + ID + US + 45.65 + -116.49 + 0 + 0 + MSO + + + CAZ061 + 50610 + Coachella_Valley + CA + US + 33.73 + -116.36 + 0 + 0 + SGX + + + CAZ062 + 50620 + San_Diego_County_Deserts + CA + US + 33.02 + -116.31 + 0 + 0 + SGX + + + CAZ525 + 55250 + Morongo_Basin + CA + US + 34.39 + -116.15 + 0 + 0 + VEF + + + NVZ017 + 280170 + Wrn_Clark_and_Srn_Nye_County + NV + US + 36.28 + -116.11 + 0 + 0 + VEF + + + IDZ015 + 120150 + Southwest_Highlands + ID + US + 42.51 + -116.02 + 0 + 0 + BOI + + + IDZ011 + 120110 + West_Central_Mountains + ID + US + 44.70 + -115.94 + 0 + 0 + BOI + + + IDZ004 + 120040 + Central_Panhandle_Mountains + ID + US + 47.34 + -115.93 + 0 + 0 + OTX + + + CAZ030 + 50300 + Joshua_Tree_National_Park + CA + US + 33.93 + -115.89 + 0 + 0 + PSR + + + IDZ007 + 120070 + Orofino/Grangeville_Region + ID + US + 46.24 + -115.85 + 0 + 0 + MSO + + + IDZ014 + 120140 + Upper_Treasure_Valley + ID + US + 43.16 + -115.77 + 0 + 0 + BOI + + + CAZ524 + 55240 + Ern_Mojave_Dsrt,_Incl_the_Mojave + CA + US + 35.17 + -115.61 + 0 + 0 + VEF + + + NVZ019 + 280190 + Spring_Mtns-Red_Rock_Canyon + NV + US + 36.13 + -115.57 + 0 + 0 + VEF + + + NVZ031 + 280310 + Northern_Elko_County + NV + US + 41.49 + -115.52 + 0 + 0 + LKN + + + IDZ005 + 120050 + Northern_Clearwater_Mountains + ID + US + 46.65 + -115.47 + 0 + 0 + MSO + + + CAZ033 + 50330 + Imperial_County + CA + US + 33.02 + -115.41 + 0 + 0 + PSR + + + IDZ013 + 120130 + Boise_Mountains + ID + US + 43.79 + -115.39 + 0 + 0 + BOI + + + CAZ032 + 50320 + Riverside_County/Ern_Deserts + CA + US + 33.75 + -115.33 + 0 + 0 + PSR + + + IDZ006 + 120060 + Southern_Clearwater_Mountains + ID + US + 45.88 + -115.33 + 0 + 0 + MSO + + + NVZ034 + 280340 + Ruby_Mtns/East_Humboldt_Range + NV + US + 40.56 + -115.33 + 0 + 0 + LKN + + + MTZ001 + 260010 + Kootenai/Cabinet_Region + MT + US + 48.18 + -115.15 + 0 + 0 + MSO + + + NVZ018 + 280180 + Sheep_Range + NV + US + 36.84 + -115.15 + 0 + 0 + VEF + + + NVZ020 + 280200 + Las_Vegas_Valley + NV + US + 36.11 + -115.12 + 0 + 0 + VEF + + + NVZ022 + 280220 + Southern_Clark_County + NV + US + 35.50 + -115.09 + 0 + 0 + VEF + + + CAZ526 + 55260 + Cadiz_Basin + CA + US + 34.45 + -115.08 + 0 + 0 + VEF + + + MTZ004 + 260040 + Lower_Clark_Fork_Region + MT + US + 47.38 + -115.02 + 0 + 0 + MSO + + + NVZ035 + 280350 + White_Pine_County + NV + US + 39.40 + -114.97 + 0 + 0 + LKN + + + NVZ015 + 280150 + Lincoln_County + NV + US + 37.76 + -114.96 + 0 + 0 + VEF + + + IDZ028 + 120280 + Camas_Prairie + ID + US + 43.34 + -114.86 + 0 + 0 + BOI + + + NVZ032 + 280320 + SW_and_South_Ctrl_Elko_County + NV + US + 40.64 + -114.83 + 0 + 0 + LKN + + + CAZ031 + 50310 + Lower_Colorado_River_Valley_CA + CA + US + 33.39 + -114.79 + 0 + 0 + PSR + + + NVZ021 + 280210 + L_Mead_National_Recreation_Area + NV + US + 35.79 + -114.78 + 0 + 0 + VEF + + + IDZ030 + 120300 + Southern_Twin__Falls_County + ID + US + 42.26 + -114.65 + 0 + 0 + BOI + + + AZZ036 + 30360 + L_Mead_National_Recreation_Area + AZ + US + 35.67 + -114.61 + 0 + 0 + VEF + + + AZZ025 + 30250 + Yuma/Martinez_Lake_and_Vicinity + AZ + US + 32.69 + -114.58 + 0 + 0 + PSR + + + NVZ016 + 280160 + Northeast_Clark_County + NV + US + 36.55 + -114.53 + 0 + 0 + VEF + + + IDZ016 + 120160 + Western_Magic_Valley + ID + US + 42.80 + -114.50 + 0 + 0 + BOI + + + IDZ018 + 120180 + Sawtooth_Mountains + ID + US + 44.18 + -114.49 + 0 + 0 + PIH + + + CAZ527 + 55270 + Sn_Bernardino_Cnty-Upr_CO_Riv_Vl + CA + US + 34.58 + -114.44 + 0 + 0 + VEF + + + AZZ020 + 30200 + Lower_Colorado_River_Valley_AZ + AZ + US + 33.65 + -114.43 + 0 + 0 + PSR + + + IDZ009 + 120090 + Western_Lemhi_County + ID + US + 45.10 + -114.39 + 0 + 0 + MSO + + + AZZ002 + 30020 + Lake_Havasu_and_Fort_Mohave + AZ + US + 34.63 + -114.37 + 0 + 0 + VEF + + + MTZ003 + 260030 + Flathead/Mission_Valleys + MT + US + 47.82 + -114.31 + 0 + 0 + MSO + + + IDZ031 + 120310 + Big_and_Little_Wood_River_Rgn + ID + US + 43.59 + -114.29 + 0 + 0 + PIH + + + NVZ033 + 280330 + Extreme_Eastern_Elko_County + NV + US + 40.64 + -114.23 + 0 + 0 + LKN + + + MTZ005 + 260050 + Missoula/Bitterroot_Valleys + MT + US + 46.44 + -114.10 + 0 + 0 + MSO + + + MTZ006 + 260060 + Bitterroot/Sapphire_Mountains + MT + US + 46.16 + -113.95 + 0 + 0 + MSO + + + MTZ002 + 260020 + West_Glacier_Region + MT + US + 48.30 + -113.94 + 0 + 0 + MSO + + + AZZ003 + 30030 + Northwest_Deserts + AZ + US + 35.14 + -113.92 + 0 + 0 + VEF + + + AZZ021 + 30210 + West_Central_Deserts + AZ + US + 33.86 + -113.90 + 0 + 0 + PSR + + + AZZ026 + 30260 + Southwest_Deserts + AZ + US + 32.75 + -113.90 + 0 + 0 + PSR + + + IDZ017 + 120170 + Eastern_Magic_Valley + ID + US + 42.94 + -113.79 + 0 + 0 + PIH + + + MTZ043 + 260430 + Potomac/Seeley_Lake_Region + MT + US + 47.12 + -113.60 + 0 + 0 + MSO + + + IDZ032 + 120320 + Lost_River/Pashimeroi + ID + US + 44.17 + -113.54 + 0 + 0 + PIH + + + IDZ010 + 120100 + Eastern_Lemhi_County + ID + US + 44.96 + -113.48 + 0 + 0 + MSO + + + UTZ019 + 440190 + Utah's_Dixie_and_Zion_Natl_Pk + UT + US + 37.20 + -113.47 + 0 + 0 + SLC + + + UTZ016 + 440160 + Southwest_Utah + UT + US + 37.98 + -113.33 + 0 + 0 + SLC + + + AZZ001 + 30010 + Northwest_Plateau + AZ + US + 36.49 + -113.28 + 0 + 0 + VEF + + + IDZ022 + 120220 + South_Central_Highlands + ID + US + 42.39 + -113.17 + 0 + 0 + PIH + + + MTZ009 + 260090 + Northern_Rocky_Mountain_Front + MT + US + 48.56 + -113.12 + 0 + 0 + TFX + + + AZZ037 + 30370 + Yavapai_County_Vlys_and_Basins + AZ + US + 34.56 + -113.07 + 0 + 0 + FGZ + + + UTZ005 + 440050 + Great_Salt_Lake_Desert_and_Mtns + UT + US + 40.95 + -113.00 + 0 + 0 + SLC + + + UTZ015 + 440150 + West_Central_Utah + UT + US + 39.29 + -112.99 + 0 + 0 + SLC + + + AZZ008 + 30080 + Yavapai_County__Mountains + AZ + US + 34.82 + -112.97 + 0 + 0 + FGZ + + + AZZ031 + 30310 + Western_Pima_County + AZ + US + 32.14 + -112.87 + 0 + 0 + TWC + + + MTZ007 + 260070 + Butte/Blackfoot_Region + MT + US + 46.40 + -112.84 + 0 + 0 + MSO + + + AZZ027 + 30270 + Southwest_Maricopa_County + AZ + US + 32.94 + -112.77 + 0 + 0 + PSR + + + AZZ022 + 30220 + Northwest_Maricopa_County + AZ + US + 33.67 + -112.70 + 0 + 0 + PSR + + + MTZ008 + 260080 + Beaverhead + MT + US + 45.15 + -112.69 + 0 + 0 + TFX + + + MTZ010 + 260100 + Eastern_Glacier + MT + US + 48.65 + -112.67 + 0 + 0 + TFX + + + IDZ020 + 120200 + Upper_Snake_River_Plain + ID + US + 43.66 + -112.62 + 0 + 0 + PIH + + + MTZ048 + 260480 + Southern_Rocky_Mountain_Front + MT + US + 47.73 + -112.60 + 0 + 0 + TFX + + + IDZ021 + 120210 + Lower_Snake_River_Plain + ID + US + 42.94 + -112.55 + 0 + 0 + PIH + + + AZZ007 + 30070 + Coconino_Plateau + AZ + US + 35.71 + -112.43 + 0 + 0 + FGZ + + + UTZ003 + 440030 + Salt_Lake_and_Tooele_Valleys + UT + US + 40.45 + -112.42 + 0 + 0 + SLC + + + UTZ518 + 445180 + Southern_Utah_Mountains + UT + US + 37.79 + -112.33 + 0 + 0 + SLC + + + AZZ006 + 30060 + Grand_Canyon_Country + AZ + US + 36.22 + -112.32 + 0 + 0 + FGZ + + + MTZ014 + 260140 + Central_and_Srn_Lewis_and_Clark + MT + US + 46.87 + -112.28 + 0 + 0 + TFX + + + UTZ002 + 440020 + Northern_Wasatch_Front + UT + US + 41.39 + -112.16 + 0 + 0 + SLC + + + AZZ004 + 30040 + Kaibab_Plateau + AZ + US + 36.56 + -112.14 + 0 + 0 + FGZ + + + MTZ052 + 260520 + Jefferson + MT + US + 46.15 + -112.13 + 0 + 0 + TFX + + + AZZ023 + 30230 + Greater_Phoenix_Area + AZ + US + 33.57 + -112.09 + 0 + 0 + PSR + + + UTZ020 + 440200 + South_Central_Utah + UT + US + 37.50 + -112.04 + 0 + 0 + SLC + + + MTZ015 + 260150 + Madison + MT + US + 45.28 + -112.02 + 0 + 0 + TFX + + + IDZ019 + 120190 + Upper_Snake_Highlands + ID + US + 44.13 + -112.01 + 0 + 0 + PIH + + + MTZ046 + 260460 + Eastern_Pondera + MT + US + 48.23 + -112.00 + 0 + 0 + TFX + + + IDZ024 + 120240 + Cache_Valley/Idaho_Portion + ID + US + 42.14 + -111.94 + 0 + 0 + PIH + + + UTZ001 + 440010 + Cache_Valley/Utah_Portion + UT + US + 41.73 + -111.93 + 0 + 0 + SLC + + + AZZ038 + 30380 + Oak_Creek_and_Sycamore_Canyons + AZ + US + 34.93 + -111.89 + 0 + 0 + FGZ + + + AZZ005 + 30050 + Marble_and_Glen_Canyons + AZ + US + 36.63 + -111.87 + 0 + 0 + FGZ + + + UTZ004 + 440040 + Southern_Wasatch_Front + UT + US + 40.01 + -111.87 + 0 + 0 + SLC + + + UTZ014 + 440140 + Sanpete/Sevier_Valleys + UT + US + 39.17 + -111.84 + 0 + 0 + SLC + + + AZZ032 + 30320 + Tohono_Oodham_Nation + AZ + US + 31.98 + -111.83 + 0 + 0 + TWC + + + AZZ015 + 30150 + Western_Mogollon_Rim + AZ + US + 35.20 + -111.80 + 0 + 0 + FGZ + + + MTZ049 + 260490 + Eastern_Teton + MT + US + 47.80 + -111.80 + 0 + 0 + TFX + + + IDZ023 + 120230 + Caribou_Highlands + ID + US + 42.94 + -111.78 + 0 + 0 + PIH + + + MTZ044 + 260440 + Toole + MT + US + 48.60 + -111.74 + 0 + 0 + TFX + + + AZZ028 + 30280 + NW_and_North_Ctrl_Pinal_County + AZ + US + 33.08 + -111.67 + 0 + 0 + PSR + + + UTZ007 + 440070 + Wasatch_Mountains_I-80_North + UT + US + 41.36 + -111.61 + 0 + 0 + SLC + + + IDZ025 + 120250 + Wasatch_Mountains/Idaho_Portion + ID + US + 42.30 + -111.47 + 0 + 0 + PIH + + + UTZ008 + 440080 + Wasatch_Mountains_South_of_I-80 + UT + US + 40.17 + -111.45 + 0 + 0 + SLC + + + UTZ517 + 445170 + Central_Utah_Mountains + UT + US + 39.02 + -111.44 + 0 + 0 + SLC + + + MTZ053 + 260530 + Broadwater + MT + US + 46.31 + -111.42 + 0 + 0 + TFX + + + UTZ006 + 440060 + Wasatch_Mountain_Valleys + UT + US + 40.86 + -111.39 + 0 + 0 + SLC + + + MTZ012 + 260120 + Cascade + MT + US + 47.26 + -111.34 + 0 + 0 + TFX + + + AZZ029 + 30290 + Southeast_Pinal_County + AZ + US + 32.88 + -111.33 + 0 + 0 + TWC + + + MTZ055 + 260550 + Gallatin + MT + US + 45.34 + -111.29 + 0 + 0 + TFX + + + AZZ012 + 30120 + Ltl_CO_Riv_Vly_in_Coconino_Cnty + AZ + US + 35.44 + -111.25 + 0 + 0 + FGZ + + + MTZ045 + 260450 + Liberty + MT + US + 48.56 + -111.08 + 0 + 0 + TFX + + + AZZ024 + 30240 + Srn_Gila/Tonto_NF_Foothills + AZ + US + 33.51 + -111.03 + 0 + 0 + PSR + + + MTZ054 + 260540 + Meagher + MT + US + 46.63 + -110.97 + 0 + 0 + TFX + + + WYZ023 + 500230 + Star_Valley + WY + US + 42.89 + -110.96 + 0 + 0 + RIW + + + AZZ009 + 30090 + NE_Plateaus_and_Mesas_Hwy_264_Nw + AZ + US + 36.39 + -110.92 + 0 + 0 + FGZ + + + AZZ033 + 30330 + Tucson_Metro/Marana/Grn_Valley + AZ + US + 32.13 + -110.92 + 0 + 0 + TWC + + + AZZ034 + 30340 + Santa_Cruz_County + AZ + US + 31.54 + -110.91 + 0 + 0 + TWC + + + AZZ018 + 30180 + Northern_Gila_County + AZ + US + 34.06 + -110.85 + 0 + 0 + FGZ + + + UTZ012 + 440120 + Castle_Country + UT + US + 39.29 + -110.85 + 0 + 0 + SLC + + + AZZ016 + 30160 + Eastern_Mogollon_Rim + AZ + US + 34.49 + -110.77 + 0 + 0 + FGZ + + + MTZ064 + 260640 + Paradise_Valley + MT + US + 45.33 + -110.73 + 0 + 0 + BYZ + + + UTZ010 + 440100 + Wasatch_Plateau/Book_Cliffs + UT + US + 39.76 + -110.73 + 0 + 0 + SLC + + + UTZ009 + 440090 + Western_Uinta_Mountains + UT + US + 40.70 + -110.70 + 0 + 0 + SLC + + + UTZ021 + 440210 + Glen_Canyon_Rec_Area/L_Powell + UT + US + 37.54 + -110.70 + 0 + 0 + SLC + + + WYZ024 + 500240 + Salt_River_and_Wyoming_Ranges + WY + US + 42.55 + -110.65 + 0 + 0 + RIW + + + UTZ013 + 440130 + San_Rafael_Swell + UT + US + 38.54 + -110.64 + 0 + 0 + SLC + + + WYZ013 + 500130 + Jackson_Hole + WY + US + 43.63 + -110.62 + 0 + 0 + RIW + + + MTZ040 + 260400 + Northern_Park + MT + US + 45.98 + -110.55 + 0 + 0 + BYZ + + + WYZ012 + 500120 + Teton_and_Gros_Ventre_Mountains + WY + US + 43.64 + -110.55 + 0 + 0 + RIW + + + WYZ021 + 500210 + Southwest_Wyoming + WY + US + 41.29 + -110.55 + 0 + 0 + SLC + + + WYZ027 + 500270 + South_Lincoln_County + WY + US + 41.93 + -110.55 + 0 + 0 + RIW + + + MTZ065 + 260650 + Livingston_Area + MT + US + 45.65 + -110.51 + 0 + 0 + BYZ + + + WYZ001 + 500010 + Yellowstone_National_Park + WY + US + 44.62 + -110.49 + 0 + 0 + RIW + + + MTZ013 + 260130 + Chouteau + MT + US + 47.86 + -110.48 + 0 + 0 + TFX + + + UTZ011 + 440110 + Western_Uinta_Basin + UT + US + 40.22 + -110.46 + 0 + 0 + SLC + + + MTZ068 + 260680 + Crazy_Mountains + MT + US + 46.10 + -110.32 + 0 + 0 + BYZ + + + AZZ040 + 30400 + NE_Plateaus_and_Mesas_S_of_Hwy_2 + AZ + US + 35.52 + -110.30 + 0 + 0 + FGZ + + + AZZ013 + 30130 + Ltl_CO_Riv_Vly_in_Navajo_Cnty + AZ + US + 34.88 + -110.29 + 0 + 0 + FGZ + + + MTZ050 + 260500 + Judith_Basin + MT + US + 47.05 + -110.27 + 0 + 0 + TFX + + + AZZ039 + 30390 + Black_Mesa_Area + AZ + US + 36.37 + -110.25 + 0 + 0 + FGZ + + + MTZ067 + 260670 + Absaroka/Beartooth_Mountains + MT + US + 45.33 + -110.13 + 0 + 0 + BYZ + + + MTZ011 + 260110 + Hill + MT + US + 48.57 + -110.11 + 0 + 0 + TFX + + + UTZ029 + 440290 + Canyonlands/Natural_Bridges + UT + US + 37.87 + -110.03 + 0 + 0 + GJT + + + WYZ025 + 500250 + Upper_Grn_River_Basin_Foothills + WY + US + 42.98 + -110.03 + 0 + 0 + RIW + + + MTZ041 + 260410 + Northern_Sweet_Grass + MT + US + 45.93 + -109.86 + 0 + 0 + BYZ + + + MTZ028 + 260280 + Southern_Wheatland + MT + US + 46.38 + -109.84 + 0 + 0 + BYZ + + + MTZ066 + 260660 + Beartooth_Foothills + MT + US + 45.54 + -109.81 + 0 + 0 + BYZ + + + AZZ010 + 30100 + Chinle_Valley + AZ + US + 36.36 + -109.76 + 0 + 0 + FGZ + + + AZZ030 + 30300 + Upper_Gila_River_Valley + AZ + US + 33.05 + -109.75 + 0 + 0 + TWC + + + AZZ035 + 30350 + Cochise_County + AZ + US + 31.89 + -109.75 + 0 + 0 + TWC + + + WYZ014 + 500140 + Wind_River_Mountains_West + WY + US + 43.00 + -109.70 + 0 + 0 + RIW + + + WYZ026 + 500260 + Upper_Green_River_Basin + WY + US + 42.42 + -109.68 + 0 + 0 + RIW + + + AZZ017 + 30170 + White_Mountains + AZ + US + 33.89 + -109.65 + 0 + 0 + FGZ + + + MTZ063 + 260630 + Judith_Gap + MT + US + 46.65 + -109.65 + 0 + 0 + BYZ + + + UTZ027 + 440270 + Arches/Grand_Flat + UT + US + 38.95 + -109.61 + 0 + 0 + GJT + + + WYZ028 + 500280 + Rock_Springs_and_Green_River + WY + US + 41.51 + -109.60 + 0 + 0 + RIW + + + UTZ025 + 440250 + Tavaputs_Plateau + UT + US + 39.50 + -109.58 + 0 + 0 + GJT + + + UTZ028 + 440280 + La_Sal_and_Abajo_Mountains + UT + US + 38.15 + -109.53 + 0 + 0 + GJT + + + UTZ023 + 440230 + Eastern_Uinta_Mountains + UT + US + 40.68 + -109.52 + 0 + 0 + GJT + + + UTZ024 + 440240 + Eastern_Uinta_Basin + UT + US + 40.21 + -109.51 + 0 + 0 + GJT + + + WYZ002 + 500020 + Absaroka_Mountains + WY + US + 44.24 + -109.49 + 0 + 0 + RIW + + + AZZ014 + 30140 + Ltl_CO_Riv_Vly_in_Apache_Cnty + AZ + US + 34.58 + -109.45 + 0 + 0 + FGZ + + + UTZ022 + 440220 + Southeast_Utah + UT + US + 37.40 + -109.45 + 0 + 0 + GJT + + + WYZ029 + 500290 + Flaming_Gorge + WY + US + 41.25 + -109.42 + 0 + 0 + RIW + + + WYZ016 + 500160 + Upper_Wind_River_Basin + WY + US + 43.44 + -109.41 + 0 + 0 + RIW + + + MTZ056 + 260560 + Red_Lodge_Foothills + MT + US + 45.23 + -109.32 + 0 + 0 + BYZ + + + AZZ011 + 30110 + Chuska_Mtns_and_Defiance_Plateay + AZ + US + 35.98 + -109.31 + 0 + 0 + FGZ + + + WYZ015 + 500150 + Wind_River_Mountains_East + WY + US + 43.09 + -109.31 + 0 + 0 + RIW + + + AZZ019 + 30190 + Northern_Greenlee + AZ + US + 33.42 + -109.27 + 0 + 0 + TWC + + + MTZ051 + 260510 + Fergus + MT + US + 47.25 + -109.26 + 0 + 0 + TFX + + + MTZ042 + 260420 + Golden_Valley + MT + US + 46.36 + -109.22 + 0 + 0 + BYZ + + + MTZ034 + 260340 + Northern_Stillwater + MT + US + 45.78 + -109.21 + 0 + 0 + BYZ + + + WYZ003 + 500030 + Cody_Foothills + WY + US + 44.46 + -109.04 + 0 + 0 + RIW + + + MTZ047 + 260470 + Blaine + MT + US + 48.37 + -108.90 + 0 + 0 + TFX + + + MTZ039 + 260390 + Eastern_Carbon + MT + US + 45.32 + -108.71 + 0 + 0 + BYZ + + + COZ006 + 60060 + Grand_Valley + CO + US + 39.16 + -108.65 + 0 + 0 + GJT + + + COZ021 + 60210 + Four_Corners/Upper_Dolores_Riv + CO + US + 37.49 + -108.64 + 0 + 0 + GJT + + + NMZ030 + 310300 + Southwest_Desert/Bootheel + NM + US + 31.93 + -108.63 + 0 + 0 + EPZ + + + COZ020 + 60200 + Paradox_Vly/Little_Dolores_Riv + CO + US + 38.28 + -108.61 + 0 + 0 + GJT + + + WYZ007 + 500070 + Owl_Creek_and_Bridger_Mountains + WY + US + 43.62 + -108.61 + 0 + 0 + RIW + + + WYZ018 + 500180 + Lander_Foothills + WY + US + 42.81 + -108.61 + 0 + 0 + RIW + + + MTZ060 + 260600 + Southwest_Phillips + MT + US + 47.83 + -108.55 + 0 + 0 + GGW + + + COZ001 + 60010 + Lower_Yampa_River_Basin + CO + US + 40.30 + -108.49 + 0 + 0 + GJT + + + COZ003 + 60030 + Roan_and_Tavaputs_Plateaus + CO + US + 39.63 + -108.44 + 0 + 0 + GJT + + + MTZ029 + 260290 + Musselshell + MT + US + 46.44 + -108.40 + 0 + 0 + BYZ + + + WYZ030 + 500300 + East_Sweetwater_County + WY + US + 41.61 + -108.37 + 0 + 0 + RIW + + + COZ017 + 60170 + Uncompahgre_Plateau/Dallas_Divid + CO + US + 38.58 + -108.35 + 0 + 0 + GJT + + + WYZ017 + 500170 + Wind_River_Basin + WY + US + 43.13 + -108.34 + 0 + 0 + RIW + + + MTZ021 + 260210 + Petroleum + MT + US + 47.18 + -108.28 + 0 + 0 + GGW + + + WYZ005 + 500050 + Southwest_Big_Horn_Basin + WY + US + 43.81 + -108.25 + 0 + 0 + RIW + + + NMZ001 + 310010 + Northwest_Plateau + NM + US + 36.35 + -108.23 + 0 + 0 + ABQ + + + MTZ035 + 260350 + Yellowstone + MT + US + 45.98 + -108.20 + 0 + 0 + BYZ + + + WYZ004 + 500040 + North_Big_Horn_Basin + WY + US + 44.57 + -108.19 + 0 + 0 + RIW + + + NMZ022 + 310220 + SW_Mtns/Lower_Gila_Region + NM + US + 33.00 + -108.17 + 0 + 0 + EPZ + + + NMZ014 + 310140 + SW_Mtns/Upper_Gila_Region + NM + US + 33.77 + -108.13 + 0 + 0 + ABQ + + + NMZ008 + 310080 + West_Central_Mountains + NM + US + 35.06 + -108.09 + 0 + 0 + ABQ + + + COZ007 + 60070 + Debeque_to_Silt_Corridor + CO + US + 39.43 + -108.05 + 0 + 0 + GJT + + + WYZ019 + 500190 + Grn_Mtns_and_Rattlesnake_Range + WY + US + 42.40 + -107.96 + 0 + 0 + RIW + + + COZ011 + 60110 + Ctrl_Gunnison_and_Uncompahgre_Ri + CO + US + 38.64 + -107.94 + 0 + 0 + GJT + + + COZ022 + 60220 + Animas_River_Basin + CO + US + 37.25 + -107.92 + 0 + 0 + GJT + + + WYZ006 + 500060 + Southeast_Big_Horn_Basin + WY + US + 43.87 + -107.90 + 0 + 0 + RIW + + + COZ002 + 60020 + Central_Yampa_River_Basin + CO + US + 40.34 + -107.85 + 0 + 0 + GJT + + + COZ009 + 60090 + Grand_and_Battlement_Mesas + CO + US + 39.17 + -107.85 + 0 + 0 + GJT + + + MTZ016 + 260160 + Central_and_Southeast_Phillips + MT + US + 48.02 + -107.82 + 0 + 0 + GGW + + + MTZ059 + 260590 + Northern_Phillips + MT + US + 48.79 + -107.75 + 0 + 0 + GGW + + + NMZ031 + 310310 + Southwest_Desert/Mimbres_Basin + NM + US + 32.20 + -107.75 + 0 + 0 + EPZ + + + COZ018 + 60180 + Northwestern_San_Juan_Mountains + CO + US + 38.08 + -107.64 + 0 + 0 + GJT + + + COZ019 + 60190 + Southwest_San_Juan_Mountains + CO + US + 37.48 + -107.64 + 0 + 0 + GJT + + + COZ013 + 60130 + Flattops + CO + US + 39.98 + -107.53 + 0 + 0 + GJT + + + MTZ038 + 260380 + Southern_Big_Horn + MT + US + 45.26 + -107.48 + 0 + 0 + BYZ + + + WYZ098 + 500980 + Northeast_Big_Horn_Mountains + WY + US + 44.78 + -107.43 + 0 + 0 + BYZ + + + MTZ057 + 260570 + Northern_Big_Horn + MT + US + 45.78 + -107.40 + 0 + 0 + BYZ + + + MTZ030 + 260300 + Treasure + MT + US + 46.18 + -107.34 + 0 + 0 + BYZ + + + COZ023 + 60230 + San_Juan_River_Basin + CO + US + 37.20 + -107.30 + 0 + 0 + GJT + + + WYZ008 + 500080 + Bighorn_Mountains_West + WY + US + 44.21 + -107.28 + 0 + 0 + RIW + + + WYZ061 + 500610 + Southwest_Carbon + WY + US + 41.53 + -107.28 + 0 + 0 + CYS + + + COZ014 + 60140 + Upper_Gunnison_River_Valley + CO + US + 38.51 + -107.17 + 0 + 0 + GJT + + + NMZ002 + 310020 + Northwest_Mtns_including_Jemez + NM + US + 36.16 + -107.10 + 0 + 0 + ABQ + + + WYZ009 + 500090 + Bighorn_Mountains_Southeast + WY + US + 43.88 + -107.07 + 0 + 0 + RIW + + + MTZ022 + 260220 + Garfield + MT + US + 47.41 + -107.03 + 0 + 0 + GGW + + + COZ008 + 60080 + Central_Colorado_River_Basin + CO + US + 39.60 + -106.99 + 0 + 0 + GJT + + + MTZ031 + 260310 + Northern_Rosebud + MT + US + 46.27 + -106.99 + 0 + 0 + BYZ + + + NMZ023 + 310230 + Sierra_County_Lakes_Region + NM + US + 33.04 + -106.97 + 0 + 0 + EPZ + + + COZ005 + 60050 + Upper_Yampa_River_Basin + CO + US + 40.41 + -106.96 + 0 + 0 + GJT + + + COZ012 + 60120 + West_Elk_and_Sawatch_Mountains + CO + US + 38.84 + -106.93 + 0 + 0 + GJT + + + COZ010 + 60100 + Gore_and_Elk_Mtns/Ctrl_Mtn_Vlys + CO + US + 39.45 + -106.92 + 0 + 0 + GJT + + + NMZ032 + 310320 + Southern_Desert + NM + US + 32.37 + -106.87 + 0 + 0 + EPZ + + + NMZ015 + 310150 + Lower_Rio_Grande_Valley + NM + US + 34.03 + -106.86 + 0 + 0 + ABQ + + + NMZ009 + 310090 + Middle_Rio_Gnde_Vly/Albuquerque_ + NM + US + 34.90 + -106.85 + 0 + 0 + ABQ + + + WYZ062 + 500620 + North_Carbon + WY + US + 42.03 + -106.80 + 0 + 0 + CYS + + + WYZ020 + 500200 + Natrona_County_Lower_Elevations + WY + US + 42.97 + -106.79 + 0 + 0 + RIW + + + WYZ099 + 500990 + Sheridan_Foothills + WY + US + 44.78 + -106.77 + 0 + 0 + BYZ + + + COZ004 + 60040 + Elkhead_and_Park_Mountains + CO + US + 40.46 + -106.73 + 0 + 0 + GJT + + + COZ066 + 60660 + La_Garita_Mtns_Above_10000_Ft + CO + US + 38.05 + -106.72 + 0 + 0 + PUB + + + COZ064 + 60640 + Saguache_Cnty_W_of_Continental_D + CO + US + 38.24 + -106.64 + 0 + 0 + PUB + + + COZ031 + 60310 + W_Jackson_and_W_Gnd_Cnties_Above + CO + US + 40.48 + -106.62 + 0 + 0 + BOU + + + MTZ017 + 260170 + Central_and_Southern_Valley + MT + US + 48.12 + -106.62 + 0 + 0 + GGW + + + MTZ061 + 260610 + Northern_Valley + MT + US + 48.79 + -106.62 + 0 + 0 + GGW + + + COZ068 + 60680 + Ern_Sn_Juan_Mtns_Above_10000_Ft + CO + US + 37.40 + -106.61 + 0 + 0 + PUB + + + MTZ058 + 260580 + Southern_Rosebud + MT + US + 45.43 + -106.50 + 0 + 0 + BYZ + + + WYZ011 + 500110 + Southeast_Johnson_County + WY + US + 43.83 + -106.48 + 0 + 0 + RIW + + + WYZ010 + 500100 + Northeast_Johnson_County + WY + US + 44.36 + -106.46 + 0 + 0 + RIW + + + NMZ010 + 310100 + Sandia/Manzano_Mountains + NM + US + 34.76 + -106.40 + 0 + 0 + ABQ + + + COZ060 + 60600 + Ern_Sawatch_Mtns_Above_11000_Ft + CO + US + 38.81 + -106.39 + 0 + 0 + PUB + + + COZ059 + 60590 + Leadvl_Vic/L_Cnty_Below_11000_Ft + CO + US + 39.20 + -106.38 + 0 + 0 + PUB + + + WYZ063 + 500630 + Snowy_Range + WY + US + 41.39 + -106.37 + 0 + 0 + CYS + + + COZ065 + 60650 + Saguache_Cnty_E_of_Continental_D + CO + US + 38.07 + -106.36 + 0 + 0 + PUB + + + TXZ055 + 430550 + El_Paso + TX + US + 31.70 + -106.30 + 0 + 0 + EPZ + + + COZ030 + 60300 + Jackson_County_Below_9000_Feet + CO + US + 40.69 + -106.28 + 0 + 0 + BOU + + + WYZ022 + 500220 + Casper_Mountain + WY + US + 42.61 + -106.24 + 0 + 0 + RIW + + + COZ067 + 60670 + Upr_Rio_Gnde_Vly/Ern_Sn_Juan_Mtn + CO + US + 37.45 + -106.23 + 0 + 0 + PUB + + + COZ058 + 60580 + Wrn_Mosquito_Rng/E_L_Cnty_Above_ + CO + US + 39.21 + -106.21 + 0 + 0 + PUB + + + COZ061 + 60610 + Wrn_Chaffee_Cnty_Between_9000_an + CO + US + 38.74 + -106.20 + 0 + 0 + PUB + + + NMZ024 + 310240 + Tularosa_Basin/Southern_Desert + NM + US + 32.70 + -106.18 + 0 + 0 + EPZ + + + COZ032 + 60320 + Gnd_and_Summit_Cnties_Below_9000 + CO + US + 40.00 + -106.17 + 0 + 0 + BOU + + + COZ062 + 60620 + Ctrl_Chaffee_Cnty_Below_9000_Ft + CO + US + 38.74 + -106.12 + 0 + 0 + PUB + + + NMZ003 + 310030 + Upper_Rio_Grande_Valley + NM + US + 35.80 + -106.07 + 0 + 0 + ABQ + + + COZ069 + 60690 + Del_Norte_Vic/Nrn_Sn_Luis_Vly_Be + CO + US + 37.97 + -106.04 + 0 + 0 + PUB + + + COZ063 + 60630 + Wrn_Mosquito_Rng/E_Chaffee_Cnty_ + CO + US + 38.79 + -105.96 + 0 + 0 + PUB + + + COZ033 + 60330 + S_and_E_Jackson/Larimer/N_and_NE + CO + US + 40.55 + -105.94 + 0 + 0 + BOU + + + COZ034 + 60340 + S_and_SE_Gnd/W_Ctrl_and_SW_Bould + CO + US + 39.55 + -105.91 + 0 + 0 + BOU + + + COZ070 + 60700 + Alamosa_Vic/Ctrl_Sn_Luis_Vly_Bel + CO + US + 37.54 + -105.91 + 0 + 0 + PUB + + + NMZ011 + 310110 + Ctrl_Hi_Plains/Estancia_Valley + NM + US + 34.77 + -105.83 + 0 + 0 + ABQ + + + MTZ023 + 260230 + McCone + MT + US + 47.59 + -105.82 + 0 + 0 + GGW + + + WYZ065 + 500650 + Laramie_Valley + WY + US + 41.59 + -105.81 + 0 + 0 + CYS + + + COZ071 + 60710 + Southern_San_Luis_Valley + CO + US + 37.27 + -105.78 + 0 + 0 + PUB + + + WYZ064 + 500640 + North_Laramie_Range + WY + US + 42.32 + -105.68 + 0 + 0 + CYS + + + COZ037 + 60370 + Central_and_SE_Park_County + CO + US + 39.05 + -105.66 + 0 + 0 + BOU + + + COZ077 + 60770 + Wrn/Ctrl_Fremt_Cnty_Below_8500_F + CO + US + 38.46 + -105.63 + 0 + 0 + PUB + + + MTZ036 + 260360 + Powder_River + MT + US + 45.40 + -105.63 + 0 + 0 + BYZ + + + NMZ025 + 310250 + Southern_Sacramento_Mountains + NM + US + 32.91 + -105.63 + 0 + 0 + EPZ + + + COZ076 + 60760 + NWrn_Fremt_County_above_8500_Ft + CO + US + 38.55 + -105.61 + 0 + 0 + PUB + + + COZ073 + 60730 + Nrn_Sngre_De_Cristo_Mtns_Above_1 + CO + US + 38.00 + -105.59 + 0 + 0 + PUB + + + NMZ017 + 310170 + Capitan/Nrn_Sacramento_Mtns + NM + US + 33.71 + -105.58 + 0 + 0 + ABQ + + + MTZ018 + 260180 + Daniels + MT + US + 48.79 + -105.57 + 0 + 0 + GGW + + + NMZ004 + 310040 + Sangre_de_Cristo_Mountains + NM + US + 36.25 + -105.57 + 0 + 0 + ABQ + + + WYZ054 + 500540 + Northern_Campbell + WY + US + 44.60 + -105.55 + 0 + 0 + UNR + + + WYZ055 + 500550 + Southern_Campbell + WY + US + 43.84 + -105.55 + 0 + 0 + UNR + + + COZ072 + 60720 + Nrn_Sngre_De_Cristo_Mtns_Between + CO + US + 37.98 + -105.49 + 0 + 0 + PUB + + + WYZ059 + 500590 + Converse + WY + US + 43.02 + -105.49 + 0 + 0 + CYS + + + MTZ032 + 260320 + Custer + MT + US + 46.33 + -105.47 + 0 + 0 + BYZ + + + COZ078 + 60780 + Wet_Mtn_Valley_Below_8500_Feet + CO + US + 38.08 + -105.45 + 0 + 0 + PUB + + + TXZ056 + 430560 + Hudspeth + TX + US + 31.32 + -105.45 + 0 + 0 + EPZ + + + MTZ020 + 260200 + Western_Roosevelt + MT + US + 48.29 + -105.41 + 0 + 0 + GGW + + + COZ035 + 60350 + Larimer_and_Boulder_Cnties_Betwe + CO + US + 40.46 + -105.39 + 0 + 0 + BOU + + + MTZ026 + 260260 + Prairie + MT + US + 46.86 + -105.34 + 0 + 0 + GGW + + + COZ036 + 60360 + Jefferson_and_W_Douglas_Cnties_A + CO + US + 39.53 + -105.32 + 0 + 0 + BOU + + + WYZ066 + 500660 + Laramie_Range + WY + US + 41.45 + -105.31 + 0 + 0 + CYS + + + COZ081 + 60810 + Teller_Cnty/Rampart_Rng_above_75 + CO + US + 38.82 + -105.22 + 0 + 0 + PUB + + + COZ039 + 60390 + Boulder_And_Jefferson_Cnties_Bel + CO + US + 39.87 + -105.19 + 0 + 0 + BOU + + + COZ075 + 60750 + Srn_Sngre_De_Cristo_Mtns_Above_1 + CO + US + 37.20 + -105.17 + 0 + 0 + PUB + + + COZ079 + 60790 + Wet_Mtns_Between_6300_and_10000_ + CO + US + 38.08 + -105.14 + 0 + 0 + PUB + + + COZ080 + 60800 + Wet_Mountains_Above_10000_Ft + CO + US + 37.98 + -105.14 + 0 + 0 + PUB + + + COZ083 + 60830 + Canon_City_Vic/Ern_Fremt_County + CO + US + 38.44 + -105.14 + 0 + 0 + PUB + + + NMZ026 + 310260 + Guadalupe_Mtns_of_Chaves_County + NM + US + 32.83 + -105.08 + 0 + 0 + ABQ + + + NMZ016 + 310160 + Lincoln_Cnty_Hi_Plns/Hondo_Vly + NM + US + 33.74 + -105.07 + 0 + 0 + ABQ + + + COZ082 + 60820 + PIkes_Peak_above_11000_Ft + CO + US + 38.82 + -105.04 + 0 + 0 + PUB + + + WYZ067 + 500670 + Platte + WY + US + 42.13 + -104.97 + 0 + 0 + CYS + + + COZ087 + 60870 + Walsenbg_Vic/Upr_Huerfano_Riv_Bs + CO + US + 37.67 + -104.87 + 0 + 0 + PUB + + + MTZ025 + 260250 + Dawson + MT + US + 47.32 + -104.86 + 0 + 0 + GGW + + + COZ074 + 60740 + Srn_Sngre_De_Cristo_Mtns_Between + CO + US + 37.26 + -104.83 + 0 + 0 + PUB + + + COZ040 + 60400 + N_Douglas_Cnty_Below_6000_Feet/D + CO + US + 39.73 + -104.81 + 0 + 0 + BOU + + + COZ038 + 60380 + Larimer_Cnty_Below_6000_Feet/NW_ + CO + US + 40.63 + -104.80 + 0 + 0 + BOU + + + WYZ069 + 500690 + Cheyenne_Foothills + WY + US + 41.33 + -104.75 + 0 + 0 + CYS + + + WYZ056 + 500560 + Western_Crook + WY + US + 44.59 + -104.72 + 0 + 0 + UNR + + + TXZ258 + 432580 + Guadalupe_Mountains + TX + US + 31.90 + -104.71 + 0 + 0 + MAF + + + NMZ027 + 310270 + Guadalupe_Mtns_of_Eddy_County + NM + US + 32.30 + -104.67 + 0 + 0 + MAF + + + MTZ024 + 260240 + Richland + MT + US + 47.75 + -104.64 + 0 + 0 + GGW + + + TXZ079 + 430790 + Presidio_Valley + TX + US + 29.95 + -104.61 + 0 + 0 + MAF + + + COZ043 + 60430 + Central_and_South_Weld_County + CO + US + 40.29 + -104.59 + 0 + 0 + BOU + + + WYZ058 + 500580 + Weston + WY + US + 43.84 + -104.57 + 0 + 0 + UNR + + + MTZ019 + 260190 + Sheridan + MT + US + 48.70 + -104.55 + 0 + 0 + GGW + + + TXZ057 + 430570 + Van_Horn_and_Hiway_54_Corridor + TX + US + 31.24 + -104.55 + 0 + 0 + MAF + + + COZ086 + 60860 + Pueblo_and_Vic/Pueblo_Cnty_Below + CO + US + 38.12 + -104.54 + 0 + 0 + PUB + + + MTZ037 + 260370 + Carter + MT + US + 45.57 + -104.54 + 0 + 0 + BYZ + + + NMZ005 + 310050 + Northeast_Highlands + NM + US + 36.10 + -104.54 + 0 + 0 + ABQ + + + COZ085 + 60850 + CO_Spgs_Vic/Srn_El_Paso_Cnty/Ram + CO + US + 38.74 + -104.51 + 0 + 0 + PUB + + + MTZ062 + 260620 + Eastern_Roosevelt + MT + US + 48.28 + -104.51 + 0 + 0 + GGW + + + COZ088 + 60880 + Trinidad_Vic/Wrn_Las_Animas_Cnty + CO + US + 37.40 + -104.50 + 0 + 0 + PUB + + + COZ084 + 60840 + Nrn_El_Paso_Cnty/Monument_Ridge/ + CO + US + 38.99 + -104.49 + 0 + 0 + PUB + + + WYZ060 + 500600 + Niobrara + WY + US + 43.06 + -104.49 + 0 + 0 + CYS + + + MTZ033 + 260330 + Fallon + MT + US + 46.29 + -104.48 + 0 + 0 + BYZ + + + NMZ012 + 310120 + Conchas_Lake/Guadalupe_County + NM + US + 35.08 + -104.46 + 0 + 0 + ABQ + + + COZ041 + 60410 + Elbert/Ctrl_and_E_Douglas_Cnties + CO + US + 39.28 + -104.43 + 0 + 0 + BOU + + + NMZ018 + 310180 + De_Baca_County + NM + US + 34.39 + -104.41 + 0 + 0 + ABQ + + + TXZ080 + 430800 + Marfa_Plateau + TX + US + 30.16 + -104.39 + 0 + 0 + MAF + + + WYZ057 + 500570 + Wyoming_Black_Hills + WY + US + 44.38 + -104.37 + 0 + 0 + UNR + + + WYZ068 + 500680 + Goshen + WY + US + 42.09 + -104.35 + 0 + 0 + CYS + + + MTZ027 + 260270 + Wibaux + MT + US + 47.02 + -104.33 + 0 + 0 + GGW + + + WYZ070 + 500700 + Pine_Bluffs + WY + US + 41.28 + -104.28 + 0 + 0 + CYS + + + NMZ028 + 310280 + Eddy_County_Plains + NM + US + 32.49 + -104.27 + 0 + 0 + MAF + + + WYZ071 + 500710 + Northeastern_Crook + WY + US + 44.79 + -104.21 + 0 + 0 + UNR + + + NMZ019 + 310190 + Chaves_County_Plains + NM + US + 33.53 + -104.19 + 0 + 0 + ABQ + + + COZ042 + 60420 + Northeast_Weld_County + CO + US + 40.75 + -104.10 + 0 + 0 + BOU + + + COZ045 + 60450 + Ctrl_and_E_Adams_and_Arapahoe_Cn + CO + US + 39.78 + -104.10 + 0 + 0 + BOU + + + NMZ006 + 310060 + Harding_County + NM + US + 35.81 + -103.89 + 0 + 0 + ABQ + + + NDZ031 + 340310 + Golden_Valley + ND + US + 46.94 + -103.83 + 0 + 0 + BIS + + + COZ046 + 60460 + N_and_NE_Elbert_Cnty_Below_6000_ + CO + US + 39.33 + -103.81 + 0 + 0 + BOU + + + COZ044 + 60440 + Morgan_County + CO + US + 40.25 + -103.80 + 0 + 0 + BOU + + + TXZ074 + 430740 + Davis/Apache_Mountains_Area + TX + US + 30.71 + -103.80 + 0 + 0 + MAF + + + TXZ058 + 430580 + Reeves_Cnty_and_Upr_Trans_Pecos + TX + US + 31.39 + -103.78 + 0 + 0 + MAF + + + COZ089 + 60890 + Crowley_County + CO + US + 38.31 + -103.77 + 0 + 0 + PUB + + + NEZ001 + 270010 + Sioux + NE + US + 42.50 + -103.73 + 0 + 0 + CYS + + + COZ093 + 60930 + La_Junta_Vicinity/Otero_County + CO + US + 37.95 + -103.72 + 0 + 0 + PUB + + + SDZ024 + 410240 + Northern_Black_Hills + SD + US + 44.31 + -103.72 + 0 + 0 + UNR + + + NEZ019 + 270190 + Scotts_Bluff + NE + US + 41.85 + -103.71 + 0 + 0 + CYS + + + NEZ020 + 270200 + Banner + NE + US + 41.54 + -103.71 + 0 + 0 + CYS + + + NEZ054 + 270540 + Kimball + NE + US + 41.20 + -103.71 + 0 + 0 + CYS + + + SDZ028 + 410280 + Central_Black_Hills + SD + US + 44.00 + -103.69 + 0 + 0 + UNR + + + SDZ029 + 410290 + Southern_Black_Hills + SD + US + 43.67 + -103.69 + 0 + 0 + UNR + + + NMZ007 + 310070 + Far_Northeast_Plains + NM + US + 36.37 + -103.67 + 0 + 0 + ABQ + + + TXZ059 + 430590 + Loving + TX + US + 31.83 + -103.66 + 0 + 0 + MAF + + + SDZ025 + 410250 + Northern_Foot_Hills + SD + US + 44.44 + -103.64 + 0 + 0 + UNR + + + SDZ027 + 410270 + Southern_Foot_Hills + SD + US + 43.36 + -103.64 + 0 + 0 + UNR + + + COZ047 + 60470 + SE_Elbert_Cnty_Below_6000_Feet/S + CO + US + 38.80 + -103.60 + 0 + 0 + BOU + + + NMZ013 + 310130 + Quay_County + NM + US + 35.17 + -103.57 + 0 + 0 + ABQ + + + COZ094 + 60940 + Eastern_Las_Animas_County + CO + US + 37.32 + -103.56 + 0 + 0 + PUB + + + SDZ041 + 410410 + Fall_River + SD + US + 43.24 + -103.53 + 0 + 0 + UNR + + + NDZ043 + 340430 + Bowman + ND + US + 46.11 + -103.52 + 0 + 0 + BIS + + + SDZ012 + 410120 + Butte + SD + US + 44.89 + -103.51 + 0 + 0 + UNR + + + SDZ001 + 410010 + Harding + SD + US + 45.58 + -103.50 + 0 + 0 + UNR + + + NDZ040 + 340400 + Slope + ND + US + 46.45 + -103.49 + 0 + 0 + BIS + + + NMZ020 + 310200 + Roosevelt_County + NM + US + 34.08 + -103.49 + 0 + 0 + ABQ + + + NDZ001 + 340010 + Divide + ND + US + 48.82 + -103.47 + 0 + 0 + BIS + + + NDZ009 + 340090 + Williams + ND + US + 48.30 + -103.44 + 0 + 0 + BIS + + + NMZ033 + 310330 + Central_Lea_County + NM + US + 32.75 + -103.43 + 0 + 0 + MAF + + + NMZ029 + 310290 + Northern_Lea_County + NM + US + 33.28 + -103.40 + 0 + 0 + MAF + + + NMZ034 + 310340 + Southern_Lea_County + NM + US + 32.25 + -103.39 + 0 + 0 + MAF + + + NMZ021 + 310210 + Curry_County + NM + US + 34.64 + -103.38 + 0 + 0 + ABQ + + + NDZ032 + 340320 + Billings + ND + US + 46.98 + -103.35 + 0 + 0 + BIS + + + SDZ072 + 410720 + Sturgis/Piedmont_Foot_Hills + SD + US + 44.38 + -103.35 + 0 + 0 + UNR + + + NDZ017 + 340170 + McKenzie + ND + US + 47.74 + -103.31 + 0 + 0 + BIS + + + SDZ074 + 410740 + Hermosa_Foot_Hills + SD + US + 43.67 + -103.27 + 0 + 0 + UNR + + + COZ049 + 60490 + Washington_County + CO + US + 40.00 + -103.24 + 0 + 0 + BOU + + + SDZ026 + 410260 + Rapid_City + SD + US + 44.00 + -103.23 + 0 + 0 + UNR + + + TXZ067 + 430670 + Ward + TX + US + 31.46 + -103.18 + 0 + 0 + MAF + + + NEZ002 + 270020 + Dawes + NE + US + 42.72 + -103.14 + 0 + 0 + CYS + + + COZ048 + 60480 + Logan_County + CO + US + 40.72 + -103.11 + 0 + 0 + BOU + + + COZ095 + 60950 + Western_Kiowa_County + CO + US + 38.43 + -103.11 + 0 + 0 + PUB + + + NEZ003 + 270030 + Box_Butte + NE + US + 42.22 + -103.07 + 0 + 0 + CYS + + + TXZ060 + 430600 + Winkler + TX + US + 31.87 + -103.07 + 0 + 0 + MAF + + + TXZ081 + 430810 + Big_Bend_Area + TX + US + 29.69 + -103.06 + 0 + 0 + MAF + + + COZ097 + 60970 + Las_Animas_Vicinity/Bent_County + CO + US + 37.95 + -103.05 + 0 + 0 + PUB + + + NEZ021 + 270210 + Morrill + NE + US + 41.72 + -103.00 + 0 + 0 + CYS + + + NEZ055 + 270550 + Cheyenne + NE + US + 41.22 + -102.99 + 0 + 0 + CYS + + + SDZ030 + 410300 + Custer_Co_Plains + SD + US + 43.67 + -102.96 + 0 + 0 + UNR + + + TXZ027 + 430270 + Bailey + TX + US + 34.07 + -102.82 + 0 + 0 + LUB + + + TXZ033 + 430330 + Cochran + TX + US + 33.61 + -102.82 + 0 + 0 + LUB + + + TXZ039 + 430390 + Yoakum + TX + US + 33.17 + -102.82 + 0 + 0 + LUB + + + SDZ073 + 410730 + Southern_Meade_Co_Plains + SD + US + 44.38 + -102.78 + 0 + 0 + UNR + + + TXZ021 + 430210 + Parmer + TX + US + 34.53 + -102.78 + 0 + 0 + LUB + + + TXZ075 + 430750 + Pecos + TX + US + 30.72 + -102.67 + 0 + 0 + MAF + + + NDZ033 + 340330 + Stark + ND + US + 46.82 + -102.66 + 0 + 0 + BIS + + + NDZ018 + 340180 + Dunn + ND + US + 47.40 + -102.63 + 0 + 0 + BIS + + + TXZ050 + 430500 + Andrews + TX + US + 32.30 + -102.63 + 0 + 0 + MAF + + + TXZ045 + 430450 + Gaines + TX + US + 32.74 + -102.62 + 0 + 0 + MAF + + + COZ092 + 60920 + Cheyenne_County + CO + US + 38.82 + -102.61 + 0 + 0 + GLD + + + COZ091 + 60910 + Kit_Carson_County + CO + US + 39.30 + -102.60 + 0 + 0 + GLD + + + TXZ001 + 430010 + Dallam + TX + US + 36.27 + -102.60 + 0 + 0 + AMA + + + TXZ006 + 430060 + Hartley + TX + US + 35.84 + -102.59 + 0 + 0 + AMA + + + TXZ011 + 430110 + Oldham + TX + US + 35.40 + -102.59 + 0 + 0 + AMA + + + TXZ016 + 430160 + Deaf_Smith + TX + US + 34.97 + -102.59 + 0 + 0 + AMA + + + COZ099 + 60990 + Springfield_Vic/Baca_County + CO + US + 37.32 + -102.56 + 0 + 0 + PUB + + + SDZ031 + 410310 + Pennington_Co_Plains + SD + US + 44.10 + -102.56 + 0 + 0 + UNR + + + SDZ042 + 410420 + Shannon + SD + US + 43.35 + -102.54 + 0 + 0 + UNR + + + TXZ061 + 430610 + Ector + TX + US + 31.87 + -102.54 + 0 + 0 + MAF + + + TXZ068 + 430680 + Crane + TX + US + 31.37 + -102.54 + 0 + 0 + MAF + + + OKZ001 + 360010 + Cimarron + OK + US + 36.74 + -102.51 + 0 + 0 + AMA + + + NDZ044 + 340440 + Adams + ND + US + 46.11 + -102.50 + 0 + 0 + BIS + + + NDZ002 + 340020 + Burke + ND + US + 48.78 + -102.48 + 0 + 0 + BIS + + + SDZ002 + 410020 + Perkins + SD + US + 45.49 + -102.48 + 0 + 0 + UNR + + + SDZ013 + 410130 + Northern_Meade_Co_Plains + SD + US + 44.82 + -102.48 + 0 + 0 + UNR + + + NDZ041 + 340410 + Hettinger + ND + US + 46.42 + -102.46 + 0 + 0 + BIS + + + COZ090 + 60900 + Yuma_County + CO + US + 40.00 + -102.42 + 0 + 0 + GLD + + + NEZ004 + 270040 + Sheridan + NE + US + 42.50 + -102.40 + 0 + 0 + LBF + + + COZ096 + 60960 + Eastern_Kiowa_County + CO + US + 38.44 + -102.39 + 0 + 0 + PUB + + + COZ098 + 60980 + Lamar_Vicinity/Prowers_County + CO + US + 37.95 + -102.39 + 0 + 0 + PUB + + + NDZ010 + 340100 + Mountrail + ND + US + 48.16 + -102.38 + 0 + 0 + BIS + + + COZ050 + 60500 + Sedgwick_County + CO + US + 40.87 + -102.35 + 0 + 0 + BOU + + + COZ051 + 60510 + Phillips_County + CO + US + 40.59 + -102.35 + 0 + 0 + BOU + + + TXZ028 + 430280 + Lamb + TX + US + 34.07 + -102.35 + 0 + 0 + LUB + + + TXZ034 + 430340 + Hockley + TX + US + 33.61 + -102.34 + 0 + 0 + LUB + + + NEZ022 + 270220 + Garden + NE + US + 41.61 + -102.33 + 0 + 0 + LBF + + + NEZ056 + 270560 + Deuel + NE + US + 41.11 + -102.33 + 0 + 0 + LBF + + + TXZ040 + 430400 + Terry + TX + US + 33.17 + -102.33 + 0 + 0 + LUB + + + TXZ022 + 430220 + Castro + TX + US + 34.53 + -102.26 + 0 + 0 + LUB + + + TXZ082 + 430820 + Terrell + TX + US + 30.22 + -102.11 + 0 + 0 + MAF + + + TXZ069 + 430690 + Upton + TX + US + 31.37 + -102.04 + 0 + 0 + MAF + + + TXZ062 + 430620 + Midland + TX + US + 31.87 + -102.03 + 0 + 0 + MAF + + + TXZ051 + 430510 + Martin + TX + US + 32.30 + -101.95 + 0 + 0 + MAF + + + TXZ046 + 430460 + Dawson + TX + US + 32.74 + -101.94 + 0 + 0 + MAF + + + TXZ017 + 430170 + Randall + TX + US + 34.97 + -101.90 + 0 + 0 + AMA + + + TXZ002 + 430020 + Sherman + TX + US + 36.27 + -101.89 + 0 + 0 + AMA + + + TXZ007 + 430070 + Moore + TX + US + 35.84 + -101.89 + 0 + 0 + AMA + + + TXZ012 + 430120 + Potter + TX + US + 35.40 + -101.89 + 0 + 0 + AMA + + + TXZ029 + 430290 + Hale + TX + US + 34.07 + -101.82 + 0 + 0 + LUB + + + TXZ035 + 430350 + Lubbock + TX + US + 33.61 + -101.82 + 0 + 0 + LUB + + + TXZ041 + 430410 + Lynn + TX + US + 33.17 + -101.82 + 0 + 0 + LUB + + + KSZ041 + 160410 + Greeley + KS + US + 38.47 + -101.80 + 0 + 0 + GLD + + + KSZ084 + 160840 + Morton + KS + US + 37.19 + -101.80 + 0 + 0 + DDC + + + KSZ061 + 160610 + Hamilton + KS + US + 37.99 + -101.78 + 0 + 0 + DDC + + + KSZ074 + 160740 + Stanton + KS + US + 37.56 + -101.78 + 0 + 0 + DDC + + + KSZ027 + 160270 + Wallace + KS + US + 38.91 + -101.76 + 0 + 0 + GLD + + + NEZ023 + 270230 + Grant + NE + US + 41.91 + -101.75 + 0 + 0 + LBF + + + KSZ001 + 160010 + Cheyenne + KS + US + 39.78 + -101.73 + 0 + 0 + GLD + + + NDZ019 + 340190 + Mercer + ND + US + 47.28 + -101.73 + 0 + 0 + BIS + + + TXZ023 + 430230 + Swisher + TX + US + 34.53 + -101.73 + 0 + 0 + LUB + + + KSZ013 + 160130 + Sherman + KS + US + 39.35 + -101.72 + 0 + 0 + GLD + + + NEZ035 + 270350 + Arthur + NE + US + 41.56 + -101.70 + 0 + 0 + LBF + + + NEZ069 + 270690 + Chase + NE + US + 40.52 + -101.69 + 0 + 0 + LBF + + + NEZ079 + 270790 + Dundy + NE + US + 40.17 + -101.69 + 0 + 0 + GLD + + + SDZ044 + 410440 + Bennett + SD + US + 43.19 + -101.67 + 0 + 0 + UNR + + + TXZ076 + 430760 + Crockett + TX + US + 30.69 + -101.67 + 0 + 0 + SJT + + + NEZ057 + 270570 + Keith + NE + US + 41.19 + -101.65 + 0 + 0 + LBF + + + NEZ058 + 270580 + Perkins + NE + US + 40.85 + -101.65 + 0 + 0 + LBF + + + SDZ043 + 410430 + Jackson + SD + US + 43.69 + -101.61 + 0 + 0 + UNR + + + NDZ011 + 340110 + Ward + ND + US + 48.33 + -101.60 + 0 + 0 + BIS + + + NDZ042 + 340420 + Grant + ND + US + 46.37 + -101.58 + 0 + 0 + BIS + + + SDZ014 + 410140 + Ziebach + SD + US + 45.00 + -101.57 + 0 + 0 + UNR + + + NDZ003 + 340030 + Renville + ND + US + 48.73 + -101.54 + 0 + 0 + BIS + + + SDZ032 + 410320 + Haakon + SD + US + 44.37 + -101.53 + 0 + 0 + UNR + + + TXZ063 + 430630 + Glasscock + TX + US + 31.87 + -101.52 + 0 + 0 + MAF + + + TXZ070 + 430700 + Reagan + TX + US + 31.37 + -101.52 + 0 + 0 + MAF + + + OKZ002 + 360020 + Texas + OK + US + 36.74 + -101.49 + 0 + 0 + AMA + + + TXZ047 + 430470 + Borden + TX + US + 32.74 + -101.43 + 0 + 0 + MAF + + + TXZ052 + 430520 + Howard + TX + US + 32.30 + -101.43 + 0 + 0 + MAF + + + NEZ094 + 270940 + Western_Cherry + NE + US + 42.54 + -101.42 + 0 + 0 + LBF + + + TXZ013 + 430130 + Carson + TX + US + 35.40 + -101.36 + 0 + 0 + AMA + + + TXZ018 + 430180 + Armstrong + TX + US + 34.97 + -101.36 + 0 + 0 + AMA + + + TXZ003 + 430030 + Hansford + TX + US + 36.27 + -101.35 + 0 + 0 + AMA + + + TXZ008 + 430080 + Hutchinson + TX + US + 35.84 + -101.35 + 0 + 0 + AMA + + + KSZ042 + 160420 + Wichita + KS + US + 38.48 + -101.34 + 0 + 0 + GLD + + + NDZ034 + 340340 + Morton + ND + US + 46.63 + -101.33 + 0 + 0 + BIS + + + NDZ020 + 340200 + Oliver + ND + US + 47.14 + -101.32 + 0 + 0 + BIS + + + KSZ062 + 160620 + Kearny + KS + US + 37.99 + -101.31 + 0 + 0 + DDC + + + KSZ085 + 160850 + Stevens + KS + US + 37.19 + -101.31 + 0 + 0 + DDC + + + KSZ075 + 160750 + Grant + KS + US + 37.56 + -101.30 + 0 + 0 + DDC + + + TXZ030 + 430300 + Floyd + TX + US + 34.07 + -101.30 + 0 + 0 + LUB + + + TXZ036 + 430360 + Crosby + TX + US + 33.61 + -101.30 + 0 + 0 + LUB + + + TXZ042 + 430420 + Garza + TX + US + 33.17 + -101.30 + 0 + 0 + LUB + + + TXZ183 + 431830 + Val_Verde + TX + US + 29.76 + -101.22 + 0 + 0 + EWX + + + TXZ024 + 430240 + Briscoe + TX + US + 34.53 + -101.21 + 0 + 0 + LUB + + + SDZ003 + 410030 + Corson + SD + US + 45.71 + -101.15 + 0 + 0 + ABR + + + KSZ028 + 160280 + Logan + KS + US + 38.91 + -101.14 + 0 + 0 + GLD + + + NEZ024 + 270240 + Hooker + NE + US + 41.91 + -101.13 + 0 + 0 + LBF + + + KSZ002 + 160020 + Rawlins + KS + US + 39.78 + -101.07 + 0 + 0 + GLD + + + NEZ036 + 270360 + McPherson + NE + US + 41.56 + -101.06 + 0 + 0 + LBF + + + NEZ070 + 270700 + Hayes + NE + US + 40.52 + -101.06 + 0 + 0 + LBF + + + KSZ014 + 160140 + Thomas + KS + US + 39.35 + -101.05 + 0 + 0 + GLD + + + NDZ021 + 340210 + McLean + ND + US + 47.51 + -101.04 + 0 + 0 + BIS + + + NEZ080 + 270800 + Hitchcock + NE + US + 40.17 + -101.04 + 0 + 0 + GLD + + + TXZ064 + 430640 + Sterling + TX + US + 31.83 + -101.04 + 0 + 0 + SJT + + + TXZ071 + 430710 + Irion + TX + US + 31.31 + -100.98 + 0 + 0 + SJT + + + TXZ048 + 430480 + Scurry + TX + US + 32.74 + -100.92 + 0 + 0 + MAF + + + TXZ053 + 430530 + Mitchell + TX + US + 32.30 + -100.92 + 0 + 0 + MAF + + + KSZ043 + 160430 + Scott + KS + US + 38.48 + -100.90 + 0 + 0 + DDC + + + NDZ045 + 340450 + Sioux + ND + US + 46.19 + -100.90 + 0 + 0 + BIS + + + SDZ015 + 410150 + Dewey + SD + US + 45.10 + -100.89 + 0 + 0 + ABR + + + SDZ033 + 410330 + Stanley + SD + US + 44.48 + -100.88 + 0 + 0 + ABR + + + KSZ076 + 160760 + Haskell + KS + US + 37.56 + -100.86 + 0 + 0 + DDC + + + KSZ086 + 160860 + Seward + KS + US + 37.19 + -100.85 + 0 + 0 + DDC + + + NDZ004 + 340040 + Bottineau + ND + US + 48.77 + -100.82 + 0 + 0 + BIS + + + TXZ004 + 430040 + Ochiltree + TX + US + 36.27 + -100.82 + 0 + 0 + AMA + + + TXZ009 + 430090 + Roberts + TX + US + 35.84 + -100.82 + 0 + 0 + AMA + + + TXZ014 + 430140 + Gray + TX + US + 35.40 + -100.81 + 0 + 0 + AMA + + + TXZ019 + 430190 + Donley + TX + US + 34.96 + -100.81 + 0 + 0 + AMA + + + TXZ031 + 430310 + Motley + TX + US + 34.08 + -100.78 + 0 + 0 + LUB + + + TXZ037 + 430370 + Dickens + TX + US + 33.62 + -100.78 + 0 + 0 + LUB + + + TXZ043 + 430430 + Kent + TX + US + 33.18 + -100.78 + 0 + 0 + LUB + + + NEZ059 + 270590 + Lincoln + NE + US + 41.04 + -100.74 + 0 + 0 + LBF + + + SDZ046 + 410460 + Mellette + SD + US + 43.63 + -100.72 + 0 + 0 + UNR + + + SDZ047 + 410470 + Todd + SD + US + 43.19 + -100.72 + 0 + 0 + UNR + + + SDZ045 + 410450 + Jones + SD + US + 43.95 + -100.71 + 0 + 0 + ABR + + + TXZ025 + 430250 + Hall + TX + US + 34.53 + -100.68 + 0 + 0 + LUB + + + KSZ063 + 160630 + Finney + KS + US + 37.99 + -100.66 + 0 + 0 + DDC + + + NDZ012 + 340120 + McHenry + ND + US + 48.24 + -100.63 + 0 + 0 + BIS + + + NEZ025 + 270250 + Thomas + NE + US + 41.91 + -100.55 + 0 + 0 + LBF + + + TXZ077 + 430770 + Schleicher + TX + US + 30.89 + -100.54 + 0 + 0 + SJT + + + TXZ078 + 430780 + Sutton + TX + US + 30.49 + -100.54 + 0 + 0 + SJT + + + NEZ005 + 270050 + Eastern_Cherry + NE + US + 42.53 + -100.53 + 0 + 0 + LBF + + + TXZ065 + 430650 + Coke + TX + US + 31.89 + -100.53 + 0 + 0 + SJT + + + NDZ035 + 340350 + Burleigh + ND + US + 46.98 + -100.52 + 0 + 0 + BIS + + + KSZ029 + 160290 + Gove + KS + US + 38.91 + -100.48 + 0 + 0 + GLD + + + NEZ037 + 270370 + Logan + NE + US + 41.57 + -100.48 + 0 + 0 + LBF + + + OKZ003 + 360030 + Beaver + OK + US + 36.74 + -100.48 + 0 + 0 + AMA + + + NEZ081 + 270810 + Red_Willow + NE + US + 40.17 + -100.47 + 0 + 0 + GLD + + + KSZ003 + 160030 + Decatur + KS + US + 39.78 + -100.46 + 0 + 0 + GLD + + + KSZ044 + 160440 + Lane + KS + US + 38.47 + -100.46 + 0 + 0 + DDC + + + TXZ202 + 432020 + Kinney + TX + US + 29.35 + -100.45 + 0 + 0 + EWX + + + KSZ015 + 160150 + Sheridan + KS + US + 39.35 + -100.44 + 0 + 0 + GLD + + + KSZ077 + 160770 + Gray + KS + US + 37.73 + -100.43 + 0 + 0 + DDC + + + TXZ049 + 430490 + Fisher + TX + US + 32.74 + -100.41 + 0 + 0 + SJT + + + TXZ054 + 430540 + Nolan + TX + US + 32.30 + -100.41 + 0 + 0 + SJT + + + TXZ072 + 430720 + Tom_Green + TX + US + 31.39 + -100.40 + 0 + 0 + SJT + + + TXZ217 + 432170 + Maverick + TX + US + 28.65 + -100.39 + 0 + 0 + EWX + + + KSZ087 + 160870 + Meade + KS + US + 37.23 + -100.37 + 0 + 0 + DDC + + + NEZ071 + 270710 + Frontier + NE + US + 40.52 + -100.37 + 0 + 0 + LBF + + + NDZ022 + 340220 + Sheridan + ND + US + 47.59 + -100.36 + 0 + 0 + BIS + + + TXZ005 + 430050 + Lipscomb + TX + US + 36.28 + -100.27 + 0 + 0 + AMA + + + TXZ010 + 430100 + Hemphill + TX + US + 35.84 + -100.27 + 0 + 0 + AMA + + + TXZ015 + 430150 + Wheeler + TX + US + 35.40 + -100.27 + 0 + 0 + AMA + + + TXZ020 + 430200 + Collingsworth + TX + US + 34.96 + -100.27 + 0 + 0 + AMA + + + NDZ046 + 340460 + Emmons + ND + US + 46.29 + -100.26 + 0 + 0 + BIS + + + TXZ032 + 430320 + Cottle + TX + US + 34.08 + -100.26 + 0 + 0 + LUB + + + TXZ038 + 430380 + King + TX + US + 33.62 + -100.26 + 0 + 0 + LUB + + + TXZ044 + 430440 + Stonewall + TX + US + 33.18 + -100.26 + 0 + 0 + LUB + + + TXZ184 + 431840 + Edwards + TX + US + 29.96 + -100.22 + 0 + 0 + EWX + + + TXZ026 + 430260 + Childress + TX + US + 34.53 + -100.21 + 0 + 0 + LUB + + + SDZ034 + 410340 + Sully + SD + US + 44.72 + -100.20 + 0 + 0 + ABR + + + SDZ004 + 410040 + Campbell + SD + US + 45.77 + -100.12 + 0 + 0 + ABR + + + SDZ009 + 410090 + Walworth + SD + US + 45.43 + -100.10 + 0 + 0 + ABR + + + SDZ035 + 410350 + Hughes + SD + US + 44.33 + -100.10 + 0 + 0 + ABR + + + SDZ016 + 410160 + Potter + SD + US + 45.07 + -100.00 + 0 + 0 + ABR + + + NEZ026 + 270260 + Blaine + NE + US + 41.91 + -99.97 + 0 + 0 + LBF + + + TXZ066 + 430660 + Runnels + TX + US + 31.83 + -99.97 + 0 + 0 + SJT + + + NEZ008 + 270080 + Brown + NE + US + 42.46 + -99.93 + 0 + 0 + LBF + + + KSZ045 + 160450 + Ness + KS + US + 38.47 + -99.91 + 0 + 0 + DDC + + + NEZ082 + 270820 + Furnas + NE + US + 40.17 + -99.91 + 0 + 0 + GID + + + KSZ004 + 160040 + Norton + KS + US + 39.78 + -99.90 + 0 + 0 + GLD + + + KSZ064 + 160640 + Hodgeman + KS + US + 38.08 + -99.89 + 0 + 0 + DDC + + + KSZ078 + 160780 + Ford + KS + US + 37.69 + -99.89 + 0 + 0 + DDC + + + NDZ013 + 340130 + Pierce + ND + US + 48.20 + -99.89 + 0 + 0 + BIS + + + TXZ127 + 431270 + Taylor + TX + US + 32.30 + -99.89 + 0 + 0 + SJT + + + KSZ016 + 160160 + Graham + KS + US + 39.34 + -99.88 + 0 + 0 + GLD + + + SDZ049 + 410490 + Tripp + SD + US + 43.38 + -99.88 + 0 + 0 + UNR + + + TXZ113 + 431130 + Jones + TX + US + 32.74 + -99.88 + 0 + 0 + SJT + + + KSZ030 + 160300 + Trego + KS + US + 38.91 + -99.87 + 0 + 0 + DDC + + + NEZ072 + 270720 + Gosper + NE + US + 40.52 + -99.86 + 0 + 0 + GID + + + TXZ073 + 430730 + Concho + TX + US + 31.34 + -99.86 + 0 + 0 + SJT + + + NDZ005 + 340050 + Rolette + ND + US + 48.77 + -99.84 + 0 + 0 + BIS + + + OKZ033 + 360330 + Harmon + OK + US + 34.77 + -99.83 + 0 + 0 + OUN + + + SDZ048 + 410480 + Lyman + SD + US + 43.86 + -99.83 + 0 + 0 + ABR + + + TXZ185 + 431850 + Real + TX + US + 29.86 + -99.83 + 0 + 0 + EWX + + + KSZ088 + 160880 + Clark + KS + US + 37.23 + -99.82 + 0 + 0 + DDC + + + NEZ060 + 270600 + Dawson + NE + US + 40.86 + -99.81 + 0 + 0 + GID + + + TXZ168 + 431680 + Menard + TX + US + 30.90 + -99.80 + 0 + 0 + SJT + + + NDZ036 + 340360 + Kidder + ND + US + 46.98 + -99.79 + 0 + 0 + BIS + + + TXZ203 + 432030 + Uvalde + TX + US + 29.36 + -99.77 + 0 + 0 + EWX + + + TXZ084 + 430840 + Foard + TX + US + 33.99 + -99.76 + 0 + 0 + OUN + + + TXZ218 + 432180 + Zavala + TX + US + 28.87 + -99.76 + 0 + 0 + EWX + + + TXZ228 + 432280 + Dimmit + TX + US + 28.42 + -99.75 + 0 + 0 + EWX + + + TXZ083 + 430830 + Hardeman + TX + US + 34.32 + -99.74 + 0 + 0 + OUN + + + NEZ006 + 270060 + Keya_Paha + NE + US + 42.85 + -99.73 + 0 + 0 + LBF + + + TXZ087 + 430870 + Knox + TX + US + 33.61 + -99.73 + 0 + 0 + OUN + + + TXZ098 + 430980 + Haskell + TX + US + 33.18 + -99.73 + 0 + 0 + SJT + + + NEZ038 + 270380 + Custer + NE + US + 41.39 + -99.72 + 0 + 0 + LBF + + + TXZ169 + 431690 + Kimble + TX + US + 30.50 + -99.71 + 0 + 0 + SJT + + + OKZ009 + 360090 + Ellis + OK + US + 36.22 + -99.69 + 0 + 0 + OUN + + + OKZ014 + 360140 + Roger_Mills + OK + US + 35.72 + -99.68 + 0 + 0 + OUN + + + OKZ021 + 360210 + Beckham + OK + US + 35.27 + -99.68 + 0 + 0 + OUN + + + NDZ023 + 340230 + Wells + ND + US + 47.59 + -99.67 + 0 + 0 + BIS + + + OKZ004 + 360040 + Harper + OK + US + 36.79 + -99.65 + 0 + 0 + OUN + + + OKZ034 + 360340 + Greer + OK + US + 34.92 + -99.56 + 0 + 0 + OUN + + + TXZ239 + 432390 + Webb + TX + US + 27.73 + -99.51 + 0 + 0 + CRP + + + SDZ036 + 410360 + Hyde + SD + US + 44.55 + -99.49 + 0 + 0 + ABR + + + NDZ047 + 340470 + Logan + ND + US + 46.46 + -99.48 + 0 + 0 + BIS + + + TXZ139 + 431390 + Coleman + TX + US + 31.75 + -99.46 + 0 + 0 + SJT + + + NEZ009 + 270090 + Rock + NE + US + 42.44 + -99.45 + 0 + 0 + LBF + + + NEZ027 + 270270 + Loup + NE + US + 41.91 + -99.45 + 0 + 0 + LBF + + + NDZ050 + 340500 + McIntosh + ND + US + 46.11 + -99.44 + 0 + 0 + BIS + + + OKZ036 + 360360 + Jackson + OK + US + 34.59 + -99.44 + 0 + 0 + OUN + + + NEZ073 + 270730 + Phelps + NE + US + 40.51 + -99.41 + 0 + 0 + GID + + + NEZ083 + 270830 + Harlan + NE + US + 40.17 + -99.40 + 0 + 0 + GID + + + TXZ128 + 431280 + Callahan + TX + US + 32.30 + -99.37 + 0 + 0 + SJT + + + TXZ114 + 431140 + Shackelford + TX + US + 32.74 + -99.36 + 0 + 0 + SJT + + + TXZ154 + 431540 + McCulloch + TX + US + 31.22 + -99.35 + 0 + 0 + SJT + + + KSZ005 + 160050 + Phillips + KS + US + 39.78 + -99.34 + 0 + 0 + GID + + + TXZ186 + 431860 + Kerr + TX + US + 30.04 + -99.34 + 0 + 0 + EWX + + + KSZ017 + 160170 + Rooks + KS + US + 39.35 + -99.32 + 0 + 0 + GID + + + KSZ031 + 160310 + Ellis + KS + US + 38.91 + -99.31 + 0 + 0 + DDC + + + KSZ046 + 160460 + Rush + KS + US + 38.52 + -99.30 + 0 + 0 + DDC + + + KSZ079 + 160790 + Edwards + KS + US + 37.90 + -99.29 + 0 + 0 + DDC + + + KSZ080 + 160800 + Kiowa + KS + US + 37.55 + -99.28 + 0 + 0 + DDC + + + OKZ010 + 360100 + Woodward + OK + US + 36.48 + -99.28 + 0 + 0 + OUN + + + KSZ089 + 160890 + Comanche + KS + US + 37.19 + -99.27 + 0 + 0 + DDC + + + NDZ006 + 340060 + Towner + ND + US + 48.69 + -99.25 + 0 + 0 + FGF + + + SDZ051 + 410510 + Buffalo + SD + US + 44.06 + -99.25 + 0 + 0 + ABR + + + KSZ065 + 160650 + Pawnee + KS + US + 38.17 + -99.24 + 0 + 0 + DDC + + + SDZ005 + 410050 + McPherson + SD + US + 45.77 + -99.23 + 0 + 0 + ABR + + + SDZ010 + 410100 + Edmunds + SD + US + 45.42 + -99.22 + 0 + 0 + ABR + + + TXZ085 + 430850 + Wilbarger + TX + US + 34.14 + -99.22 + 0 + 0 + OUN + + + TXZ170 + 431700 + Mason + TX + US + 30.72 + -99.22 + 0 + 0 + SJT + + + TXZ088 + 430880 + Baylor + TX + US + 33.62 + -99.21 + 0 + 0 + OUN + + + TXZ099 + 430990 + Throckmorton + TX + US + 33.18 + -99.21 + 0 + 0 + SJT + + + TXZ187 + 431870 + Bandera + TX + US + 29.74 + -99.21 + 0 + 0 + EWX + + + TXZ248 + 432480 + Zapata + TX + US + 26.94 + -99.21 + 0 + 0 + BRO + + + NDZ014 + 340140 + Benson + ND + US + 48.11 + -99.19 + 0 + 0 + FGF + + + SDZ017 + 410170 + Faulk + SD + US + 45.07 + -99.15 + 0 + 0 + ABR + + + SDZ057 + 410570 + Brule + SD + US + 43.72 + -99.13 + 0 + 0 + FSD + + + TXZ204 + 432040 + Medina + TX + US + 29.39 + -99.11 + 0 + 0 + EWX + + + TXZ219 + 432190 + Frio + TX + US + 28.87 + -99.11 + 0 + 0 + EWX + + + TXZ229 + 432290 + La_Salle + TX + US + 28.34 + -99.10 + 0 + 0 + CRP + + + NEZ061 + 270610 + Buffalo + NE + US + 40.85 + -99.07 + 0 + 0 + GID + + + SDZ050 + 410500 + Gregory + SD + US + 43.25 + -99.02 + 0 + 0 + FSD + + + OKZ015 + 360150 + Dewey + OK + US + 35.99 + -99.01 + 0 + 0 + OUN + + + OKZ035 + 360350 + Kiowa + OK + US + 34.86 + -99.01 + 0 + 0 + OUN + + + SDZ037 + 410370 + Hand + SD + US + 44.55 + -99.01 + 0 + 0 + ABR + + + OKZ016 + 360160 + Custer + OK + US + 35.64 + -99.00 + 0 + 0 + OUN + + + NEZ028 + 270280 + Garfield + NE + US + 41.91 + -98.99 + 0 + 0 + LBF + + + NEZ039 + 270390 + Valley + NE + US + 41.56 + -98.98 + 0 + 0 + GID + + + OKZ005 + 360050 + Woods + OK + US + 36.69 + -98.98 + 0 + 0 + OUN + + + OKZ022 + 360220 + Washita + OK + US + 35.29 + -98.98 + 0 + 0 + OUN + + + NEZ046 + 270460 + Sherman + NE + US + 41.22 + -98.97 + 0 + 0 + GID + + + NDZ037 + 340370 + Stutsman + ND + US + 46.98 + -98.96 + 0 + 0 + BIS + + + NEZ074 + 270740 + Kearney + NE + US + 40.51 + -98.95 + 0 + 0 + GID + + + NEZ084 + 270840 + Franklin + NE + US + 40.17 + -98.95 + 0 + 0 + GID + + + TXZ188 + 431880 + Gillespie + TX + US + 30.32 + -98.95 + 0 + 0 + EWX + + + TXZ140 + 431400 + Brown + TX + US + 31.77 + -98.94 + 0 + 0 + SJT + + + OKZ037 + 360370 + Tillman + OK + US + 34.38 + -98.92 + 0 + 0 + OUN + + + NDZ024 + 340240 + Eddy + ND + US + 47.72 + -98.90 + 0 + 0 + FGF + + + NDZ025 + 340250 + Foster + ND + US + 47.46 + -98.89 + 0 + 0 + BIS + + + TXZ115 + 431150 + Stephens + TX + US + 32.74 + -98.83 + 0 + 0 + FWD + + + TXZ129 + 431290 + Eastland + TX + US + 32.30 + -98.80 + 0 + 0 + FWD + + + KSZ006 + 160060 + Smith + KS + US + 39.78 + -98.78 + 0 + 0 + GID + + + NEZ007 + 270070 + Boyd + NE + US + 42.88 + -98.77 + 0 + 0 + LBF + + + NEZ010 + 270100 + Holt + NE + US + 42.49 + -98.77 + 0 + 0 + LBF + + + KSZ018 + 160180 + Osborne + KS + US + 39.34 + -98.76 + 0 + 0 + GID + + + KSZ032 + 160320 + Russell + KS + US + 38.91 + -98.76 + 0 + 0 + ICT + + + TXZ252 + 432520 + Starr + TX + US + 26.52 + -98.76 + 0 + 0 + BRO + + + KSZ047 + 160470 + Barton + KS + US + 38.47 + -98.75 + 0 + 0 + ICT + + + NDZ015 + 340150 + Ramsey + ND + US + 48.23 + -98.75 + 0 + 0 + FGF + + + TXZ155 + 431550 + San_Saba + TX + US + 31.21 + -98.75 + 0 + 0 + SJT + + + KSZ066 + 160660 + Stafford + KS + US + 38.03 + -98.74 + 0 + 0 + DDC + + + KSZ081 + 160810 + Pratt + KS + US + 37.64 + -98.73 + 0 + 0 + DDC + + + TXZ249 + 432490 + Jim_Hogg + TX + US + 27.08 + -98.70 + 0 + 0 + BRO + + + SDZ063 + 410630 + Charles_Mix + SD + US + 43.17 + -98.69 + 0 + 0 + FSD + + + TXZ086 + 430860 + Wichita + TX + US + 34.01 + -98.69 + 0 + 0 + OUN + + + KSZ090 + 160900 + Barber + KS + US + 37.23 + -98.68 + 0 + 0 + DDC + + + TXZ089 + 430890 + Archer + TX + US + 33.62 + -98.68 + 0 + 0 + OUN + + + TXZ100 + 431000 + Young + TX + US + 33.18 + -98.68 + 0 + 0 + FWD + + + TXZ189 + 431890 + Kendall + TX + US + 29.93 + -98.67 + 0 + 0 + EWX + + + TXZ171 + 431710 + Llano + TX + US + 30.71 + -98.65 + 0 + 0 + EWX + + + SDZ052 + 410520 + Jerauld + SD + US + 44.07 + -98.63 + 0 + 0 + FSD + + + TXZ142 + 431420 + Mills + TX + US + 31.48 + -98.63 + 0 + 0 + FWD + + + SDZ058 + 410580 + Aurora + SD + US + 43.72 + -98.57 + 0 + 0 + FSD + + + TXZ230 + 432300 + McMullen + TX + US + 28.35 + -98.57 + 0 + 0 + CRP + + + NDZ048 + 340480 + La_Moure + ND + US + 46.46 + -98.54 + 0 + 0 + BIS + + + TXZ141 + 431410 + Comanche + TX + US + 31.98 + -98.54 + 0 + 0 + FWD + + + OKZ011 + 360110 + Major + OK + US + 36.33 + -98.53 + 0 + 0 + OUN + + + NEZ029 + 270290 + Wheeler + NE + US + 41.91 + -98.52 + 0 + 0 + LBF + + + NEZ040 + 270400 + Greeley + NE + US + 41.57 + -98.52 + 0 + 0 + GID + + + TXZ240 + 432400 + Duval + TX + US + 27.66 + -98.52 + 0 + 0 + CRP + + + NDZ051 + 340510 + Dickey + ND + US + 46.11 + -98.51 + 0 + 0 + BIS + + + NEZ047 + 270470 + Howard + NE + US + 41.22 + -98.51 + 0 + 0 + GID + + + NEZ062 + 270620 + Hall + NE + US + 40.87 + -98.50 + 0 + 0 + GID + + + NEZ075 + 270750 + Adams + NE + US + 40.52 + -98.50 + 0 + 0 + GID + + + NEZ085 + 270850 + Webster + NE + US + 40.17 + -98.49 + 0 + 0 + GID + + + TXZ205 + 432050 + Bexar + TX + US + 29.44 + -98.47 + 0 + 0 + EWX + + + NDZ007 + 340070 + Cavalier + ND + US + 48.77 + -98.46 + 0 + 0 + FGF + + + OKZ038 + 360380 + Comanche + OK + US + 34.63 + -98.46 + 0 + 0 + OUN + + + TXZ220 + 432200 + Atascosa + TX + US + 28.93 + -98.45 + 0 + 0 + EWX + + + OKZ017 + 360170 + Blaine + OK + US + 35.86 + -98.42 + 0 + 0 + OUN + + + SDZ064 + 410640 + Douglas + SD + US + 43.35 + -98.41 + 0 + 0 + FSD + + + OKZ044 + 360440 + Cotton + OK + US + 34.28 + -98.40 + 0 + 0 + OUN + + + SDZ006 + 410060 + Brown + SD + US + 45.59 + -98.36 + 0 + 0 + ABR + + + TXZ190 + 431900 + Blanco + TX + US + 30.23 + -98.36 + 0 + 0 + EWX + + + OKZ023 + 360230 + Caddo + OK + US + 35.21 + -98.35 + 0 + 0 + OUN + + + SDZ018 + 410180 + Spink + SD + US + 44.94 + -98.35 + 0 + 0 + ABR + + + TXZ206 + 432060 + Comal + TX + US + 29.82 + -98.33 + 0 + 0 + EWX + + + OKZ006 + 360060 + Alfalfa + OK + US + 36.73 + -98.32 + 0 + 0 + OUN + + + TXZ116 + 431160 + Palo_Pinto + TX + US + 32.76 + -98.31 + 0 + 0 + FWD + + + SDZ038 + 410380 + Beadle + SD + US + 44.41 + -98.28 + 0 + 0 + FSD + + + TXZ250 + 432500 + Brooks + TX + US + 27.03 + -98.26 + 0 + 0 + BRO + + + TXZ156 + 431560 + Lampasas + TX + US + 31.25 + -98.24 + 0 + 0 + FWD + + + NDZ028 + 340280 + Griggs + ND + US + 47.46 + -98.23 + 0 + 0 + FGF + + + TXZ253 + 432530 + Hidalgo + TX + US + 26.41 + -98.23 + 0 + 0 + BRO + + + KSZ007 + 160070 + Jewell + KS + US + 39.78 + -98.22 + 0 + 0 + GID + + + KSZ033 + 160330 + Lincoln + KS + US + 39.04 + -98.21 + 0 + 0 + ICT + + + TXZ130 + 431300 + Erath + TX + US + 32.22 + -98.21 + 0 + 0 + FWD + + + KSZ019 + 160190 + Mitchell + KS + US + 39.39 + -98.20 + 0 + 0 + GID + + + KSZ048 + 160480 + Ellsworth + KS + US + 38.69 + -98.20 + 0 + 0 + ICT + + + KSZ050 + 160500 + Rice + KS + US + 38.33 + -98.20 + 0 + 0 + ICT + + + NDZ026 + 340260 + Nelson + ND + US + 47.94 + -98.20 + 0 + 0 + FGF + + + TXZ090 + 430900 + Clay + TX + US + 33.81 + -98.18 + 0 + 0 + OUN + + + TXZ101 + 431010 + Jack + TX + US + 33.24 + -98.17 + 0 + 0 + FWD + + + SDZ059 + 410590 + Davison + SD + US + 43.67 + -98.15 + 0 + 0 + FSD + + + TXZ172 + 431720 + Burnet + TX + US + 30.74 + -98.15 + 0 + 0 + EWX + + + KSZ082 + 160820 + Kingman + KS + US + 37.55 + -98.13 + 0 + 0 + ICT + + + TXZ143 + 431430 + Hamilton + TX + US + 31.72 + -98.11 + 0 + 0 + FWD + + + SDZ053 + 410530 + Sanborn + SD + US + 44.02 + -98.10 + 0 + 0 + FSD + + + NDZ054 + 340540 + Western_Walsh_County + ND + US + 48.37 + -98.09 + 0 + 0 + FGF + + + KSZ067 + 160670 + Reno + KS + US + 37.95 + -98.08 + 0 + 0 + ICT + + + NDZ038 + 340380 + Barnes + ND + US + 46.94 + -98.08 + 0 + 0 + FGF + + + TXZ221 + 432210 + Wilson + TX + US + 29.16 + -98.08 + 0 + 0 + EWX + + + TXZ231 + 432310 + Live_Oak + TX + US + 28.42 + -98.08 + 0 + 0 + CRP + + + KSZ091 + 160910 + Harper + KS + US + 37.19 + -98.07 + 0 + 0 + ICT + + + NEZ016 + 270160 + Antelope + NE + US + 42.17 + -98.07 + 0 + 0 + OAX + + + NEZ030 + 270300 + Boone + NE + US + 41.70 + -98.06 + 0 + 0 + OAX + + + NEZ063 + 270630 + Hamilton + NE + US + 40.93 + -98.05 + 0 + 0 + GID + + + NEZ076 + 270760 + Clay + NE + US + 40.52 + -98.05 + 0 + 0 + GID + + + NEZ086 + 270860 + Nuckolls + NE + US + 40.17 + -98.04 + 0 + 0 + GID + + + TXZ191 + 431910 + Hays + TX + US + 30.05 + -98.02 + 0 + 0 + EWX + + + TXZ241 + 432410 + Jim_Wells + TX + US + 27.66 + -98.02 + 0 + 0 + CRP + + + NEZ041 + 270410 + Nance + NE + US + 41.39 + -97.99 + 0 + 0 + GID + + + OKZ024 + 360240 + Canadian + OK + US + 35.53 + -97.99 + 0 + 0 + OUN + + + TXZ207 + 432070 + Guadalupe + TX + US + 29.62 + -97.98 + 0 + 0 + EWX + + + NEZ048 + 270480 + Merrick + NE + US + 41.13 + -97.94 + 0 + 0 + GID + + + OKZ018 + 360180 + Kingfisher + OK + US + 35.95 + -97.94 + 0 + 0 + OUN + + + NEZ011 + 270110 + Knox + NE + US + 42.66 + -97.90 + 0 + 0 + OAX + + + SDZ068 + 410680 + Bon_Homme + SD + US + 42.97 + -97.90 + 0 + 0 + FSD + + + OKZ027 + 360270 + Grady + OK + US + 35.03 + -97.88 + 0 + 0 + OUN + + + TXZ222 + 432220 + Karnes + TX + US + 28.95 + -97.88 + 0 + 0 + EWX + + + OKZ039 + 360390 + Stephens + OK + US + 34.49 + -97.85 + 0 + 0 + OUN + + + TXZ131 + 431310 + Hood + TX + US + 32.40 + -97.84 + 0 + 0 + FWD + + + OKZ045 + 360450 + Jefferson + OK + US + 34.07 + -97.83 + 0 + 0 + OUN + + + TXZ117 + 431170 + Parker + TX + US + 32.78 + -97.80 + 0 + 0 + FWD + + + TXZ157 + 431570 + Coryell + TX + US + 31.39 + -97.80 + 0 + 0 + FWD + + + SDZ060 + 410600 + Hanson + SD + US + 43.67 + -97.79 + 0 + 0 + FSD + + + OKZ007 + 360070 + Grant + OK + US + 36.79 + -97.78 + 0 + 0 + OUN + + + OKZ012 + 360120 + Garfield + OK + US + 36.38 + -97.78 + 0 + 0 + OUN + + + TXZ132 + 431320 + Somervell + TX + US + 32.21 + -97.78 + 0 + 0 + FWD + + + TXZ192 + 431920 + Travis + TX + US + 30.33 + -97.77 + 0 + 0 + EWX + + + SDZ065 + 410650 + Hutchinson + SD + US + 43.33 + -97.76 + 0 + 0 + FSD + + + SDZ019 + 410190 + Clark + SD + US + 44.85 + -97.74 + 0 + 0 + ABR + + + TXZ091 + 430910 + Montague + TX + US + 33.71 + -97.73 + 0 + 0 + FWD + + + TXZ232 + 432320 + Bee + TX + US + 28.42 + -97.73 + 0 + 0 + CRP + + + TXZ254 + 432540 + Inland_Willacy + TX + US + 26.46 + -97.73 + 0 + 0 + BRO + + + NDZ029 + 340290 + Steele + ND + US + 47.46 + -97.72 + 0 + 0 + FGF + + + NDZ049 + 340490 + Ransom + ND + US + 46.46 + -97.66 + 0 + 0 + FGF + + + TXZ102 + 431020 + Wise + TX + US + 33.22 + -97.65 + 0 + 0 + FWD + + + KSZ008 + 160080 + Republic + KS + US + 39.82 + -97.64 + 0 + 0 + TOP + + + KSZ020 + 160200 + Cloud + KS + US + 39.48 + -97.64 + 0 + 0 + TOP + + + KSZ034 + 160340 + Ottawa + KS + US + 39.13 + -97.64 + 0 + 0 + TOP + + + KSZ049 + 160490 + Saline + KS + US + 38.78 + -97.64 + 0 + 0 + ICT + + + KSZ051 + 160510 + McPherson + KS + US + 38.38 + -97.64 + 0 + 0 + ICT + + + TXZ144 + 431440 + Bosque + TX + US + 31.90 + -97.64 + 0 + 0 + FWD + + + TXZ242 + 432420 + Kleberg + TX + US + 27.43 + -97.64 + 0 + 0 + CRP + + + TXZ251 + 432510 + Kenedy + TX + US + 26.94 + -97.64 + 0 + 0 + BRO + + + NDZ052 + 340520 + Sargent + ND + US + 46.11 + -97.62 + 0 + 0 + FGF + + + TXZ208 + 432080 + Caldwell + TX + US + 29.86 + -97.62 + 0 + 0 + EWX + + + SDZ011 + 410110 + Day + SD + US + 45.37 + -97.61 + 0 + 0 + ABR + + + SDZ054 + 410540 + Miner + SD + US + 44.02 + -97.61 + 0 + 0 + FSD + + + NEZ017 + 270170 + Pierce + NE + US + 42.26 + -97.60 + 0 + 0 + OAX + + + NEZ031 + 270310 + Madison + NE + US + 41.91 + -97.60 + 0 + 0 + OAX + + + SDZ007 + 410070 + Marshall + SD + US + 45.75 + -97.60 + 0 + 0 + ABR + + + TXZ173 + 431730 + Williamson + TX + US + 30.66 + -97.60 + 0 + 0 + EWX + + + NEZ049 + 270490 + Polk + NE + US + 41.22 + -97.59 + 0 + 0 + GID + + + NEZ064 + 270640 + York + NE + US + 40.87 + -97.59 + 0 + 0 + GID + + + NEZ077 + 270770 + Fillmore + NE + US + 40.52 + -97.59 + 0 + 0 + GID + + + NEZ087 + 270870 + Thayer + NE + US + 40.17 + -97.59 + 0 + 0 + GID + + + TXZ255 + 432550 + Inland_Cameron + TX + US + 26.10 + -97.56 + 0 + 0 + BRO + + + NEZ042 + 270420 + Platte + NE + US + 41.54 + -97.54 + 0 + 0 + OAX + + + OKZ028 + 360280 + McClain + OK + US + 35.10 + -97.54 + 0 + 0 + OUN + + + NDZ008 + 340080 + Pembina + ND + US + 48.77 + -97.52 + 0 + 0 + FGF + + + TXZ244 + 432440 + San_Patricio + TX + US + 27.99 + -97.52 + 0 + 0 + CRP + + + TXZ158 + 431580 + Bell + TX + US + 31.05 + -97.50 + 0 + 0 + FWD + + + TXZ223 + 432230 + Gonzales + TX + US + 29.45 + -97.50 + 0 + 0 + EWX + + + TXZ243 + 432430 + Nueces + TX + US + 27.78 + -97.50 + 0 + 0 + CRP + + + NDZ016 + 340160 + Eastern_Walsh_County + ND + US + 48.37 + -97.49 + 0 + 0 + FGF + + + SDZ039 + 410390 + Kingsbury + SD + US + 44.37 + -97.49 + 0 + 0 + FSD + + + TXZ256 + 432560 + Coastal_Willacy + TX + US + 26.47 + -97.49 + 0 + 0 + BRO + + + KSZ083 + 160830 + Sedgwick + KS + US + 37.69 + -97.47 + 0 + 0 + ICT + + + KSZ092 + 160920 + Sumner + KS + US + 37.23 + -97.47 + 0 + 0 + ICT + + + TXZ233 + 432330 + Goliad + TX + US + 28.65 + -97.47 + 0 + 0 + CRP + + + KSZ068 + 160680 + Harvey + KS + US + 38.04 + -97.42 + 0 + 0 + ICT + + + OKZ019 + 360190 + Logan + OK + US + 35.95 + -97.41 + 0 + 0 + OUN + + + NDZ027 + 340270 + Grand_Forks + ND + US + 47.93 + -97.40 + 0 + 0 + FGF + + + OKZ025 + 360250 + Oklahoma + OK + US + 35.55 + -97.40 + 0 + 0 + OUN + + + OKZ029 + 360290 + Cleveland + OK + US + 35.16 + -97.40 + 0 + 0 + OUN + + + SDZ069 + 410690 + Yankton + SD + US + 42.99 + -97.40 + 0 + 0 + FSD + + + SDZ061 + 410610 + McCook + SD + US + 43.67 + -97.37 + 0 + 0 + FSD + + + TXZ224 + 432240 + DeWitt + TX + US + 29.10 + -97.37 + 0 + 0 + EWX + + + TXZ133 + 431330 + Johnson + TX + US + 32.35 + -97.35 + 0 + 0 + FWD + + + TXZ193 + 431930 + Bastrop + TX + US + 30.10 + -97.35 + 0 + 0 + EWX + + + TXZ257 + 432570 + Coastal_Cameron + TX + US + 26.20 + -97.34 + 0 + 0 + BRO + + + OKZ040 + 360400 + Garvin + OK + US + 34.69 + -97.30 + 0 + 0 + OUN + + + TXZ118 + 431180 + Tarrant + TX + US + 32.78 + -97.29 + 0 + 0 + FWD + + + NEZ012 + 270120 + Cedar + NE + US + 42.61 + -97.25 + 0 + 0 + OAX + + + OKZ046 + 360460 + Carter + OK + US + 34.29 + -97.24 + 0 + 0 + OUN + + + OKZ050 + 360500 + Love + OK + US + 33.90 + -97.24 + 0 + 0 + OUN + + + NDZ039 + 340390 + Cass + ND + US + 46.94 + -97.23 + 0 + 0 + FGF + + + TXZ092 + 430920 + Cooke + TX + US + 33.69 + -97.21 + 0 + 0 + FWD + + + TXZ159 + 431590 + McLennan + TX + US + 31.56 + -97.20 + 0 + 0 + FWD + + + NEZ032 + 270320 + Stanton + NE + US + 41.92 + -97.19 + 0 + 0 + OAX + + + SDZ020 + 410200 + Codington + SD + US + 44.98 + -97.19 + 0 + 0 + ABR + + + SDZ022 + 410220 + Hamlin + SD + US + 44.67 + -97.19 + 0 + 0 + ABR + + + OKZ013 + 360130 + Noble + OK + US + 36.39 + -97.17 + 0 + 0 + OUN + + + KSZ021 + 160210 + Clay + KS + US + 39.35 + -97.16 + 0 + 0 + TOP + + + NDZ030 + 340300 + Traill + ND + US + 47.46 + -97.16 + 0 + 0 + FGF + + + SDZ066 + 410660 + Turner + SD + US + 43.29 + -97.16 + 0 + 0 + FSD + + + TXZ246 + 432460 + Refugio + TX + US + 28.30 + -97.15 + 0 + 0 + CRP + + + KSZ035 + 160350 + Dickinson + KS + US + 38.86 + -97.14 + 0 + 0 + TOP + + + NEZ088 + 270880 + Jefferson + NE + US + 40.17 + -97.14 + 0 + 0 + OAX + + + NEZ050 + 270500 + Butler + NE + US + 41.25 + -97.13 + 0 + 0 + OAX + + + NEZ065 + 270650 + Seward + NE + US + 40.87 + -97.13 + 0 + 0 + OAX + + + NEZ078 + 270780 + Saline + NE + US + 40.52 + -97.13 + 0 + 0 + OAX + + + SDZ055 + 410550 + Lake + SD + US + 44.02 + -97.13 + 0 + 0 + FSD + + + OKZ008 + 360080 + Kay + OK + US + 36.79 + -97.11 + 0 + 0 + OUN + + + TXZ103 + 431030 + Denton + TX + US + 33.21 + -97.11 + 0 + 0 + FWD + + + TXZ145 + 431450 + Hill + TX + US + 32.00 + -97.11 + 0 + 0 + FWD + + + NEZ018 + 270180 + Wayne + NE + US + 42.22 + -97.10 + 0 + 0 + OAX + + + KSZ052 + 160520 + Marion + KS + US + 38.34 + -97.09 + 0 + 0 + ICT + + + OKZ041 + 360410 + Murray + OK + US + 34.49 + -97.09 + 0 + 0 + OUN + + + KSZ009 + 160090 + Washington + KS + US + 39.78 + -97.08 + 0 + 0 + TOP + + + NEZ043 + 270430 + Colfax + NE + US + 41.56 + -97.08 + 0 + 0 + OAX + + + OKZ020 + 360200 + Payne + OK + US + 36.10 + -96.99 + 0 + 0 + OUN + + + SDZ070 + 410700 + Clay + SD + US + 42.90 + -96.99 + 0 + 0 + FSD + + + TXZ194 + 431940 + Lee + TX + US + 30.30 + -96.99 + 0 + 0 + EWX + + + TXZ234 + 432340 + Victoria + TX + US + 28.80 + -96.98 + 0 + 0 + CRP + + + TXZ174 + 431740 + Milam + TX + US + 30.80 + -96.97 + 0 + 0 + FWD + + + TXZ209 + 432090 + Fayette + TX + US + 29.90 + -96.95 + 0 + 0 + EWX + + + TXZ160 + 431600 + Falls + TX + US + 31.26 + -96.94 + 0 + 0 + FWD + + + NDZ053 + 340530 + Richland + ND + US + 46.28 + -96.92 + 0 + 0 + FGF + + + TXZ225 + 432250 + Lavaca + TX + US + 29.35 + -96.91 + 0 + 0 + EWX + + + OKZ026 + 360260 + Lincoln + OK + US + 35.71 + -96.88 + 0 + 0 + OUN + + + OKZ030 + 360300 + Pottawatomie + OK + US + 35.19 + -96.88 + 0 + 0 + OUN + + + TXZ245 + 432450 + Aransas + TX + US + 28.21 + -96.87 + 0 + 0 + CRP + + + SDZ008 + 410080 + Roberts + SD + US + 45.62 + -96.86 + 0 + 0 + ABR + + + SDZ021 + 410210 + Grant + SD + US + 45.15 + -96.84 + 0 + 0 + ABR + + + KSZ069 + 160690 + Butler + KS + US + 37.78 + -96.83 + 0 + 0 + ICT + + + KSZ093 + 160930 + Cowley + KS + US + 37.23 + -96.83 + 0 + 0 + ICT + + + NEZ013 + 270130 + Dixon + NE + US + 42.51 + -96.82 + 0 + 0 + FSD + + + MNZ004 + 230040 + Kittson + MN + US + 48.77 + -96.81 + 0 + 0 + FGF + + + NEZ033 + 270330 + Cuming + NE + US + 41.92 + -96.79 + 0 + 0 + OAX + + + SDZ040 + 410400 + Brookings + SD + US + 44.37 + -96.79 + 0 + 0 + FSD + + + SDZ062 + 410620 + Minnehaha + SD + US + 43.67 + -96.79 + 0 + 0 + FSD + + + MNZ007 + 230070 + West_Marshall + MN + US + 48.36 + -96.78 + 0 + 0 + FGF + + + TXZ119 + 431190 + Dallas + TX + US + 32.77 + -96.77 + 0 + 0 + FWD + + + OKZ051 + 360510 + Marshall + OK + US + 34.01 + -96.76 + 0 + 0 + OUN + + + MNZ001 + 230010 + West_Polk + MN + US + 47.84 + -96.75 + 0 + 0 + FGF + + + TXZ134 + 431340 + Ellis + TX + US + 32.31 + -96.74 + 0 + 0 + FWD + + + KSZ036 + 160360 + Geary + KS + US + 39.04 + -96.72 + 0 + 0 + TOP + + + SDZ067 + 410670 + Lincoln + SD + US + 43.29 + -96.69 + 0 + 0 + FSD + + + NEZ066 + 270660 + Lancaster + NE + US + 40.78 + -96.68 + 0 + 0 + OAX + + + NEZ089 + 270890 + Gage + NE + US + 40.26 + -96.68 + 0 + 0 + OAX + + + KSZ022 + 160220 + Riley + KS + US + 39.30 + -96.67 + 0 + 0 + TOP + + + OKZ047 + 360470 + Johnston + OK + US + 34.32 + -96.67 + 0 + 0 + OUN + + + SDZ023 + 410230 + Deuel + SD + US + 44.76 + -96.67 + 0 + 0 + ABR + + + SDZ056 + 410560 + Moody + SD + US + 44.02 + -96.67 + 0 + 0 + FSD + + + OKZ042 + 360420 + Pontotoc + OK + US + 34.74 + -96.66 + 0 + 0 + OUN + + + TXZ093 + 430930 + Grayson + TX + US + 33.68 + -96.65 + 0 + 0 + FWD + + + KSZ037 + 160370 + Morris + KS + US + 38.69 + -96.64 + 0 + 0 + TOP + + + OKZ059 + 360590 + Pawnee + OK + US + 36.37 + -96.64 + 0 + 0 + TSA + + + SDZ071 + 410710 + Union + SD + US + 42.79 + -96.64 + 0 + 0 + FSD + + + TXZ247 + 432470 + Calhoun + TX + US + 28.39 + -96.63 + 0 + 0 + CRP + + + NEZ044 + 270440 + Dodge + NE + US + 41.57 + -96.62 + 0 + 0 + OAX + + + TXZ195 + 431950 + Burleson + TX + US + 30.52 + -96.62 + 0 + 0 + HGX + + + TXZ235 + 432350 + Jackson + TX + US + 28.96 + -96.62 + 0 + 0 + HGX + + + NEZ051 + 270510 + Saunders + NE + US + 41.24 + -96.61 + 0 + 0 + OAX + + + OKZ031 + 360310 + Seminole + OK + US + 35.16 + -96.61 + 0 + 0 + OUN + + + KSZ053 + 160530 + Chase + KS + US + 38.30 + -96.59 + 0 + 0 + ICT + + + TXZ161 + 431610 + Limestone + TX + US + 31.53 + -96.58 + 0 + 0 + FWD + + + MNZ039 + 230390 + Traverse + MN + US + 45.80 + -96.56 + 0 + 0 + ABR + + + TXZ104 + 431040 + Collin + TX + US + 33.20 + -96.56 + 0 + 0 + FWD + + + NEZ015 + 270150 + Thurston + NE + US + 42.15 + -96.55 + 0 + 0 + OAX + + + OKZ054 + 360540 + Osage + OK + US + 36.58 + -96.54 + 0 + 0 + TSA + + + TXZ175 + 431750 + Robertson + TX + US + 31.04 + -96.54 + 0 + 0 + FWD + + + NEZ014 + 270140 + Dakota + NE + US + 42.40 + -96.53 + 0 + 0 + FSD + + + TXZ210 + 432100 + Colorado + TX + US + 29.60 + -96.53 + 0 + 0 + HGX + + + KSZ010 + 160100 + Marshall + KS + US + 39.78 + -96.52 + 0 + 0 + TOP + + + MNZ029 + 230290 + Wilkin + MN + US + 46.33 + -96.52 + 0 + 0 + FGF + + + MNZ003 + 230030 + Clay + MN + US + 46.89 + -96.51 + 0 + 0 + FGF + + + MNZ046 + 230460 + Big_Stone + MN + US + 45.38 + -96.48 + 0 + 0 + ABR + + + MNZ002 + 230020 + Norman + MN + US + 47.33 + -96.47 + 0 + 0 + FGF + + + TXZ146 + 431460 + Navarro + TX + US + 32.07 + -96.47 + 0 + 0 + FWD + + + TXZ197 + 431970 + Washington + TX + US + 30.23 + -96.44 + 0 + 0 + HGX + + + TXZ120 + 431200 + Rockwall + TX + US + 32.91 + -96.40 + 0 + 0 + FWD + + + KSZ023 + 160230 + Pottawatomie + KS + US + 39.34 + -96.37 + 0 + 0 + TOP + + + TXZ196 + 431960 + Brazos + TX + US + 30.66 + -96.34 + 0 + 0 + HGX + + + OKZ064 + 360640 + Creek + OK + US + 35.91 + -96.33 + 0 + 0 + TSA + + + TXZ211 + 432110 + Austin + TX + US + 29.85 + -96.32 + 0 + 0 + HGX + + + NEZ034 + 270340 + Burt + NE + US + 41.87 + -96.31 + 0 + 0 + OAX + + + OKZ043 + 360430 + Coal + OK + US + 34.60 + -96.30 + 0 + 0 + OUN + + + OKZ065 + 360650 + Okfuskee + OK + US + 35.47 + -96.30 + 0 + 0 + TSA + + + TXZ121 + 431210 + Kaufman + TX + US + 32.61 + -96.30 + 0 + 0 + FWD + + + MNZ071 + 230710 + Lincoln + MN + US + 44.41 + -96.27 + 0 + 0 + FSD + + + MNZ097 + 230970 + Pipestone + MN + US + 44.02 + -96.26 + 0 + 0 + FSD + + + MNZ098 + 230980 + Rock + MN + US + 43.67 + -96.26 + 0 + 0 + FSD + + + NEZ090 + 270900 + Johnson + NE + US + 40.39 + -96.26 + 0 + 0 + OAX + + + IAZ020 + 150200 + Plymouth + IA + US + 42.74 + -96.25 + 0 + 0 + FSD + + + TXZ226 + 432260 + Wharton + TX + US + 29.30 + -96.25 + 0 + 0 + HGX + + + KSZ070 + 160700 + Greenwood + KS + US + 37.88 + -96.24 + 0 + 0 + ICT + + + KSZ094 + 160940 + Elk + KS + US + 37.45 + -96.24 + 0 + 0 + ICT + + + KSZ098 + 160980 + Chautauqua + KS + US + 37.15 + -96.24 + 0 + 0 + ICT + + + IAZ001 + 150010 + Lyon + IA + US + 43.38 + -96.23 + 0 + 0 + FSD + + + NEZ092 + 270920 + Pawnee + NE + US + 40.13 + -96.23 + 0 + 0 + OAX + + + OKZ032 + 360320 + Hughes + OK + US + 35.03 + -96.23 + 0 + 0 + OUN + + + IAZ012 + 150120 + Sioux + IA + US + 43.09 + -96.22 + 0 + 0 + FSD + + + KSZ038 + 160380 + Wabaunsee + KS + US + 38.97 + -96.22 + 0 + 0 + TOP + + + OKZ052 + 360520 + Bryan + OK + US + 33.93 + -96.19 + 0 + 0 + OUN + + + NEZ045 + 270450 + Washington + NE + US + 41.54 + -96.18 + 0 + 0 + OAX + + + NEZ052 + 270520 + Douglas + NE + US + 41.29 + -96.18 + 0 + 0 + OAX + + + KSZ054 + 160540 + Lyon + KS + US + 38.45 + -96.15 + 0 + 0 + TOP + + + NEZ067 + 270670 + Cass + NE + US + 40.93 + -96.15 + 0 + 0 + OAX + + + TXZ147 + 431470 + Freestone + TX + US + 31.72 + -96.14 + 0 + 0 + FWD + + + TXZ094 + 430940 + Fannin + TX + US + 33.62 + -96.11 + 0 + 0 + FWD + + + MNZ014 + 230140 + Red_Lake + MN + US + 47.86 + -96.10 + 0 + 0 + FGF + + + MNZ054 + 230540 + Lac_qui_Parle + MN + US + 45.04 + -96.09 + 0 + 0 + MPX + + + NEZ053 + 270530 + Sarpy + NE + US + 41.09 + -96.09 + 0 + 0 + OAX + + + NEZ068 + 270680 + Otoe + NE + US + 40.66 + -96.09 + 0 + 0 + OAX + + + IAZ031 + 150310 + Woodbury + IA + US + 42.39 + -96.08 + 0 + 0 + FSD + + + TXZ105 + 431050 + Hunt + TX + US + 33.13 + -96.07 + 0 + 0 + FWD + + + MNZ013 + 230130 + Pennington + MN + US + 48.05 + -96.04 + 0 + 0 + FGF + + + OKZ048 + 360480 + Atoka + OK + US + 34.43 + -96.04 + 0 + 0 + OUN + + + OKZ060 + 360600 + Tulsa + OK + US + 36.15 + -96.03 + 0 + 0 + TSA + + + IAZ043 + 150430 + Monona + IA + US + 42.04 + -96.02 + 0 + 0 + OAX + + + MNZ030 + 230300 + West_Otter_Tail + MN + US + 46.41 + -96.02 + 0 + 0 + FGF + + + KSZ011 + 160110 + Nemaha + KS + US + 39.78 + -96.01 + 0 + 0 + TOP + + + MNZ040 + 230400 + Grant + MN + US + 45.93 + -96.01 + 0 + 0 + FGF + + + MNZ047 + 230470 + Stevens + MN + US + 45.59 + -96.00 + 0 + 0 + MPX + + + TXZ212 + 432120 + Waller + TX + US + 29.99 + -96.00 + 0 + 0 + HGX + + + MNZ008 + 230080 + East_Marshall + MN + US + 48.36 + -95.99 + 0 + 0 + FGF + + + TXZ162 + 431620 + Leon + TX + US + 31.32 + -95.99 + 0 + 0 + FWD + + + TXZ198 + 431980 + Grimes + TX + US + 30.55 + -95.99 + 0 + 0 + HGX + + + MNZ015 + 230150 + East_Polk + MN + US + 47.72 + -95.95 + 0 + 0 + FGF + + + OKZ066 + 360660 + Okmulgee + OK + US + 35.62 + -95.95 + 0 + 0 + TSA + + + TXZ135 + 431350 + Henderson + TX + US + 32.19 + -95.94 + 0 + 0 + FWD + + + TXZ236 + 432360 + Matagorda + TX + US + 28.81 + -95.94 + 0 + 0 + HGX + + + MNZ027 + 230270 + West_Becker + MN + US + 46.94 + -95.93 + 0 + 0 + FGF + + + TXZ176 + 431760 + Madison + TX + US + 30.97 + -95.93 + 0 + 0 + HGX + + + MNZ064 + 230640 + Yellow_Medicine + MN + US + 44.74 + -95.91 + 0 + 0 + MPX + + + OKZ055 + 360550 + Washington + OK + US + 36.71 + -95.90 + 0 + 0 + TSA + + + MNZ072 + 230720 + Lyon + MN + US + 44.41 + -95.84 + 0 + 0 + FSD + + + IAZ055 + 150550 + Harrison + IA + US + 41.69 + -95.82 + 0 + 0 + OAX + + + MNZ022 + 230220 + Mahnomen + MN + US + 47.33 + -95.81 + 0 + 0 + FGF + + + NEZ091 + 270910 + Nemaha + NE + US + 40.41 + -95.80 + 0 + 0 + OAX + + + TXZ123 + 431230 + Rains + TX + US + 32.85 + -95.80 + 0 + 0 + FWD + + + KSZ024 + 160240 + Jackson + KS + US + 39.43 + -95.79 + 0 + 0 + TOP + + + MNZ080 + 230800 + Murray + MN + US + 44.02 + -95.77 + 0 + 0 + FSD + + + KSZ039 + 160390 + Shawnee + KS + US + 39.04 + -95.76 + 0 + 0 + TOP + + + MNZ089 + 230890 + Nobles + MN + US + 43.67 + -95.76 + 0 + 0 + FSD + + + TXZ122 + 431220 + Van_Zandt + TX + US + 32.61 + -95.76 + 0 + 0 + FWD + + + MNZ005 + 230050 + Roseau + MN + US + 48.77 + -95.75 + 0 + 0 + FGF + + + TXZ227 + 432270 + Fort_Bend + TX + US + 29.53 + -95.75 + 0 + 0 + HGX + + + KSZ095 + 160950 + Wilson + KS + US + 37.56 + -95.74 + 0 + 0 + ICT + + + KSZ099 + 160990 + Montgomery + KS + US + 37.19 + -95.74 + 0 + 0 + ICT + + + KSZ058 + 160580 + Coffey + KS + US + 38.23 + -95.73 + 0 + 0 + TOP + + + KSZ071 + 160710 + Woodson + KS + US + 37.88 + -95.73 + 0 + 0 + ICT + + + KSZ055 + 160550 + Osage + KS + US + 38.65 + -95.72 + 0 + 0 + TOP + + + OKZ073 + 360730 + Pittsburg + OK + US + 34.95 + -95.72 + 0 + 0 + TSA + + + MNZ055 + 230550 + Swift + MN + US + 45.28 + -95.69 + 0 + 0 + MPX + + + OKZ071 + 360710 + McIntosh + OK + US + 35.35 + -95.66 + 0 + 0 + TSA + + + TXZ148 + 431480 + Anderson + TX + US + 31.80 + -95.66 + 0 + 0 + FWD + + + MNZ056 + 230560 + Chippewa + MN + US + 44.96 + -95.65 + 0 + 0 + MPX + + + NEZ093 + 270930 + Richardson + NE + US + 40.13 + -95.65 + 0 + 0 + OAX + + + IAZ079 + 150790 + Mills + IA + US + 41.03 + -95.64 + 0 + 0 + OAX + + + IAZ002 + 150020 + Osceola + IA + US + 43.38 + -95.63 + 0 + 0 + FSD + + + IAZ013 + 150130 + O'Brien + IA + US + 43.09 + -95.63 + 0 + 0 + FSD + + + IAZ021 + 150210 + Cherokee + IA + US + 42.74 + -95.63 + 0 + 0 + FSD + + + IAZ090 + 150900 + Fremont + IA + US + 40.75 + -95.63 + 0 + 0 + OAX + + + OKZ056 + 360560 + Nowata + OK + US + 36.80 + -95.61 + 0 + 0 + TSA + + + TXZ177 + 431770 + Walker + TX + US + 30.79 + -95.60 + 0 + 0 + HGX + + + IAZ069 + 150690 + Pottawattamie + IA + US + 41.34 + -95.59 + 0 + 0 + OAX + + + TXZ095 + 430950 + Lamar + TX + US + 33.66 + -95.58 + 0 + 0 + FWD + + + TXZ106 + 431060 + Delta + TX + US + 33.36 + -95.58 + 0 + 0 + FWD + + + TXZ107 + 431070 + Hopkins + TX + US + 33.18 + -95.58 + 0 + 0 + FWD + + + OKZ053 + 360530 + Choctaw + OK + US + 34.02 + -95.57 + 0 + 0 + TSA + + + OKZ061 + 360610 + Rogers + OK + US + 36.34 + -95.57 + 0 + 0 + TSA + + + KSZ012 + 160120 + Brown + KS + US + 39.82 + -95.56 + 0 + 0 + TOP + + + IAZ032 + 150320 + Ida + IA + US + 42.39 + -95.54 + 0 + 0 + FSD + + + OKZ067 + 360670 + Wagoner + OK + US + 35.97 + -95.51 + 0 + 0 + TSA + + + MOZ001 + 250010 + Atchison + MO + US + 40.43 + -95.48 + 0 + 0 + EAX + + + TXZ237 + 432370 + Brazoria + TX + US + 29.21 + -95.47 + 0 + 0 + HGX + + + MNZ031 + 230310 + East_Otter_Tail + MN + US + 46.41 + -95.46 + 0 + 0 + FGF + + + TXZ199 + 431990 + Montgomery + TX + US + 30.33 + -95.46 + 0 + 0 + HGX + + + MNZ041 + 230410 + Douglas + MN + US + 45.93 + -95.45 + 0 + 0 + MPX + + + MNZ048 + 230480 + Pope + MN + US + 45.58 + -95.44 + 0 + 0 + MPX + + + TXZ213 + 432130 + Harris + TX + US + 29.84 + -95.44 + 0 + 0 + HGX + + + OKZ070 + 360700 + Muskogee + OK + US + 35.57 + -95.42 + 0 + 0 + TSA + + + MNZ028 + 230280 + East_Becker + MN + US + 46.93 + -95.41 + 0 + 0 + FGF + + + TXZ124 + 431240 + Wood + TX + US + 32.78 + -95.40 + 0 + 0 + SHV + + + IAZ044 + 150440 + Crawford + IA + US + 42.04 + -95.39 + 0 + 0 + DMX + + + MNZ016 + 230160 + North_Clearwater + MN + US + 47.76 + -95.39 + 0 + 0 + FGF + + + KSZ026 + 160260 + Jefferson + KS + US + 39.22 + -95.38 + 0 + 0 + TOP + + + TXZ163 + 431630 + Houston + TX + US + 31.27 + -95.37 + 0 + 0 + HGX + + + MNZ023 + 230230 + South_Clearwater + MN + US + 47.32 + -95.36 + 0 + 0 + FGF + + + OKZ049 + 360490 + Pushmataha + OK + US + 34.42 + -95.36 + 0 + 0 + TSA + + + IAZ056 + 150560 + Shelby + IA + US + 41.68 + -95.31 + 0 + 0 + OAX + + + KSZ072 + 160720 + Allen + KS + US + 37.88 + -95.30 + 0 + 0 + ICT + + + KSZ096 + 160960 + Neosho + KS + US + 37.56 + -95.30 + 0 + 0 + ICT + + + KSZ059 + 160590 + Anderson + KS + US + 38.21 + -95.29 + 0 + 0 + TOP + + + KSZ100 + 161000 + Labette + KS + US + 37.19 + -95.29 + 0 + 0 + ICT + + + TXZ136 + 431360 + Smith + TX + US + 32.42 + -95.29 + 0 + 0 + SHV + + + KSZ056 + 160560 + Franklin + KS + US + 38.56 + -95.28 + 0 + 0 + TOP + + + KSZ040 + 160400 + Douglas + KS + US + 38.90 + -95.27 + 0 + 0 + TOP + + + KSZ025 + 160250 + Atchison + KS + US + 39.53 + -95.26 + 0 + 0 + EAX + + + MOZ011 + 250110 + Holt + MO + US + 40.07 + -95.26 + 0 + 0 + EAX + + + MNZ073 + 230730 + Redwood + MN + US + 44.45 + -95.23 + 0 + 0 + MPX + + + OKZ062 + 360620 + Mayes + OK + US + 36.30 + -95.23 + 0 + 0 + TSA + + + OKZ057 + 360570 + Craig + OK + US + 36.76 + -95.22 + 0 + 0 + TSA + + + OKZ075 + 360750 + Latimer + OK + US + 34.88 + -95.22 + 0 + 0 + TSA + + + TXZ108 + 431080 + Franklin + TX + US + 33.18 + -95.21 + 0 + 0 + SHV + + + MNZ081 + 230810 + Cottonwood + MN + US + 44.02 + -95.17 + 0 + 0 + FSD + + + TXZ149 + 431490 + Cherokee + TX + US + 31.79 + -95.17 + 0 + 0 + SHV + + + IAZ003 + 150030 + Dickinson + IA + US + 43.38 + -95.16 + 0 + 0 + FSD + + + IAZ014 + 150140 + Clay + IA + US + 43.08 + -95.16 + 0 + 0 + FSD + + + IAZ022 + 150220 + Buena_Vista + IA + US + 42.74 + -95.16 + 0 + 0 + FSD + + + IAZ080 + 150800 + Montgomery + IA + US + 41.04 + -95.16 + 0 + 0 + OAX + + + IAZ091 + 150910 + Page + IA + US + 40.74 + -95.16 + 0 + 0 + OAX + + + MNZ090 + 230900 + Jackson + MN + US + 43.67 + -95.16 + 0 + 0 + FSD + + + IAZ033 + 150330 + Sac + IA + US + 42.39 + -95.13 + 0 + 0 + DMX + + + OKZ074 + 360740 + Haskell + OK + US + 35.27 + -95.13 + 0 + 0 + TSA + + + TXZ164 + 431640 + Trinity + TX + US + 31.11 + -95.13 + 0 + 0 + HGX + + + KSZ102 + 161020 + Doniphan + KS + US + 39.81 + -95.10 + 0 + 0 + EAX + + + TXZ178 + 431780 + San_Jacinto + TX + US + 30.62 + -95.10 + 0 + 0 + HGX + + + OKZ068 + 360680 + Cherokee + OK + US + 35.91 + -95.04 + 0 + 0 + TSA + + + TXZ096 + 430960 + Red_River + TX + US + 33.65 + -95.02 + 0 + 0 + SHV + + + MNZ009 + 230090 + North_Beltrami + MN + US + 48.20 + -95.01 + 0 + 0 + FGF + + + MNZ057 + 230570 + Kandiyohi + MN + US + 45.15 + -95.01 + 0 + 0 + MPX + + + KSZ103 + 161030 + Leavenworth + KS + US + 39.19 + -94.99 + 0 + 0 + EAX + + + MNZ065 + 230650 + Renville + MN + US + 44.67 + -94.99 + 0 + 0 + MPX + + + TXZ109 + 431090 + Titus + TX + US + 33.19 + -94.97 + 0 + 0 + SHV + + + MNZ032 + 230320 + Wadena + MN + US + 46.59 + -94.95 + 0 + 0 + FGF + + + IAZ070 + 150700 + Cass + IA + US + 41.33 + -94.94 + 0 + 0 + DMX + + + TXZ110 + 431100 + Camp + TX + US + 33.00 + -94.94 + 0 + 0 + SHV + + + MNZ024 + 230240 + Hubbard + MN + US + 47.11 + -94.92 + 0 + 0 + FGF + + + TXZ125 + 431250 + Upshur + TX + US + 32.72 + -94.92 + 0 + 0 + SHV + + + IAZ057 + 150570 + Audubon + IA + US + 41.68 + -94.91 + 0 + 0 + DMX + + + MOZ002 + 250020 + Nodaway + MO + US + 40.36 + -94.91 + 0 + 0 + EAX + + + MNZ042 + 230420 + Todd + MN + US + 46.07 + -94.90 + 0 + 0 + MPX + + + MNZ006 + 230060 + Lake_of_The_Woods + MN + US + 48.87 + -94.89 + 0 + 0 + FGF + + + IAZ045 + 150450 + Carroll + IA + US + 42.03 + -94.87 + 0 + 0 + DMX + + + TXZ179 + 431790 + Polk + TX + US + 30.82 + -94.87 + 0 + 0 + HGX + + + MOZ020 + 250200 + Buchanan + MO + US + 39.68 + -94.86 + 0 + 0 + EAX + + + KSZ073 + 160730 + Bourbon + KS + US + 37.85 + -94.85 + 0 + 0 + SGF + + + KSZ097 + 160970 + Crawford + KS + US + 37.50 + -94.85 + 0 + 0 + SGF + + + KSZ101 + 161010 + Cherokee + KS + US + 37.16 + -94.85 + 0 + 0 + SGF + + + MOZ028 + 250280 + Platte + MO + US + 39.34 + -94.85 + 0 + 0 + EAX + + + KSZ057 + 160570 + Miami + KS + US + 38.56 + -94.84 + 0 + 0 + EAX + + + KSZ060 + 160600 + Linn + KS + US + 38.21 + -94.84 + 0 + 0 + EAX + + + MOZ012 + 250120 + Andrew + MO + US + 39.97 + -94.84 + 0 + 0 + EAX + + + KSZ105 + 161050 + Johnson + KS + US + 38.89 + -94.83 + 0 + 0 + EAX + + + OKZ058 + 360580 + Ottawa + OK + US + 36.83 + -94.83 + 0 + 0 + TSA + + + MNZ017 + 230170 + South_Beltrami + MN + US + 47.63 + -94.81 + 0 + 0 + FGF + + + OKZ077 + 360770 + McCurtain + OK + US + 34.07 + -94.81 + 0 + 0 + SHV + + + TXZ200 + 432000 + Liberty + TX + US + 30.19 + -94.81 + 0 + 0 + HGX + + + TXZ238 + 432380 + Galveston + TX + US + 29.34 + -94.81 + 0 + 0 + HGX + + + OKZ063 + 360630 + Delaware + OK + US + 36.42 + -94.79 + 0 + 0 + TSA + + + OKZ072 + 360720 + Sequoyah + OK + US + 35.46 + -94.78 + 0 + 0 + TSA + + + TXZ137 + 431370 + Gregg + TX + US + 32.51 + -94.78 + 0 + 0 + SHV + + + KSZ104 + 161040 + Wyandotte + KS + US + 39.09 + -94.75 + 0 + 0 + EAX + + + MNZ074 + 230740 + Brown + MN + US + 44.30 + -94.74 + 0 + 0 + MPX + + + OKZ076 + 360760 + Le_Flore + OK + US + 34.95 + -94.74 + 0 + 0 + TSA + + + TXZ111 + 431110 + Morris + TX + US + 33.13 + -94.74 + 0 + 0 + SHV + + + TXZ150 + 431500 + Rusk + TX + US + 32.13 + -94.72 + 0 + 0 + SHV + + + IAZ081 + 150810 + Adams + IA + US + 41.03 + -94.71 + 0 + 0 + DMX + + + IAZ092 + 150920 + Taylor + IA + US + 40.74 + -94.71 + 0 + 0 + DMX + + + IAZ004 + 150040 + Emmet + IA + US + 43.38 + -94.69 + 0 + 0 + DMX + + + IAZ015 + 150150 + Palo_Alto + IA + US + 43.08 + -94.69 + 0 + 0 + DMX + + + IAZ023 + 150230 + Pocahontas + IA + US + 42.74 + -94.69 + 0 + 0 + DMX + + + TXZ214 + 432140 + Chambers + TX + US + 29.71 + -94.67 + 0 + 0 + HGX + + + IAZ034 + 150340 + Calhoun + IA + US + 42.38 + -94.66 + 0 + 0 + DMX + + + OKZ069 + 360690 + Adair + OK + US + 35.91 + -94.64 + 0 + 0 + TSA + + + TXZ152 + 431520 + Nacogdoches + TX + US + 31.54 + -94.64 + 0 + 0 + SHV + + + MNZ082 + 230820 + Watonwan + MN + US + 43.98 + -94.62 + 0 + 0 + MPX + + + MNZ049 + 230490 + Stearns + MN + US + 45.53 + -94.59 + 0 + 0 + MPX + + + TXZ165 + 431650 + Angelina + TX + US + 31.28 + -94.57 + 0 + 0 + SHV + + + MNZ033 + 230330 + South_Cass + MN + US + 46.54 + -94.56 + 0 + 0 + DLH + + + MNZ091 + 230910 + Martin + MN + US + 43.67 + -94.55 + 0 + 0 + MPX + + + MNZ058 + 230580 + Meeker + MN + US + 45.11 + -94.51 + 0 + 0 + MPX + + + IAZ058 + 150580 + Guthrie + IA + US + 41.68 + -94.50 + 0 + 0 + DMX + + + IAZ071 + 150710 + Adair + IA + US + 41.33 + -94.48 + 0 + 0 + DMX + + + MOZ003 + 250030 + Worth + MO + US + 40.48 + -94.43 + 0 + 0 + EAX + + + MOZ004 + 250040 + Gentry + MO + US + 40.21 + -94.42 + 0 + 0 + EAX + + + MOZ021 + 250210 + Clinton + MO + US + 39.60 + -94.42 + 0 + 0 + EAX + + + MOZ029 + 250290 + Clay + MO + US + 39.28 + -94.42 + 0 + 0 + EAX + + + IAZ046 + 150460 + Greene + IA + US + 42.03 + -94.41 + 0 + 0 + DMX + + + MOZ013 + 250130 + De_Kalb + MO + US + 39.89 + -94.41 + 0 + 0 + EAX + + + TXZ201 + 432010 + Hardin + TX + US + 30.31 + -94.40 + 0 + 0 + LCH + + + TXZ097 + 430970 + Bowie + TX + US + 33.47 + -94.39 + 0 + 0 + SHV + + + TXZ126 + 431260 + Marion + TX + US + 32.79 + -94.38 + 0 + 0 + SHV + + + TXZ138 + 431380 + Harrison + TX + US + 32.56 + -94.37 + 0 + 0 + SHV + + + MNZ075 + 230750 + Nicollet + MN + US + 44.31 + -94.36 + 0 + 0 + MPX + + + MOZ037 + 250370 + Jackson + MO + US + 39.03 + -94.36 + 0 + 0 + EAX + + + MOZ077 + 250770 + Barton + MO + US + 37.50 + -94.35 + 0 + 0 + SGF + + + MOZ101 + 251010 + McDonald + MO + US + 36.63 + -94.35 + 0 + 0 + SGF + + + TXZ112 + 431120 + Cass + TX + US + 33.10 + -94.35 + 0 + 0 + SHV + + + TXZ180 + 431800 + Tyler + TX + US + 30.79 + -94.35 + 0 + 0 + LCH + + + MOZ043 + 250430 + Cass + MO + US + 38.64 + -94.34 + 0 + 0 + EAX + + + MOZ053 + 250530 + Bates + MO + US + 38.25 + -94.34 + 0 + 0 + EAX + + + MOZ066 + 250660 + Vernon + MO + US + 37.85 + -94.34 + 0 + 0 + SGF + + + MOZ088 + 250880 + Jasper + MO + US + 37.21 + -94.34 + 0 + 0 + SGF + + + MOZ093 + 250930 + Newton + MO + US + 36.90 + -94.34 + 0 + 0 + SGF + + + TXZ151 + 431510 + Panola + TX + US + 32.18 + -94.30 + 0 + 0 + SHV + + + MNZ066 + 230660 + McLeod + MN + US + 44.81 + -94.26 + 0 + 0 + MPX + + + IAZ082 + 150820 + Union + IA + US + 41.03 + -94.25 + 0 + 0 + DMX + + + IAZ093 + 150930 + Ringgold + IA + US + 40.74 + -94.25 + 0 + 0 + DMX + + + ARZ001 + 40010 + Benton + AR + US + 36.30 + -94.24 + 0 + 0 + TSA + + + ARZ029 + 40290 + Sebastian + AR + US + 35.19 + -94.24 + 0 + 0 + TSA + + + ARZ010 + 40100 + Washington + AR + US + 36.00 + -94.22 + 0 + 0 + TSA + + + ARZ050 + 40500 + Sevier + AR + US + 33.97 + -94.22 + 0 + 0 + SHV + + + IAZ005 + 150050 + Kossuth + IA + US + 43.21 + -94.22 + 0 + 0 + DMX + + + IAZ024 + 150240 + Humboldt + IA + US + 42.78 + -94.22 + 0 + 0 + DMX + + + MNZ025 + 230250 + North_Cass + MN + US + 47.14 + -94.22 + 0 + 0 + DLH + + + MNZ043 + 230430 + Morrison + MN + US + 46.06 + -94.21 + 0 + 0 + MPX + + + ARZ040 + 40400 + Polk + AR + US + 34.47 + -94.20 + 0 + 0 + LZK + + + MNZ067 + 230670 + Sibley + MN + US + 44.59 + -94.20 + 0 + 0 + MPX + + + ARZ019 + 40190 + Crawford + AR + US + 35.56 + -94.19 + 0 + 0 + TSA + + + IAZ035 + 150350 + Webster + IA + US + 42.43 + -94.19 + 0 + 0 + DMX + + + TXZ166 + 431660 + San_Augustine + TX + US + 31.38 + -94.19 + 0 + 0 + SHV + + + TXZ153 + 431530 + Shelby + TX + US + 31.78 + -94.15 + 0 + 0 + SHV + + + ARZ059 + 40590 + Little_River + AR + US + 33.74 + -94.14 + 0 + 0 + SHV + + + TXZ215 + 432150 + Jefferson + TX + US + 29.87 + -94.14 + 0 + 0 + LCH + + + ARZ037 + 40370 + Scott + AR + US + 34.89 + -94.08 + 0 + 0 + LZK + + + MNZ034 + 230340 + Crow_Wing + MN + US + 46.48 + -94.08 + 0 + 0 + DLH + + + MNZ083 + 230830 + Blue_Earth + MN + US + 44.06 + -94.07 + 0 + 0 + MPX + + + MNZ050 + 230500 + Benton + MN + US + 45.69 + -94.06 + 0 + 0 + MPX + + + IAZ059 + 150590 + Dallas + IA + US + 41.68 + -94.04 + 0 + 0 + DMX + + + ARZ051 + 40510 + Howard + AR + US + 34.05 + -94.03 + 0 + 0 + SHV + + + IAZ072 + 150720 + Madison + IA + US + 41.34 + -94.02 + 0 + 0 + DMX + + + MOZ005 + 250050 + Harrison + MO + US + 40.36 + -94.00 + 0 + 0 + EAX + + + MOZ014 + 250140 + Daviess + MO + US + 39.96 + -94.00 + 0 + 0 + EAX + + + TXZ181 + 431810 + Jasper + TX + US + 30.70 + -94.00 + 0 + 0 + LCH + + + MOZ022 + 250220 + Caldwell + MO + US + 39.66 + -93.99 + 0 + 0 + EAX + + + MOZ030 + 250300 + Ray + MO + US + 39.33 + -93.99 + 0 + 0 + EAX + + + MNZ092 + 230920 + Faribault + MN + US + 43.67 + -93.95 + 0 + 0 + MPX + + + IAZ047 + 150470 + Boone + IA + US + 42.03 + -93.94 + 0 + 0 + DMX + + + TXZ216 + 432160 + Orange + TX + US + 30.10 + -93.90 + 0 + 0 + LCH + + + MNZ059 + 230590 + Wright + MN + US + 45.20 + -93.89 + 0 + 0 + MPX + + + ARZ020 + 40200 + Franklin + AR + US + 35.49 + -93.88 + 0 + 0 + TSA + + + MOZ089 + 250890 + Dade + MO + US + 37.43 + -93.86 + 0 + 0 + SGF + + + ARZ070 + 40700 + Miller + AR + US + 33.31 + -93.85 + 0 + 0 + SHV + + + MOZ078 + 250780 + Cedar + MO + US + 37.73 + -93.85 + 0 + 0 + SGF + + + MOZ094 + 250940 + Lawrence + MO + US + 37.11 + -93.84 + 0 + 0 + SGF + + + MNZ051 + 230510 + Sherburne + MN + US + 45.41 + -93.83 + 0 + 0 + MPX + + + MOZ102 + 251020 + Barry + MO + US + 36.71 + -93.83 + 0 + 0 + SGF + + + MOZ044 + 250440 + Johnson + MO + US + 38.75 + -93.82 + 0 + 0 + EAX + + + TXZ167 + 431670 + Sabine + TX + US + 31.37 + -93.82 + 0 + 0 + SHV + + + MOZ038 + 250380 + Lafayette + MO + US + 39.09 + -93.80 + 0 + 0 + EAX + + + IAZ083 + 150830 + Clarke + IA + US + 41.03 + -93.79 + 0 + 0 + DMX + + + IAZ094 + 150940 + Decatur + IA + US + 40.74 + -93.79 + 0 + 0 + DMX + + + MOZ054 + 250540 + Henry + MO + US + 38.38 + -93.79 + 0 + 0 + EAX + + + MOZ067 + 250670 + St._Clair + MO + US + 38.02 + -93.79 + 0 + 0 + SGF + + + MNZ076 + 230760 + Le_Sueur + MN + US + 44.37 + -93.78 + 0 + 0 + MPX + + + LAZ001 + 180010 + Caddo + LA + US + 32.61 + -93.77 + 0 + 0 + SHV + + + MNZ068 + 230680 + Carver + MN + US + 44.81 + -93.77 + 0 + 0 + MPX + + + MNZ010 + 230100 + Koochiching + MN + US + 48.28 + -93.76 + 0 + 0 + DLH + + + IAZ006 + 150060 + Winnebago + IA + US + 43.38 + -93.74 + 0 + 0 + DMX + + + IAZ016 + 150160 + Hancock + IA + US + 43.08 + -93.74 + 0 + 0 + DMX + + + IAZ025 + 150250 + Wright + IA + US + 42.73 + -93.74 + 0 + 0 + DMX + + + MNZ018 + 230180 + North_Itasca + MN + US + 47.66 + -93.74 + 0 + 0 + DLH + + + IAZ036 + 150360 + Hamilton + IA + US + 42.38 + -93.72 + 0 + 0 + DMX + + + ARZ030 + 40300 + Logan + AR + US + 35.22 + -93.71 + 0 + 0 + LZK + + + ARZ060 + 40600 + Hempstead + AR + US + 33.75 + -93.71 + 0 + 0 + SHV + + + TXZ182 + 431820 + Newton + TX + US + 30.72 + -93.71 + 0 + 0 + LCH + + + ARZ011 + 40110 + Madison + AR + US + 36.03 + -93.70 + 0 + 0 + TSA + + + LAZ010 + 180100 + De_Soto + LA + US + 32.10 + -93.69 + 0 + 0 + SHV + + + ARZ041 + 40410 + Montgomery + AR + US + 34.55 + -93.66 + 0 + 0 + LZK + + + ARZ052 + 40520 + Pike + AR + US + 34.15 + -93.65 + 0 + 0 + LZK + + + MNZ044 + 230440 + Mille_Lacs + MN + US + 45.90 + -93.62 + 0 + 0 + MPX + + + ARZ071 + 40710 + Lafayette + AR + US + 33.25 + -93.61 + 0 + 0 + SHV + + + LAZ002 + 180020 + Bossier + LA + US + 32.63 + -93.61 + 0 + 0 + SHV + + + MNZ069 + 230690 + Scott + MN + US + 44.68 + -93.60 + 0 + 0 + MPX + + + MNZ084 + 230840 + Waseca + MN + US + 44.02 + -93.59 + 0 + 0 + MPX + + + ARZ002 + 40020 + Carroll + AR + US + 36.31 + -93.58 + 0 + 0 + TSA + + + MOZ006 + 250060 + Mercer + MO + US + 40.42 + -93.58 + 0 + 0 + EAX + + + IAZ060 + 150600 + Polk + IA + US + 41.68 + -93.57 + 0 + 0 + DMX + + + MNZ026 + 230260 + South_Itasca + MN + US + 47.24 + -93.57 + 0 + 0 + DLH + + + MOZ015 + 250150 + Grundy + MO + US + 40.11 + -93.57 + 0 + 0 + EAX + + + IAZ073 + 150730 + Warren + IA + US + 41.34 + -93.56 + 0 + 0 + DMX + + + LAZ017 + 180170 + Sabine + LA + US + 31.51 + -93.55 + 0 + 0 + SHV + + + MOZ023 + 250230 + Livingston + MO + US + 39.79 + -93.52 + 0 + 0 + EAX + + + IAZ048 + 150480 + Story + IA + US + 42.03 + -93.47 + 0 + 0 + DMX + + + MNZ060 + 230600 + Hennepin + MN + US + 45.02 + -93.47 + 0 + 0 + MPX + + + MOZ103 + 251030 + Stone + MO + US + 36.74 + -93.47 + 0 + 0 + SGF + + + MOZ031 + 250310 + Carroll + MO + US + 39.41 + -93.44 + 0 + 0 + EAX + + + ARZ021 + 40210 + Johnson + AR + US + 35.55 + -93.43 + 0 + 0 + LZK + + + MNZ036 + 230360 + South_Aitkin + MN + US + 46.39 + -93.43 + 0 + 0 + DLH + + + MNZ035 + 230350 + Northern_Aitkin + MN + US + 46.83 + -93.42 + 0 + 0 + DLH + + + MOZ079 + 250790 + Polk + MO + US + 37.62 + -93.41 + 0 + 0 + SGF + + + LAZ011 + 180110 + Red_River + LA + US + 32.07 + -93.36 + 0 + 0 + SHV + + + LAZ030 + 180300 + Beauregard + LA + US + 30.65 + -93.36 + 0 + 0 + LCH + + + MNZ093 + 230930 + Freeborn + MN + US + 43.67 + -93.35 + 0 + 0 + MPX + + + MOZ090 + 250900 + Greene + MO + US + 37.26 + -93.35 + 0 + 0 + SGF + + + IAZ084 + 150840 + Lucas + IA + US + 41.03 + -93.33 + 0 + 0 + DMX + + + IAZ095 + 150950 + Wayne + IA + US + 40.74 + -93.33 + 0 + 0 + DMX + + + LAZ003 + 180030 + Webster + LA + US + 32.72 + -93.33 + 0 + 0 + SHV + + + ARZ038 + 40380 + Yell + AR + US + 35.03 + -93.32 + 0 + 0 + LZK + + + LAZ041 + 180410 + Calcasieu + LA + US + 30.27 + -93.32 + 0 + 0 + LCH + + + MOZ068 + 250680 + Hickory + MO + US + 37.93 + -93.32 + 0 + 0 + SGF + + + ARZ061 + 40610 + Nevada + AR + US + 33.70 + -93.29 + 0 + 0 + SHV + + + MNZ045 + 230450 + Kanabec + MN + US + 45.95 + -93.29 + 0 + 0 + MPX + + + MNZ077 + 230770 + Rice + MN + US + 44.37 + -93.29 + 0 + 0 + MPX + + + MOZ045 + 250450 + Pettis + MO + US + 38.72 + -93.29 + 0 + 0 + EAX + + + MOZ055 + 250550 + Benton + MO + US + 38.30 + -93.29 + 0 + 0 + SGF + + + MNZ052 + 230520 + Isanti + MN + US + 45.57 + -93.27 + 0 + 0 + MPX + + + MNZ061 + 230610 + Anoka + MN + US + 45.23 + -93.27 + 0 + 0 + MPX + + + IAZ007 + 150070 + Worth + IA + US + 43.38 + -93.26 + 0 + 0 + DMX + + + IAZ017 + 150170 + Cerro_Gordo + IA + US + 43.08 + -93.26 + 0 + 0 + DMX + + + IAZ026 + 150260 + Franklin + IA + US + 42.73 + -93.26 + 0 + 0 + DMX + + + MOZ095 + 250950 + Christian + MO + US + 36.95 + -93.26 + 0 + 0 + SGF + + + IAZ037 + 150370 + Hardin + IA + US + 42.38 + -93.25 + 0 + 0 + DMX + + + LAZ051 + 180510 + Cameron + LA + US + 29.83 + -93.25 + 0 + 0 + LCH + + + MNZ085 + 230850 + Steele + MN + US + 44.02 + -93.23 + 0 + 0 + MPX + + + ARZ012 + 40120 + Newton + AR + US + 35.93 + -93.22 + 0 + 0 + LZK + + + ARZ072 + 40720 + Columbia + AR + US + 33.24 + -93.22 + 0 + 0 + SHV + + + ARZ053 + 40530 + Clark + AR + US + 34.06 + -93.19 + 0 + 0 + LZK + + + LAZ027 + 180270 + Vernon + LA + US + 31.12 + -93.19 + 0 + 0 + LCH + + + MOZ039 + 250390 + Saline + MO + US + 39.17 + -93.18 + 0 + 0 + EAX + + + MNZ062 + 230620 + Ramsey + MN + US + 45.01 + -93.11 + 0 + 0 + MPX + + + MOZ016 + 250160 + Sullivan + MO + US + 40.21 + -93.11 + 0 + 0 + EAX + + + MOZ024 + 250240 + Linn + MO + US + 39.87 + -93.11 + 0 + 0 + EAX + + + IAZ074 + 150740 + Marion + IA + US + 41.34 + -93.10 + 0 + 0 + DMX + + + LAZ012 + 180120 + Bienville + LA + US + 32.37 + -93.10 + 0 + 0 + SHV + + + ARZ042 + 40420 + Garland + AR + US + 34.58 + -93.09 + 0 + 0 + LZK + + + LAZ018 + 180180 + Natchitoches + LA + US + 31.75 + -93.08 + 0 + 0 + SHV + + + ARZ003 + 40030 + Boone + AR + US + 36.31 + -93.07 + 0 + 0 + LZK + + + IAZ061 + 150610 + Jasper + IA + US + 41.69 + -93.06 + 0 + 0 + DMX + + + ARZ022 + 40220 + Pope + AR + US + 35.43 + -93.05 + 0 + 0 + LZK + + + MOZ104 + 251040 + Taney + MO + US + 36.66 + -93.05 + 0 + 0 + SGF + + + ARZ054 + 40540 + Hot_Spring + AR + US + 34.33 + -93.04 + 0 + 0 + LZK + + + MNZ070 + 230700 + Dakota + MN + US + 44.71 + -93.03 + 0 + 0 + MPX + + + MOZ007 + 250070 + Putnam + MO + US + 40.46 + -93.02 + 0 + 0 + EAX + + + MOZ080 + 250800 + Dallas + MO + US + 37.66 + -93.02 + 0 + 0 + SGF + + + IAZ049 + 150490 + Marshall + IA + US + 42.04 + -93.01 + 0 + 0 + DMX + + + MOZ032 + 250320 + Chariton + MO + US + 39.46 + -92.99 + 0 + 0 + EAX + + + LAZ004 + 180040 + Claiborne + LA + US + 32.80 + -92.97 + 0 + 0 + SHV + + + ARZ039 + 40390 + Perry + AR + US + 34.94 + -92.92 + 0 + 0 + LZK + + + MNZ053 + 230530 + Chisago + MN + US + 45.52 + -92.89 + 0 + 0 + MPX + + + MNZ063 + 230630 + Washington + MN + US + 45.02 + -92.88 + 0 + 0 + MPX + + + MOZ091 + 250910 + Webster + MO + US + 37.28 + -92.88 + 0 + 0 + SGF + + + IAZ085 + 150850 + Monroe + IA + US + 41.03 + -92.87 + 0 + 0 + DMX + + + IAZ096 + 150960 + Appanoose + IA + US + 40.74 + -92.87 + 0 + 0 + DMX + + + MNZ086 + 230860 + Dodge + MN + US + 44.02 + -92.87 + 0 + 0 + ARX + + + LAZ031 + 180310 + Allen + LA + US + 30.66 + -92.85 + 0 + 0 + LCH + + + LAZ042 + 180420 + Jefferson_Davis + LA + US + 30.27 + -92.85 + 0 + 0 + LCH + + + MOZ056 + 250560 + Morgan + MO + US + 38.44 + -92.85 + 0 + 0 + SGF + + + ARZ066 + 40660 + Ouachita + AR + US + 33.60 + -92.83 + 0 + 0 + LZK + + + IAZ008 + 150080 + Mitchell + IA + US + 43.36 + -92.79 + 0 + 0 + ARX + + + IAZ018 + 150180 + Floyd + IA + US + 43.06 + -92.79 + 0 + 0 + ARX + + + IAZ027 + 150270 + Butler + IA + US + 42.73 + -92.79 + 0 + 0 + DMX + + + IAZ038 + 150380 + Grundy + IA + US + 42.38 + -92.79 + 0 + 0 + DMX + + + MOZ046 + 250460 + Cooper + MO + US + 38.87 + -92.78 + 0 + 0 + EAX + + + ARZ031 + 40310 + Conway + AR + US + 35.27 + -92.76 + 0 + 0 + LZK + + + MNZ094 + 230940 + Mower + MN + US + 43.67 + -92.75 + 0 + 0 + ARX + + + MOZ069 + 250690 + Camden + MO + US + 38.03 + -92.74 + 0 + 0 + SGF + + + MNZ038 + 230380 + Pine + MN + US + 46.07 + -92.71 + 0 + 0 + DLH + + + MOZ040 + 250400 + Howard + MO + US + 39.16 + -92.69 + 0 + 0 + EAX + + + ARZ013 + 40130 + Searcy + AR + US + 35.92 + -92.68 + 0 + 0 + LZK + + + ARZ004 + 40040 + Marion + AR + US + 36.28 + -92.65 + 0 + 0 + LZK + + + ARZ043 + 40430 + Saline + AR + US + 34.64 + -92.65 + 0 + 0 + LZK + + + ARZ062 + 40620 + Dallas + AR + US + 33.98 + -92.65 + 0 + 0 + LZK + + + IAZ075 + 150750 + Mahaska + IA + US + 41.34 + -92.65 + 0 + 0 + DMX + + + MNZ078 + 230780 + Goodhue + MN + US + 44.45 + -92.65 + 0 + 0 + MPX + + + LAZ005 + 180050 + Lincoln + LA + US + 32.61 + -92.64 + 0 + 0 + SHV + + + LAZ019 + 180190 + Winn + LA + US + 31.93 + -92.64 + 0 + 0 + SHV + + + MOZ047 + 250470 + Moniteau + MO + US + 38.67 + -92.62 + 0 + 0 + LSX + + + MOZ017 + 250170 + Adair + MO + US + 40.19 + -92.61 + 0 + 0 + EAX + + + LAZ020 + 180200 + Grant + LA + US + 31.60 + -92.58 + 0 + 0 + SHV + + + MOZ025 + 250250 + Macon + MO + US + 39.82 + -92.57 + 0 + 0 + EAX + + + LAZ013 + 180130 + Jackson + LA + US + 32.33 + -92.56 + 0 + 0 + SHV + + + MOZ081 + 250810 + Laclede + MO + US + 37.69 + -92.56 + 0 + 0 + SGF + + + ARZ023 + 40230 + Van_Buren + AR + US + 35.58 + -92.54 + 0 + 0 + LZK + + + ARZ067 + 40670 + Calhoun + AR + US + 33.54 + -92.54 + 0 + 0 + LZK + + + IAZ050 + 150500 + Tama + IA + US + 42.08 + -92.54 + 0 + 0 + DMX + + + IAZ062 + 150620 + Poweshiek + IA + US + 41.69 + -92.54 + 0 + 0 + DMX + + + MOZ008 + 250080 + Schuyler + MO + US + 40.47 + -92.54 + 0 + 0 + EAX + + + ARZ073 + 40730 + Union + AR + US + 33.20 + -92.52 + 0 + 0 + SHV + + + LAZ028 + 180280 + Rapides + LA + US + 31.21 + -92.52 + 0 + 0 + LCH + + + WIZ014 + 490140 + Polk + WI + US + 45.47 + -92.52 + 0 + 0 + MPX + + + MOZ033 + 250330 + Randolph + MO + US + 39.43 + -92.51 + 0 + 0 + EAX + + + MOZ096 + 250960 + Douglas + MO + US + 36.93 + -92.50 + 0 + 0 + SGF + + + MOZ092 + 250920 + Wright + MO + US + 37.27 + -92.47 + 0 + 0 + SGF + + + WIZ023 + 490230 + St._Croix + WI + US + 45.04 + -92.47 + 0 + 0 + MPX + + + WIZ024 + 490240 + Pierce + WI + US + 44.70 + -92.47 + 0 + 0 + MPX + + + WIZ006 + 490060 + Burnett + WI + US + 45.90 + -92.46 + 0 + 0 + DLH + + + MOZ105 + 251050 + Ozark + MO + US + 36.65 + -92.45 + 0 + 0 + SGF + + + ARZ055 + 40550 + Grant + AR + US + 34.28 + -92.44 + 0 + 0 + LZK + + + MNZ011 + 230110 + North_St._Louis + MN + US + 48.24 + -92.44 + 0 + 0 + DLH + + + MNZ019 + 230190 + Central_St._Louis + MN + US + 47.43 + -92.44 + 0 + 0 + DLH + + + MOZ057 + 250570 + Miller + MO + US + 38.22 + -92.44 + 0 + 0 + SGF + + + MNZ037 + 230370 + Carlton/South_St._Louis + MN + US + 46.72 + -92.43 + 0 + 0 + DLH + + + IAZ097 + 150970 + Davis + IA + US + 40.75 + -92.42 + 0 + 0 + DMX + + + IAZ086 + 150860 + Wapello + IA + US + 41.03 + -92.41 + 0 + 0 + DMX + + + ARZ044 + 40440 + Pulaski + AR + US + 34.76 + -92.39 + 0 + 0 + LZK + + + LAZ032 + 180320 + Evangeline + LA + US + 30.74 + -92.39 + 0 + 0 + LCH + + + MNZ087 + 230870 + Olmsted + MN + US + 44.01 + -92.39 + 0 + 0 + ARX + + + LAZ006 + 180060 + Union + LA + US + 32.80 + -92.38 + 0 + 0 + SHV + + + LAZ043 + 180430 + Acadia + LA + US + 30.28 + -92.38 + 0 + 0 + LCH + + + ARZ005 + 40050 + Baxter + AR + US + 36.24 + -92.37 + 0 + 0 + LZK + + + ARZ032 + 40320 + Faulkner + AR + US + 35.12 + -92.36 + 0 + 0 + LZK + + + LAZ052 + 180520 + Vermilion + LA + US + 29.85 + -92.34 + 0 + 0 + LCH + + + MOZ041 + 250410 + Boone + MO + US + 38.94 + -92.34 + 0 + 0 + LSX + + + IAZ009 + 150090 + Howard + IA + US + 43.36 + -92.32 + 0 + 0 + ARX + + + IAZ019 + 150190 + Chickasaw + IA + US + 43.07 + -92.32 + 0 + 0 + ARX + + + IAZ028 + 150280 + Bremer + IA + US + 42.78 + -92.32 + 0 + 0 + DMX + + + IAZ039 + 150390 + Black_Hawk + IA + US + 42.47 + -92.31 + 0 + 0 + DMX + + + MOZ048 + 250480 + Cole + MO + US + 38.53 + -92.22 + 0 + 0 + LSX + + + MOZ070 + 250700 + Pulaski + MO + US + 37.81 + -92.22 + 0 + 0 + SGF + + + ARZ063 + 40630 + Cleveland + AR + US + 33.89 + -92.20 + 0 + 0 + LZK + + + MNZ079 + 230790 + Wabasha + MN + US + 44.28 + -92.20 + 0 + 0 + ARX + + + LAZ022 + 180220 + La_Salle + LA + US + 31.63 + -92.19 + 0 + 0 + SHV + + + IAZ076 + 150760 + Keokuk + IA + US + 41.33 + -92.18 + 0 + 0 + DVN + + + ARZ068 + 40680 + Bradley + AR + US + 33.44 + -92.16 + 0 + 0 + LZK + + + LAZ014 + 180140 + Ouachita + LA + US + 32.50 + -92.16 + 0 + 0 + SHV + + + MOZ009 + 250090 + Scotland + MO + US + 40.46 + -92.15 + 0 + 0 + DVN + + + MOZ018 + 250180 + Knox + MO + US + 40.13 + -92.15 + 0 + 0 + LSX + + + ARZ014 + 40140 + Stone + AR + US + 35.91 + -92.12 + 0 + 0 + LZK + + + LAZ021 + 180210 + Caldwell + LA + US + 32.11 + -92.09 + 0 + 0 + SHV + + + LAZ044 + 180440 + Lafayette + LA + US + 30.22 + -92.09 + 0 + 0 + LCH + + + MNZ095 + 230950 + Fillmore + MN + US + 43.67 + -92.09 + 0 + 0 + ARX + + + WIZ026 + 490260 + Pepin + WI + US + 44.55 + -92.09 + 0 + 0 + MPX + + + LAZ033 + 180330 + St._Landry + LA + US + 30.58 + -92.08 + 0 + 0 + LCH + + + IAZ051 + 150510 + Benton + IA + US + 42.08 + -92.07 + 0 + 0 + DVN + + + MOZ026 + 250260 + Shelby + MO + US + 39.78 + -92.07 + 0 + 0 + LSX + + + IAZ063 + 150630 + Iowa + IA + US + 41.68 + -92.06 + 0 + 0 + DVN + + + ARZ024 + 40240 + Cleburne + AR + US + 35.54 + -92.02 + 0 + 0 + LZK + + + MOZ034 + 250340 + Monroe + MO + US + 39.50 + -92.01 + 0 + 0 + LSX + + + LAZ029 + 180290 + Avoyelles + LA + US + 31.10 + -91.97 + 0 + 0 + LCH + + + MOZ082 + 250820 + Texas + MO + US + 37.33 + -91.96 + 0 + 0 + SGF + + + IAZ087 + 150870 + Jefferson + IA + US + 41.03 + -91.95 + 0 + 0 + DVN + + + IAZ098 + 150980 + Van_Buren + IA + US + 40.75 + -91.95 + 0 + 0 + DVN + + + ARZ015 + 40150 + Izard + AR + US + 36.06 + -91.94 + 0 + 0 + LZK + + + MOZ050 + 250500 + Callaway + MO + US + 38.81 + -91.93 + 0 + 0 + LSX + + + MOZ049 + 250490 + Osage + MO + US + 38.50 + -91.92 + 0 + 0 + LSX + + + MOZ058 + 250580 + Maries + MO + US + 38.15 + -91.92 + 0 + 0 + SGF + + + WIZ001 + 490010 + Douglas + WI + US + 46.46 + -91.92 + 0 + 0 + DLH + + + LAZ024 + 180240 + Catahoula + LA + US + 31.60 + -91.91 + 0 + 0 + JAN + + + WIZ025 + 490250 + Dunn + WI + US + 44.95 + -91.91 + 0 + 0 + MPX + + + MOZ097 + 250970 + Howell + MO + US + 36.78 + -91.90 + 0 + 0 + SGF + + + ARZ045 + 40450 + Lonoke + AR + US + 34.78 + -91.88 + 0 + 0 + LZK + + + MOZ042 + 250420 + Audrain + MO + US + 39.21 + -91.87 + 0 + 0 + LSX + + + IAZ010 + 150100 + Winneshiek + IA + US + 43.29 + -91.85 + 0 + 0 + ARX + + + IAZ029 + 150290 + Fayette + IA + US + 42.86 + -91.85 + 0 + 0 + ARX + + + WIZ015 + 490150 + Barron + WI + US + 45.43 + -91.85 + 0 + 0 + MPX + + + IAZ040 + 150400 + Buchanan + IA + US + 42.47 + -91.84 + 0 + 0 + DVN + + + ARZ056 + 40560 + Jefferson + AR + US + 34.28 + -91.83 + 0 + 0 + LZK + + + LAZ053 + 180530 + Iberia + LA + US + 29.93 + -91.81 + 0 + 0 + LCH + + + WIZ032 + 490320 + Buffalo + WI + US + 44.32 + -91.81 + 0 + 0 + ARX + + + ARZ006 + 40060 + Fulton + AR + US + 36.38 + -91.80 + 0 + 0 + LZK + + + ARZ074 + 40740 + Ashley + AR + US + 33.20 + -91.79 + 0 + 0 + JAN + + + WIZ007 + 490070 + Washburn + WI + US + 45.90 + -91.79 + 0 + 0 + DLH + + + MOZ071 + 250710 + Phelps + MO + US + 37.88 + -91.78 + 0 + 0 + SGF + + + LAZ007 + 180070 + Morehouse + LA + US + 32.77 + -91.75 + 0 + 0 + JAN + + + ARZ033 + 40330 + White + AR + US + 35.28 + -91.73 + 0 + 0 + LZK + + + LAZ015 + 180150 + Richland + LA + US + 32.42 + -91.73 + 0 + 0 + JAN + + + ARZ069 + 40690 + Drew + AR + US + 33.59 + -91.72 + 0 + 0 + LZK + + + IAZ077 + 150770 + Washington + IA + US + 41.34 + -91.71 + 0 + 0 + DVN + + + MOZ010 + 250100 + Clark + MO + US + 40.43 + -91.70 + 0 + 0 + DVN + + + MOZ019 + 250190 + Lewis + MO + US + 40.10 + -91.70 + 0 + 0 + LSX + + + ARZ064 + 40640 + Lincoln + AR + US + 33.98 + -91.69 + 0 + 0 + LZK + + + MNZ088 + 230880 + Winona + MN + US + 44.02 + -91.69 + 0 + 0 + ARX + + + LAZ023 + 180230 + Franklin + LA + US + 32.14 + -91.68 + 0 + 0 + JAN + + + LAZ034 + 180340 + Pointe_Coupee + LA + US + 30.76 + -91.67 + 0 + 0 + LIX + + + LAZ045 + 180450 + Upper_St._Martin + LA + US + 30.27 + -91.67 + 0 + 0 + LCH + + + LAZ026 + 180260 + Concordia + LA + US + 31.37 + -91.61 + 0 + 0 + JAN + + + IAZ052 + 150520 + Linn + IA + US + 42.07 + -91.60 + 0 + 0 + DVN + + + IAZ064 + 150640 + Johnson + IA + US + 41.64 + -91.60 + 0 + 0 + DVN + + + MOZ027 + 250270 + Marion + MO + US + 39.80 + -91.58 + 0 + 0 + LSX + + + ARZ046 + 40460 + Prairie + AR + US + 34.79 + -91.57 + 0 + 0 + LZK + + + ARZ016 + 40160 + Independence + AR + US + 35.73 + -91.54 + 0 + 0 + LZK + + + IAZ088 + 150880 + Henry + IA + US + 40.99 + -91.54 + 0 + 0 + DVN + + + MNZ020 + 230200 + Southern_Lake/North_Shore + MN + US + 47.31 + -91.51 + 0 + 0 + DLH + + + MOZ059 + 250590 + Gasconade + MO + US + 38.44 + -91.51 + 0 + 0 + LSX + + + ARZ007 + 40070 + Sharp + AR + US + 36.19 + -91.49 + 0 + 0 + LZK + + + MOZ083 + 250830 + Dent + MO + US + 37.60 + -91.49 + 0 + 0 + SGF + + + MNZ096 + 230960 + Houston + MN + US + 43.67 + -91.48 + 0 + 0 + ARX + + + LAZ054 + 180540 + St._Mary + LA + US + 29.72 + -91.47 + 0 + 0 + LCH + + + LAZ035 + 180350 + West_Feliciana + LA + US + 30.86 + -91.46 + 0 + 0 + LIX + + + MOZ035 + 250350 + Ralls + MO + US + 39.50 + -91.46 + 0 + 0 + LSX + + + MOZ051 + 250510 + Montgomery + MO + US + 38.91 + -91.46 + 0 + 0 + LSX + + + LAZ008 + 180080 + West_Carroll + LA + US + 32.80 + -91.44 + 0 + 0 + JAN + + + IAZ099 + 150990 + Lee + IA + US + 40.59 + -91.42 + 0 + 0 + DVN + + + MNZ012 + 230120 + Northern_Cook/Northern_Lake + MN + US + 47.70 + -91.41 + 0 + 0 + DLH + + + MOZ106 + 251060 + Oregon + MO + US + 36.69 + -91.40 + 0 + 0 + SGF + + + MSZ060 + 240600 + Adams + MS + US + 31.49 + -91.40 + 0 + 0 + JAN + + + WIZ033 + 490330 + Trempealeau + WI + US + 44.29 + -91.38 + 0 + 0 + ARX + + + ARZ057 + 40570 + Arkansas + AR + US + 34.25 + -91.37 + 0 + 0 + LZK + + + IAZ041 + 150410 + Delaware + IA + US + 42.47 + -91.37 + 0 + 0 + DVN + + + LAZ046 + 180460 + Iberville + LA + US + 30.27 + -91.35 + 0 + 0 + LIX + + + MOZ098 + 250980 + Shannon + MO + US + 37.15 + -91.35 + 0 + 0 + SGF + + + IAZ011 + 150110 + Allamakee + IA + US + 43.29 + -91.34 + 0 + 0 + ARX + + + MSZ068 + 240680 + Wilkinson + MS + US + 31.19 + -91.34 + 0 + 0 + LIX + + + MOZ072 + 250720 + Crawford + MO + US + 37.95 + -91.32 + 0 + 0 + LSX + + + ARZ025 + 40250 + Jackson + AR + US + 35.63 + -91.31 + 0 + 0 + LZK + + + LAZ047 + 180470 + West_Baton_Rouge + LA + US + 30.49 + -91.31 + 0 + 0 + LIX + + + LAZ025 + 180250 + Tensas + LA + US + 32.00 + -91.30 + 0 + 0 + JAN + + + WIZ027 + 490270 + Chippewa + WI + US + 45.07 + -91.29 + 0 + 0 + MPX + + + WIZ028 + 490280 + Eau_Claire + WI + US + 44.73 + -91.29 + 0 + 0 + MPX + + + LAZ055 + 180550 + Lower_St._Martin + LA + US + 29.85 + -91.28 + 0 + 0 + LCH + + + ARZ034 + 40340 + Woodruff + AR + US + 35.18 + -91.26 + 0 + 0 + LZK + + + ARZ075 + 40750 + Chicot + AR + US + 33.29 + -91.25 + 0 + 0 + JAN + + + IAZ030 + 150300 + Clayton + IA + US + 42.86 + -91.25 + 0 + 0 + ARX + + + LAZ009 + 180090 + East_Carroll + LA + US + 32.78 + -91.23 + 0 + 0 + JAN + + + IAZ078 + 150780 + Louisa + IA + US + 41.25 + -91.22 + 0 + 0 + DVN + + + ILZ095 + 130950 + Adams + IL + US + 39.98 + -91.22 + 0 + 0 + LSX + + + ARZ047 + 40470 + Monroe + AR + US + 34.67 + -91.21 + 0 + 0 + LZK + + + ARZ065 + 40650 + Desha + AR + US + 33.82 + -91.21 + 0 + 0 + LZK + + + ILZ034 + 130340 + Hancock + IL + US + 40.42 + -91.21 + 0 + 0 + DVN + + + LAZ016 + 180160 + Madison + LA + US + 32.35 + -91.21 + 0 + 0 + JAN + + + MOZ060 + 250600 + Warren + MO + US + 38.77 + -91.19 + 0 + 0 + LSX + + + IAZ089 + 150890 + Des_Moines + IA + US + 40.89 + -91.18 + 0 + 0 + DVN + + + WIZ041 + 490410 + La_Crosse + WI + US + 43.91 + -91.17 + 0 + 0 + ARX + + + WIZ002 + 490020 + Bayfield + WI + US + 46.58 + -91.15 + 0 + 0 + DLH + + + IAZ065 + 150650 + Cedar + IA + US + 41.77 + -91.14 + 0 + 0 + DVN + + + IAZ053 + 150530 + Jones + IA + US + 42.12 + -91.13 + 0 + 0 + DVN + + + WIZ008 + 490080 + Sawyer + WI + US + 45.90 + -91.12 + 0 + 0 + DLH + + + WIZ016 + 490160 + Rusk + WI + US + 45.47 + -91.11 + 0 + 0 + MPX + + + MOZ036 + 250360 + Pike + MO + US + 39.37 + -91.10 + 0 + 0 + LSX + + + ARZ008 + 40080 + Randolph + AR + US + 36.32 + -91.08 + 0 + 0 + MEG + + + IAZ067 + 150670 + Muscatine + IA + US + 41.47 + -91.08 + 0 + 0 + DVN + + + LAZ048 + 180480 + East_Baton_Rouge + LA + US + 30.52 + -91.08 + 0 + 0 + LIX + + + LAZ036 + 180360 + East_Feliciana + LA + US + 30.83 + -91.07 + 0 + 0 + LIX + + + LAZ056 + 180560 + Assumption + LA + US + 29.86 + -91.07 + 0 + 0 + LIX + + + MOZ062 + 250620 + Franklin + MO + US + 38.45 + -91.06 + 0 + 0 + LSX + + + ARZ017 + 40170 + Lawrence + AR + US + 36.07 + -91.05 + 0 + 0 + MEG + + + MSZ059 + 240590 + Jefferson + MS + US + 31.75 + -91.05 + 0 + 0 + JAN + + + MOZ099 + 250990 + Reynolds + MO + US + 37.33 + -91.03 + 0 + 0 + LSX + + + MSZ040 + 240400 + Issaquena + MS + US + 32.73 + -91.01 + 0 + 0 + JAN + + + ILZ025 + 130250 + Henderson + IL + US + 40.85 + -91.00 + 0 + 0 + DVN + + + MSZ053 + 240530 + Claiborne + MS + US + 32.01 + -90.98 + 0 + 0 + JAN + + + ILZ097 + 130970 + Pike + IL + US + 39.62 + -90.97 + 0 + 0 + LSX + + + MOZ052 + 250520 + Lincoln + MO + US + 39.05 + -90.97 + 0 + 0 + LSX + + + MOZ107 + 251070 + Carter + MO + US + 36.96 + -90.95 + 0 + 0 + PAH + + + MSZ034 + 240340 + Washington + MS + US + 33.28 + -90.95 + 0 + 0 + JAN + + + MSZ018 + 240180 + Bolivar + MS + US + 33.83 + -90.94 + 0 + 0 + JAN + + + WIZ054 + 490540 + Crawford + WI + US + 43.21 + -90.94 + 0 + 0 + ARX + + + MSZ061 + 240610 + Franklin + MS + US + 31.47 + -90.89 + 0 + 0 + JAN + + + LAZ049 + 180490 + Ascension + LA + US + 30.21 + -90.87 + 0 + 0 + LIX + + + MOZ073 + 250730 + Washington + MO + US + 37.97 + -90.87 + 0 + 0 + LSX + + + LAZ066 + 180660 + Lower_Terrebonne + LA + US + 29.34 + -90.86 + 0 + 0 + LIX + + + MOZ108 + 251080 + Ripley + MO + US + 36.66 + -90.86 + 0 + 0 + PAH + + + MSZ047 + 240470 + Warren + MS + US + 32.34 + -90.86 + 0 + 0 + JAN + + + ARZ058 + 40580 + Phillips + AR + US + 34.39 + -90.82 + 0 + 0 + MEG + + + IAZ042 + 150420 + Dubuque + IA + US + 42.49 + -90.82 + 0 + 0 + DVN + + + LAZ065 + 180650 + Upper_Terrebonne + LA + US + 29.67 + -90.82 + 0 + 0 + LIX + + + MSZ069 + 240690 + Amite + MS + US + 31.18 + -90.82 + 0 + 0 + LIX + + + MSZ041 + 240410 + Sharkey + MS + US + 32.89 + -90.81 + 0 + 0 + JAN + + + LAZ057 + 180570 + St._James + LA + US + 30.03 + -90.80 + 0 + 0 + LIX + + + WIZ053 + 490530 + Vernon + WI + US + 43.58 + -90.79 + 0 + 0 + ARX + + + WIZ061 + 490610 + Grant + WI + US + 42.86 + -90.79 + 0 + 0 + ARX + + + ARZ035 + 40350 + Cross + AR + US + 35.30 + -90.77 + 0 + 0 + MEG + + + ARZ048 + 40480 + St._Francis + AR + US + 35.01 + -90.77 + 0 + 0 + MEG + + + ILZ024 + 130240 + Mercer + IL + US + 41.20 + -90.77 + 0 + 0 + DVN + + + ARZ049 + 40490 + Lee + AR + US + 34.77 + -90.75 + 0 + 0 + MEG + + + WIZ034 + 490340 + Jackson + WI + US + 44.33 + -90.74 + 0 + 0 + ARX + + + LAZ037 + 180370 + St._Helena + LA + US + 30.83 + -90.73 + 0 + 0 + LIX + + + ILZ096 + 130960 + Brown + IL + US + 39.98 + -90.72 + 0 + 0 + LSX + + + LAZ050 + 180500 + Livingston + LA + US + 30.42 + -90.72 + 0 + 0 + LIX + + + ILZ098 + 130980 + Calhoun + IL + US + 39.14 + -90.71 + 0 + 0 + LSX + + + ILZ035 + 130350 + McDonough + IL + US + 40.46 + -90.68 + 0 + 0 + DVN + + + MOZ084 + 250840 + Iron + MO + US + 37.51 + -90.67 + 0 + 0 + LSX + + + MSZ010 + 240100 + Coahoma + MS + US + 34.26 + -90.67 + 0 + 0 + MEG + + + ARZ026 + 40260 + Craighead + AR + US + 35.85 + -90.66 + 0 + 0 + MEG + + + ARZ027 + 40270 + Poinsett + AR + US + 35.58 + -90.66 + 0 + 0 + MEG + + + WIZ042 + 490420 + Monroe + WI + US + 43.94 + -90.64 + 0 + 0 + ARX + + + ILZ026 + 130260 + Warren + IL + US + 40.85 + -90.62 + 0 + 0 + DVN + + + MNZ021 + 230210 + Southern_Cook/North_Shore + MN + US + 47.75 + -90.62 + 0 + 0 + DLH + + + WIZ003 + 490030 + Ashland + WI + US + 46.53 + -90.62 + 0 + 0 + DLH + + + WIZ029 + 490290 + Clark + WI + US + 44.73 + -90.62 + 0 + 0 + ARX + + + IAZ068 + 150680 + Scott + IA + US + 41.61 + -90.61 + 0 + 0 + DVN + + + MSZ019 + 240190 + Sunflower + MS + US + 33.63 + -90.61 + 0 + 0 + JAN + + + ILZ040 + 130400 + Schuyler + IL + US + 40.13 + -90.57 + 0 + 0 + ILX + + + LAZ059 + 180590 + Upper_Lafourche + LA + US + 29.74 + -90.57 + 0 + 0 + LIX + + + MOZ061 + 250610 + St._Charles + MO + US + 38.75 + -90.54 + 0 + 0 + LSX + + + MOZ074 + 250740 + St._Francois + MO + US + 37.86 + -90.54 + 0 + 0 + LSX + + + MSZ035 + 240350 + Humphreys + MS + US + 33.13 + -90.53 + 0 + 0 + JAN + + + IAZ054 + 150540 + Jackson + IA + US + 42.21 + -90.52 + 0 + 0 + DVN + + + IAZ066 + 150660 + Clinton + IA + US + 41.88 + -90.52 + 0 + 0 + DVN + + + MOZ065 + 250650 + Jefferson + MO + US + 38.25 + -90.52 + 0 + 0 + LSX + + + ARZ018 + 40180 + Greene + AR + US + 36.12 + -90.51 + 0 + 0 + MEG + + + LAZ058 + 180580 + St._John_The_Baptist + LA + US + 30.09 + -90.50 + 0 + 0 + LIX + + + MSZ062 + 240620 + Lincoln + MS + US + 31.54 + -90.49 + 0 + 0 + JAN + + + WIZ017 + 490170 + Taylor + WI + US + 45.21 + -90.48 + 0 + 0 + ARX + + + ILZ049 + 130490 + Scott + IL + US + 39.66 + -90.47 + 0 + 0 + ILX + + + MOZ100 + 251000 + Wayne + MO + US + 37.12 + -90.45 + 0 + 0 + PAH + + + ARZ009 + 40090 + Clay + AR + US + 36.35 + -90.43 + 0 + 0 + MEG + + + MOZ063 + 250630 + St._Louis + MO + US + 38.64 + -90.43 + 0 + 0 + LSX + + + WIZ055 + 490550 + Richland + WI + US + 43.36 + -90.43 + 0 + 0 + ARX + + + MSZ054 + 240540 + Copiah + MS + US + 31.87 + -90.42 + 0 + 0 + JAN + + + MOZ109 + 251090 + Butler + MO + US + 36.71 + -90.41 + 0 + 0 + PAH + + + LAZ038 + 180380 + Tangipahoa + LA + US + 30.65 + -90.40 + 0 + 0 + LIX + + + MSZ070 + 240700 + Pike + MS + US + 31.18 + -90.40 + 0 + 0 + LIX + + + ILZ058 + 130580 + Greene + IL + US + 39.32 + -90.39 + 0 + 0 + LSX + + + MSZ007 + 240070 + Tunica + MS + US + 34.66 + -90.39 + 0 + 0 + MEG + + + MSZ048 + 240480 + Hinds + MS + US + 32.31 + -90.39 + 0 + 0 + JAN + + + ILZ099 + 130990 + Jersey + IL + US + 39.09 + -90.38 + 0 + 0 + LSX + + + MSZ042 + 240420 + Yazoo + MS + US + 32.77 + -90.36 + 0 + 0 + JAN + + + WIZ009 + 490090 + Price + WI + US + 45.68 + -90.36 + 0 + 0 + DLH + + + MOZ085 + 250850 + Madison + MO + US + 37.48 + -90.35 + 0 + 0 + LSX + + + LAZ060 + 180600 + St._Charles + LA + US + 29.89 + -90.34 + 0 + 0 + LIX + + + ILZ015 + 130150 + Rock_Island + IL + US + 41.56 + -90.31 + 0 + 0 + DVN + + + ILZ001 + 130010 + Jo_Daviess + IL + US + 42.35 + -90.29 + 0 + 0 + DVN + + + ILZ047 + 130470 + Cass + IL + US + 40.00 + -90.29 + 0 + 0 + ILX + + + LAZ067 + 180670 + Lower_Lafourche + LA + US + 29.31 + -90.29 + 0 + 0 + LIX + + + MSZ011 + 240110 + Quitman + MS + US + 34.30 + -90.29 + 0 + 0 + MEG + + + ARZ036 + 40360 + Crittenden + AR + US + 35.14 + -90.28 + 0 + 0 + MEG + + + ILZ050 + 130500 + Morgan + IL + US + 39.70 + -90.27 + 0 + 0 + ILX + + + MSZ025 + 240250 + Leflore + MS + US + 33.53 + -90.27 + 0 + 0 + JAN + + + MOZ064 + 250640 + St._Louis_City + MO + US + 38.65 + -90.24 + 0 + 0 + LSX + + + WIZ004 + 490040 + Iron + WI + US + 46.29 + -90.23 + 0 + 0 + DLH + + + ILZ027 + 130270 + Knox + IL + US + 40.93 + -90.22 + 0 + 0 + ILX + + + MOZ075 + 250750 + Ste._Genevieve + MO + US + 37.90 + -90.20 + 0 + 0 + LSX + + + MSZ020 + 240200 + Tallahatchie + MS + US + 33.93 + -90.19 + 0 + 0 + MEG + + + ILZ036 + 130360 + Fulton + IL + US + 40.45 + -90.16 + 0 + 0 + ILX + + + ILZ016 + 130160 + Henry + IL + US + 41.37 + -90.15 + 0 + 0 + DVN + + + ILZ102 + 131020 + Monroe + IL + US + 38.30 + -90.14 + 0 + 0 + LSX + + + LAZ061 + 180610 + Upper_Jefferson + LA + US + 29.81 + -90.14 + 0 + 0 + LIX + + + WIZ062 + 490620 + Iowa + WI + US + 43.01 + -90.13 + 0 + 0 + MKX + + + WIZ067 + 490670 + Lafayette + WI + US + 42.66 + -90.13 + 0 + 0 + MKX + + + MSZ063 + 240630 + Lawrence + MS + US + 31.55 + -90.10 + 0 + 0 + JAN + + + MSZ036 + 240360 + Holmes + MS + US + 33.13 + -90.09 + 0 + 0 + JAN + + + MSZ043 + 240430 + Madison + MS + US + 32.65 + -90.08 + 0 + 0 + JAN + + + LAZ068 + 180680 + Lower_Jefferson + LA + US + 29.56 + -90.07 + 0 + 0 + LIX + + + MSZ071 + 240710 + Walthall + MS + US + 31.18 + -90.05 + 0 + 0 + LIX + + + WIZ043 + 490430 + Juneau + WI + US + 43.95 + -90.05 + 0 + 0 + ARX + + + MOZ086 + 250860 + Bollinger + MO + US + 37.32 + -90.04 + 0 + 0 + PAH + + + LAZ039 + 180390 + Washington + LA + US + 30.84 + -90.03 + 0 + 0 + LIX + + + WIZ035 + 490350 + Wood + WI + US + 44.47 + -90.02 + 0 + 0 + GRB + + + ILZ007 + 130070 + Carroll + IL + US + 42.06 + -90.01 + 0 + 0 + DVN + + + MOZ113 + 251130 + Dunklin + MO + US + 36.31 + -90.01 + 0 + 0 + MEG + + + MSZ001 + 240010 + De_Soto + MS + US + 34.86 + -90.01 + 0 + 0 + MEG + + + ILZ101 + 131010 + St._Clair + IL + US + 38.44 + -89.99 + 0 + 0 + LSX + + + ILZ041 + 130410 + Mason + IL + US + 40.25 + -89.98 + 0 + 0 + ILX + + + MOZ110 + 251100 + Stoddard + MO + US + 36.88 + -89.98 + 0 + 0 + PAH + + + MSZ049 + 240490 + Rankin + MS + US + 32.33 + -89.98 + 0 + 0 + JAN + + + TNZ088 + 420880 + Shelby + TN + US + 35.21 + -89.97 + 0 + 0 + MEG + + + ARZ028 + 40280 + Mississippi + AR + US + 35.71 + -89.96 + 0 + 0 + MEG + + + LAZ063 + 180630 + Upper_Plaquemines + LA + US + 29.77 + -89.96 + 0 + 0 + LIX + + + MSZ012 + 240120 + Panola + MS + US + 34.36 + -89.96 + 0 + 0 + MEG + + + WIZ056 + 490560 + Sauk + WI + US + 43.40 + -89.96 + 0 + 0 + MKX + + + ILZ009 + 130090 + Whiteside + IL + US + 41.76 + -89.95 + 0 + 0 + DVN + + + MSZ008 + 240080 + Tate + MS + US + 34.67 + -89.95 + 0 + 0 + MEG + + + ILZ100 + 131000 + Madison + IL + US + 38.83 + -89.94 + 0 + 0 + LSX + + + MSZ055 + 240550 + Simpson + MS + US + 31.91 + -89.94 + 0 + 0 + JAN + + + ILZ059 + 130590 + Macoupin + IL + US + 39.26 + -89.93 + 0 + 0 + LSX + + + MSZ027 + 240270 + Carroll + MS + US + 33.45 + -89.91 + 0 + 0 + JAN + + + ILZ079 + 130790 + Randolph + IL + US + 38.01 + -89.90 + 0 + 0 + LSX + + + LAZ040 + 180400 + St._Tammany + LA + US + 30.44 + -89.89 + 0 + 0 + LIX + + + LAZ062 + 180620 + Orleans + LA + US + 30.03 + -89.88 + 0 + 0 + LIX + + + LAZ064 + 180640 + Upper_St._Bernard + LA + US + 29.91 + -89.86 + 0 + 0 + LIX + + + MSZ072 + 240720 + Marion + MS + US + 31.22 + -89.85 + 0 + 0 + JAN + + + MOZ076 + 250760 + Perry + MO + US + 37.74 + -89.83 + 0 + 0 + PAH + + + ILZ028 + 130280 + Stark + IL + US + 41.11 + -89.82 + 0 + 0 + ILX + + + MSZ026 + 240260 + Grenada + MS + US + 33.79 + -89.82 + 0 + 0 + JAN + + + TNZ049 + 420490 + Tipton + TN + US + 35.51 + -89.82 + 0 + 0 + MEG + + + WIZ044 + 490440 + Adams + WI + US + 43.95 + -89.81 + 0 + 0 + ARX + + + ILZ048 + 130480 + Menard + IL + US + 40.04 + -89.79 + 0 + 0 + ILX + + + MSZ064 + 240640 + Jefferson_Davis + MS + US + 31.59 + -89.78 + 0 + 0 + JAN + + + WIZ030 + 490300 + Marathon + WI + US + 44.90 + -89.76 + 0 + 0 + GRB + + + MOZ115 + 251150 + Pemiscot + MO + US + 36.21 + -89.75 + 0 + 0 + MEG + + + WIZ018 + 490180 + Lincoln + WI + US + 45.34 + -89.73 + 0 + 0 + GRB + + + ILZ029 + 130290 + Peoria + IL + US + 40.75 + -89.72 + 0 + 0 + ILX + + + MSZ021 + 240210 + Yalobusha + MS + US + 34.03 + -89.72 + 0 + 0 + MEG + + + MIZ009 + 220090 + Gogebic + MI + US + 46.44 + -89.70 + 0 + 0 + MQT + + + ILZ002 + 130020 + Stephenson + IL + US + 42.35 + -89.66 + 0 + 0 + DVN + + + MOZ114 + 251140 + New_Madrid + MO + US + 36.61 + -89.66 + 0 + 0 + PAH + + + MOZ087 + 250870 + Cape_Girardeau + MO + US + 37.37 + -89.65 + 0 + 0 + PAH + + + TNZ048 + 420480 + Lauderdale + TN + US + 35.75 + -89.65 + 0 + 0 + MEG + + + MSZ037 + 240370 + Attala + MS + US + 33.09 + -89.64 + 0 + 0 + JAN + + + ILZ051 + 130510 + Sangamon + IL + US + 39.75 + -89.61 + 0 + 0 + ILX + + + ILZ037 + 130370 + Tazewell + IL + US + 40.54 + -89.60 + 0 + 0 + ILX + + + WIZ068 + 490680 + Green + WI + US + 42.68 + -89.60 + 0 + 0 + MKX + + + LAZ070 + 180700 + Lower_St._Bernard + LA + US + 29.85 + -89.59 + 0 + 0 + LIX + + + MSZ077 + 240770 + Pearl_River + MS + US + 30.74 + -89.59 + 0 + 0 + LIX + + + MSZ028 + 240280 + Montgomery + MS + US + 33.49 + -89.58 + 0 + 0 + JAN + + + MSZ065 + 240650 + Covington + MS + US + 31.62 + -89.57 + 0 + 0 + JAN + + + MOZ111 + 251110 + Scott + MO + US + 37.06 + -89.55 + 0 + 0 + PAH + + + MSZ050 + 240500 + Scott + MS + US + 32.43 + -89.55 + 0 + 0 + JAN + + + WIZ010 + 490100 + Oneida + WI + US + 45.68 + -89.54 + 0 + 0 + GRB + + + MSZ056 + 240560 + Smith + MS + US + 32.01 + -89.53 + 0 + 0 + JAN + + + WIZ036 + 490360 + Portage + WI + US + 44.46 + -89.53 + 0 + 0 + GRB + + + ILZ017 + 130170 + Bureau + IL + US + 41.37 + -89.52 + 0 + 0 + DVN + + + MSZ044 + 240440 + Leake + MS + US + 32.76 + -89.52 + 0 + 0 + JAN + + + TNZ001 + 420010 + Lake + TN + US + 36.34 + -89.52 + 0 + 0 + MEG + + + MSZ073 + 240730 + Lamar + MS + US + 31.21 + -89.50 + 0 + 0 + JAN + + + MSZ080 + 240800 + Hancock + MS + US + 30.42 + -89.50 + 0 + 0 + LIX + + + LAZ069 + 180690 + Lower_Plaquemines + LA + US + 29.37 + -89.48 + 0 + 0 + LIX + + + MSZ002 + 240020 + Marshall + MS + US + 34.75 + -89.48 + 0 + 0 + MEG + + + MSZ013 + 240130 + Lafayette + MS + US + 34.37 + -89.48 + 0 + 0 + MEG + + + WIZ005 + 490050 + Vilas + WI + US + 46.08 + -89.48 + 0 + 0 + GRB + + + ILZ064 + 130640 + Bond + IL + US + 38.88 + -89.45 + 0 + 0 + LSX + + + TNZ019 + 420190 + Dyer + TN + US + 36.05 + -89.44 + 0 + 0 + MEG + + + ILZ069 + 130690 + Clinton + IL + US + 38.58 + -89.43 + 0 + 0 + LSX + + + ILZ074 + 130740 + Washington + IL + US + 38.36 + -89.43 + 0 + 0 + LSX + + + ILZ060 + 130600 + Montgomery + IL + US + 39.26 + -89.42 + 0 + 0 + LSX + + + ILZ084 + 130840 + Jackson + IL + US + 37.76 + -89.42 + 0 + 0 + PAH + + + TNZ089 + 420890 + Fayette + TN + US + 35.20 + -89.42 + 0 + 0 + MEG + + + WIZ063 + 490630 + Dane + WI + US + 43.07 + -89.42 + 0 + 0 + MKX + + + WIZ057 + 490570 + Columbia + WI + US + 43.47 + -89.39 + 0 + 0 + MKX + + + ILZ042 + 130420 + Logan + IL + US + 40.12 + -89.38 + 0 + 0 + ILX + + + WIZ046 + 490460 + Marquette + WI + US + 43.81 + -89.38 + 0 + 0 + MKX + + + MIZ002 + 220020 + Ontonagon + MI + US + 46.68 + -89.37 + 0 + 0 + MQT + + + ILZ080 + 130800 + Perry + IL + US + 38.08 + -89.36 + 0 + 0 + PAH + + + ILZ030 + 130300 + Marshall + IL + US + 41.04 + -89.35 + 0 + 0 + ILX + + + ILZ008 + 130080 + Ogle + IL + US + 42.04 + -89.32 + 0 + 0 + LOT + + + ILZ018 + 130180 + Putnam + IL + US + 41.21 + -89.32 + 0 + 0 + DVN + + + ILZ092 + 130920 + Alexander + IL + US + 37.16 + -89.32 + 0 + 0 + PAH + + + MOZ112 + 251120 + Mississippi + MO + US + 36.83 + -89.32 + 0 + 0 + PAH + + + MSZ022 + 240220 + Calhoun + MS + US + 33.95 + -89.32 + 0 + 0 + MEG + + + ILZ010 + 130100 + Lee + IL + US + 41.75 + -89.29 + 0 + 0 + LOT + + + ILZ052 + 130520 + Christian + IL + US + 39.58 + -89.29 + 0 + 0 + ILX + + + ILZ088 + 130880 + Union + IL + US + 37.47 + -89.29 + 0 + 0 + PAH + + + MSZ074 + 240740 + Forrest + MS + US + 31.18 + -89.29 + 0 + 0 + JAN + + + TNZ050 + 420500 + Haywood + TN + US + 35.61 + -89.29 + 0 + 0 + MEG + + + MSZ032 + 240320 + Choctaw + MS + US + 33.33 + -89.27 + 0 + 0 + JAN + + + MSZ029 + 240290 + Webster + MS + US + 33.60 + -89.26 + 0 + 0 + JAN + + + ILZ031 + 130310 + Woodford + IL + US + 40.76 + -89.25 + 0 + 0 + ILX + + + WIZ045 + 490450 + Waushara + WI + US + 44.11 + -89.24 + 0 + 0 + GRB + + + KYZ001 + 170010 + Fulton + KY + US + 36.58 + -89.20 + 0 + 0 + PAH + + + ILZ003 + 130030 + Winnebago + IL + US + 42.32 + -89.17 + 0 + 0 + LOT + + + MSZ003 + 240030 + Benton + MS + US + 34.80 + -89.17 + 0 + 0 + MEG + + + MSZ066 + 240660 + Jones + MS + US + 31.63 + -89.16 + 0 + 0 + JAN + + + TNZ002 + 420020 + Obion + TN + US + 36.35 + -89.14 + 0 + 0 + MEG + + + TNZ051 + 420510 + Crockett + TN + US + 35.84 + -89.13 + 0 + 0 + MEG + + + MSZ051 + 240510 + Newton + MS + US + 32.41 + -89.12 + 0 + 0 + JAN + + + MSZ045 + 240450 + Neshoba + MS + US + 32.76 + -89.11 + 0 + 0 + JAN + + + MSZ057 + 240570 + Jasper + MS + US + 32.02 + -89.11 + 0 + 0 + JAN + + + ILZ093 + 130930 + Pulaski + IL + US + 37.20 + -89.10 + 0 + 0 + PAH + + + MSZ078 + 240780 + Stone + MS + US + 30.78 + -89.10 + 0 + 0 + MOB + + + WIZ069 + 490690 + Rock + WI + US + 42.67 + -89.07 + 0 + 0 + MKX + + + MSZ038 + 240380 + Winston + MS + US + 33.11 + -89.06 + 0 + 0 + JAN + + + MSZ081 + 240810 + Harrison + MS + US + 30.44 + -89.06 + 0 + 0 + LIX + + + WIZ047 + 490470 + Green_Lake + WI + US + 43.81 + -89.06 + 0 + 0 + MKX + + + MSZ015 + 240150 + Pontotoc + MS + US + 34.23 + -89.03 + 0 + 0 + MEG + + + WIZ019 + 490190 + Langlade + WI + US + 45.25 + -89.03 + 0 + 0 + GRB + + + KYZ002 + 170020 + Hickman + KY + US + 36.65 + -89.01 + 0 + 0 + PAH + + + KYZ003 + 170030 + Carlisle + KY + US + 36.87 + -89.00 + 0 + 0 + PAH + + + KYZ004 + 170040 + Ballard + KY + US + 37.07 + -89.00 + 0 + 0 + PAH + + + ILZ053 + 130530 + Macon + IL + US + 39.86 + -88.99 + 0 + 0 + ILX + + + TNZ090 + 420900 + Hardeman + TN + US + 35.22 + -88.99 + 0 + 0 + MEG + + + ILZ065 + 130650 + Fayette + IL + US + 38.98 + -88.98 + 0 + 0 + LSX + + + MSZ014 + 240140 + Union + MS + US + 34.49 + -88.98 + 0 + 0 + MEG + + + MSZ075 + 240750 + Perry + MS + US + 31.18 + -88.98 + 0 + 0 + MOB + + + MSZ023 + 240230 + Chickasaw + MS + US + 33.91 + -88.95 + 0 + 0 + MEG + + + TNZ020 + 420200 + Gibson + TN + US + 36.01 + -88.95 + 0 + 0 + MEG + + + ILZ081 + 130810 + Franklin + IL + US + 38.00 + -88.94 + 0 + 0 + PAH + + + ILZ075 + 130750 + Jefferson + IL + US + 38.30 + -88.93 + 0 + 0 + PAH + + + ILZ085 + 130850 + Williamson + IL + US + 37.74 + -88.93 + 0 + 0 + PAH + + + ILZ070 + 130700 + Marion + IL + US + 38.65 + -88.92 + 0 + 0 + LSX + + + WIZ037 + 490370 + Waupaca + WI + US + 44.46 + -88.91 + 0 + 0 + GRB + + + MSZ004 + 240040 + Tippah + MS + US + 34.80 + -88.89 + 0 + 0 + MEG + + + ILZ019 + 130190 + La_Salle + IL + US + 41.28 + -88.88 + 0 + 0 + LOT + + + ILZ089 + 130890 + Johnson + IL + US + 37.45 + -88.88 + 0 + 0 + PAH + + + ILZ038 + 130380 + McLean + IL + US + 40.52 + -88.87 + 0 + 0 + ILX + + + ILZ043 + 130430 + De_Witt + IL + US + 40.17 + -88.87 + 0 + 0 + ILX + + + MSZ033 + 240330 + Oktibbeha + MS + US + 33.43 + -88.87 + 0 + 0 + JAN + + + MIZ001 + 220010 + Keweenaw + MI + US + 48.01 + -88.84 + 0 + 0 + MQT + + + TNZ052 + 420520 + Madison + TN + US + 35.62 + -88.84 + 0 + 0 + MEG + + + ILZ004 + 130040 + Boone + IL + US + 42.32 + -88.83 + 0 + 0 + LOT + + + MIZ084 + 220840 + Southern_Houghton + MI + US + 46.64 + -88.83 + 0 + 0 + MQT + + + ILZ061 + 130610 + Shelby + IL + US + 39.43 + -88.81 + 0 + 0 + ILX + + + ILZ011 + 130110 + DeKalb + IL + US + 41.89 + -88.77 + 0 + 0 + LOT + + + WIZ064 + 490640 + Jefferson + WI + US + 43.02 + -88.77 + 0 + 0 + MKX + + + MSZ030 + 240300 + Clay + MS + US + 33.66 + -88.75 + 0 + 0 + JAN + + + TNZ003 + 420030 + Weakley + TN + US + 36.28 + -88.73 + 0 + 0 + MEG + + + WIZ011 + 490110 + Forest + WI + US + 45.72 + -88.73 + 0 + 0 + GRB + + + WIZ020 + 490200 + Menominee + WI + US + 44.99 + -88.73 + 0 + 0 + GRB + + + WIZ031 + 490310 + Shawano + WI + US + 44.81 + -88.73 + 0 + 0 + GRB + + + ILZ094 + 130940 + Massac + IL + US + 37.20 + -88.71 + 0 + 0 + PAH + + + KYZ005 + 170050 + McCracken + KY + US + 37.08 + -88.71 + 0 + 0 + PAH + + + WIZ058 + 490580 + Dodge + WI + US + 43.42 + -88.70 + 0 + 0 + MKX + + + MSZ067 + 240670 + Wayne + MS + US + 31.66 + -88.69 + 0 + 0 + MOB + + + MSZ016 + 240160 + Lee + MS + US + 34.30 + -88.68 + 0 + 0 + MEG + + + MSZ058 + 240580 + Clarke + MS + US + 32.03 + -88.68 + 0 + 0 + JAN + + + KYZ006 + 170060 + Graves + KY + US + 36.73 + -88.66 + 0 + 0 + PAH + + + MSZ052 + 240520 + Lauderdale + MS + US + 32.40 + -88.66 + 0 + 0 + JAN + + + ILZ054 + 130540 + Moultrie + IL + US + 39.62 + -88.64 + 0 + 0 + ILX + + + MSZ079 + 240790 + George + MS + US + 30.87 + -88.64 + 0 + 0 + MOB + + + WIZ048 + 490480 + Winnebago + WI + US + 44.07 + -88.64 + 0 + 0 + GRB + + + MSZ046 + 240460 + Kemper + MS + US + 32.76 + -88.63 + 0 + 0 + JAN + + + MSZ076 + 240760 + Greene + MS + US + 31.22 + -88.63 + 0 + 0 + MOB + + + MSZ082 + 240820 + Jackson + MS + US + 30.47 + -88.63 + 0 + 0 + LIX + + + ILZ044 + 130440 + Piatt + IL + US + 40.04 + -88.61 + 0 + 0 + ILX + + + TNZ053 + 420530 + Chester + TN + US + 35.42 + -88.61 + 0 + 0 + MEG + + + ILZ032 + 130320 + Livingston + IL + US + 40.87 + -88.59 + 0 + 0 + LOT + + + ILZ066 + 130660 + Effingham + IL + US + 39.06 + -88.59 + 0 + 0 + ILX + + + MSZ005 + 240050 + Alcorn + MS + US + 34.88 + -88.58 + 0 + 0 + MEG + + + TNZ091 + 420910 + McNairy + TN + US + 35.20 + -88.58 + 0 + 0 + MEG + + + MIZ003 + 220030 + Northern_Houghton + MI + US + 47.05 + -88.57 + 0 + 0 + MQT + + + ILZ090 + 130900 + Pope + IL + US + 37.34 + -88.56 + 0 + 0 + PAH + + + MSZ039 + 240390 + Noxubee + MS + US + 33.11 + -88.56 + 0 + 0 + JAN + + + MIZ010 + 220100 + Iron + MI + US + 46.18 + -88.55 + 0 + 0 + MQT + + + ILZ082 + 130820 + Hamilton + IL + US + 38.08 + -88.54 + 0 + 0 + PAH + + + ILZ086 + 130860 + Saline + IL + US + 37.76 + -88.54 + 0 + 0 + PAH + + + WIZ070 + 490700 + Walworth + WI + US + 42.67 + -88.53 + 0 + 0 + MKX + + + MSZ009 + 240090 + Prentiss + MS + US + 34.61 + -88.52 + 0 + 0 + MEG + + + WIZ051 + 490510 + Fond_Du_Lac + WI + US + 43.74 + -88.52 + 0 + 0 + MKX + + + ILZ071 + 130710 + Clay + IL + US + 38.76 + -88.48 + 0 + 0 + ILX + + + MSZ024 + 240240 + Monroe + MS + US + 33.87 + -88.46 + 0 + 0 + MEG + + + MSZ031 + 240310 + Lowndes + MS + US + 33.52 + -88.46 + 0 + 0 + JAN + + + WIZ038 + 490380 + Outagamie + WI + US + 44.42 + -88.46 + 0 + 0 + GRB + + + ILZ005 + 130050 + McHenry + IL + US + 42.32 + -88.45 + 0 + 0 + LOT + + + ILZ020 + 130200 + Kendall + IL + US + 41.59 + -88.44 + 0 + 0 + LOT + + + TNZ021 + 420210 + Carroll + TN + US + 35.97 + -88.44 + 0 + 0 + MEG + + + ILZ012 + 130120 + Kane + IL + US + 41.94 + -88.43 + 0 + 0 + LOT + + + ILZ076 + 130760 + Wayne + IL + US + 38.43 + -88.43 + 0 + 0 + PAH + + + ILZ021 + 130210 + Grundy + IL + US + 41.29 + -88.42 + 0 + 0 + LOT + + + TNZ054 + 420540 + Henderson + TN + US + 35.62 + -88.39 + 0 + 0 + MEG + + + WIZ021 + 490210 + Northern_Oconto_County + WI + US + 45.20 + -88.39 + 0 + 0 + GRB + + + KYZ007 + 170070 + Livingston + KY + US + 37.20 + -88.38 + 0 + 0 + PAH + + + WIZ012 + 490120 + Florence + WI + US + 45.87 + -88.36 + 0 + 0 + GRB + + + MSZ017 + 240170 + Itawamba + MS + US + 34.28 + -88.35 + 0 + 0 + MEG + + + MIZ004 + 220040 + Baraga + MI + US + 46.69 + -88.33 + 0 + 0 + MQT + + + KYZ008 + 170080 + Marshall + KY + US + 36.91 + -88.31 + 0 + 0 + PAH + + + WIZ065 + 490650 + Waukesha + WI + US + 43.02 + -88.30 + 0 + 0 + MKX + + + KYZ009 + 170090 + Calloway + KY + US + 36.63 + -88.27 + 0 + 0 + PAH + + + TNZ004 + 420040 + Henry + TN + US + 36.32 + -88.26 + 0 + 0 + MEG + + + ILZ091 + 130910 + Hardin + IL + US + 37.51 + -88.25 + 0 + 0 + PAH + + + ILZ062 + 130620 + Cumberland + IL + US + 39.28 + -88.24 + 0 + 0 + ILX + + + ILZ056 + 130560 + Coles + IL + US + 39.53 + -88.22 + 0 + 0 + ILX + + + MSZ006 + 240060 + Tishomingo + MS + US + 34.73 + -88.22 + 0 + 0 + MEG + + + WIZ049 + 490490 + Calumet + WI + US + 44.07 + -88.22 + 0 + 0 + GRB + + + WIZ059 + 490590 + Washington + WI + US + 43.37 + -88.22 + 0 + 0 + MKX + + + ALZ063 + 10630 + Lower_Mobile + AL + US + 30.44 + -88.21 + 0 + 0 + MOB + + + ILZ055 + 130550 + Douglas + IL + US + 39.77 + -88.21 + 0 + 0 + ILX + + + ILZ087 + 130870 + Gallatin + IL + US + 37.75 + -88.21 + 0 + 0 + PAH + + + ALZ051 + 10510 + Choctaw + AL + US + 32.01 + -88.20 + 0 + 0 + MOB + + + ILZ039 + 130390 + Ford + IL + US + 40.70 + -88.20 + 0 + 0 + LOT + + + ILZ045 + 130450 + Champaign + IL + US + 40.14 + -88.20 + 0 + 0 + ILX + + + ALZ052 + 10520 + Washington + AL + US + 31.41 + -88.18 + 0 + 0 + MOB + + + ALZ061 + 10610 + Upper_Mobile + AL + US + 30.93 + -88.18 + 0 + 0 + MOB + + + TNZ092 + 420920 + Hardin + TN + US + 35.22 + -88.18 + 0 + 0 + MEG + + + ILZ067 + 130670 + Jasper + IL + US + 39.02 + -88.16 + 0 + 0 + ILX + + + ILZ083 + 130830 + White + IL + US + 38.08 + -88.15 + 0 + 0 + PAH + + + ALZ030 + 10300 + Sumter + AL + US + 32.65 + -88.13 + 0 + 0 + BMX + + + WIZ074 + 490740 + Southern_Oconto_County + WI + US + 44.85 + -88.12 + 0 + 0 + GRB + + + ALZ012 + 10120 + Lamar + AL + US + 33.80 + -88.11 + 0 + 0 + BMX + + + ILZ072 + 130720 + Richland + IL + US + 38.72 + -88.11 + 0 + 0 + ILX + + + TNZ055 + 420550 + Decatur + TN + US + 35.62 + -88.10 + 0 + 0 + MEG + + + WIZ013 + 490130 + Northern_Marinette_County + WI + US + 45.57 + -88.10 + 0 + 0 + GRB + + + ALZ022 + 10220 + Pickens + AL + US + 33.26 + -88.09 + 0 + 0 + BMX + + + ILZ013 + 130130 + DuPage + IL + US + 41.85 + -88.09 + 0 + 0 + LOT + + + KYZ010 + 170100 + Crittenden + KY + US + 37.34 + -88.09 + 0 + 0 + PAH + + + KYZ011 + 170110 + Lyon + KY + US + 37.03 + -88.07 + 0 + 0 + PAH + + + TNZ022 + 420220 + Benton + TN + US + 36.09 + -88.07 + 0 + 0 + OHX + + + ILZ077 + 130770 + Edwards + IL + US + 38.42 + -88.05 + 0 + 0 + PAH + + + WIZ072 + 490720 + Kenosha + WI + US + 42.58 + -88.05 + 0 + 0 + MKX + + + WIZ071 + 490710 + Racine + WI + US + 42.73 + -88.03 + 0 + 0 + MKX + + + WIZ039 + 490390 + Brown + WI + US + 44.46 + -87.99 + 0 + 0 + GRB + + + ILZ006 + 130060 + Lake + IL + US + 42.32 + -87.98 + 0 + 0 + LOT + + + ALZ031 + 10310 + Greene + AL + US + 32.84 + -87.96 + 0 + 0 + BMX + + + KYZ014 + 170140 + Union + KY + US + 37.69 + -87.95 + 0 + 0 + PAH + + + WIZ066 + 490660 + Milwaukee + WI + US + 43.02 + -87.94 + 0 + 0 + MKX + + + WIZ073 + 490730 + Southern_Marinette_County + WI + US + 45.18 + -87.94 + 0 + 0 + GRB + + + WIZ052 + 490520 + Sheboygan + WI + US + 43.72 + -87.93 + 0 + 0 + MKX + + + ALZ011 + 10110 + Marion + AL + US + 34.12 + -87.92 + 0 + 0 + BMX + + + KYZ012 + 170120 + Trigg + KY + US + 36.83 + -87.92 + 0 + 0 + PAH + + + WIZ060 + 490600 + Ozaukee + WI + US + 43.37 + -87.92 + 0 + 0 + MKX + + + ILZ014 + 130140 + Cook + IL + US + 41.81 + -87.90 + 0 + 0 + LOT + + + ILZ022 + 130220 + Will + IL + US + 41.47 + -87.90 + 0 + 0 + LOT + + + INZ085 + 140850 + Posey + IN + US + 38.01 + -87.90 + 0 + 0 + PAH + + + ILZ023 + 130230 + Kankakee + IL + US + 41.15 + -87.89 + 0 + 0 + LOT + + + KYZ013 + 170130 + Caldwell + KY + US + 37.17 + -87.89 + 0 + 0 + PAH + + + MIZ011 + 220110 + Dickinson + MI + US + 45.99 + -87.87 + 0 + 0 + MQT + + + ALZ003 + 10030 + Franklin + AL + US + 34.45 + -87.85 + 0 + 0 + HUN + + + TNZ056 + 420560 + Perry + TN + US + 35.64 + -87.85 + 0 + 0 + OHX + + + ALZ053 + 10530 + Clarke + AL + US + 31.60 + -87.84 + 0 + 0 + MOB + + + ILZ033 + 130330 + Iroquois + IL + US + 40.75 + -87.83 + 0 + 0 + LOT + + + TNZ005 + 420050 + Stewart + TN + US + 36.50 + -87.83 + 0 + 0 + OHX + + + ILZ078 + 130780 + Wabash + IL + US + 38.41 + -87.82 + 0 + 0 + PAH + + + TNZ093 + 420930 + Wayne + TN + US + 35.26 + -87.80 + 0 + 0 + OHX + + + ALZ039 + 10390 + Marengo + AL + US + 32.27 + -87.79 + 0 + 0 + BMX + + + ALZ002 + 10020 + Colbert + AL + US + 34.74 + -87.78 + 0 + 0 + HUN + + + ILZ063 + 130630 + Clark + IL + US + 39.33 + -87.78 + 0 + 0 + ILX + + + TNZ024 + 420240 + Humphreys + TN + US + 36.03 + -87.77 + 0 + 0 + OHX + + + WIZ050 + 490500 + Manitowoc + WI + US + 44.11 + -87.77 + 0 + 0 + GRB + + + ILZ057 + 130570 + Edgar + IL + US + 39.68 + -87.75 + 0 + 0 + ILX + + + TNZ023 + 420230 + Houston + TN + US + 36.28 + -87.75 + 0 + 0 + OHX + + + ILZ046 + 130460 + Vermilion + IL + US + 40.19 + -87.74 + 0 + 0 + ILX + + + ILZ068 + 130680 + Crawford + IL + US + 39.02 + -87.74 + 0 + 0 + ILX + + + ALZ062 + 10620 + Upper_Baldwin + AL + US + 31.01 + -87.72 + 0 + 0 + MOB + + + ILZ073 + 130730 + Lawrence + IL + US + 38.72 + -87.71 + 0 + 0 + ILX + + + ALZ001 + 10010 + Lauderdale + AL + US + 34.88 + -87.70 + 0 + 0 + HUN + + + ALZ064 + 10640 + Lower_Baldwin + AL + US + 30.45 + -87.70 + 0 + 0 + MOB + + + ALZ013 + 10130 + Fayette + AL + US + 33.73 + -87.68 + 0 + 0 + BMX + + + KYZ015 + 170150 + Webster + KY + US + 37.50 + -87.66 + 0 + 0 + PAH + + + INZ081 + 140810 + Gibson + IN + US + 38.35 + -87.65 + 0 + 0 + PAH + + + ALZ032 + 10320 + Hale + AL + US + 32.75 + -87.64 + 0 + 0 + BMX + + + KYZ018 + 170180 + Henderson + KY + US + 37.81 + -87.61 + 0 + 0 + PAH + + + MIZ005 + 220050 + Marquette + MI + US + 46.48 + -87.61 + 0 + 0 + MQT + + + INZ086 + 140860 + Vanderburgh + IN + US + 38.00 + -87.58 + 0 + 0 + PAH + + + KYZ016 + 170160 + Hopkins + KY + US + 37.34 + -87.58 + 0 + 0 + PAH + + + MIZ012 + 220120 + Menominee + MI + US + 45.55 + -87.57 + 0 + 0 + MQT + + + WIZ040 + 490400 + Kewaunee + WI + US + 44.50 + -87.57 + 0 + 0 + GRB + + + KYZ017 + 170170 + Christian + KY + US + 36.90 + -87.50 + 0 + 0 + PAH + + + TNZ058 + 420580 + Lewis + TN + US + 35.53 + -87.49 + 0 + 0 + OHX + + + TNZ057 + 420570 + Hickman + TN + US + 35.81 + -87.47 + 0 + 0 + OHX + + + INZ060 + 140600 + Sullivan + IN + US + 39.08 + -87.46 + 0 + 0 + IND + + + ALZ023 + 10230 + Tuscaloosa + AL + US + 33.32 + -87.45 + 0 + 0 + BMX + + + INZ043 + 140430 + Vermillion + IN + US + 39.89 + -87.45 + 0 + 0 + IND + + + INZ067 + 140670 + Knox + IN + US + 38.66 + -87.43 + 0 + 0 + IND + + + INZ051 + 140510 + Vigo + IN + US + 39.43 + -87.42 + 0 + 0 + IND + + + FLZ001 + 90010 + Inland_Escambia + FL + US + 30.86 + -87.40 + 0 + 0 + MOB + + + INZ010 + 140100 + Newton + IN + US + 40.98 + -87.40 + 0 + 0 + LOT + + + TNZ094 + 420940 + Lawrence + TN + US + 35.24 + -87.40 + 0 + 0 + OHX + + + INZ001 + 140010 + Lake + IN + US + 41.44 + -87.38 + 0 + 0 + LOT + + + TNZ006 + 420060 + Montgomery + TN + US + 36.49 + -87.38 + 0 + 0 + OHX + + + ALZ014 + 10140 + Winston + AL + US + 34.15 + -87.37 + 0 + 0 + BMX + + + ALZ055 + 10550 + Monroe + AL + US + 31.54 + -87.35 + 0 + 0 + MOB + + + TNZ025 + 420250 + Dickson + TN + US + 36.15 + -87.35 + 0 + 0 + OHX + + + ALZ004 + 10040 + Lawrence + AL + US + 34.56 + -87.32 + 0 + 0 + HUN + + + INZ019 + 140190 + Benton + IN + US + 40.61 + -87.32 + 0 + 0 + LOT + + + INZ028 + 140280 + Warren + IN + US + 40.31 + -87.32 + 0 + 0 + IND + + + ALZ015 + 10150 + Walker + AL + US + 33.76 + -87.30 + 0 + 0 + BMX + + + INZ082 + 140820 + Pike + IN + US + 38.39 + -87.28 + 0 + 0 + PAH + + + KYZ020 + 170200 + McLean + KY + US + 37.54 + -87.28 + 0 + 0 + PAH + + + ALZ033 + 10330 + Perry + AL + US + 32.59 + -87.27 + 0 + 0 + BMX + + + INZ035 + 140350 + Fountain + IN + US + 40.17 + -87.27 + 0 + 0 + IND + + + WIZ022 + 490220 + Door + WI + US + 45.05 + -87.27 + 0 + 0 + GRB + + + ALZ054 + 10540 + Wilcox + AL + US + 32.05 + -87.26 + 0 + 0 + MOB + + + INZ087 + 140870 + Warrick + IN + US + 38.06 + -87.25 + 0 + 0 + PAH + + + INZ044 + 140440 + Parke + IN + US + 39.79 + -87.23 + 0 + 0 + IND + + + FLZ002 + 90020 + Coastal_Escambia + FL + US + 30.50 + -87.20 + 0 + 0 + MOB + + + KYZ022 + 170220 + Todd + KY + US + 36.86 + -87.20 + 0 + 0 + PAH + + + ALZ059 + 10590 + Escambia + AL + US + 31.13 + -87.16 + 0 + 0 + MOB + + + ALZ034 + 10340 + Bibb + AL + US + 33.04 + -87.15 + 0 + 0 + BMX + + + ALZ040 + 10400 + Dallas + AL + US + 32.38 + -87.14 + 0 + 0 + BMX + + + KYZ021 + 170210 + Muhlenberg + KY + US + 37.23 + -87.14 + 0 + 0 + PAH + + + KYZ019 + 170190 + Daviess + KY + US + 37.75 + -87.12 + 0 + 0 + PAH + + + INZ011 + 140110 + Jasper + IN + US + 41.01 + -87.11 + 0 + 0 + LOT + + + INZ052 + 140520 + Clay + IN + US + 39.39 + -87.10 + 0 + 0 + IND + + + INZ068 + 140680 + Daviess + IN + US + 38.70 + -87.10 + 0 + 0 + IND + + + TNZ026 + 420260 + Cheatham + TN + US + 36.26 + -87.09 + 0 + 0 + OHX + + + INZ002 + 140020 + Porter + IN + US + 41.47 + -87.08 + 0 + 0 + LOT + + + TNZ060 + 420600 + Maury + TN + US + 35.64 + -87.07 + 0 + 0 + OHX + + + ALZ056 + 10560 + Conecuh + AL + US + 31.47 + -87.04 + 0 + 0 + MOB + + + FLZ003 + 90030 + Inland_Santa_Rosa + FL + US + 30.86 + -87.04 + 0 + 0 + MOB + + + ALZ005 + 10050 + Limestone + AL + US + 34.78 + -87.02 + 0 + 0 + HUN + + + INZ088 + 140880 + Spencer + IN + US + 37.99 + -87.02 + 0 + 0 + PAH + + + TNZ095 + 420950 + Giles + TN + US + 35.23 + -87.02 + 0 + 0 + OHX + + + INZ061 + 140610 + Greene + IN + US + 39.03 + -86.98 + 0 + 0 + IND + + + ALZ024 + 10240 + Jefferson + AL + US + 33.55 + -86.93 + 0 + 0 + BMX + + + MIZ013 + 220130 + Delta + MI + US + 45.82 + -86.91 + 0 + 0 + MQT + + + TNZ059 + 420590 + Williamson + TN + US + 35.88 + -86.91 + 0 + 0 + OHX + + + INZ029 + 140290 + Tippecanoe + IN + US + 40.40 + -86.90 + 0 + 0 + IND + + + INZ036 + 140360 + Montgomery + IN + US + 40.05 + -86.90 + 0 + 0 + IND + + + FLZ004 + 90040 + Coastal_Santa_Rosa + FL + US + 30.53 + -86.89 + 0 + 0 + MOB + + + INZ083 + 140830 + Dubois + IN + US + 38.36 + -86.88 + 0 + 0 + LMK + + + KYZ026 + 170260 + Ohio + KY + US + 37.48 + -86.86 + 0 + 0 + LMK + + + INZ053 + 140530 + Owen + IN + US + 39.31 + -86.85 + 0 + 0 + IND + + + KYZ070 + 170700 + Logan + KY + US + 36.86 + -86.85 + 0 + 0 + LMK + + + INZ020 + 140200 + White + IN + US + 40.75 + -86.84 + 0 + 0 + IWX + + + ALZ007 + 10070 + Morgan + AL + US + 34.50 + -86.83 + 0 + 0 + HUN + + + INZ045 + 140450 + Putnam + IN + US + 39.67 + -86.83 + 0 + 0 + IND + + + TNZ007 + 420070 + Robertson + TN + US + 36.50 + -86.82 + 0 + 0 + OHX + + + INZ069 + 140690 + Martin + IN + US + 38.70 + -86.81 + 0 + 0 + IND + + + KYZ023 + 170230 + Hancock + KY + US + 37.83 + -86.81 + 0 + 0 + LMK + + + ALZ016 + 10160 + Cullman + AL + US + 34.09 + -86.78 + 0 + 0 + HUN + + + TNZ027 + 420270 + Davidson + TN + US + 36.19 + -86.78 + 0 + 0 + OHX + + + TNZ061 + 420610 + Marshall + TN + US + 35.49 + -86.77 + 0 + 0 + OHX + + + INZ003 + 140030 + La_Porte + IN + US + 41.50 + -86.71 + 0 + 0 + IWX + + + ALZ035 + 10350 + Chilton + AL + US + 32.87 + -86.70 + 0 + 0 + BMX + + + INZ012 + 140120 + Starke + IN + US + 41.31 + -86.70 + 0 + 0 + IWX + + + INZ013 + 140130 + Pulaski + IN + US + 41.05 + -86.70 + 0 + 0 + IWX + + + ALZ025 + 10250 + Shelby + AL + US + 33.29 + -86.68 + 0 + 0 + BMX + + + ALZ057 + 10570 + Butler + AL + US + 31.75 + -86.68 + 0 + 0 + MOB + + + KYZ061 + 170610 + Butler + KY + US + 37.20 + -86.67 + 0 + 0 + LMK + + + ALZ041 + 10410 + Autauga + AL + US + 32.52 + -86.66 + 0 + 0 + BMX + + + ALZ042 + 10420 + Lowndes + AL + US + 32.19 + -86.66 + 0 + 0 + BMX + + + ALZ017 + 10170 + Blount + AL + US + 34.01 + -86.64 + 0 + 0 + BMX + + + INZ089 + 140890 + Perry + IN + US + 38.05 + -86.63 + 0 + 0 + LMK + + + FLZ006 + 90060 + Coastal_Okaloosa + FL + US + 30.55 + -86.59 + 0 + 0 + MOB + + + KYZ072 + 170720 + Simpson + KY + US + 36.77 + -86.59 + 0 + 0 + LMK + + + FLZ005 + 90050 + Inland_Okaloosa + FL + US + 30.86 + -86.58 + 0 + 0 + MOB + + + INZ021 + 140210 + Carroll + IN + US + 40.59 + -86.57 + 0 + 0 + IND + + + TNZ096 + 420960 + Lincoln + TN + US + 35.19 + -86.57 + 0 + 0 + HUN + + + MIZ077 + 220770 + Berrien + MI + US + 42.01 + -86.53 + 0 + 0 + IWX + + + ALZ006 + 10060 + Madison + AL + US + 34.74 + -86.52 + 0 + 0 + HUN + + + INZ046 + 140460 + Hendricks + IN + US + 39.77 + -86.52 + 0 + 0 + IND + + + INZ062 + 140620 + Monroe + IN + US + 39.16 + -86.52 + 0 + 0 + IND + + + INZ076 + 140760 + Orange + IN + US + 38.54 + -86.50 + 0 + 0 + LMK + + + INZ070 + 140700 + Lawrence + IN + US + 38.84 + -86.49 + 0 + 0 + IND + + + INZ037 + 140370 + Boone + IN + US + 40.06 + -86.48 + 0 + 0 + IND + + + INZ054 + 140540 + Morgan + IN + US + 39.48 + -86.48 + 0 + 0 + IND + + + MIZ006 + 220060 + Alger + MI + US + 46.43 + -86.48 + 0 + 0 + MQT + + + TNZ008 + 420080 + Sumner + TN + US + 36.45 + -86.48 + 0 + 0 + OHX + + + INZ030 + 140300 + Clinton + IN + US + 40.31 + -86.47 + 0 + 0 + IND + + + INZ084 + 140840 + Crawford + IN + US + 38.26 + -86.46 + 0 + 0 + LMK + + + TNZ075 + 420750 + Bedford + TN + US + 35.52 + -86.45 + 0 + 0 + OHX + + + ALZ060 + 10600 + Covington + AL + US + 31.26 + -86.44 + 0 + 0 + MOB + + + KYZ024 + 170240 + Breckinridge + KY + US + 37.81 + -86.42 + 0 + 0 + LMK + + + TNZ062 + 420620 + Rutherford + TN + US + 35.86 + -86.41 + 0 + 0 + OHX + + + KYZ071 + 170710 + Warren + KY + US + 36.99 + -86.40 + 0 + 0 + LMK + + + INZ022 + 140220 + Cass + IN + US + 40.75 + -86.38 + 0 + 0 + IWX + + + TNZ076 + 420760 + Moore + TN + US + 35.28 + -86.38 + 0 + 0 + HUN + + + KYZ027 + 170270 + Grayson + KY + US + 37.47 + -86.35 + 0 + 0 + LMK + + + ALZ008 + 10080 + Marshall + AL + US + 34.36 + -86.32 + 0 + 0 + HUN + + + ALZ058 + 10580 + Crenshaw + AL + US + 31.75 + -86.32 + 0 + 0 + MOB + + + ALZ026 + 10260 + St._Clair + AL + US + 33.69 + -86.31 + 0 + 0 + BMX + + + INZ004 + 140040 + St._Joseph + IN + US + 41.60 + -86.30 + 0 + 0 + IWX + + + MIZ043 + 220430 + Oceana + MI + US + 43.64 + -86.29 + 0 + 0 + GRR + + + TNZ028 + 420280 + Wilson + TN + US + 36.15 + -86.29 + 0 + 0 + OHX + + + MIZ037 + 220370 + Mason + MI + US + 44.00 + -86.28 + 0 + 0 + GRR + + + ALZ036 + 10360 + Coosa + AL + US + 32.93 + -86.27 + 0 + 0 + BMX + + + INZ014 + 140140 + Marshall + IN + US + 41.33 + -86.27 + 0 + 0 + IWX + + + KYZ062 + 170620 + Edmonson + KY + US + 37.20 + -86.27 + 0 + 0 + LMK + + + INZ063 + 140630 + Brown + IN + US + 39.19 + -86.24 + 0 + 0 + IND + + + KYZ025 + 170250 + Meade + KY + US + 38.00 + -86.24 + 0 + 0 + LMK + + + MIZ085 + 220850 + Northern_Schoolcraft + MI + US + 46.33 + -86.23 + 0 + 0 + MQT + + + ALZ044 + 10440 + Montgomery + AL + US + 32.24 + -86.21 + 0 + 0 + BMX + + + FLZ007 + 90070 + Inland_Walton + FL + US + 30.85 + -86.21 + 0 + 0 + TAE + + + INZ015 + 140150 + Fulton + IN + US + 41.05 + -86.21 + 0 + 0 + IWX + + + KYZ073 + 170730 + Allen + KY + US + 36.78 + -86.19 + 0 + 0 + LMK + + + MIZ014 + 220140 + Southern_Schoolcraft + MI + US + 46.00 + -86.17 + 0 + 0 + MQT + + + ALZ027 + 10270 + Talladega + AL + US + 33.40 + -86.15 + 0 + 0 + BMX + + + ALZ043 + 10430 + Elmore + AL + US + 32.59 + -86.14 + 0 + 0 + BMX + + + INZ047 + 140470 + Marion + IN + US + 39.78 + -86.14 + 0 + 0 + IND + + + INZ090 + 140900 + Harrison + IN + US + 38.19 + -86.13 + 0 + 0 + LMK + + + MIZ050 + 220500 + Muskegon + MI + US + 43.30 + -86.13 + 0 + 0 + GRR + + + TNZ029 + 420290 + Trousdale + TN + US + 36.40 + -86.13 + 0 + 0 + OHX + + + FLZ008 + 90080 + Coastal_Walton + FL + US + 30.49 + -86.12 + 0 + 0 + TAE + + + INZ031 + 140310 + Howard + IN + US + 40.48 + -86.12 + 0 + 0 + IND + + + INZ055 + 140550 + Johnson + IN + US + 39.49 + -86.11 + 0 + 0 + IND + + + MIZ031 + 220310 + Manistee + MI + US + 44.35 + -86.10 + 0 + 0 + APX + + + TNZ097 + 420970 + Franklin + TN + US + 35.18 + -86.10 + 0 + 0 + HUN + + + INZ077 + 140770 + Washington + IN + US + 38.60 + -86.09 + 0 + 0 + LMK + + + INZ071 + 140710 + Jackson + IN + US + 38.90 + -86.07 + 0 + 0 + IND + + + MIZ071 + 220710 + Van_Buren + MI + US + 42.25 + -86.07 + 0 + 0 + GRR + + + TNZ077 + 420770 + Coffee + TN + US + 35.50 + -86.07 + 0 + 0 + OHX + + + INZ039 + 140390 + Hamilton + IN + US + 40.08 + -86.06 + 0 + 0 + IND + + + ALZ018 + 10180 + Etowah + AL + US + 34.03 + -86.05 + 0 + 0 + BMX + + + INZ038 + 140380 + Tipton + IN + US + 40.32 + -86.05 + 0 + 0 + IND + + + TNZ063 + 420630 + Cannon + TN + US + 35.81 + -86.05 + 0 + 0 + OHX + + + MIZ025 + 220250 + Benzie + MI + US + 44.65 + -86.04 + 0 + 0 + APX + + + MIZ056 + 220560 + Ottawa + MI + US + 42.99 + -86.03 + 0 + 0 + GRR + + + INZ023 + 140230 + Miami + IN + US + 40.79 + -86.02 + 0 + 0 + IWX + + + MIZ078 + 220780 + Cass + MI + US + 41.92 + -86.00 + 0 + 0 + IWX + + + TNZ009 + 420090 + Macon + TN + US + 36.53 + -86.00 + 0 + 0 + OHX + + + ALZ065 + 10650 + Coffee + AL + US + 31.41 + -85.99 + 0 + 0 + TAE + + + KYZ028 + 170280 + Hardin + KY + US + 37.72 + -85.98 + 0 + 0 + LMK + + + ALZ009 + 10090 + Jackson + AL + US + 34.74 + -85.97 + 0 + 0 + HUN + + + KYZ074 + 170740 + Barren + KY + US + 36.95 + -85.96 + 0 + 0 + LMK + + + TNZ030 + 420300 + Smith + TN + US + 36.26 + -85.96 + 0 + 0 + OHX + + + ALZ049 + 10490 + Pike + AL + US + 31.85 + -85.93 + 0 + 0 + BMX + + + ALZ028 + 10280 + Clay + AL + US + 33.30 + -85.91 + 0 + 0 + BMX + + + KYZ063 + 170630 + Hart + KY + US + 37.30 + -85.91 + 0 + 0 + LMK + + + MIZ064 + 220640 + Allegan + MI + US + 42.60 + -85.91 + 0 + 0 + GRR + + + INZ064 + 140640 + Bartholomew + IN + US + 39.19 + -85.90 + 0 + 0 + IND + + + INZ091 + 140910 + Floyd + IN + US + 38.30 + -85.90 + 0 + 0 + LMK + + + INZ016 + 140160 + Kosciusko + IN + US + 41.25 + -85.87 + 0 + 0 + IWX + + + INZ005 + 140050 + Elkhart + IN + US + 41.60 + -85.86 + 0 + 0 + IWX + + + TNZ064 + 420640 + DeKalb + TN + US + 35.98 + -85.84 + 0 + 0 + OHX + + + ALZ019 + 10190 + Calhoun + AL + US + 33.76 + -85.83 + 0 + 0 + BMX + + + ALZ068 + 10680 + Geneva + AL + US + 31.10 + -85.83 + 0 + 0 + TAE + + + ALZ010 + 10100 + De_Kalb + AL + US + 34.53 + -85.82 + 0 + 0 + HUN + + + ALZ037 + 10370 + Tallapoosa + AL + US + 32.81 + -85.80 + 0 + 0 + BMX + + + INZ024 + 140240 + Wabash + IN + US + 40.85 + -85.80 + 0 + 0 + IWX + + + INZ056 + 140560 + Shelby + IN + US + 39.52 + -85.80 + 0 + 0 + IND + + + MIZ038 + 220380 + Lake + MI + US + 43.99 + -85.80 + 0 + 0 + GRR + + + MIZ044 + 220440 + Newaygo + MI + US + 43.56 + -85.80 + 0 + 0 + GRR + + + FLZ009 + 90090 + Holmes + FL + US + 30.86 + -85.77 + 0 + 0 + TAE + + + INZ048 + 140480 + Hancock + IN + US + 39.83 + -85.77 + 0 + 0 + IND + + + TNZ078 + 420780 + Warren + TN + US + 35.68 + -85.77 + 0 + 0 + OHX + + + INZ078 + 140780 + Scott + IN + US + 38.69 + -85.74 + 0 + 0 + LMK + + + ALZ045 + 10450 + Macon + AL + US + 32.42 + -85.72 + 0 + 0 + BMX + + + INZ040 + 140400 + Madison + IN + US + 40.17 + -85.72 + 0 + 0 + IND + + + ALZ046 + 10460 + Bullock + AL + US + 32.10 + -85.71 + 0 + 0 + BMX + + + FLZ010 + 90100 + Washington + FL + US + 30.62 + -85.71 + 0 + 0 + TAE + + + INZ092 + 140920 + Clark + IN + US + 38.44 + -85.71 + 0 + 0 + LMK + + + KYZ075 + 170750 + Monroe + KY + US + 36.73 + -85.71 + 0 + 0 + LMK + + + MIZ020 + 220200 + Leelanau + MI + US + 44.99 + -85.71 + 0 + 0 + APX + + + KYZ029 + 170290 + Bullitt + KY + US + 37.97 + -85.70 + 0 + 0 + LMK + + + TNZ079 + 420790 + Grundy + TN + US + 35.38 + -85.70 + 0 + 0 + OHX + + + KYZ030 + 170300 + Jefferson + KY + US + 38.19 + -85.69 + 0 + 0 + LMK + + + KYZ053 + 170530 + Larue + KY + US + 37.57 + -85.69 + 0 + 0 + LMK + + + FLZ012 + 90120 + Bay + FL + US + 30.31 + -85.68 + 0 + 0 + TAE + + + TNZ031 + 420310 + Jackson + TN + US + 36.37 + -85.67 + 0 + 0 + OHX + + + INZ032 + 140320 + Grant + IN + US + 40.53 + -85.66 + 0 + 0 + IWX + + + INZ072 + 140720 + Jennings + IN + US + 39.00 + -85.63 + 0 + 0 + IND + + + ALZ020 + 10200 + Cherokee + AL + US + 34.23 + -85.62 + 0 + 0 + BMX + + + KYZ076 + 170760 + Metcalfe + KY + US + 37.01 + -85.62 + 0 + 0 + LMK + + + TNZ098 + 420980 + Marion + TN + US + 35.16 + -85.62 + 0 + 0 + MRX + + + ALZ066 + 10660 + Dale + AL + US + 31.41 + -85.61 + 0 + 0 + TAE + + + ALZ021 + 10210 + Cleburne + AL + US + 33.72 + -85.60 + 0 + 0 + BMX + + + MIZ026 + 220260 + Grand_Traverse + MI + US + 44.75 + -85.58 + 0 + 0 + APX + + + MIZ032 + 220320 + Wexford + MI + US + 44.34 + -85.58 + 0 + 0 + APX + + + MIZ057 + 220570 + Kent + MI + US + 43.03 + -85.56 + 0 + 0 + GRR + + + MIZ079 + 220790 + St._Joseph + MI + US + 41.92 + -85.55 + 0 + 0 + IWX + + + MIZ007 + 220070 + Luce + MI + US + 46.50 + -85.54 + 0 + 0 + MQT + + + TNZ010 + 420100 + Clay + TN + US + 36.52 + -85.54 + 0 + 0 + OHX + + + KYZ064 + 170640 + Green + KY + US + 37.29 + -85.53 + 0 + 0 + LMK + + + MIZ072 + 220720 + Kalamazoo + MI + US + 42.25 + -85.53 + 0 + 0 + GRR + + + INZ017 + 140170 + Whitley + IN + US + 41.15 + -85.50 + 0 + 0 + IWX + + + INZ065 + 140650 + Decatur + IN + US + 39.29 + -85.50 + 0 + 0 + IND + + + INZ025 + 140250 + Huntington + IN + US + 40.84 + -85.49 + 0 + 0 + IWX + + + GAZ001 + 100010 + Dade + GA + US + 34.81 + -85.48 + 0 + 0 + FFC + + + INZ057 + 140570 + Rush + IN + US + 39.62 + -85.48 + 0 + 0 + IND + + + KYZ031 + 170310 + Oldham + KY + US + 38.42 + -85.47 + 0 + 0 + LMK + + + INZ079 + 140790 + Jefferson + IN + US + 38.75 + -85.45 + 0 + 0 + LMK + + + KYZ045 + 170450 + Nelson + KY + US + 37.76 + -85.45 + 0 + 0 + LMK + + + TNZ032 + 420320 + Putnam + TN + US + 36.15 + -85.45 + 0 + 0 + OHX + + + ALZ029 + 10290 + Randolph + AL + US + 33.31 + -85.44 + 0 + 0 + BMX + + + TNZ065 + 420650 + White + TN + US + 35.94 + -85.44 + 0 + 0 + OHX + + + INZ006 + 140060 + Lagrange + IN + US + 41.65 + -85.43 + 0 + 0 + IWX + + + INZ008 + 140080 + Noble + IN + US + 41.41 + -85.43 + 0 + 0 + IWX + + + TNZ080 + 420800 + Van_Buren + TN + US + 35.69 + -85.43 + 0 + 0 + OHX + + + KYZ081 + 170810 + Cumberland + KY + US + 36.78 + -85.42 + 0 + 0 + LMK + + + TNZ081 + 420810 + Sequatchie + TN + US + 35.36 + -85.42 + 0 + 0 + MRX + + + ALZ050 + 10500 + Barbour + AL + US + 31.89 + -85.40 + 0 + 0 + BMX + + + INZ041 + 140410 + Delaware + IN + US + 40.24 + -85.40 + 0 + 0 + IND + + + INZ049 + 140490 + Henry + IN + US + 39.94 + -85.40 + 0 + 0 + IND + + + ALZ038 + 10380 + Chambers + AL + US + 32.93 + -85.36 + 0 + 0 + BMX + + + ALZ069 + 10690 + Houston + AL + US + 31.16 + -85.35 + 0 + 0 + TAE + + + ALZ047 + 10470 + Lee + AL + US + 32.58 + -85.34 + 0 + 0 + BMX + + + KYZ065 + 170650 + Taylor + KY + US + 37.33 + -85.34 + 0 + 0 + LMK + + + MIZ039 + 220390 + Osceola + MI + US + 43.99 + -85.33 + 0 + 0 + GRR + + + MIZ045 + 220450 + Mecosta + MI + US + 43.64 + -85.33 + 0 + 0 + GRR + + + INZ033 + 140330 + Blackford + IN + US + 40.49 + -85.32 + 0 + 0 + IWX + + + GAZ011 + 100110 + Chattooga + GA + US + 34.44 + -85.31 + 0 + 0 + FFC + + + KYZ032 + 170320 + Trimble + KY + US + 38.62 + -85.31 + 0 + 0 + LMK + + + KYZ038 + 170380 + Spencer + KY + US + 38.05 + -85.31 + 0 + 0 + LMK + + + MIZ065 + 220650 + Barry + MI + US + 42.60 + -85.31 + 0 + 0 + GRR + + + GAZ002 + 100020 + Walker + GA + US + 34.79 + -85.29 + 0 + 0 + FFC + + + KYZ077 + 170770 + Adair + KY + US + 37.12 + -85.29 + 0 + 0 + LMK + + + KYZ054 + 170540 + Marion + KY + US + 37.57 + -85.28 + 0 + 0 + LMK + + + TNZ033 + 420330 + Overton + TN + US + 36.35 + -85.28 + 0 + 0 + OHX + + + INZ073 + 140730 + Ripley + IN + US + 39.11 + -85.27 + 0 + 0 + ILN + + + INZ026 + 140260 + Wells + IN + US + 40.76 + -85.26 + 0 + 0 + IWX + + + ALZ067 + 10670 + Henry + AL + US + 31.55 + -85.23 + 0 + 0 + TAE + + + FLZ011 + 90110 + Jackson + FL + US + 30.79 + -85.23 + 0 + 0 + TAE + + + GAZ019 + 100190 + Floyd + GA + US + 34.34 + -85.23 + 0 + 0 + FFC + + + FLZ014 + 90140 + Gulf + FL + US + 29.94 + -85.22 + 0 + 0 + TAE + + + KYZ034 + 170340 + Shelby + KY + US + 38.20 + -85.22 + 0 + 0 + LMK + + + GAZ041 + 100410 + Haralson + GA + US + 33.78 + -85.21 + 0 + 0 + FFC + + + KYZ046 + 170460 + Washington + KY + US + 37.77 + -85.20 + 0 + 0 + LMK + + + MIZ051 + 220510 + Montcalm + MI + US + 43.30 + -85.20 + 0 + 0 + GRR + + + TNZ099 + 420990 + Hamilton + TN + US + 35.23 + -85.20 + 0 + 0 + MRX + + + GAZ030 + 100300 + Polk + GA + US + 34.00 + -85.17 + 0 + 0 + FFC + + + INZ058 + 140580 + Fayette + IN + US + 39.65 + -85.17 + 0 + 0 + ILN + + + ALZ048 + 10480 + Russell + AL + US + 32.29 + -85.16 + 0 + 0 + BMX + + + FLZ013 + 90130 + Calhoun + FL + US + 30.40 + -85.16 + 0 + 0 + TAE + + + TNZ082 + 420820 + Bledsoe + TN + US + 35.57 + -85.16 + 0 + 0 + MRX + + + KYZ082 + 170820 + Clinton + KY + US + 36.75 + -85.15 + 0 + 0 + LMK + + + MIZ021 + 220210 + Antrim + MI + US + 45.01 + -85.15 + 0 + 0 + APX + + + KYZ089 + 170890 + Carroll + KY + US + 38.68 + -85.14 + 0 + 0 + ILN + + + TNZ011 + 420110 + Pickett + TN + US + 36.52 + -85.14 + 0 + 0 + OHX + + + GAZ003 + 100030 + Catoosa + GA + US + 34.88 + -85.12 + 0 + 0 + FFC + + + KYZ033 + 170330 + Henry + KY + US + 38.47 + -85.12 + 0 + 0 + LMK + + + GAZ052 + 100520 + Heard + GA + US + 33.28 + -85.11 + 0 + 0 + FFC + + + MIZ033 + 220330 + Missaukee + MI + US + 44.34 + -85.10 + 0 + 0 + APX + + + MIZ027 + 220270 + Kalkaska + MI + US + 44.69 + -85.09 + 0 + 0 + APX + + + MIZ058 + 220580 + Ionia + MI + US + 42.95 + -85.08 + 0 + 0 + GRR + + + GAZ042 + 100420 + Carroll + GA + US + 33.62 + -85.07 + 0 + 0 + FFC + + + INZ018 + 140180 + Allen + IN + US + 41.11 + -85.07 + 0 + 0 + IWX + + + KYZ078 + 170780 + Russell + KY + US + 37.01 + -85.07 + 0 + 0 + LMK + + + INZ066 + 140660 + Franklin + IN + US + 39.39 + -85.06 + 0 + 0 + ILN + + + MIZ019 + 220190 + Charlevoix + MI + US + 45.25 + -85.06 + 0 + 0 + APX + + + MIZ080 + 220800 + Branch + MI + US + 41.92 + -85.06 + 0 + 0 + IWX + + + GAZ066 + 100660 + Troup + GA + US + 33.04 + -85.04 + 0 + 0 + FFC + + + GAZ120 + 101200 + Quitman + GA + US + 31.88 + -85.02 + 0 + 0 + TAE + + + INZ050 + 140500 + Wayne + IN + US + 39.87 + -85.02 + 0 + 0 + ILN + + + INZ034 + 140340 + Jay + IN + US + 40.45 + -85.01 + 0 + 0 + IWX + + + INZ042 + 140420 + Randolph + IN + US + 40.17 + -85.01 + 0 + 0 + IND + + + MIZ073 + 220730 + Calhoun + MI + US + 42.25 + -85.01 + 0 + 0 + GRR + + + INZ080 + 140800 + Switzerland + IN + US + 38.81 + -85.00 + 0 + 0 + ILN + + + KYZ039 + 170390 + Anderson + KY + US + 38.00 + -85.00 + 0 + 0 + LMK + + + INZ007 + 140070 + Steuben + IN + US + 41.65 + -84.99 + 0 + 0 + IWX + + + INZ009 + 140090 + De_Kalb + IN + US + 41.41 + -84.99 + 0 + 0 + IWX + + + INZ075 + 140750 + Ohio + IN + US + 38.97 + -84.99 + 0 + 0 + ILN + + + MIZ015 + 220150 + Mackinac + MI + US + 46.04 + -84.99 + 0 + 0 + APX + + + GAZ004 + 100040 + Whitfield + GA + US + 34.80 + -84.98 + 0 + 0 + FFC + + + INZ074 + 140740 + Dearborn + IN + US + 39.12 + -84.98 + 0 + 0 + ILN + + + TNZ066 + 420660 + Cumberland + TN + US + 35.96 + -84.98 + 0 + 0 + OHX + + + GAZ121 + 101210 + Clay + GA + US + 31.64 + -84.96 + 0 + 0 + TAE + + + KYZ066 + 170660 + Casey + KY + US + 37.33 + -84.95 + 0 + 0 + LMK + + + MIZ016 + 220160 + Emmet + MI + US + 45.53 + -84.95 + 0 + 0 + APX + + + INZ027 + 140270 + Adams + IN + US + 40.76 + -84.94 + 0 + 0 + IWX + + + INZ059 + 140590 + Union + IN + US + 39.62 + -84.93 + 0 + 0 + ILN + + + GAZ078 + 100780 + Harris + GA + US + 32.73 + -84.92 + 0 + 0 + FFC + + + TNZ083 + 420830 + Rhea + TN + US + 35.62 + -84.92 + 0 + 0 + MRX + + + KYZ035 + 170350 + Franklin + KY + US + 38.23 + -84.89 + 0 + 0 + LMK + + + TNZ034 + 420340 + Fentress + TN + US + 36.36 + -84.89 + 0 + 0 + OHX + + + GAZ031 + 100310 + Paulding + GA + US + 33.93 + -84.88 + 0 + 0 + FFC + + + GAZ012 + 100120 + Gordon + GA + US + 34.51 + -84.87 + 0 + 0 + FFC + + + GAZ089 + 100890 + Muscogee + GA + US + 32.49 + -84.87 + 0 + 0 + FFC + + + GAZ142 + 101420 + Early + GA + US + 31.30 + -84.87 + 0 + 0 + TAE + + + GAZ155 + 101550 + Seminole + GA + US + 30.90 + -84.87 + 0 + 0 + TAE + + + KYZ047 + 170470 + Mercer + KY + US + 37.82 + -84.87 + 0 + 0 + LMK + + + KYZ055 + 170550 + Boyle + KY + US + 37.63 + -84.86 + 0 + 0 + LMK + + + FLZ026 + 90260 + Liberty + FL + US + 30.29 + -84.85 + 0 + 0 + TAE + + + GAZ102 + 101020 + Stewart + GA + US + 32.07 + -84.85 + 0 + 0 + FFC + + + KYZ090 + 170900 + Gallatin + KY + US + 38.77 + -84.85 + 0 + 0 + ILN + + + MIZ040 + 220400 + Clare + MI + US + 43.99 + -84.85 + 0 + 0 + GRR + + + MIZ046 + 220460 + Isabella + MI + US + 43.64 + -84.85 + 0 + 0 + GRR + + + TNZ100 + 421000 + Bradley + TN + US + 35.18 + -84.85 + 0 + 0 + MRX + + + GAZ020 + 100200 + Bartow + GA + US + 34.25 + -84.84 + 0 + 0 + FFC + + + MIZ066 + 220660 + Eaton + MI + US + 42.60 + -84.84 + 0 + 0 + GRR + + + KYZ083 + 170830 + Wayne + KY + US + 36.80 + -84.83 + 0 + 0 + JKL + + + KYZ094 + 170940 + Owen + KY + US + 38.53 + -84.83 + 0 + 0 + ILN + + + GAZ090 + 100900 + Chattahoochee + GA + US + 32.38 + -84.82 + 0 + 0 + FFC + + + TNZ084 + 420840 + Meigs + TN + US + 35.52 + -84.82 + 0 + 0 + MRX + + + FLZ015 + 90150 + Franklin + FL + US + 29.80 + -84.77 + 0 + 0 + TAE + + + GAZ005 + 100050 + Murray + GA + US + 34.79 + -84.76 + 0 + 0 + FFC + + + KYZ040 + 170400 + Woodford + KY + US + 38.02 + -84.76 + 0 + 0 + LMK + + + GAZ053 + 100530 + Coweta + GA + US + 33.35 + -84.75 + 0 + 0 + FFC + + + KYZ091 + 170910 + Boone + KY + US + 38.96 + -84.75 + 0 + 0 + ILN + + + GAZ043 + 100430 + Douglas + GA + US + 33.69 + -84.74 + 0 + 0 + FFC + + + GAZ122 + 101220 + Randolph + GA + US + 31.77 + -84.74 + 0 + 0 + TAE + + + GAZ143 + 101430 + Miller + GA + US + 31.17 + -84.72 + 0 + 0 + TAE + + + GAZ067 + 100670 + Meriwether + GA + US + 33.03 + -84.67 + 0 + 0 + FFC + + + KYZ067 + 170670 + Lincoln + KY + US + 37.44 + -84.66 + 0 + 0 + LMK + + + OHZ060 + 350600 + Preble + OH + US + 39.74 + -84.65 + 0 + 0 + ILN + + + KYZ095 + 170950 + Grant + KY + US + 38.64 + -84.64 + 0 + 0 + ILN + + + TNZ085 + 420850 + McMinn + TN + US + 35.45 + -84.63 + 0 + 0 + MRX + + + GAZ123 + 101230 + Calhoun + GA + US + 31.54 + -84.62 + 0 + 0 + TAE + + + GAZ156 + 101560 + Decatur + GA + US + 30.89 + -84.62 + 0 + 0 + TAE + + + MIZ022 + 220220 + Otsego + MI + US + 45.03 + -84.62 + 0 + 0 + APX + + + OHZ034 + 350340 + Mercer + OH + US + 40.54 + -84.62 + 0 + 0 + ILN + + + OHZ042 + 350420 + Darke + OH + US + 40.14 + -84.62 + 0 + 0 + ILN + + + TNZ035 + 420350 + Morgan + TN + US + 36.14 + -84.62 + 0 + 0 + MRX + + + FLZ016 + 90160 + Gadsden + FL + US + 30.56 + -84.61 + 0 + 0 + TAE + + + KYZ079 + 170790 + Pulaski + KY + US + 37.12 + -84.61 + 0 + 0 + JKL + + + MIZ028 + 220280 + Crawford + MI + US + 44.69 + -84.61 + 0 + 0 + APX + + + MIZ034 + 220340 + Roscommon + MI + US + 44.34 + -84.61 + 0 + 0 + APX + + + MIZ052 + 220520 + Gratiot + MI + US + 43.30 + -84.61 + 0 + 0 + GRR + + + MIZ059 + 220590 + Clinton + MI + US + 42.95 + -84.60 + 0 + 0 + GRR + + + MIZ081 + 220810 + Hillsdale + MI + US + 41.89 + -84.60 + 0 + 0 + IWX + + + GAZ044 + 100440 + South_Fulton + GA + US + 33.62 + -84.59 + 0 + 0 + FFC + + + KYZ036 + 170360 + Scott + KY + US + 38.30 + -84.59 + 0 + 0 + LMK + + + KYZ048 + 170480 + Jessamine + KY + US + 37.87 + -84.59 + 0 + 0 + LMK + + + OHZ070 + 350700 + Butler + OH + US + 39.44 + -84.58 + 0 + 0 + ILN + + + OHZ015 + 350150 + Paulding + OH + US + 41.12 + -84.57 + 0 + 0 + IWX + + + OHZ024 + 350240 + Van_Wert + OH + US + 40.84 + -84.57 + 0 + 0 + IWX + + + TNZ101 + 421010 + West_Polk + TN + US + 35.14 + -84.57 + 0 + 0 + MRX + + + GAZ032 + 100320 + Cobb + GA + US + 33.93 + -84.56 + 0 + 0 + FFC + + + OHZ001 + 350010 + Williams + OH + US + 41.57 + -84.56 + 0 + 0 + IWX + + + KYZ056 + 170560 + Garrard + KY + US + 37.65 + -84.55 + 0 + 0 + LMK + + + GAZ103 + 101030 + Webster + GA + US + 32.07 + -84.54 + 0 + 0 + FFC + + + OHZ077 + 350770 + Hamilton + OH + US + 39.16 + -84.54 + 0 + 0 + ILN + + + GAZ091 + 100910 + Marion + GA + US + 32.35 + -84.52 + 0 + 0 + FFC + + + KYZ084 + 170840 + McCreary + KY + US + 36.78 + -84.52 + 0 + 0 + JKL + + + KYZ092 + 170920 + Kenton + KY + US + 38.94 + -84.52 + 0 + 0 + ILN + + + TNZ067 + 420670 + Roane + TN + US + 35.85 + -84.52 + 0 + 0 + MRX + + + OHZ004 + 350040 + Defiance + OH + US + 41.29 + -84.51 + 0 + 0 + IWX + + + TNZ012 + 420120 + Scott + TN + US + 36.39 + -84.51 + 0 + 0 + MRX + + + GAZ054 + 100540 + Fayette + GA + US + 33.41 + -84.49 + 0 + 0 + FFC + + + GAZ079 + 100790 + Talbot + GA + US + 32.70 + -84.49 + 0 + 0 + FFC + + + KYZ041 + 170410 + Fayette + KY + US + 38.03 + -84.48 + 0 + 0 + LMK + + + MIZ017 + 220170 + Cheboygan + MI + US + 45.49 + -84.47 + 0 + 0 + APX + + + GAZ013 + 100130 + Pickens + GA + US + 34.47 + -84.46 + 0 + 0 + FFC + + + GAZ021 + 100210 + Cherokee + GA + US + 34.25 + -84.46 + 0 + 0 + FFC + + + TNZ102 + 421020 + East_Polk + TN + US + 35.12 + -84.44 + 0 + 0 + MRX + + + MIZ074 + 220740 + Jackson + MI + US + 42.25 + -84.43 + 0 + 0 + GRR + + + GAZ007 + 100070 + Gilmer + GA + US + 34.70 + -84.42 + 0 + 0 + FFC + + + GAZ124 + 101240 + Terrell + GA + US + 31.79 + -84.42 + 0 + 0 + TAE + + + FLZ027 + 90270 + Wakulla + FL + US + 30.14 + -84.40 + 0 + 0 + TAE + + + GAZ068 + 100680 + Pike + GA + US + 33.09 + -84.39 + 0 + 0 + FFC + + + GAZ144 + 101440 + Baker + GA + US + 31.27 + -84.39 + 0 + 0 + TAE + + + MIZ041 + 220410 + Gladwin + MI + US + 43.99 + -84.39 + 0 + 0 + APX + + + MIZ047 + 220470 + Midland + MI + US + 43.65 + -84.39 + 0 + 0 + DTX + + + KYZ093 + 170930 + Campbell + KY + US + 38.96 + -84.37 + 0 + 0 + ILN + + + KYZ096 + 170960 + Pendleton + KY + US + 38.70 + -84.37 + 0 + 0 + ILN + + + MIZ067 + 220670 + Ingham + MI + US + 42.60 + -84.37 + 0 + 0 + GRR + + + GAZ033 + 100330 + North_Fulton + GA + US + 33.92 + -84.35 + 0 + 0 + FFC + + + GAZ055 + 100550 + Clayton + GA + US + 33.50 + -84.35 + 0 + 0 + FFC + + + MIZ008 + 220080 + Chippewa + MI + US + 46.34 + -84.35 + 0 + 0 + APX + + + TNZ068 + 420680 + Loudon + TN + US + 35.76 + -84.35 + 0 + 0 + MRX + + + FLZ017 + 90170 + Leon + FL + US + 30.49 + -84.34 + 0 + 0 + TAE + + + KYZ037 + 170370 + Harrison + KY + US + 38.43 + -84.33 + 0 + 0 + LMK + + + KYZ068 + 170680 + Rockcastle + KY + US + 37.35 + -84.33 + 0 + 0 + JKL + + + GAZ069 + 100690 + Upson + GA + US + 32.85 + -84.32 + 0 + 0 + FFC + + + KYZ057 + 170570 + Madison + KY + US + 37.72 + -84.31 + 0 + 0 + LMK + + + GAZ092 + 100920 + Schley + GA + US + 32.29 + -84.30 + 0 + 0 + FFC + + + GAZ056 + 100560 + Spalding + GA + US + 33.27 + -84.29 + 0 + 0 + FFC + + + TNZ086 + 420860 + Northwest_Monroe + TN + US + 35.46 + -84.28 + 0 + 0 + MRX + + + OHZ061 + 350610 + Montgomery + OH + US + 39.75 + -84.27 + 0 + 0 + ILN + + + GAZ145 + 101450 + Mitchell + GA + US + 31.26 + -84.25 + 0 + 0 + TAE + + + GAZ080 + 100800 + Taylor + GA + US + 32.55 + -84.23 + 0 + 0 + FFC + + + GAZ006 + 100060 + Fannin + GA + US + 34.80 + -84.22 + 0 + 0 + FFC + + + GAZ157 + 101570 + Grady + GA + US + 30.88 + -84.22 + 0 + 0 + TAE + + + OHZ051 + 350510 + Miami + OH + US + 40.04 + -84.22 + 0 + 0 + ILN + + + GAZ125 + 101250 + Dougherty + GA + US + 31.55 + -84.21 + 0 + 0 + TAE + + + KYZ042 + 170420 + Bourbon + KY + US + 38.22 + -84.21 + 0 + 0 + LMK + + + OHZ043 + 350430 + Shelby + OH + US + 40.33 + -84.21 + 0 + 0 + ILN + + + TNZ036 + 420360 + Anderson + TN + US + 36.10 + -84.20 + 0 + 0 + MRX + + + GAZ045 + 100450 + DeKalb + GA + US + 33.79 + -84.19 + 0 + 0 + FFC + + + GAZ104 + 101040 + Sumter + GA + US + 32.05 + -84.18 + 0 + 0 + FFC + + + KYZ049 + 170490 + Clark + KY + US + 37.97 + -84.17 + 0 + 0 + LMK + + + OHZ071 + 350710 + Warren + OH + US + 39.42 + -84.17 + 0 + 0 + ILN + + + OHZ035 + 350350 + Auglaize + OH + US + 40.52 + -84.16 + 0 + 0 + ILN + + + GAZ014 + 100140 + Dawson + GA + US + 34.48 + -84.15 + 0 + 0 + FFC + + + GAZ070 + 100700 + Lamar + GA + US + 33.06 + -84.15 + 0 + 0 + FFC + + + MIZ060 + 220600 + Shiawassee + MI + US + 42.96 + -84.15 + 0 + 0 + DTX + + + OHZ078 + 350780 + Clermont + OH + US + 39.02 + -84.15 + 0 + 0 + ILN + + + TNZ087 + 420870 + Southeast_Monroe + TN + US + 35.38 + -84.15 + 0 + 0 + MRX + + + GAZ057 + 100570 + Henry + GA + US + 33.48 + -84.14 + 0 + 0 + FFC + + + TNZ013 + 420130 + Campbell + TN + US + 36.39 + -84.14 + 0 + 0 + MRX + + + GAZ126 + 101260 + Lee + GA + US + 31.77 + -84.13 + 0 + 0 + TAE + + + MIZ023 + 220230 + Montmorency + MI + US + 45.03 + -84.13 + 0 + 0 + APX + + + MIZ029 + 220290 + Oscoda + MI + US + 44.68 + -84.13 + 0 + 0 + APX + + + MIZ035 + 220350 + Ogemaw + MI + US + 44.34 + -84.13 + 0 + 0 + APX + + + OHZ016 + 350160 + Putnam + OH + US + 41.01 + -84.13 + 0 + 0 + IWX + + + OHZ025 + 350250 + Allen + OH + US + 40.78 + -84.13 + 0 + 0 + IWX + + + KYZ080 + 170800 + Laurel + KY + US + 37.13 + -84.12 + 0 + 0 + JKL + + + KYZ085 + 170850 + Whitley + KY + US + 36.78 + -84.12 + 0 + 0 + JKL + + + OHZ002 + 350020 + Fulton + OH + US + 41.60 + -84.12 + 0 + 0 + IWX + + + OHZ005 + 350050 + Henry + OH + US + 41.32 + -84.10 + 0 + 0 + IWX + + + GAZ022 + 100220 + Forsyth + GA + US + 34.19 + -84.09 + 0 + 0 + FFC + + + KYZ097 + 170970 + Bracken + KY + US + 38.68 + -84.08 + 0 + 0 + ILN + + + KYZ098 + 170980 + Robertson + KY + US + 38.51 + -84.08 + 0 + 0 + ILN + + + MIZ082 + 220820 + Lenawee + MI + US + 41.90 + -84.07 + 0 + 0 + DTX + + + MIZ048 + 220480 + Bay + MI + US + 43.74 + -84.06 + 0 + 0 + DTX + + + GAZ046 + 100460 + Rockdale + GA + US + 33.66 + -84.04 + 0 + 0 + FFC + + + GAZ093 + 100930 + Macon + GA + US + 32.35 + -84.04 + 0 + 0 + FFC + + + GAZ034 + 100340 + Gwinnett + GA + US + 33.96 + -84.03 + 0 + 0 + FFC + + + MIZ053 + 220530 + Saginaw + MI + US + 43.35 + -84.03 + 0 + 0 + DTX + + + KYZ043 + 170430 + Nicholas + KY + US + 38.33 + -84.02 + 0 + 0 + LMK + + + GAZ015 + 100150 + Lumpkin + GA + US + 34.57 + -84.01 + 0 + 0 + FFC + + + NCZ060 + 330600 + Cherokee + NC + US + 35.14 + -84.01 + 0 + 0 + MRX + + + KYZ069 + 170690 + Jackson + KY + US + 37.42 + -84.00 + 0 + 0 + JKL + + + GAZ008 + 100080 + Union + GA + US + 34.81 + -83.98 + 0 + 0 + FFC + + + GAZ058 + 100580 + Butts + GA + US + 33.32 + -83.97 + 0 + 0 + FFC + + + GAZ081 + 100810 + Crawford + GA + US + 32.69 + -83.97 + 0 + 0 + FFC + + + TNZ069 + 420690 + Knox + TN + US + 35.99 + -83.96 + 0 + 0 + MRX + + + KYZ058 + 170580 + Estill + KY + US + 37.70 + -83.93 + 0 + 0 + JKL + + + GAZ071 + 100710 + Monroe + GA + US + 33.02 + -83.92 + 0 + 0 + FFC + + + GAZ158 + 101580 + Thomas + GA + US + 30.87 + -83.92 + 0 + 0 + TAE + + + KYZ050 + 170500 + Montgomery + KY + US + 38.05 + -83.92 + 0 + 0 + JKL + + + TNZ071 + 420710 + NW_Blount + TN + US + 35.71 + -83.92 + 0 + 0 + MRX + + + MIZ068 + 220680 + Livingston + MI + US + 42.61 + -83.91 + 0 + 0 + DTX + + + OHZ062 + 350620 + Greene + OH + US + 39.70 + -83.88 + 0 + 0 + ILN + + + MIZ042 + 220420 + Arenac + MI + US + 44.04 + -83.87 + 0 + 0 + APX + + + GAZ048 + 100480 + Newton + GA + US + 33.56 + -83.86 + 0 + 0 + FFC + + + GAZ094 + 100940 + Peach + GA + US + 32.56 + -83.86 + 0 + 0 + FFC + + + OHZ079 + 350790 + Brown + OH + US + 38.95 + -83.86 + 0 + 0 + ILN + + + FLZ018 + 90180 + Jefferson + FL + US + 30.38 + -83.84 + 0 + 0 + TAE + + + GAZ023 + 100230 + Hall + GA + US + 34.30 + -83.84 + 0 + 0 + FFC + + + GAZ127 + 101270 + Worth + GA + US + 31.59 + -83.84 + 0 + 0 + TAE + + + KYZ059 + 170590 + Powell + KY + US + 37.83 + -83.84 + 0 + 0 + JKL + + + KYZ086 + 170860 + Knox + KY + US + 36.87 + -83.84 + 0 + 0 + JKL + + + MIZ075 + 220750 + Washtenaw + MI + US + 42.26 + -83.84 + 0 + 0 + DTX + + + TNZ037 + 420370 + Union + TN + US + 36.30 + -83.84 + 0 + 0 + MRX + + + TNZ072 + 420720 + Blount_Smoky_Mountains + TN + US + 35.57 + -83.84 + 0 + 0 + MRX + + + GAZ105 + 101050 + Dooly + GA + US + 32.16 + -83.82 + 0 + 0 + FFC + + + KYZ099 + 170990 + Mason + KY + US + 38.62 + -83.82 + 0 + 0 + ILN + + + MIZ018 + 220180 + Presque_Isle + MI + US + 45.42 + -83.82 + 0 + 0 + APX + + + NCZ058 + 330580 + Graham + NC + US + 35.34 + -83.81 + 0 + 0 + GSP + + + OHZ072 + 350720 + Clinton + OH + US + 39.39 + -83.79 + 0 + 0 + ILN + + + GAZ106 + 101060 + Crisp + GA + US + 31.91 + -83.78 + 0 + 0 + FFC + + + OHZ053 + 350530 + Clark + OH + US + 39.90 + -83.78 + 0 + 0 + ILN + + + OHZ044 + 350440 + Logan + OH + US + 40.38 + -83.76 + 0 + 0 + ILN + + + OHZ052 + 350520 + Champaign + OH + US + 40.14 + -83.76 + 0 + 0 + ILN + + + GAZ016 + 100160 + White + GA + US + 34.65 + -83.75 + 0 + 0 + FFC + + + GAZ047 + 100470 + Walton + GA + US + 33.76 + -83.75 + 0 + 0 + FFC + + + GAZ146 + 101460 + Colquitt + GA + US + 31.18 + -83.75 + 0 + 0 + TAE + + + NCZ061 + 330610 + Clay + NC + US + 35.07 + -83.75 + 0 + 0 + MRX + + + GAZ009 + 100090 + Towns + GA + US + 34.89 + -83.74 + 0 + 0 + FFC + + + KYZ116 + 171160 + Clay + KY + US + 37.15 + -83.74 + 0 + 0 + JKL + + + OHZ003 + 350030 + Lucas + OH + US + 41.57 + -83.74 + 0 + 0 + CLE + + + KYZ051 + 170510 + Bath + KY + US + 38.15 + -83.73 + 0 + 0 + JKL + + + KYZ044 + 170440 + Fleming + KY + US + 38.36 + -83.72 + 0 + 0 + JKL + + + KYZ111 + 171110 + Lee + KY + US + 37.60 + -83.72 + 0 + 0 + JKL + + + KYZ087 + 170870 + Bell + KY + US + 36.77 + -83.71 + 0 + 0 + JKL + + + KYZ114 + 171140 + Owsley + KY + US + 37.40 + -83.71 + 0 + 0 + JKL + + + GAZ035 + 100350 + Barrow + GA + US + 34.01 + -83.70 + 0 + 0 + FFC + + + GAZ059 + 100590 + Jasper + GA + US + 33.33 + -83.69 + 0 + 0 + FFC + + + GAZ082 + 100820 + Bibb + GA + US + 32.80 + -83.69 + 0 + 0 + FFC + + + MIZ061 + 220610 + Genesee + MI + US + 43.00 + -83.69 + 0 + 0 + DTX + + + TNZ014 + 420140 + Claiborne + TN + US + 36.47 + -83.69 + 0 + 0 + MRX + + + GAZ095 + 100950 + Houston + GA + US + 32.49 + -83.67 + 0 + 0 + FFC + + + FLZ028 + 90280 + Taylor + FL + US + 29.99 + -83.65 + 0 + 0 + TAE + + + OHZ026 + 350260 + Hardin + OH + US + 40.66 + -83.65 + 0 + 0 + ILN + + + OHZ006 + 350060 + Wood + OH + US + 41.39 + -83.64 + 0 + 0 + CLE + + + OHZ017 + 350170 + Hancock + OH + US + 40.99 + -83.64 + 0 + 0 + CLE + + + GAZ128 + 101280 + Turner + GA + US + 31.71 + -83.63 + 0 + 0 + TAE + + + KYZ060 + 170600 + Menifee + KY + US + 37.94 + -83.61 + 0 + 0 + JKL + + + OHZ080 + 350800 + Highland + OH + US + 39.20 + -83.61 + 0 + 0 + ILN + + + MIZ036 + 220360 + Iosco + MI + US + 44.34 + -83.60 + 0 + 0 + APX + + + GAZ025 + 100250 + Jackson + GA + US + 34.13 + -83.59 + 0 + 0 + FFC + + + MIZ030 + 220300 + Alcona + MI + US + 44.69 + -83.59 + 0 + 0 + APX + + + GAZ072 + 100720 + Jones + GA + US + 33.01 + -83.58 + 0 + 0 + FFC + + + NCZ051 + 330510 + Swain + NC + US + 35.48 + -83.56 + 0 + 0 + GSP + + + GAZ159 + 101590 + Brooks + GA + US + 30.85 + -83.55 + 0 + 0 + TAE + + + MIZ024 + 220240 + Alpena + MI + US + 45.03 + -83.54 + 0 + 0 + APX + + + TNZ073 + 420730 + North_Sevier + TN + US + 35.87 + -83.53 + 0 + 0 + MRX + + + GAZ017 + 100170 + Habersham + GA + US + 34.63 + -83.51 + 0 + 0 + GSP + + + GAZ024 + 100240 + Banks + GA + US + 34.35 + -83.50 + 0 + 0 + FFC + + + GAZ129 + 101290 + Tift + GA + US + 31.46 + -83.50 + 0 + 0 + TAE + + + TNZ038 + 420380 + Grainger + TN + US + 36.25 + -83.50 + 0 + 0 + MRX + + + FLZ019 + 90190 + Madison + FL + US + 30.46 + -83.49 + 0 + 0 + TAE + + + OHZ081 + 350810 + Adams + OH + US + 38.82 + -83.49 + 0 + 0 + ILN + + + GAZ049 + 100490 + Morgan + GA + US + 33.62 + -83.48 + 0 + 0 + FFC + + + KYZ108 + 171080 + Wolfe + KY + US + 37.75 + -83.48 + 0 + 0 + JKL + + + MIZ083 + 220830 + Monroe + MI + US + 41.91 + -83.48 + 0 + 0 + DTX + + + TNZ070 + 420700 + Jefferson + TN + US + 36.04 + -83.47 + 0 + 0 + MRX + + + GAZ037 + 100370 + Oconee + GA + US + 33.83 + -83.46 + 0 + 0 + FFC + + + GAZ107 + 101070 + Pulaski + GA + US + 32.25 + -83.46 + 0 + 0 + FFC + + + OHZ063 + 350630 + Fayette + OH + US + 39.54 + -83.46 + 0 + 0 + ILN + + + TNZ074 + 420740 + Sevier_Smoky_Mountains + TN + US + 35.69 + -83.46 + 0 + 0 + MRX + + + GAZ147 + 101470 + Cook + GA + US + 31.19 + -83.43 + 0 + 0 + TAE + + + OHZ054 + 350540 + Madison + OH + US + 39.90 + -83.43 + 0 + 0 + ILN + + + KYZ052 + 170520 + Rowan + KY + US + 38.21 + -83.42 + 0 + 0 + JKL + + + NCZ062 + 330620 + Macon + NC + US + 35.16 + -83.42 + 0 + 0 + GSP + + + GAZ083 + 100830 + Twiggs + GA + US + 32.67 + -83.41 + 0 + 0 + FFC + + + MIZ054 + 220540 + Tuscola + MI + US + 43.51 + -83.40 + 0 + 0 + DTX + + + GAZ108 + 101080 + Wilcox + GA + US + 31.98 + -83.39 + 0 + 0 + FFC + + + MIZ069 + 220690 + Oakland + MI + US + 42.66 + -83.39 + 0 + 0 + DTX + + + GAZ010 + 100100 + Rabun + GA + US + 34.85 + -83.38 + 0 + 0 + GSP + + + GAZ036 + 100360 + Clarke + GA + US + 33.95 + -83.38 + 0 + 0 + FFC + + + KYZ117 + 171170 + Leslie + KY + US + 37.11 + -83.36 + 0 + 0 + JKL + + + OHZ045 + 350450 + Union + OH + US + 40.30 + -83.36 + 0 + 0 + ILN + + + GAZ060 + 100600 + Putnam + GA + US + 33.32 + -83.34 + 0 + 0 + FFC + + + KYZ100 + 171000 + Lewis + KY + US + 38.52 + -83.34 + 0 + 0 + ILN + + + GAZ096 + 100960 + Bleckley + GA + US + 32.42 + -83.32 + 0 + 0 + FFC + + + OHZ027 + 350270 + Wyandot + OH + US + 40.84 + -83.31 + 0 + 0 + CLE + + + GAZ018 + 100180 + Stephens + GA + US + 34.57 + -83.29 + 0 + 0 + GSP + + + KYZ112 + 171120 + Breathitt + KY + US + 37.52 + -83.28 + 0 + 0 + JKL + + + KYZ115 + 171150 + Perry + KY + US + 37.22 + -83.28 + 0 + 0 + JKL + + + TNZ039 + 420390 + Hamblen + TN + US + 36.23 + -83.28 + 0 + 0 + MRX + + + GAZ131 + 101310 + Irwin + GA + US + 31.62 + -83.25 + 0 + 0 + TAE + + + GAZ160 + 101600 + Lowndes + GA + US + 30.82 + -83.25 + 0 + 0 + TAE + + + GAZ073 + 100730 + Baldwin + GA + US + 33.05 + -83.24 + 0 + 0 + FFC + + + GAZ130 + 101300 + Ben_Hill + GA + US + 31.75 + -83.24 + 0 + 0 + TAE + + + GAZ026 + 100260 + Franklin + GA + US + 34.39 + -83.23 + 0 + 0 + GSP + + + GAZ148 + 101480 + Berrien + GA + US + 31.25 + -83.23 + 0 + 0 + TAE + + + KYZ106 + 171060 + Morgan + KY + US + 37.92 + -83.23 + 0 + 0 + JKL + + + MIZ062 + 220620 + Lapeer + MI + US + 43.11 + -83.22 + 0 + 0 + DTX + + + MIZ076 + 220760 + Wayne + MI + US + 42.25 + -83.21 + 0 + 0 + DTX + + + GAZ027 + 100270 + Madison + GA + US + 34.13 + -83.19 + 0 + 0 + FFC + + + KYZ088 + 170880 + Harlan + KY + US + 36.85 + -83.19 + 0 + 0 + JKL + + + GAZ050 + 100500 + Greene + GA + US + 33.56 + -83.18 + 0 + 0 + FFC + + + GAZ084 + 100840 + Wilkinson + GA + US + 32.79 + -83.18 + 0 + 0 + FFC + + + FLZ034 + 90340 + Dixie + FL + US + 29.56 + -83.16 + 0 + 0 + TAE + + + NCZ059 + 330590 + Northern_Jackson + NC + US + 35.37 + -83.14 + 0 + 0 + GSP + + + OHZ036 + 350360 + Marion + OH + US + 40.57 + -83.14 + 0 + 0 + CLE + + + TNZ015 + 420150 + Hancock + TN + US + 36.50 + -83.14 + 0 + 0 + MRX + + + TNZ040 + 420400 + Northwest_Cocke + TN + US + 36.00 + -83.13 + 0 + 0 + MRX + + + FLZ029 + 90290 + Lafayette + FL + US + 30.04 + -83.12 + 0 + 0 + TAE + + + GAZ109 + 101090 + Dodge + GA + US + 32.17 + -83.12 + 0 + 0 + FFC + + + OHZ008 + 350080 + Sandusky + OH + US + 41.37 + -83.12 + 0 + 0 + CLE + + + OHZ018 + 350180 + Seneca + OH + US + 41.12 + -83.12 + 0 + 0 + CLE + + + SCZ001 + 400010 + Oconee_Mountains + SC + US + 34.83 + -83.12 + 0 + 0 + GSP + + + TNZ041 + 420410 + Cocke_Smoky_Mountains + TN + US + 35.86 + -83.09 + 0 + 0 + MRX + + + GAZ161 + 101610 + Lanier + GA + US + 31.02 + -83.08 + 0 + 0 + TAE + + + KYZ104 + 171040 + Elliott + KY + US + 38.14 + -83.08 + 0 + 0 + JKL + + + KYZ109 + 171090 + Magoffin + KY + US + 37.69 + -83.08 + 0 + 0 + JKL + + + OHZ082 + 350820 + Pike + OH + US + 39.07 + -83.08 + 0 + 0 + ILN + + + NCZ063 + 330630 + Southern_Jackson + NC + US + 35.15 + -83.07 + 0 + 0 + GSP + + + OHZ073 + 350730 + Ross + OH + US + 39.34 + -83.07 + 0 + 0 + ILN + + + KYZ102 + 171020 + Carter + KY + US + 38.34 + -83.06 + 0 + 0 + RLX + + + OHZ007 + 350070 + Ottawa + OH + US + 41.54 + -83.06 + 0 + 0 + CLE + + + GAZ038 + 100380 + Oglethorpe + GA + US + 33.87 + -83.04 + 0 + 0 + FFC + + + MIZ049 + 220490 + Huron + MI + US + 43.87 + -83.04 + 0 + 0 + DTX + + + GAZ061 + 100610 + Hancock + GA + US + 33.27 + -83.02 + 0 + 0 + FFC + + + OHZ055 + 350550 + Franklin + OH + US + 39.96 + -83.01 + 0 + 0 + ILN + + + FLZ021 + 90210 + Suwannee + FL + US + 30.17 + -83.00 + 0 + 0 + JAX + + + NCZ052 + 330520 + Haywood + NC + US + 35.54 + -83.00 + 0 + 0 + GSP + + + OHZ064 + 350640 + Pickaway + OH + US + 39.63 + -83.00 + 0 + 0 + ILN + + + SCZ004 + 400040 + Greater_Oconee + SC + US + 34.64 + -83.00 + 0 + 0 + GSP + + + VAZ001 + 460010 + Lee + VA + US + 36.74 + -83.00 + 0 + 0 + MRX + + + OHZ046 + 350460 + Delaware + OH + US + 40.28 + -82.99 + 0 + 0 + ILN + + + FLZ020 + 90200 + Hamilton + FL + US + 30.48 + -82.96 + 0 + 0 + JAX + + + OHZ088 + 350880 + Scioto + OH + US + 38.79 + -82.96 + 0 + 0 + ILN + + + GAZ028 + 100280 + Hart + GA + US + 34.35 + -82.95 + 0 + 0 + GSP + + + TNZ016 + 420160 + Hawkins + TN + US + 36.42 + -82.94 + 0 + 0 + MRX + + + GAZ097 + 100970 + Laurens + GA + US + 32.43 + -82.93 + 0 + 0 + FFC + + + GAZ110 + 101100 + Telfair + GA + US + 31.96 + -82.93 + 0 + 0 + FFC + + + KYZ101 + 171010 + Greenup + KY + US + 38.56 + -82.92 + 0 + 0 + RLX + + + KYZ113 + 171130 + Knott + KY + US + 37.36 + -82.92 + 0 + 0 + JKL + + + MIZ070 + 220700 + Macomb + MI + US + 42.68 + -82.92 + 0 + 0 + DTX + + + OHZ028 + 350280 + Crawford + OH + US + 40.85 + -82.91 + 0 + 0 + CLE + + + GAZ149 + 101490 + Atkinson + GA + US + 31.30 + -82.88 + 0 + 0 + JAX + + + TNZ042 + 420420 + Northwest_Greene + TN + US + 36.21 + -82.88 + 0 + 0 + MRX + + + GAZ132 + 101320 + Coffee + GA + US + 31.59 + -82.87 + 0 + 0 + JAX + + + GAZ162 + 101620 + Echols + GA + US + 30.73 + -82.86 + 0 + 0 + JAX + + + KYZ118 + 171180 + Letcher + KY + US + 37.12 + -82.86 + 0 + 0 + JKL + + + GAZ051 + 100510 + Taliaferro + GA + US + 33.59 + -82.85 + 0 + 0 + FFC + + + GAZ029 + 100290 + Elbert + GA + US + 34.12 + -82.84 + 0 + 0 + GSP + + + KYZ107 + 171070 + Johnson + KY + US + 37.86 + -82.82 + 0 + 0 + JKL + + + OHZ037 + 350370 + Morrow + OH + US + 40.53 + -82.82 + 0 + 0 + CLE + + + FLZ035 + 90350 + Gilchrist + FL + US + 29.75 + -82.81 + 0 + 0 + JAX + + + MIZ055 + 220550 + Sanilac + MI + US + 43.43 + -82.81 + 0 + 0 + DTX + + + NCZ064 + 330640 + Transylvania + NC + US + 35.22 + -82.81 + 0 + 0 + GSP + + + GAZ074 + 100740 + Washington + GA + US + 32.99 + -82.79 + 0 + 0 + FFC + + + FLZ039 + 90390 + Levy + FL + US + 29.30 + -82.78 + 0 + 0 + TBW + + + TNZ043 + 420430 + Southeast_Greene + TN + US + 36.01 + -82.77 + 0 + 0 + MRX + + + KYZ110 + 171100 + Floyd + KY + US + 37.52 + -82.76 + 0 + 0 + JKL + + + GAZ111 + 101110 + Wheeler + GA + US + 32.11 + -82.75 + 0 + 0 + FFC + + + KYZ105 + 171050 + Lawrence + KY + US + 38.08 + -82.75 + 0 + 0 + RLX + + + GAZ039 + 100390 + Wilkes + GA + US + 33.79 + -82.74 + 0 + 0 + FFC + + + SCZ002 + 400020 + Pickens_Mountains + SC + US + 34.95 + -82.73 + 0 + 0 + GSP + + + FLZ050 + 90500 + Pinellas + FL + US + 27.89 + -82.71 + 0 + 0 + TBW + + + MIZ063 + 220630 + St._Clair + MI + US + 42.85 + -82.71 + 0 + 0 + DTX + + + GAZ085 + 100850 + Johnson + GA + US + 32.67 + -82.70 + 0 + 0 + FFC + + + KYZ103 + 171030 + Boyd + KY + US + 38.37 + -82.70 + 0 + 0 + RLX + + + GAZ163 + 101630 + Clinch + GA + US + 30.88 + -82.69 + 0 + 0 + JAX + + + SCZ005 + 400050 + Greater_Pickens + SC + US + 34.79 + -82.69 + 0 + 0 + GSP + + + NCZ048 + 330480 + Madison + NC + US + 35.87 + -82.68 + 0 + 0 + GSP + + + SCZ010 + 400100 + Anderson + SC + US + 34.51 + -82.65 + 0 + 0 + GSP + + + VAZ005 + 460050 + Scott + VA + US + 36.74 + -82.64 + 0 + 0 + MRX + + + GAZ062 + 100620 + Warren + GA + US + 33.43 + -82.63 + 0 + 0 + FFC + + + GAZ133 + 101330 + Jeff_Davis + GA + US + 31.82 + -82.63 + 0 + 0 + JAX + + + FLZ022 + 90220 + Columbia + FL + US + 30.21 + -82.62 + 0 + 0 + JAX + + + OHZ009 + 350090 + Erie + OH + US + 41.39 + -82.62 + 0 + 0 + CLE + + + OHZ083 + 350830 + Jackson + OH + US + 39.02 + -82.62 + 0 + 0 + RLX + + + OHZ065 + 350650 + Fairfield + OH + US + 39.74 + -82.60 + 0 + 0 + ILN + + + GAZ075 + 100750 + Glascock + GA + US + 33.23 + -82.59 + 0 + 0 + FFC + + + VAZ002 + 460020 + Wise + VA + US + 37.00 + -82.59 + 0 + 0 + MRX + + + OHZ019 + 350190 + Huron + OH + US + 41.14 + -82.58 + 0 + 0 + CLE + + + GAZ098 + 100980 + Treutlen + GA + US + 32.40 + -82.56 + 0 + 0 + FFC + + + OHZ087 + 350870 + Lawrence + OH + US + 38.62 + -82.56 + 0 + 0 + RLX + + + GAZ112 + 101120 + Montgomery + GA + US + 32.15 + -82.53 + 0 + 0 + FFC + + + NCZ053 + 330530 + Buncombe + NC + US + 35.62 + -82.53 + 0 + 0 + GSP + + + OHZ029 + 350290 + Richland + OH + US + 40.77 + -82.53 + 0 + 0 + CLE + + + OHZ084 + 350840 + Vinton + OH + US + 39.21 + -82.51 + 0 + 0 + RLX + + + KYZ119 + 171190 + Martin + KY + US + 37.82 + -82.50 + 0 + 0 + JKL + + + NCZ065 + 330650 + Henderson + NC + US + 35.32 + -82.50 + 0 + 0 + GSP + + + SCZ003 + 400030 + Greenville_Mountains + SC + US + 35.09 + -82.49 + 0 + 0 + GSP + + + SCZ011 + 400110 + Abbeville + SC + US + 34.25 + -82.49 + 0 + 0 + GSP + + + TNZ044 + 420440 + Washington + TN + US + 36.27 + -82.49 + 0 + 0 + MRX + + + OHZ056 + 350560 + Licking + OH + US + 40.09 + -82.48 + 0 + 0 + ILN + + + GAZ063 + 100630 + McDuffie + GA + US + 33.49 + -82.47 + 0 + 0 + CAE + + + FLZ042 + 90420 + Citrus + FL + US + 28.86 + -82.46 + 0 + 0 + TBW + + + OHZ047 + 350470 + Knox + OH + US + 40.40 + -82.46 + 0 + 0 + CLE + + + FLZ049 + 90490 + Pasco + FL + US + 28.32 + -82.45 + 0 + 0 + TBW + + + OHZ074 + 350740 + Hocking + OH + US + 39.50 + -82.45 + 0 + 0 + ILN + + + GAZ040 + 100400 + Lincoln + GA + US + 33.81 + -82.44 + 0 + 0 + CAE + + + GAZ076 + 100760 + Jefferson + GA + US + 33.04 + -82.44 + 0 + 0 + FFC + + + GAZ134 + 101340 + Bacon + GA + US + 31.56 + -82.42 + 0 + 0 + JAX + + + GAZ150 + 101500 + Ware + GA + US + 31.02 + -82.41 + 0 + 0 + JAX + + + TNZ045 + 420450 + Unicoi + TN + US + 36.11 + -82.41 + 0 + 0 + MRX + + + WVZ005 + 480050 + Wayne + WV + US + 38.14 + -82.41 + 0 + 0 + RLX + + + FLZ055 + 90550 + Manatee + FL + US + 27.43 + -82.40 + 0 + 0 + TBW + + + FLZ048 + 90480 + Hernando + FL + US + 28.56 + -82.37 + 0 + 0 + TBW + + + FLZ030 + 90300 + Union + FL + US + 30.03 + -82.35 + 0 + 0 + JAX + + + FLZ036 + 90360 + Alachua + FL + US + 29.68 + -82.35 + 0 + 0 + JAX + + + FLZ051 + 90510 + Hillsborough + FL + US + 27.91 + -82.35 + 0 + 0 + TBW + + + FLZ060 + 90600 + Sarasota + FL + US + 27.17 + -82.35 + 0 + 0 + TBW + + + KYZ120 + 171200 + Pike + KY + US + 37.47 + -82.35 + 0 + 0 + JKL + + + OHZ086 + 350860 + Gallia + OH + US + 38.81 + -82.34 + 0 + 0 + RLX + + + SCZ006 + 400060 + Greater_Greenville + SC + US + 34.77 + -82.34 + 0 + 0 + GSP + + + VAZ003 + 460030 + Dickenson + VA + US + 37.13 + -82.34 + 0 + 0 + RLX + + + GAZ113 + 101130 + Toombs + GA + US + 32.13 + -82.33 + 0 + 0 + FFC + + + GAZ086 + 100860 + Emanuel + GA + US + 32.56 + -82.32 + 0 + 0 + FFC + + + SCZ018 + 400180 + McCormick + SC + US + 33.83 + -82.32 + 0 + 0 + CAE + + + NCZ049 + 330490 + Yancey + NC + US + 35.89 + -82.31 + 0 + 0 + GSP + + + NCZ509 + 335090 + Polk_Mountains + NC + US + 35.29 + -82.31 + 0 + 0 + GSP + + + GAZ135 + 101350 + Appling + GA + US + 31.72 + -82.30 + 0 + 0 + JAX + + + OHZ030 + 350300 + Ashland + OH + US + 40.81 + -82.28 + 0 + 0 + CLE + + + WVZ006 + 480060 + Cabell + WV + US + 38.41 + -82.27 + 0 + 0 + RLX + + + TNZ017 + 420170 + Sullivan + TN + US + 36.51 + -82.26 + 0 + 0 + MRX + + + FLZ023 + 90230 + Baker + FL + US + 30.36 + -82.25 + 0 + 0 + JAX + + + GAZ064 + 100640 + Columbia + GA + US + 33.53 + -82.24 + 0 + 0 + CAE + + + OHZ066 + 350660 + Perry + OH + US + 39.74 + -82.24 + 0 + 0 + RLX + + + FLZ031 + 90310 + Bradford + FL + US + 29.93 + -82.23 + 0 + 0 + JAX + + + GAZ151 + 101510 + Pierce + GA + US + 31.37 + -82.20 + 0 + 0 + JAX + + + NCZ507 + 335070 + Rutherford_Mountains + NC + US + 35.46 + -82.18 + 0 + 0 + GSP + + + GAZ164 + 101640 + Charlton + GA + US + 30.71 + -82.15 + 0 + 0 + JAX + + + TNZ046 + 420460 + Northwest_Carter + TN + US + 36.38 + -82.15 + 0 + 0 + MRX + + + FLZ043 + 90430 + Sumter + FL + US + 28.63 + -82.13 + 0 + 0 + TBW + + + NCZ510 + 335100 + Eastern_Polk + NC + US + 35.29 + -82.13 + 0 + 0 + GSP + + + NCZ050 + 330500 + Mitchell + NC + US + 35.98 + -82.12 + 0 + 0 + GSP + + + OHZ010 + 350100 + Lorain + OH + US + 41.29 + -82.11 + 0 + 0 + CLE + + + TNZ047 + 420470 + Southeast_Carter + TN + US + 36.23 + -82.11 + 0 + 0 + MRX + + + WVZ024 + 480240 + Mingo + WV + US + 37.74 + -82.11 + 0 + 0 + RLX + + + NCZ505 + 335050 + McDowell_Mountains + NC + US + 35.74 + -82.10 + 0 + 0 + GSP + + + SCZ019 + 400190 + Greenwood + SC + US + 34.18 + -82.10 + 0 + 0 + GSP + + + FLZ040 + 90400 + Marion + FL + US + 29.24 + -82.09 + 0 + 0 + JAX + + + GAZ065 + 100650 + Richmond + GA + US + 33.39 + -82.09 + 0 + 0 + CAE + + + VAZ006 + 460060 + Russell + VA + US + 36.93 + -82.09 + 0 + 0 + MRX + + + GAZ099 + 100990 + Candler + GA + US + 32.41 + -82.08 + 0 + 0 + CHS + + + WVZ013 + 480130 + Lincoln + WV + US + 38.16 + -82.04 + 0 + 0 + RLX + + + OHZ085 + 350850 + Meigs + OH + US + 39.04 + -82.03 + 0 + 0 + RLX + + + OHZ075 + 350750 + Athens + OH + US + 39.36 + -82.01 + 0 + 0 + RLX + + + VAZ004 + 460040 + Buchanan + VA + US + 37.29 + -82.01 + 0 + 0 + RLX + + + GAZ114 + 101140 + Tattnall + GA + US + 32.05 + -82.00 + 0 + 0 + CHS + + + GAZ152 + 101520 + Brantley + GA + US + 31.19 + -82.00 + 0 + 0 + JAX + + + WVZ007 + 480070 + Mason + WV + US + 38.75 + -82.00 + 0 + 0 + RLX + + + SCZ012 + 400120 + Laurens + SC + US + 34.49 + -81.98 + 0 + 0 + GSP + + + FLZ062 + 90620 + Charlotte + FL + US + 26.90 + -81.97 + 0 + 0 + TBW + + + VAZ008 + 460080 + Washington + VA + US + 36.76 + -81.97 + 0 + 0 + MRX + + + GAZ087 + 100870 + Jenkins + GA + US + 32.78 + -81.96 + 0 + 0 + CHS + + + OHZ057 + 350570 + Muskingum + OH + US + 39.96 + -81.96 + 0 + 0 + PBZ + + + SCZ007 + 400070 + Spartanburg + SC + US + 34.89 + -81.96 + 0 + 0 + GSP + + + NCZ506 + 335060 + Eastern_McDowell + NC + US + 35.64 + -81.95 + 0 + 0 + GSP + + + GAZ077 + 100770 + Burke + GA + US + 33.05 + -81.94 + 0 + 0 + CAE + + + NCZ508 + 335080 + Greater_Rutherford + NC + US + 35.39 + -81.94 + 0 + 0 + GSP + + + OHZ038 + 350380 + Holmes + OH + US + 40.56 + -81.93 + 0 + 0 + CLE + + + FLZ065 + 90650 + Lee + FL + US + 26.55 + -81.92 + 0 + 0 + TBW + + + OHZ020 + 350200 + Medina + OH + US + 41.13 + -81.92 + 0 + 0 + CLE + + + NCZ033 + 330330 + Avery + NC + US + 36.10 + -81.91 + 0 + 0 + GSP + + + SCZ025 + 400250 + Edgefield + SC + US + 33.76 + -81.91 + 0 + 0 + CAE + + + OHZ048 + 350480 + Coshocton + OH + US + 40.30 + -81.90 + 0 + 0 + PBZ + + + WVZ025 + 480250 + Logan + WV + US + 37.83 + -81.90 + 0 + 0 + RLX + + + GAZ136 + 101360 + Wayne + GA + US + 31.58 + -81.88 + 0 + 0 + JAX + + + OHZ031 + 350310 + Wayne + OH + US + 40.83 + -81.88 + 0 + 0 + CLE + + + WVZ014 + 480140 + Putnam + WV + US + 38.48 + -81.88 + 0 + 0 + RLX + + + GAZ115 + 101150 + Evans + GA + US + 32.16 + -81.87 + 0 + 0 + CHS + + + NCZ503 + 335030 + Burke_Mountains + NC + US + 35.88 + -81.85 + 0 + 0 + GSP + + + TNZ018 + 420180 + Johnson + TN + US + 36.44 + -81.85 + 0 + 0 + MRX + + + OHZ067 + 350670 + Morgan + OH + US + 39.61 + -81.83 + 0 + 0 + RLX + + + FLZ032 + 90320 + Clay + FL + US + 29.96 + -81.82 + 0 + 0 + JAX + + + FLZ056 + 90560 + Hardee + FL + US + 27.49 + -81.81 + 0 + 0 + TBW + + + FLZ061 + 90610 + De_Soto + FL + US + 27.19 + -81.81 + 0 + 0 + TBW + + + FLZ144 + 91440 + Southern_Lake_County + FL + US + 28.56 + -81.80 + 0 + 0 + MLB + + + GAZ165 + 101650 + Inland_Camden + GA + US + 30.95 + -81.76 + 0 + 0 + JAX + + + FLZ037 + 90370 + Putnam + FL + US + 29.58 + -81.75 + 0 + 0 + JAX + + + FLZ024 + 90240 + Nassau + FL + US + 30.54 + -81.74 + 0 + 0 + JAX + + + SCZ026 + 400260 + Saluda + SC + US + 33.99 + -81.74 + 0 + 0 + CAE + + + FLZ069 + 90690 + Coastal_Collier_County + FL + US + 26.07 + -81.73 + 0 + 0 + MFL + + + GAZ100 + 101000 + Bulloch + GA + US + 32.40 + -81.73 + 0 + 0 + CHS + + + GAZ137 + 101370 + Long + GA + US + 31.77 + -81.73 + 0 + 0 + CHS + + + WVZ026 + 480260 + Boone + WV + US + 38.00 + -81.72 + 0 + 0 + RLX + + + FLZ025 + 90250 + Duval + FL + US + 30.34 + -81.71 + 0 + 0 + JAX + + + WVZ008 + 480080 + Jackson + WV + US + 38.83 + -81.71 + 0 + 0 + RLX + + + NCZ018 + 330180 + Watauga + NC + US + 36.25 + -81.68 + 0 + 0 + RNK + + + NCZ504 + 335040 + Greater_Burke + NC + US + 35.72 + -81.66 + 0 + 0 + GSP + + + OHZ011 + 350110 + Cuyahoga + OH + US + 41.45 + -81.66 + 0 + 0 + CLE + + + WVZ033 + 480330 + McDowell + WV + US + 37.38 + -81.65 + 0 + 0 + RLX + + + FLZ044 + 90440 + Northern_Lake_County + FL + US + 29.03 + -81.64 + 0 + 0 + MLB + + + SCZ013 + 400130 + Union + SC + US + 34.68 + -81.64 + 0 + 0 + GSP + + + GAZ088 + 100880 + Screven + GA + US + 32.77 + -81.63 + 0 + 0 + CHS + + + GAZ153 + 101530 + Inland_Glynn + GA + US + 31.28 + -81.63 + 0 + 0 + JAX + + + FLZ052 + 90520 + Polk + FL + US + 28.00 + -81.62 + 0 + 0 + TBW + + + SCZ008 + 400080 + Cherokee + SC + US + 35.01 + -81.62 + 0 + 0 + GSP + + + SCZ020 + 400200 + Newberry + SC + US + 34.29 + -81.62 + 0 + 0 + CAE + + + NCZ501 + 335010 + Caldwell_Mountains + NC + US + 36.01 + -81.61 + 0 + 0 + GSP + + + SCZ030 + 400300 + Aiken + SC + US + 33.54 + -81.60 + 0 + 0 + CAE + + + VAZ007 + 460070 + Tazewell + VA + US + 37.14 + -81.56 + 0 + 0 + RNK + + + WVZ015 + 480150 + Kanawha + WV + US + 38.30 + -81.56 + 0 + 0 + RLX + + + FLZ078 + 90780 + Monroe/Lower_Keys + FL + US + 24.64 + -81.55 + 0 + 0 + KEY + + + GAZ166 + 101660 + Coastal_Camden + GA + US + 30.91 + -81.55 + 0 + 0 + JAX + + + GAZ138 + 101380 + Inland_Liberty + GA + US + 31.87 + -81.54 + 0 + 0 + CHS + + + NCZ068 + 330680 + Cleveland + NC + US + 35.36 + -81.54 + 0 + 0 + GSP + + + VAZ009 + 460090 + Smyth + VA + US + 36.82 + -81.54 + 0 + 0 + RNK + + + WVZ034 + 480340 + Wyoming + WV + US + 37.60 + -81.54 + 0 + 0 + RLX + + + OHZ021 + 350210 + Summit + OH + US + 41.13 + -81.53 + 0 + 0 + CLE + + + NCZ502 + 335020 + Greater_Caldwell + NC + US + 35.91 + -81.52 + 0 + 0 + GSP + + + GAZ116 + 101160 + Inland_Bryan + GA + US + 32.00 + -81.50 + 0 + 0 + CHS + + + WVZ009 + 480090 + Wood + WV + US + 39.22 + -81.50 + 0 + 0 + RLX + + + NCZ001 + 330010 + Ashe + NC + US + 36.41 + -81.49 + 0 + 0 + RNK + + + OHZ039 + 350390 + Tuscarawas + OH + US + 40.43 + -81.49 + 0 + 0 + PBZ + + + GAZ140 + 101400 + Inland_McIntosh + GA + US + 31.52 + -81.48 + 0 + 0 + CHS + + + SCZ035 + 400350 + Barnwell + SC + US + 33.29 + -81.48 + 0 + 0 + CAE + + + OHZ058 + 350580 + Guernsey + OH + US + 40.02 + -81.47 + 0 + 0 + PBZ + + + OHZ068 + 350680 + Noble + OH + US + 39.76 + -81.46 + 0 + 0 + PBZ + + + FLZ033 + 90330 + St._Johns + FL + US + 29.94 + -81.45 + 0 + 0 + JAX + + + OHZ076 + 350760 + Washington + OH + US + 39.43 + -81.45 + 0 + 0 + RLX + + + GAZ154 + 101540 + Coastal_Glynn + GA + US + 31.23 + -81.41 + 0 + 0 + JAX + + + WVZ017 + 480170 + Wirt + WV + US + 39.04 + -81.38 + 0 + 0 + RLX + + + FLZ041 + 90410 + Inland_Volusia_County + FL + US + 29.10 + -81.37 + 0 + 0 + MLB + + + OHZ032 + 350320 + Stark + OH + US + 40.81 + -81.36 + 0 + 0 + CLE + + + SCZ040 + 400400 + Allendale + SC + US + 32.95 + -81.34 + 0 + 0 + CHS + + + GAZ101 + 101010 + Effingham + GA + US + 32.35 + -81.33 + 0 + 0 + CHS + + + GAZ141 + 101410 + Coastal_McIntosh + GA + US + 31.46 + -81.33 + 0 + 0 + CHS + + + WVZ016 + 480160 + Roane + WV + US + 38.74 + -81.32 + 0 + 0 + RLX + + + FLZ038 + 90380 + Flagler + FL + US + 29.47 + -81.31 + 0 + 0 + JAX + + + FLZ070 + 90700 + Inland_Collier_County + FL + US + 26.16 + -81.31 + 0 + 0 + MFL + + + FLZ045 + 90450 + Orange + FL + US + 28.56 + -81.27 + 0 + 0 + MLB + + + FLZ053 + 90530 + Osceola + FL + US + 27.99 + -81.26 + 0 + 0 + MLB + + + FLZ057 + 90570 + Highlands + FL + US + 27.34 + -81.26 + 0 + 0 + TBW + + + VAZ015 + 460150 + Grayson + VA + US + 36.69 + -81.26 + 0 + 0 + RNK + + + GAZ118 + 101180 + Inland_Chatham + GA + US + 32.07 + -81.24 + 0 + 0 + CHS + + + OHZ012 + 350120 + Lake + OH + US + 41.71 + -81.24 + 0 + 0 + CLE + + + SCZ027 + 400270 + Lexington + SC + US + 33.92 + -81.24 + 0 + 0 + CAE + + + NCZ056 + 330560 + Catawba + NC + US + 35.68 + -81.23 + 0 + 0 + GSP + + + NCZ069 + 330690 + Lincoln + NC + US + 35.48 + -81.23 + 0 + 0 + GSP + + + FLZ046 + 90460 + Seminole + FL + US + 28.74 + -81.22 + 0 + 0 + MLB + + + FLZ063 + 90630 + Glades + FL + US + 26.99 + -81.22 + 0 + 0 + MFL + + + FLZ066 + 90660 + Hendry + FL + US + 26.52 + -81.22 + 0 + 0 + MFL + + + WVZ035 + 480350 + Raleigh + WV + US + 37.75 + -81.22 + 0 + 0 + RLX + + + GAZ139 + 101390 + Coastal_Liberty + GA + US + 31.66 + -81.21 + 0 + 0 + CHS + + + NCZ019 + 330190 + Wilkes + NC + US + 36.21 + -81.21 + 0 + 0 + RNK + + + GAZ117 + 101170 + Coastal_Bryan + GA + US + 31.83 + -81.20 + 0 + 0 + CHS + + + OHZ013 + 350130 + Geauga + OH + US + 41.53 + -81.19 + 0 + 0 + CLE + + + OHZ022 + 350220 + Portage + OH + US + 41.17 + -81.19 + 0 + 0 + CLE + + + WVZ010 + 480100 + Pleasants + WV + US + 39.37 + -81.19 + 0 + 0 + RLX + + + NCZ070 + 330700 + Gaston + NC + US + 35.28 + -81.18 + 0 + 0 + GSP + + + SCZ009 + 400090 + York + SC + US + 34.99 + -81.18 + 0 + 0 + GSP + + + SCZ014 + 400140 + Chester + SC + US + 34.68 + -81.18 + 0 + 0 + GSP + + + NCZ035 + 330350 + Alexander + NC + US + 35.90 + -81.17 + 0 + 0 + GSP + + + VAZ010 + 460100 + Bland + VA + US + 37.13 + -81.15 + 0 + 0 + RNK + + + WVZ018 + 480180 + Calhoun + WV + US + 38.83 + -81.13 + 0 + 0 + RLX + + + FLZ075 + 90750 + Mainland_Monroe + FL + US + 25.46 + -81.12 + 0 + 0 + MFL + + + NCZ002 + 330020 + Alleghany + NC + US + 36.47 + -81.12 + 0 + 0 + RNK + + + SCZ042 + 400420 + Hampton + SC + US + 32.79 + -81.12 + 0 + 0 + CHS + + + OHZ049 + 350490 + Harrison + OH + US + 40.29 + -81.10 + 0 + 0 + PBZ + + + SCZ021 + 400210 + Fairfield + SC + US + 34.37 + -81.10 + 0 + 0 + CAE + + + WVZ042 + 480420 + Mercer + WV + US + 37.42 + -81.10 + 0 + 0 + RNK + + + OHZ040 + 350400 + Carroll + OH + US + 40.57 + -81.09 + 0 + 0 + PBZ + + + OHZ069 + 350690 + Monroe + OH + US + 39.70 + -81.07 + 0 + 0 + PBZ + + + WVZ019 + 480190 + Ritchie + WV + US + 39.20 + -81.07 + 0 + 0 + RLX + + + WVZ036 + 480360 + Fayette + WV + US + 38.04 + -81.07 + 0 + 0 + RLX + + + VAZ012 + 460120 + Wythe + VA + US + 36.92 + -81.06 + 0 + 0 + RNK + + + SCZ047 + 400470 + Inland_Jasper + SC + US + 32.42 + -81.05 + 0 + 0 + CHS + + + WVZ027 + 480270 + Clay + WV + US + 38.47 + -81.05 + 0 + 0 + RLX + + + FLZ141 + 91410 + Coastal_Volusia_County + FL + US + 29.02 + -81.03 + 0 + 0 + MLB + + + GAZ119 + 101190 + Coastal_Chatham + GA + US + 31.91 + -81.02 + 0 + 0 + CHS + + + SCZ041 + 400410 + Bamberg + SC + US + 33.23 + -81.01 + 0 + 0 + CAE + + + SCZ051 + 400510 + Coastal_Jasper + SC + US + 32.27 + -81.00 + 0 + 0 + CHS + + + OHZ059 + 350590 + Belmont + OH + US + 40.00 + -80.97 + 0 + 0 + PBZ + + + SCZ028 + 400280 + Richland + SC + US + 34.00 + -80.97 + 0 + 0 + CAE + + + FLZ077 + 90770 + Monroe/Middle_Keys + FL + US + 24.76 + -80.96 + 0 + 0 + KEY + + + FLZ058 + 90580 + Okeechobee + FL + US + 27.38 + -80.94 + 0 + 0 + MLB + + + NCZ036 + 330360 + Iredell + NC + US + 35.78 + -80.90 + 0 + 0 + GSP + + + WVZ011 + 480110 + Tyler + WV + US + 39.45 + -80.87 + 0 + 0 + RLX + + + WVZ043 + 480430 + Summers + WV + US + 37.65 + -80.87 + 0 + 0 + RNK + + + FLZ147 + 91470 + Northern_Brevard_County + FL + US + 28.56 + -80.86 + 0 + 0 + MLB + + + WVZ037 + 480370 + Nicholas + WV + US + 38.32 + -80.84 + 0 + 0 + RLX + + + WVZ029 + 480290 + Gilmer + WV + US + 38.92 + -80.83 + 0 + 0 + RLX + + + NCZ071 + 330710 + Mecklenburg + NC + US + 35.26 + -80.80 + 0 + 0 + GSP + + + OHZ033 + 350330 + Mahoning + OH + US + 41.01 + -80.80 + 0 + 0 + CLE + + + OHZ041 + 350410 + Columbiana + OH + US + 40.76 + -80.80 + 0 + 0 + PBZ + + + SCZ036 + 400360 + Orangeburg + SC + US + 33.44 + -80.79 + 0 + 0 + CAE + + + OHZ050 + 350500 + Jefferson + OH + US + 40.37 + -80.77 + 0 + 0 + PBZ + + + SCZ037 + 400370 + Calhoun + SC + US + 33.67 + -80.77 + 0 + 0 + CAE + + + OHZ014 + 350140 + Ashtabula_Inland + OH + US + 41.71 + -80.76 + 0 + 0 + CLE + + + OHZ023 + 350230 + Trumbull + OH + US + 41.31 + -80.76 + 0 + 0 + CLE + + + OHZ089 + 350890 + Ashtabula_Lakeshore + OH + US + 41.88 + -80.76 + 0 + 0 + CLE + + + VAZ016 + 460160 + Carroll + VA + US + 36.74 + -80.75 + 0 + 0 + RNK + + + WVZ028 + 480280 + Braxton + WV + US + 38.71 + -80.74 + 0 + 0 + RLX + + + SCZ043 + 400430 + Inland_Colleton + SC + US + 32.92 + -80.73 + 0 + 0 + CHS + + + WVZ020 + 480200 + Doddridge + WV + US + 39.27 + -80.73 + 0 + 0 + RLX + + + SCZ048 + 400480 + Beaufort + SC + US + 32.39 + -80.72 + 0 + 0 + CHS + + + VAZ011 + 460110 + Giles + VA + US + 37.31 + -80.72 + 0 + 0 + RNK + + + VAZ013 + 460130 + Pulaski + VA + US + 37.06 + -80.72 + 0 + 0 + RNK + + + NCZ003 + 330030 + Surry + NC + US + 36.40 + -80.70 + 0 + 0 + RNK + + + WVZ004 + 480040 + Marshall + WV + US + 39.88 + -80.70 + 0 + 0 + PBZ + + + WVZ012 + 480120 + Wetzel + WV + US + 39.58 + -80.67 + 0 + 0 + PBZ + + + FLZ047 + 90470 + Southern_Brevard_County + FL + US + 28.08 + -80.66 + 0 + 0 + MLB + + + NCZ020 + 330200 + Yadkin + NC + US + 36.16 + -80.66 + 0 + 0 + RNK + + + SCZ015 + 400150 + Lancaster + SC + US + 34.76 + -80.66 + 0 + 0 + CAE + + + FLZ174 + 91740 + Far_South_Miami-Dade_County + FL + US + 25.30 + -80.63 + 0 + 0 + MFL + + + WVZ003 + 480030 + Ohio + WV + US + 40.11 + -80.63 + 0 + 0 + PBZ + + + FLZ073 + 90730 + Inland_Miami-Dade_County + FL + US + 25.69 + -80.61 + 0 + 0 + MFL + + + FLZ054 + 90540 + Indian_River + FL + US + 27.71 + -80.60 + 0 + 0 + MLB + + + WVZ001 + 480010 + Hancock + WV + US + 40.52 + -80.60 + 0 + 0 + PBZ + + + WVZ002 + 480020 + Brooke + WV + US + 40.28 + -80.60 + 0 + 0 + PBZ + + + FLZ071 + 90710 + Inland_Broward_County + FL + US + 26.15 + -80.59 + 0 + 0 + MFL + + + SCZ022 + 400220 + Kershaw + SC + US + 34.34 + -80.58 + 0 + 0 + CAE + + + NCZ082 + 330820 + Union + NC + US + 35.01 + -80.56 + 0 + 0 + GSP + + + FLZ067 + 90670 + Inland_Palm_Beach_County + FL + US + 26.64 + -80.54 + 0 + 0 + MFL + + + NCZ072 + 330720 + Cabarrus + NC + US + 35.35 + -80.54 + 0 + 0 + GSP + + + WVZ044 + 480440 + Monroe + WV + US + 37.55 + -80.54 + 0 + 0 + RNK + + + NCZ037 + 330370 + Davie + NC + US + 35.90 + -80.53 + 0 + 0 + GSP + + + WVZ030 + 480300 + Lewis + WV + US + 38.94 + -80.52 + 0 + 0 + RLX + + + NCZ057 + 330570 + Rowan + NC + US + 35.67 + -80.47 + 0 + 0 + GSP + + + SCZ049 + 400490 + Coastal_Colleton + SC + US + 32.61 + -80.46 + 0 + 0 + CHS + + + FLZ059 + 90590 + St._Lucie + FL + US + 27.38 + -80.44 + 0 + 0 + MLB + + + SCZ044 + 400440 + Dorchester + SC + US + 33.07 + -80.44 + 0 + 0 + CHS + + + WVZ038 + 480380 + Webster + WV + US + 38.49 + -80.43 + 0 + 0 + RLX + + + WVZ045 + 480450 + Greenbrier + WV + US + 37.98 + -80.43 + 0 + 0 + RNK + + + VAZ014 + 460140 + Montgomery + VA + US + 37.17 + -80.40 + 0 + 0 + RNK + + + WVZ031 + 480310 + Harrison + WV + US + 39.28 + -80.39 + 0 + 0 + RLX + + + FLZ064 + 90640 + Martin + FL + US + 27.11 + -80.38 + 0 + 0 + MLB + + + FLZ076 + 90760 + Monroe/Upper_Keys + FL + US + 25.15 + -80.38 + 0 + 0 + KEY + + + VAZ017 + 460170 + Floyd + VA + US + 36.92 + -80.37 + 0 + 0 + RNK + + + PAZ020 + 380200 + Beaver + PA + US + 40.67 + -80.34 + 0 + 0 + PBZ + + + VAZ032 + 460320 + Patrick + VA + US + 36.71 + -80.33 + 0 + 0 + RNK + + + PAZ013 + 380130 + Lawrence + PA + US + 40.99 + -80.31 + 0 + 0 + PBZ + + + FLZ173 + 91730 + Coastal_Miami_Dade_County + FL + US + 25.64 + -80.30 + 0 + 0 + MFL + + + FLZ072 + 90720 + Metro_Broward_County + FL + US + 26.15 + -80.28 + 0 + 0 + MFL + + + FLZ074 + 90740 + Metropolitan_Miami_Dade + FL + US + 25.78 + -80.28 + 0 + 0 + MFL + + + NCZ073 + 330730 + Stanly + NC + US + 35.33 + -80.28 + 0 + 0 + RAH + + + NCZ021 + 330210 + Forsyth + NC + US + 36.11 + -80.27 + 0 + 0 + RAH + + + SCZ031 + 400310 + Sumter + SC + US + 33.90 + -80.27 + 0 + 0 + CAE + + + NCZ038 + 330380 + Davidson + NC + US + 35.76 + -80.26 + 0 + 0 + RAH + + + PAZ007 + 380070 + Mercer + PA + US + 41.28 + -80.26 + 0 + 0 + PBZ + + + NCZ004 + 330040 + Stokes + NC + US + 36.40 + -80.24 + 0 + 0 + RNK + + + SCZ029 + 400290 + Lee + SC + US + 34.16 + -80.23 + 0 + 0 + CAE + + + WVZ039 + 480390 + Upshur + WV + US + 38.90 + -80.23 + 0 + 0 + RLX + + + PAZ031 + 380310 + Greene + PA + US + 39.87 + -80.22 + 0 + 0 + PBZ + + + VAZ018 + 460180 + Craig + VA + US + 37.49 + -80.22 + 0 + 0 + RNK + + + WVZ021 + 480210 + Marion + WV + US + 39.51 + -80.22 + 0 + 0 + PBZ + + + SCZ038 + 400380 + Clarendon + SC + US + 33.69 + -80.21 + 0 + 0 + CAE + + + PAZ029 + 380290 + Washington + PA + US + 40.22 + -80.19 + 0 + 0 + PBZ + + + SCZ016 + 400160 + Chesterfield + SC + US + 34.59 + -80.17 + 0 + 0 + CAE + + + FLZ068 + 90680 + Metro_Palm_Beach_County + FL + US + 26.64 + -80.14 + 0 + 0 + MFL + + + PAZ001 + 380010 + Northern_Erie + PA + US + 42.10 + -80.14 + 0 + 0 + CLE + + + FLZ172 + 91720 + Coastal_Broward_County + FL + US + 26.15 + -80.12 + 0 + 0 + MFL + + + WVZ022 + 480220 + Monongalia + WV + US + 39.58 + -80.10 + 0 + 0 + PBZ + + + NCZ083 + 330830 + Anson + NC + US + 35.01 + -80.09 + 0 + 0 + RAH + + + PAZ002 + 380020 + Southern_Erie + PA + US + 42.03 + -80.07 + 0 + 0 + CLE + + + PAZ003 + 380030 + Crawford + PA + US + 41.67 + -80.07 + 0 + 0 + CLE + + + FLZ168 + 91680 + Coastal_Palm_Beach_County + FL + US + 26.65 + -80.06 + 0 + 0 + MFL + + + WVZ032 + 480320 + Taylor + WV + US + 39.34 + -80.06 + 0 + 0 + RLX + + + VAZ022 + 460220 + Roanoke + VA + US + 37.26 + -80.05 + 0 + 0 + RNK + + + PAZ021 + 380210 + Allegheny + PA + US + 40.44 + -80.03 + 0 + 0 + PBZ + + + WVZ040 + 480400 + Barbour + WV + US + 39.12 + -80.02 + 0 + 0 + RLX + + + WVZ046 + 480460 + Pocahontas + WV + US + 38.39 + -80.00 + 0 + 0 + RLX + + + SCZ023 + 400230 + Darlington + SC + US + 34.31 + -79.98 + 0 + 0 + ILM + + + VAZ019 + 460190 + Alleghany + VA + US + 37.78 + -79.95 + 0 + 0 + RNK + + + PAZ014 + 380140 + Butler + PA + US + 40.92 + -79.93 + 0 + 0 + PBZ + + + VAZ033 + 460330 + Franklin + VA + US + 37.01 + -79.92 + 0 + 0 + RNK + + + SCZ045 + 400450 + Berkeley + SC + US + 33.17 + -79.90 + 0 + 0 + CHS + + + NCZ074 + 330740 + Montgomery + NC + US + 35.32 + -79.89 + 0 + 0 + RAH + + + VAZ043 + 460430 + Henry + VA + US + 36.70 + -79.87 + 0 + 0 + RNK + + + SCZ050 + 400500 + Charleston + SC + US + 32.85 + -79.86 + 0 + 0 + CHS + + + WVZ047 + 480470 + Randolph + WV + US + 38.75 + -79.81 + 0 + 0 + RLX + + + NCZ039 + 330390 + Randolph + NC + US + 35.71 + -79.80 + 0 + 0 + RAH + + + NCZ022 + 330220 + Guilford + NC + US + 36.07 + -79.79 + 0 + 0 + RAH + + + VAZ023 + 460230 + Botetourt + VA + US + 37.55 + -79.79 + 0 + 0 + RNK + + + NCZ005 + 330050 + Rockingham + NC + US + 36.39 + -79.77 + 0 + 0 + RNK + + + NCZ084 + 330840 + Richmond + NC + US + 34.99 + -79.76 + 0 + 0 + RAH + + + VAZ020 + 460200 + Bath + VA + US + 38.06 + -79.75 + 0 + 0 + RNK + + + PAZ008 + 380080 + Venango + PA + US + 41.40 + -79.74 + 0 + 0 + PBZ + + + SCZ039 + 400390 + Williamsburg + SC + US + 33.59 + -79.71 + 0 + 0 + ILM + + + WVZ023 + 480230 + Preston + WV + US + 39.46 + -79.70 + 0 + 0 + PBZ + + + SCZ017 + 400170 + Marlboro + SC + US + 34.55 + -79.69 + 0 + 0 + ILM + + + SCZ032 + 400320 + Florence + SC + US + 34.04 + -79.69 + 0 + 0 + ILM + + + PAZ032 + 380320 + Fayette + PA + US + 39.93 + -79.66 + 0 + 0 + PBZ + + + WVZ041 + 480410 + Tucker + WV + US + 39.11 + -79.57 + 0 + 0 + PBZ + + + VAZ021 + 460210 + Highland + VA + US + 38.39 + -79.56 + 0 + 0 + LWX + + + VAZ034 + 460340 + Bedford + VA + US + 37.31 + -79.52 + 0 + 0 + RNK + + + NCZ085 + 330850 + Scotland + NC + US + 34.84 + -79.51 + 0 + 0 + RAH + + + PAZ015 + 380150 + Clarion + PA + US + 41.20 + -79.46 + 0 + 0 + PBZ + + + PAZ022 + 380220 + Armstrong + PA + US + 40.85 + -79.46 + 0 + 0 + PBZ + + + PAZ030 + 380300 + Westmoreland + PA + US + 40.36 + -79.44 + 0 + 0 + PBZ + + + WVZ501 + 485010 + Western_Grant + WV + US + 39.20 + -79.44 + 0 + 0 + LWX + + + NCZ075 + 330750 + Moore + NC + US + 35.28 + -79.43 + 0 + 0 + RAH + + + NYZ019 + 320190 + Chautauqua + NY + US + 42.29 + -79.41 + 0 + 0 + BUF + + + VAZ024 + 460240 + Rockbridge + VA + US + 37.81 + -79.41 + 0 + 0 + RNK + + + VAZ044 + 460440 + Pittsylvania + VA + US + 36.84 + -79.41 + 0 + 0 + RNK + + + NCZ023 + 330230 + Alamance + NC + US + 36.04 + -79.39 + 0 + 0 + RAH + + + SCZ024 + 400240 + Dillon + SC + US + 34.42 + -79.36 + 0 + 0 + ILM + + + SCZ033 + 400330 + Marion + SC + US + 34.00 + -79.35 + 0 + 0 + ILM + + + WVZ054 + 480540 + Pendleton + WV + US + 38.68 + -79.35 + 0 + 0 + LWX + + + NCZ006 + 330060 + Caswell + NC + US + 36.39 + -79.34 + 0 + 0 + RNK + + + SCZ046 + 400460 + Georgetown + SC + US + 33.45 + -79.34 + 0 + 0 + ILM + + + PAZ004 + 380040 + Warren + PA + US + 41.81 + -79.27 + 0 + 0 + CTP + + + NCZ086 + 330860 + Hoke + NC + US + 35.02 + -79.24 + 0 + 0 + RAH + + + PAZ009 + 380090 + Forest + PA + US + 41.47 + -79.24 + 0 + 0 + PBZ + + + NCZ040 + 330400 + Chatham + NC + US + 35.69 + -79.23 + 0 + 0 + RAH + + + MDZ001 + 200010 + Garrett + MD + US + 39.46 + -79.21 + 0 + 0 + PBZ + + + NCZ076 + 330760 + Lee + NC + US + 35.46 + -79.17 + 0 + 0 + RAH + + + WVZ502 + 485020 + Eastern_Grant + WV + US + 39.06 + -79.17 + 0 + 0 + LWX + + + VAZ035 + 460350 + Amherst + VA + US + 37.59 + -79.16 + 0 + 0 + RNK + + + PAZ023 + 380230 + Indiana + PA + US + 40.64 + -79.14 + 0 + 0 + PBZ + + + NCZ087 + 330870 + Robeson + NC + US + 34.63 + -79.13 + 0 + 0 + ILM + + + VAZ025 + 460250 + Augusta + VA + US + 38.18 + -79.13 + 0 + 0 + LWX + + + VAZ045 + 460450 + Campbell + VA + US + 37.25 + -79.13 + 0 + 0 + RNK + + + WVZ503 + 485030 + Western_Mineral + WV + US + 39.40 + -79.13 + 0 + 0 + LWX + + + NCZ024 + 330240 + Orange + NC + US + 36.04 + -79.11 + 0 + 0 + RAH + + + PAZ033 + 380330 + Somerset + PA + US + 40.00 + -79.04 + 0 + 0 + CTP + + + NCZ007 + 330070 + Person + NC + US + 36.39 + -78.98 + 0 + 0 + RAH + + + PAZ016 + 380160 + Jefferson + PA + US + 41.14 + -78.96 + 0 + 0 + PBZ + + + SCZ034 + 400340 + Horry + SC + US + 33.94 + -78.94 + 0 + 0 + ILM + + + MDZ501 + 205010 + Extreme_Western_Allegany + MD + US + 39.58 + -78.92 + 0 + 0 + LWX + + + VAZ036 + 460360 + Nelson + VA + US + 37.79 + -78.92 + 0 + 0 + LWX + + + WVZ504 + 485040 + Eastern_Mineral + WV + US + 39.44 + -78.89 + 0 + 0 + LWX + + + NCZ077 + 330770 + Harnett + NC + US + 35.38 + -78.88 + 0 + 0 + RAH + + + VAZ058 + 460580 + Halifax + VA + US + 36.80 + -78.88 + 0 + 0 + RNK + + + NCZ025 + 330250 + Durham + NC + US + 36.05 + -78.86 + 0 + 0 + RAH + + + VAZ026 + 460260 + Rockingham + VA + US + 38.53 + -78.86 + 0 + 0 + LWX + + + VAZ046 + 460460 + Appomattox + VA + US + 37.38 + -78.81 + 0 + 0 + RNK + + + WVZ055 + 480550 + Hardy + WV + US + 39.00 + -78.81 + 0 + 0 + LWX + + + NCZ088 + 330880 + Cumberland + NC + US + 35.04 + -78.80 + 0 + 0 + RAH + + + NYZ085 + 320850 + Southern_Erie + NY + US + 42.62 + -78.80 + 0 + 0 + BUF + + + NYZ001 + 320010 + Niagara + NY + US + 43.20 + -78.77 + 0 + 0 + BUF + + + NYZ010 + 320100 + Northern_Erie + NY + US + 42.94 + -78.74 + 0 + 0 + BUF + + + PAZ024 + 380240 + Cambria + PA + US + 40.48 + -78.71 + 0 + 0 + CTP + + + NYZ020 + 320200 + Cattaraugus + NY + US + 42.27 + -78.68 + 0 + 0 + BUF + + + VAZ059 + 460590 + Charlotte + VA + US + 36.98 + -78.68 + 0 + 0 + RNK + + + PAZ010 + 380100 + Elk + PA + US + 41.42 + -78.67 + 0 + 0 + CTP + + + WVZ050 + 480500 + Hampshire + WV + US + 39.32 + -78.66 + 0 + 0 + LWX + + + MDZ502 + 205020 + Central_and_Eastern_Allegany + MD + US + 39.58 + -78.65 + 0 + 0 + LWX + + + NCZ008 + 330080 + Granville + NC + US + 36.28 + -78.63 + 0 + 0 + RAH + + + NCZ041 + 330410 + Wake + NC + US + 35.79 + -78.63 + 0 + 0 + RAH + + + NCZ099 + 330990 + Columbus + NC + US + 34.21 + -78.61 + 0 + 0 + ILM + + + PAZ005 + 380050 + McKean + PA + US + 41.80 + -78.58 + 0 + 0 + CTP + + + VAZ027 + 460270 + Shenandoah + VA + US + 38.86 + -78.58 + 0 + 0 + LWX + + + VAZ047 + 460470 + Buckingham + VA + US + 37.56 + -78.55 + 0 + 0 + RNK + + + NCZ096 + 330960 + Bladen + NC + US + 34.61 + -78.53 + 0 + 0 + ILM + + + VAZ037 + 460370 + Albemarle + VA + US + 38.00 + -78.52 + 0 + 0 + LWX + + + PAZ034 + 380340 + Bedford + PA + US + 40.02 + -78.48 + 0 + 0 + CTP + + + VAZ029 + 460290 + Page + VA + US + 38.62 + -78.48 + 0 + 0 + LWX + + + VAZ038 + 460380 + Greene + VA + US + 38.33 + -78.47 + 0 + 0 + LWX + + + VAZ060 + 460600 + Prince_Edward + VA + US + 37.24 + -78.46 + 0 + 0 + AKQ + + + PAZ017 + 380170 + Clearfield + PA + US + 40.99 + -78.43 + 0 + 0 + CTP + + + NCZ009 + 330090 + Vance + NC + US + 36.35 + -78.40 + 0 + 0 + RAH + + + NCZ042 + 330420 + Johnston + NC + US + 35.53 + -78.39 + 0 + 0 + RAH + + + NCZ089 + 330890 + Sampson + NC + US + 34.93 + -78.39 + 0 + 0 + RAH + + + VAZ065 + 460650 + Mecklenburg + VA + US + 36.72 + -78.39 + 0 + 0 + AKQ + + + PAZ025 + 380250 + Blair + PA + US + 40.50 + -78.37 + 0 + 0 + CTP + + + NCZ100 + 331000 + Brunswick + NC + US + 34.10 + -78.30 + 0 + 0 + ILM + + + VAZ028 + 460280 + Frederick + VA + US + 39.23 + -78.29 + 0 + 0 + LWX + + + NCZ026 + 330260 + Franklin + NC + US + 36.04 + -78.28 + 0 + 0 + RAH + + + VAZ048 + 460480 + Fluvanna + VA + US + 37.85 + -78.28 + 0 + 0 + AKQ + + + VAZ061 + 460610 + Cumberland + VA + US + 37.52 + -78.28 + 0 + 0 + AKQ + + + VAZ039 + 460390 + Madison + VA + US + 38.43 + -78.27 + 0 + 0 + LWX + + + VAZ066 + 460660 + Lunenburg + VA + US + 36.95 + -78.25 + 0 + 0 + AKQ + + + WVZ051 + 480510 + Morgan + WV + US + 39.54 + -78.25 + 0 + 0 + LWX + + + NYZ002 + 320020 + Orleans + NY + US + 43.25 + -78.23 + 0 + 0 + BUF + + + NYZ012 + 320120 + Wyoming + NY + US + 42.70 + -78.22 + 0 + 0 + BUF + + + PAZ011 + 380110 + Cameron + PA + US + 41.42 + -78.21 + 0 + 0 + CTP + + + VAZ030 + 460300 + Warren + VA + US + 38.90 + -78.20 + 0 + 0 + LWX + + + NYZ011 + 320110 + Genesee + NY + US + 43.00 + -78.18 + 0 + 0 + BUF + + + VAZ040 + 460400 + Rappahannock + VA + US + 38.69 + -78.14 + 0 + 0 + LWX + + + PAZ035 + 380350 + Fulton + PA + US + 39.94 + -78.13 + 0 + 0 + CTP + + + NCZ010 + 330100 + Warren + NC + US + 36.37 + -78.11 + 0 + 0 + RAH + + + NCZ078 + 330780 + Wayne + NC + US + 35.37 + -78.06 + 0 + 0 + RAH + + + VAZ050 + 460500 + Orange + VA + US + 38.26 + -78.04 + 0 + 0 + LWX + + + VAZ067 + 460670 + Nottoway + VA + US + 37.14 + -78.03 + 0 + 0 + AKQ + + + WVZ052 + 480520 + Berkeley + WV + US + 39.44 + -78.03 + 0 + 0 + LWX + + + NYZ021 + 320210 + Allegany + NY + US + 42.26 + -78.01 + 0 + 0 + BUF + + + PAZ018 + 380180 + Northern_Centre + PA + US + 41.00 + -78.01 + 0 + 0 + CTP + + + VAZ049 + 460490 + Louisa + VA + US + 37.94 + -78.00 + 0 + 0 + AKQ + + + VAZ031 + 460310 + Clarke + VA + US + 39.12 + -77.99 + 0 + 0 + LWX + + + NCZ027 + 330270 + Nash + NC + US + 35.96 + -77.98 + 0 + 0 + RAH + + + PAZ026 + 380260 + Huntingdon + PA + US + 40.40 + -77.97 + 0 + 0 + CTP + + + VAZ068 + 460680 + Amelia + VA + US + 37.34 + -77.95 + 0 + 0 + AKQ + + + NCZ043 + 330430 + Wilson + NC + US + 35.71 + -77.93 + 0 + 0 + RAH + + + NCZ090 + 330900 + Duplin + NC + US + 34.95 + -77.93 + 0 + 0 + MHX + + + VAZ051 + 460510 + Culpeper + VA + US + 38.51 + -77.93 + 0 + 0 + LWX + + + PAZ006 + 380060 + Potter + PA + US + 41.74 + -77.91 + 0 + 0 + CTP + + + VAZ062 + 460620 + Goochland + VA + US + 37.73 + -77.90 + 0 + 0 + AKQ + + + VAZ069 + 460690 + Powhatan + VA + US + 37.55 + -77.90 + 0 + 0 + AKQ + + + NCZ097 + 330970 + Pender + NC + US + 34.51 + -77.89 + 0 + 0 + ILM + + + NCZ101 + 331010 + New_Hanover + NC + US + 34.16 + -77.88 + 0 + 0 + ILM + + + WVZ053 + 480530 + Jefferson + WV + US + 39.32 + -77.88 + 0 + 0 + LWX + + + VAZ079 + 460790 + Brunswick + VA + US + 36.79 + -77.86 + 0 + 0 + AKQ + + + VAZ041 + 460410 + Fauquier + VA + US + 38.71 + -77.84 + 0 + 0 + LWX + + + PAZ036 + 380360 + Franklin + PA + US + 40.01 + -77.78 + 0 + 0 + CTP + + + NYZ013 + 320130 + Livingston + NY + US + 42.73 + -77.77 + 0 + 0 + BUF + + + MDZ003 + 200030 + Washington + MD + US + 39.52 + -77.72 + 0 + 0 + LWX + + + PAZ012 + 380120 + Northern_Clinton + PA + US + 41.28 + -77.71 + 0 + 0 + CTP + + + PAZ019 + 380190 + Southern_Centre + PA + US + 40.89 + -77.69 + 0 + 0 + CTP + + + NYZ003 + 320030 + Monroe + NY + US + 43.16 + -77.68 + 0 + 0 + BUF + + + VAZ056 + 460560 + Spotsylvania + VA + US + 38.19 + -77.66 + 0 + 0 + LWX + + + NCZ079 + 330790 + Greene + NC + US + 35.50 + -77.65 + 0 + 0 + MHX + + + VAZ080 + 460800 + Dinwiddie + VA + US + 37.07 + -77.65 + 0 + 0 + AKQ + + + VAZ042 + 460420 + Loudoun + VA + US + 39.09 + -77.64 + 0 + 0 + LWX + + + NCZ011 + 330110 + Halifax + NC + US + 36.25 + -77.62 + 0 + 0 + RAH + + + NCZ091 + 330910 + Lenoir + NC + US + 35.21 + -77.61 + 0 + 0 + MHX + + + PAZ027 + 380270 + Mifflin + PA + US + 40.61 + -77.60 + 0 + 0 + CTP + + + NCZ028 + 330280 + Edgecombe + NC + US + 35.91 + -77.59 + 0 + 0 + RAH + + + VAZ070 + 460700 + Chesterfield + VA + US + 37.39 + -77.56 + 0 + 0 + AKQ + + + VAZ087 + 460870 + Greensville + VA + US + 36.72 + -77.56 + 0 + 0 + AKQ + + + PAZ028 + 380280 + Juniata + PA + US + 40.48 + -77.50 + 0 + 0 + CTP + + + NCZ012 + 330120 + Northampton + NC + US + 36.36 + -77.49 + 0 + 0 + AKQ + + + VAZ052 + 460520 + Pr_William/Manassas/Manassas_Pk + VA + US + 38.72 + -77.47 + 0 + 0 + LWX + + + VAZ055 + 460550 + Stafford + VA + US + 38.42 + -77.46 + 0 + 0 + LWX + + + VAZ063 + 460630 + Hanover + VA + US + 37.78 + -77.46 + 0 + 0 + AKQ + + + VAZ071 + 460710 + Henrico + VA + US + 37.53 + -77.42 + 0 + 0 + AKQ + + + MDZ004 + 200040 + Frederick + MD + US + 39.47 + -77.40 + 0 + 0 + LWX + + + NCZ044 + 330440 + Pitt + NC + US + 35.58 + -77.40 + 0 + 0 + MHX + + + NCZ092 + 330920 + Jones + NC + US + 35.01 + -77.39 + 0 + 0 + MHX + + + PAZ045 + 380450 + Southern_Clinton + PA + US + 41.09 + -77.39 + 0 + 0 + CTP + + + NYZ022 + 320220 + Steuben + NY + US + 42.29 + -77.36 + 0 + 0 + BGM + + + VAZ064 + 460640 + Caroline + VA + US + 38.01 + -77.36 + 0 + 0 + AKQ + + + NYZ014 + 320140 + Ontario + NY + US + 42.81 + -77.29 + 0 + 0 + BUF + + + PAZ056 + 380560 + Perry + PA + US + 40.41 + -77.29 + 0 + 0 + CTP + + + VAZ053 + 460530 + Fairfax + VA + US + 38.84 + -77.29 + 0 + 0 + LWX + + + VAZ088 + 460880 + Sussex + VA + US + 36.91 + -77.29 + 0 + 0 + AKQ + + + NCZ098 + 330980 + Onslow + NC + US + 34.72 + -77.26 + 0 + 0 + MHX + + + PAZ037 + 380370 + Tioga + PA + US + 41.77 + -77.25 + 0 + 0 + CTP + + + PAZ063 + 380630 + Cumberland + PA + US + 40.14 + -77.24 + 0 + 0 + CTP + + + PAZ064 + 380640 + Adams + PA + US + 39.90 + -77.22 + 0 + 0 + CTP + + + VAZ081 + 460810 + Prince_George + VA + US + 37.16 + -77.22 + 0 + 0 + AKQ + + + MDZ009 + 200090 + Montgomery + MD + US + 39.14 + -77.20 + 0 + 0 + LWX + + + VAZ057 + 460570 + King_George + VA + US + 38.28 + -77.18 + 0 + 0 + LWX + + + VAZ092 + 460920 + Southampton + VA + US + 36.78 + -77.16 + 0 + 0 + AKQ + + + NYZ015 + 320150 + Yates + NY + US + 42.61 + -77.13 + 0 + 0 + BGM + + + VAZ054 + 460540 + Arlington/Falls_Ch/Alexandria + VA + US + 38.86 + -77.12 + 0 + 0 + LWX + + + PAZ041 + 380410 + Northern_Lycoming + PA + US + 41.41 + -77.11 + 0 + 0 + CTP + + + PAZ049 + 380490 + Union + PA + US + 40.98 + -77.10 + 0 + 0 + CTP + + + NCZ029 + 330290 + Martin + NC + US + 35.86 + -77.09 + 0 + 0 + MHX + + + PAZ050 + 380500 + Snyder + PA + US + 40.76 + -77.09 + 0 + 0 + CTP + + + VAZ082 + 460820 + Charles_City + VA + US + 37.36 + -77.08 + 0 + 0 + AKQ + + + VAZ072 + 460720 + King_William + VA + US + 37.71 + -77.06 + 0 + 0 + AKQ + + + MDZ005 + 200050 + Carroll + MD + US + 39.53 + -77.05 + 0 + 0 + LWX + + + NCZ093 + 330930 + Craven + NC + US + 35.13 + -77.05 + 0 + 0 + MHX + + + NYZ004 + 320040 + Wayne + NY + US + 43.18 + -77.04 + 0 + 0 + BUF + + + DCZ001 + 510010 + District_of_Columbia + DC + US + 38.89 + -77.02 + 0 + 0 + LWX + + + NCZ030 + 330300 + Bertie + NC + US + 36.03 + -77.01 + 0 + 0 + AKQ + + + VAZ083 + 460830 + New_Kent + VA + US + 37.50 + -76.99 + 0 + 0 + AKQ + + + MDZ016 + 200160 + Charles + MD + US + 38.48 + -76.98 + 0 + 0 + LWX + + + NCZ013 + 330130 + Hertford + NC + US + 36.39 + -76.96 + 0 + 0 + AKQ + + + MDZ010 + 200100 + Howard + MD + US + 39.23 + -76.94 + 0 + 0 + LWX + + + VAZ074 + 460740 + Essex + VA + US + 37.95 + -76.93 + 0 + 0 + AKQ + + + VAZ073 + 460730 + King_and_Queen + VA + US + 37.70 + -76.92 + 0 + 0 + AKQ + + + VAZ089 + 460890 + Surry + VA + US + 37.10 + -76.91 + 0 + 0 + AKQ + + + MDZ013 + 200130 + Prince_Georges + MD + US + 38.83 + -76.88 + 0 + 0 + LWX + + + PAZ046 + 380460 + Southern_Lycoming + PA + US + 41.22 + -76.88 + 0 + 0 + CTP + + + NYZ023 + 320230 + Schuyler + NY + US + 42.40 + -76.86 + 0 + 0 + BGM + + + NCZ080 + 330800 + Beaufort + NC + US + 35.48 + -76.84 + 0 + 0 + MHX + + + VAZ075 + 460750 + Westmoreland + VA + US + 38.12 + -76.80 + 0 + 0 + AKQ + + + PAZ057 + 380570 + Dauphin + PA + US + 40.40 + -76.79 + 0 + 0 + CTP + + + NYZ016 + 320160 + Seneca + NY + US + 42.79 + -76.78 + 0 + 0 + BGM + + + NYZ024 + 320240 + Chemung + NY + US + 42.15 + -76.75 + 0 + 0 + BGM + + + VAZ090 + 460900 + James_City + VA + US + 37.32 + -76.75 + 0 + 0 + AKQ + + + VAZ076 + 460760 + Richmond + VA + US + 37.95 + -76.73 + 0 + 0 + AKQ + + + NCZ014 + 330140 + Gates + NC + US + 36.42 + -76.71 + 0 + 0 + AKQ + + + NCZ094 + 330940 + Pamlico + NC + US + 35.15 + -76.71 + 0 + 0 + MHX + + + VAZ093 + 460930 + Isle_of_Wight + VA + US + 36.89 + -76.71 + 0 + 0 + AKQ + + + PAZ065 + 380650 + York + PA + US + 39.97 + -76.69 + 0 + 0 + CTP + + + PAZ052 + 380520 + Northumberland + PA + US + 40.89 + -76.67 + 0 + 0 + CTP + + + VAZ096 + 460960 + Suffolk + VA + US + 36.74 + -76.67 + 0 + 0 + AKQ + + + NCZ031 + 330310 + Chowan + NC + US + 36.17 + -76.66 + 0 + 0 + AKQ + + + PAZ051 + 380510 + Montour + PA + US + 41.02 + -76.66 + 0 + 0 + CTP + + + MDZ006 + 200060 + Northern_Baltimore + MD + US + 39.57 + -76.64 + 0 + 0 + LWX + + + VAZ085 + 460850 + Middlesex + VA + US + 37.65 + -76.64 + 0 + 0 + AKQ + + + MDZ011 + 200110 + Southern_Baltimore + MD + US + 39.31 + -76.61 + 0 + 0 + LWX + + + MDZ014 + 200140 + Anne_Arundel + MD + US + 38.97 + -76.61 + 0 + 0 + LWX + + + NCZ045 + 330450 + Washington + NC + US + 35.84 + -76.60 + 0 + 0 + MHX + + + NCZ095 + 330950 + Carteret + NC + US + 34.85 + -76.60 + 0 + 0 + MHX + + + NYZ005 + 320050 + Northern_Cayuga + NY + US + 43.22 + -76.60 + 0 + 0 + BUF + + + MDZ017 + 200170 + St._Marys + MD + US + 38.28 + -76.59 + 0 + 0 + LWX + + + VAZ084 + 460840 + Gloucester + VA + US + 37.43 + -76.55 + 0 + 0 + AKQ + + + MDZ018 + 200180 + Calvert + MD + US + 38.54 + -76.54 + 0 + 0 + LWX + + + PAZ038 + 380380 + Bradford + PA + US + 41.77 + -76.53 + 0 + 0 + BGM + + + PAZ042 + 380420 + Sullivan + PA + US + 41.44 + -76.52 + 0 + 0 + CTP + + + VAZ091 + 460910 + York + VA + US + 37.23 + -76.51 + 0 + 0 + AKQ + + + NYZ017 + 320170 + Southern_Cayuga + NY + US + 42.82 + -76.50 + 0 + 0 + BGM + + + VAZ094 + 460940 + Newport_News/Hampton + VA + US + 37.10 + -76.50 + 0 + 0 + AKQ + + + NYZ025 + 320250 + Tompkins + NY + US + 42.45 + -76.47 + 0 + 0 + BGM + + + VAZ078 + 460780 + Lancaster + VA + US + 37.73 + -76.45 + 0 + 0 + AKQ + + + VAZ077 + 460770 + Northumberland + VA + US + 37.86 + -76.44 + 0 + 0 + AKQ + + + PAZ053 + 380530 + Columbia + PA + US + 41.04 + -76.43 + 0 + 0 + CTP + + + PAZ059 + 380590 + Lebanon + PA + US + 40.38 + -76.42 + 0 + 0 + CTP + + + NCZ032 + 330320 + Perquimans + NC + US + 36.22 + -76.40 + 0 + 0 + AKQ + + + MDZ007 + 200070 + Harford + MD + US + 39.50 + -76.32 + 0 + 0 + LWX + + + NYZ055 + 320550 + Tioga + NY + US + 42.20 + -76.32 + 0 + 0 + BGM + + + PAZ066 + 380660 + Lancaster + PA + US + 40.02 + -76.31 + 0 + 0 + CTP + + + VAZ095 + 460950 + Norfolk/Portsmouth + VA + US + 36.87 + -76.30 + 0 + 0 + AKQ + + + VAZ086 + 460860 + Mathews + VA + US + 37.42 + -76.29 + 0 + 0 + AKQ + + + NCZ015 + 330150 + Pasquotank + NC + US + 36.31 + -76.28 + 0 + 0 + AKQ + + + VAZ097 + 460970 + Chesapeake + VA + US + 36.71 + -76.28 + 0 + 0 + AKQ + + + NCZ081 + 330810 + Western_Hyde + NC + US + 35.51 + -76.26 + 0 + 0 + MHX + + + PAZ058 + 380580 + Schuylkill + PA + US + 40.72 + -76.23 + 0 + 0 + CTP + + + NCZ046 + 330460 + Tyrrell + NC + US + 35.79 + -76.21 + 0 + 0 + MHX + + + NYZ006 + 320060 + Oswego + NY + US + 43.43 + -76.19 + 0 + 0 + BUF + + + NYZ018 + 320180 + Onondaga + NY + US + 43.02 + -76.19 + 0 + 0 + BGM + + + NCZ016 + 330160 + Camden + NC + US + 36.36 + -76.17 + 0 + 0 + AKQ + + + MDZ012 + 200120 + Kent + MD + US + 39.20 + -76.15 + 0 + 0 + PHI + + + MDZ019 + 200190 + Talbot + MD + US + 38.76 + -76.15 + 0 + 0 + PHI + + + NYZ044 + 320440 + Cortland + NY + US + 42.60 + -76.07 + 0 + 0 + BGM + + + MDZ015 + 200150 + Queen_Anne's + MD + US + 39.06 + -76.06 + 0 + 0 + PHI + + + VAZ098 + 460980 + Virginia_Beach + VA + US + 36.74 + -76.05 + 0 + 0 + AKQ + + + MDZ021 + 200210 + Dorchester + MD + US + 38.41 + -76.03 + 0 + 0 + AKQ + + + PAZ043 + 380430 + Wyoming + PA + US + 41.52 + -76.01 + 0 + 0 + BGM + + + PAZ060 + 380600 + Berks + PA + US + 40.41 + -75.99 + 0 + 0 + PHI + + + PAZ047 + 380470 + Luzerne + PA + US + 41.16 + -75.96 + 0 + 0 + BGM + + + NYZ007 + 320070 + Jefferson + NY + US + 44.03 + -75.95 + 0 + 0 + BUF + + + VAZ100 + 461000 + Northampton + VA + US + 37.34 + -75.95 + 0 + 0 + AKQ + + + NCZ017 + 330170 + Western_Currituck + NC + US + 36.31 + -75.94 + 0 + 0 + AKQ + + + MDZ008 + 200080 + Cecil + MD + US + 39.55 + -75.93 + 0 + 0 + PHI + + + NCZ104 + 331040 + Eastern_Hyde + NC + US + 35.13 + -75.92 + 0 + 0 + MHX + + + NCZ047 + 330470 + Western_Dare + NC + US + 35.77 + -75.87 + 0 + 0 + MHX + + + MDZ020 + 200200 + Caroline + MD + US + 38.90 + -75.86 + 0 + 0 + PHI + + + NCZ102 + 331020 + Eastern_Currituck + NC + US + 36.37 + -75.84 + 0 + 0 + AKQ + + + PAZ039 + 380390 + Susquehanna + PA + US + 41.82 + -75.81 + 0 + 0 + BGM + + + MDZ023 + 200230 + Somerset + MD + US + 38.10 + -75.80 + 0 + 0 + AKQ + + + NYZ056 + 320560 + Broome + NY + US + 42.21 + -75.76 + 0 + 0 + BGM + + + PAZ067 + 380670 + Chester + PA + US + 39.99 + -75.76 + 0 + 0 + PHI + + + PAZ054 + 380540 + Carbon + PA + US + 40.94 + -75.74 + 0 + 0 + PHI + + + PAZ044 + 380440 + Lackawanna + PA + US + 41.40 + -75.64 + 0 + 0 + BGM + + + VAZ099 + 460990 + Accomack + VA + US + 37.74 + -75.64 + 0 + 0 + AKQ + + + MDZ022 + 200220 + Wicomico + MD + US + 38.39 + -75.62 + 0 + 0 + AKQ + + + NYZ036 + 320360 + Madison + NY + US + 42.96 + -75.62 + 0 + 0 + BGM + + + PAZ061 + 380610 + Lehigh + PA + US + 40.60 + -75.62 + 0 + 0 + PHI + + + DEZ001 + 80010 + New_Castle + DE + US + 39.57 + -75.60 + 0 + 0 + PHI + + + NYZ045 + 320450 + Chenango + NY + US + 42.47 + -75.59 + 0 + 0 + BGM + + + DEZ002 + 80020 + Kent + DE + US + 39.10 + -75.53 + 0 + 0 + PHI + + + NCZ103 + 331030 + Eastern_Dare + NC + US + 35.48 + -75.48 + 0 + 0 + MHX + + + NYZ008 + 320080 + Lewis + NY + US + 43.82 + -75.48 + 0 + 0 + BUF + + + NYZ009 + 320090 + Northern_Oneida + NY + US + 43.38 + -75.48 + 0 + 0 + BGM + + + PAZ070 + 380700 + Delaware + PA + US + 39.93 + -75.43 + 0 + 0 + PHI + + + DEZ003 + 80030 + Inland_Sussex + DE + US + 38.70 + -75.42 + 0 + 0 + PHI + + + NYZ037 + 320370 + Southern_Oneida + NY + US + 43.08 + -75.41 + 0 + 0 + BGM + + + MDZ024 + 200240 + Inland_Worcester + MD + US + 38.23 + -75.39 + 0 + 0 + AKQ + + + PAZ068 + 380680 + Montgomery + PA + US + 40.21 + -75.36 + 0 + 0 + PHI + + + PAZ062 + 380620 + Northampton + PA + US + 40.75 + -75.34 + 0 + 0 + PHI + + + NJZ016 + 300160 + Salem + NJ + US + 39.58 + -75.32 + 0 + 0 + PHI + + + PAZ055 + 380550 + Monroe + PA + US + 41.03 + -75.31 + 0 + 0 + PHI + + + PAZ072 + 380720 + Southern_Wayne + PA + US + 41.44 + -75.28 + 0 + 0 + BGM + + + PAZ040 + 380400 + Northern_Wayne + PA + US + 41.80 + -75.27 + 0 + 0 + BGM + + + NYZ087 + 320870 + Southwestern_St._Lawrence + NY + US + 44.46 + -75.23 + 0 + 0 + BTV + + + MDZ025 + 200250 + Maryland_Beaches + MD + US + 38.17 + -75.18 + 0 + 0 + AKQ + + + NJZ017 + 300170 + Gloucester + NJ + US + 39.70 + -75.16 + 0 + 0 + PHI + + + NJZ021 + 300210 + Cumberland + NJ + US + 39.37 + -75.14 + 0 + 0 + PHI + + + PAZ071 + 380710 + Philadelphia + PA + US + 39.99 + -75.13 + 0 + 0 + PHI + + + PAZ069 + 380690 + Bucks + PA + US + 40.32 + -75.11 + 0 + 0 + PHI + + + DEZ004 + 80040 + Delaware_Beaches + DE + US + 38.63 + -75.09 + 0 + 0 + PHI + + + PAZ048 + 380480 + Pike + PA + US + 41.34 + -75.03 + 0 + 0 + BGM + + + NYZ046 + 320460 + Otsego + NY + US + 42.61 + -75.02 + 0 + 0 + BGM + + + NJZ007 + 300070 + Warren + NJ + US + 40.83 + -74.99 + 0 + 0 + PHI + + + NYZ026 + 320260 + Northern_St._Lawrence + NY + US + 44.86 + -74.99 + 0 + 0 + BTV + + + NYZ032 + 320320 + Northern_Herkimer + NY + US + 43.71 + -74.97 + 0 + 0 + ALY + + + NJZ009 + 300090 + Hunterdon + NJ + US + 40.56 + -74.96 + 0 + 0 + PHI + + + NJZ018 + 300180 + Camden + NJ + US + 39.79 + -74.95 + 0 + 0 + PHI + + + NYZ038 + 320380 + Southern_Herkimer + NY + US + 43.08 + -74.95 + 0 + 0 + ALY + + + NYZ029 + 320290 + Southeastern_St._Lawrence + NY + US + 44.39 + -74.93 + 0 + 0 + BTV + + + NYZ057 + 320570 + Delaware + NY + US + 42.19 + -74.93 + 0 + 0 + BGM + + + NJZ023 + 300230 + Cape_May + NJ + US + 39.15 + -74.81 + 0 + 0 + PHI + + + NJZ019 + 300190 + Northwestern_Burlington + NJ + US + 39.97 + -74.77 + 0 + 0 + PHI + + + NJZ024 + 300240 + Atlantic_Coastal_Cape_May + NJ + US + 39.11 + -74.76 + 0 + 0 + PHI + + + NYZ062 + 320620 + Sullivan + NY + US + 41.72 + -74.76 + 0 + 0 + BGM + + + NJZ015 + 300150 + Mercer + NJ + US + 40.27 + -74.71 + 0 + 0 + PHI + + + NJZ022 + 300220 + Atlantic + NJ + US + 39.50 + -74.69 + 0 + 0 + PHI + + + NJZ001 + 300010 + Sussex + NJ + US + 41.13 + -74.68 + 0 + 0 + PHI + + + NJZ010 + 300100 + Somerset + NJ + US + 40.56 + -74.60 + 0 + 0 + PHI + + + NJZ027 + 300270 + Southeastern_Burlington + NJ + US + 39.73 + -74.60 + 0 + 0 + PHI + + + NJZ008 + 300080 + Morris + NJ + US + 40.86 + -74.58 + 0 + 0 + PHI + + + NJZ025 + 300250 + Coastal_Atlantic + NJ + US + 39.40 + -74.46 + 0 + 0 + PHI + + + NYZ033 + 320330 + Hamilton + NY + US + 43.66 + -74.46 + 0 + 0 + ALY + + + NYZ039 + 320390 + Southern_Fulton + NY + US + 43.05 + -74.44 + 0 + 0 + ALY + + + NYZ047 + 320470 + Schoharie + NY + US + 42.59 + -74.44 + 0 + 0 + ALY + + + NYZ082 + 320820 + Northern_Fulton + NY + US + 43.17 + -74.44 + 0 + 0 + ALY + + + NJZ012 + 300120 + Middlesex + NJ + US + 40.42 + -74.43 + 0 + 0 + PHI + + + NYZ040 + 320400 + Montgomery + NY + US + 42.91 + -74.43 + 0 + 0 + ALY + + + NYZ063 + 320630 + Western_Ulster + NY + US + 41.88 + -74.43 + 0 + 0 + ALY + + + NYZ027 + 320270 + Northern_Franklin + NY + US + 44.86 + -74.39 + 0 + 0 + BTV + + + NJZ002 + 300020 + Western_Passaic + NJ + US + 41.09 + -74.36 + 0 + 0 + OKX + + + NYZ067 + 320670 + Orange + NY + US + 41.39 + -74.36 + 0 + 0 + OKX + + + NJZ013 + 300130 + Western_Monmouth + NJ + US + 40.26 + -74.32 + 0 + 0 + PHI + + + NJZ020 + 300200 + Ocean + NJ + US + 39.85 + -74.32 + 0 + 0 + PHI + + + NJZ011 + 300110 + Union + NJ + US + 40.66 + -74.31 + 0 + 0 + OKX + + + NYZ058 + 320580 + Western_Greene + NY + US + 42.26 + -74.28 + 0 + 0 + ALY + + + NJZ026 + 300260 + Coastal_Ocean + NJ + US + 39.64 + -74.26 + 0 + 0 + PHI + + + NYZ030 + 320300 + Southern_Franklin + NY + US + 44.54 + -74.26 + 0 + 0 + BTV + + + NJZ005 + 300050 + Essex + NJ + US + 40.79 + -74.25 + 0 + 0 + OKX + + + NJZ004 + 300040 + Eastern_Passaic + NJ + US + 40.91 + -74.20 + 0 + 0 + OKX + + + NYZ048 + 320480 + Western_Schenectady + NY + US + 42.80 + -74.17 + 0 + 0 + ALY + + + NYZ074 + 320740 + Richmond_(Staten_Is.) + NY + US + 40.58 + -74.15 + 0 + 0 + OKX + + + NYZ051 + 320510 + Western_Albany + NY + US + 42.58 + -74.14 + 0 + 0 + ALY + + + NYZ064 + 320640 + Eastern_Ulster + NY + US + 41.88 + -74.09 + 0 + 0 + ALY + + + NJZ003 + 300030 + Bergen + NJ + US + 40.94 + -74.08 + 0 + 0 + OKX + + + NJZ006 + 300060 + Hudson + NJ + US + 40.74 + -74.07 + 0 + 0 + OKX + + + NYZ069 + 320690 + Rockland + NY + US + 41.16 + -74.07 + 0 + 0 + OKX + + + NJZ014 + 300140 + Eastern_Monmouth + NJ + US + 40.28 + -74.03 + 0 + 0 + PHI + + + NYZ049 + 320490 + Eastern_Schenectady + NY + US + 42.85 + -73.96 + 0 + 0 + ALY + + + NYZ072 + 320720 + New_York_(Manhattan) + NY + US + 40.79 + -73.96 + 0 + 0 + OKX + + + NYZ075 + 320750 + Kings_(Brooklyn) + NY + US + 40.66 + -73.94 + 0 + 0 + OKX + + + NYZ059 + 320590 + Eastern_Greene + NY + US + 42.30 + -73.91 + 0 + 0 + ALY + + + NYZ034 + 320340 + Western_Essex + NY + US + 44.10 + -73.90 + 0 + 0 + BTV + + + NYZ050 + 320500 + Southern_Saratoga + NY + US + 42.94 + -73.88 + 0 + 0 + ALY + + + NYZ041 + 320410 + Northern_Saratoga + NY + US + 43.17 + -73.87 + 0 + 0 + ALY + + + NYZ052 + 320520 + Eastern_Albany + NY + US + 42.62 + -73.86 + 0 + 0 + ALY + + + NYZ065 + 320650 + Western_Dutchess + NY + US + 41.76 + -73.85 + 0 + 0 + ALY + + + NYZ073 + 320730 + Bronx + NY + US + 40.86 + -73.85 + 0 + 0 + OKX + + + NYZ042 + 320420 + Northern_Warren + NY + US + 43.58 + -73.84 + 0 + 0 + ALY + + + NYZ076 + 320760 + Queens + NY + US + 40.68 + -73.83 + 0 + 0 + OKX + + + NYZ031 + 320310 + Western_Clinton + NY + US + 44.71 + -73.79 + 0 + 0 + BTV + + + NYZ071 + 320710 + Southern_Westchester + NY + US + 40.99 + -73.78 + 0 + 0 + OKX + + + NYZ068 + 320680 + Putnam + NY + US + 41.43 + -73.76 + 0 + 0 + OKX + + + NYZ060 + 320600 + Western_Columbia + NY + US + 42.24 + -73.75 + 0 + 0 + ALY + + + NYZ083 + 320830 + Southeast_Warren + NY + US + 43.34 + -73.74 + 0 + 0 + ALY + + + NYZ070 + 320700 + Northern_Westchester + NY + US + 41.18 + -73.73 + 0 + 0 + OKX + + + NYZ053 + 320530 + Western_Rensselaer + NY + US + 42.70 + -73.62 + 0 + 0 + ALY + + + NYZ066 + 320660 + Eastern_Dutchess + NY + US + 41.78 + -73.62 + 0 + 0 + ALY + + + NYZ077 + 320770 + Nassau + NY + US + 40.75 + -73.59 + 0 + 0 + OKX + + + NYZ028 + 320280 + Eastern_Clinton + NY + US + 44.74 + -73.57 + 0 + 0 + BTV + + + NYZ061 + 320610 + Eastern_Columbia + NY + US + 42.24 + -73.52 + 0 + 0 + ALY + + + NYZ043 + 320430 + Northern_Washington + NY + US + 43.56 + -73.44 + 0 + 0 + ALY + + + NYZ084 + 320840 + Southern_Washington + NY + US + 43.18 + -73.44 + 0 + 0 + ALY + + + NYZ035 + 320350 + Eastern_Essex + NY + US + 44.17 + -73.43 + 0 + 0 + BTV + + + NYZ054 + 320540 + Eastern_Rensselaer + NY + US + 42.72 + -73.42 + 0 + 0 + ALY + + + CTZ009 + 70090 + Southern_Fairfield + CT + US + 41.13 + -73.41 + 0 + 0 + OKX + + + CTZ005 + 70050 + Northern_Fairfield + CT + US + 41.41 + -73.31 + 0 + 0 + OKX + + + VTZ001 + 450010 + Grand_Isle + VT + US + 44.78 + -73.29 + 0 + 0 + BTV + + + MAZ025 + 210250 + Southern_Berkshire + MA + US + 42.23 + -73.25 + 0 + 0 + ALY + + + CTZ013 + 70130 + Southern_Litchfield + CT + US + 41.64 + -73.24 + 0 + 0 + ALY + + + VTZ009 + 450090 + Western_Addison + VT + US + 44.02 + -73.23 + 0 + 0 + BTV + + + CTZ001 + 70010 + Northern_Litchfield + CT + US + 41.86 + -73.20 + 0 + 0 + ALY + + + NYZ078 + 320780 + Northwest_Suffolk + NY + US + 40.88 + -73.18 + 0 + 0 + OKX + + + VTZ011 + 450110 + Western_Rutland + VT + US + 43.57 + -73.18 + 0 + 0 + BTV + + + MAZ001 + 210010 + Northern_Berkshire + MA + US + 42.56 + -73.16 + 0 + 0 + ALY + + + NYZ080 + 320800 + Southwest_Suffolk + NY + US + 40.73 + -73.15 + 0 + 0 + OKX + + + VTZ005 + 450050 + Western_Chittenden + VT + US + 44.49 + -73.13 + 0 + 0 + BTV + + + VTZ013 + 450130 + Bennington + VT + US + 43.02 + -73.06 + 0 + 0 + ALY + + + CTZ006 + 70060 + Northern_New_Haven + CT + US + 41.47 + -73.03 + 0 + 0 + OKX + + + VTZ002 + 450020 + Western_Franklin + VT + US + 44.82 + -73.03 + 0 + 0 + BTV + + + VTZ017 + 450170 + Eastern_Chittenden + VT + US + 44.40 + -72.94 + 0 + 0 + BTV + + + VTZ018 + 450180 + Eastern_Addison + VT + US + 44.05 + -72.94 + 0 + 0 + BTV + + + MAZ009 + 210090 + Western_Hampden + MA + US + 42.19 + -72.93 + 0 + 0 + BOX + + + MAZ008 + 210080 + Western_Hampshire + MA + US + 42.39 + -72.87 + 0 + 0 + BOX + + + VTZ019 + 450190 + Eastern_Rutland + VT + US + 43.57 + -72.86 + 0 + 0 + BTV + + + CTZ010 + 70100 + Southern_New_Haven + CT + US + 41.30 + -72.82 + 0 + 0 + OKX + + + MAZ002 + 210020 + Western_Franklin + MA + US + 42.59 + -72.80 + 0 + 0 + BOX + + + VTZ014 + 450140 + Western_Windham + VT + US + 43.00 + -72.78 + 0 + 0 + ALY + + + VTZ016 + 450160 + Eastern_Franklin + VT + US + 44.83 + -72.77 + 0 + 0 + BTV + + + CTZ002 + 70020 + Hartford + CT + US + 41.79 + -72.72 + 0 + 0 + BOX + + + VTZ006 + 450060 + Lamoille + VT + US + 44.60 + -72.65 + 0 + 0 + BTV + + + VTZ012 + 450120 + Windsor + VT + US + 43.59 + -72.59 + 0 + 0 + BTV + + + VTZ008 + 450080 + Washington + VT + US + 44.26 + -72.58 + 0 + 0 + BTV + + + VTZ015 + 450150 + Eastern_Windham + VT + US + 42.98 + -72.57 + 0 + 0 + ALY + + + CTZ007 + 70070 + Northern_Middlesex + CT + US + 41.48 + -72.53 + 0 + 0 + OKX + + + MAZ010 + 210100 + Eastern_Hampshire + MA + US + 42.31 + -72.51 + 0 + 0 + BOX + + + MAZ011 + 210110 + Eastern_Hampden + MA + US + 42.14 + -72.50 + 0 + 0 + BOX + + + CTZ011 + 70110 + Southern_Middlesex + CT + US + 41.33 + -72.46 + 0 + 0 + OKX + + + MAZ003 + 210030 + Eastern_Franklin + MA + US + 42.52 + -72.46 + 0 + 0 + BOX + + + NYZ079 + 320790 + Northeast_Suffolk + NY + US + 41.07 + -72.41 + 0 + 0 + OKX + + + VTZ010 + 450100 + Orange + VT + US + 43.99 + -72.41 + 0 + 0 + BTV + + + NYZ081 + 320810 + Southeast_Suffolk + NY + US + 40.90 + -72.37 + 0 + 0 + OKX + + + CTZ003 + 70030 + Tolland + CT + US + 41.81 + -72.31 + 0 + 0 + BOX + + + NHZ011 + 290110 + Cheshire + NH + US + 42.94 + -72.24 + 0 + 0 + BOX + + + VTZ003 + 450030 + Orleans + VT + US + 44.77 + -72.23 + 0 + 0 + BTV + + + NHZ007 + 290070 + Sullivan + NH + US + 43.36 + -72.20 + 0 + 0 + GYX + + + CTZ008 + 70080 + Northern_New_London + CT + US + 41.53 + -72.13 + 0 + 0 + OKX + + + VTZ007 + 450070 + Caledonia + VT + US + 44.46 + -72.13 + 0 + 0 + BTV + + + CTZ004 + 70040 + Windham + CT + US + 41.83 + -72.02 + 0 + 0 + BOX + + + CTZ012 + 70120 + Southern_New_London + CT + US + 41.36 + -71.96 + 0 + 0 + OKX + + + NHZ005 + 290050 + Southern_Grafton + NH + US + 43.71 + -71.93 + 0 + 0 + GYX + + + MAZ004 + 210040 + Northern_Worcester + MA + US + 42.43 + -71.92 + 0 + 0 + BOX + + + MAZ012 + 210120 + Southern_Worcester + MA + US + 42.18 + -71.81 + 0 + 0 + BOX + + + NHZ015 + 290150 + Wrn_And_Central_Hillsborough + NH + US + 42.95 + -71.78 + 0 + 0 + BOX + + + NHZ003 + 290030 + Northern_Grafton + NH + US + 44.13 + -71.76 + 0 + 0 + GYX + + + VTZ004 + 450040 + Essex + VT + US + 44.68 + -71.74 + 0 + 0 + BTV + + + NHZ008 + 290080 + Merrimack + NH + US + 43.31 + -71.67 + 0 + 0 + GYX + + + RIZ003 + 390030 + Western_Kent + RI + US + 41.66 + -71.66 + 0 + 0 + BOX + + + RIZ006 + 390060 + Washington + RI + US + 41.48 + -71.66 + 0 + 0 + BOX + + + MAZ026 + 210260 + Northwest_Middlesex_County + MA + US + 42.61 + -71.59 + 0 + 0 + BOX + + + RIZ001 + 390010 + Northwest_Providence + RI + US + 41.87 + -71.59 + 0 + 0 + BOX + + + RIZ008 + 390080 + Block_Island + RI + US + 41.19 + -71.57 + 0 + 0 + BOX + + + NHZ012 + 290120 + Eastern_Hillsborough + NH + US + 42.88 + -71.50 + 0 + 0 + BOX + + + RIZ004 + 390040 + Eastern_Kent + RI + US + 41.68 + -71.46 + 0 + 0 + BOX + + + NHZ009 + 290090 + Belknap + NH + US + 43.52 + -71.45 + 0 + 0 + GYX + + + RIZ002 + 390020 + Southeast_Providence + RI + US + 41.81 + -71.45 + 0 + 0 + BOX + + + NHZ002 + 290020 + Southern_Coos + NH + US + 44.41 + -71.39 + 0 + 0 + GYX + + + MAZ005 + 210050 + Central_Middlesex_County + MA + US + 42.44 + -71.33 + 0 + 0 + BOX + + + NHZ001 + 290010 + Northern_Coos + NH + US + 45.02 + -71.33 + 0 + 0 + GYX + + + RIZ005 + 390050 + Bristol + RI + US + 41.71 + -71.27 + 0 + 0 + BOX + + + NHZ006 + 290060 + Southern_Carroll + NH + US + 43.71 + -71.26 + 0 + 0 + GYX + + + RIZ007 + 390070 + Newport + RI + US + 41.56 + -71.26 + 0 + 0 + BOX + + + MAZ013 + 210130 + Western_Norfolk + MA + US + 42.15 + -71.24 + 0 + 0 + BOX + + + NHZ004 + 290040 + Northern_Carroll + NH + US + 44.10 + -71.22 + 0 + 0 + GYX + + + MAZ017 + 210170 + Northern_Bristol + MA + US + 41.93 + -71.18 + 0 + 0 + BOX + + + NHZ013 + 290130 + Interior_Rockingham + NH + US + 43.01 + -71.17 + 0 + 0 + GYX + + + MAZ014 + 210140 + Southeast_Middlesex + MA + US + 42.41 + -71.16 + 0 + 0 + BOX + + + MAZ006 + 210060 + Western_Essex + MA + US + 42.72 + -71.08 + 0 + 0 + BOX + + + MAZ015 + 210150 + Suffolk + MA + US + 42.34 + -71.07 + 0 + 0 + BOX + + + MAZ020 + 210200 + Southern_Bristol + MA + US + 41.65 + -71.07 + 0 + 0 + BOX + + + NHZ010 + 290100 + Strafford + NH + US + 43.33 + -71.03 + 0 + 0 + GYX + + + MAZ016 + 210160 + Eastern_Norfolk + MA + US + 42.22 + -71.02 + 0 + 0 + BOX + + + MAZ018 + 210180 + Western_Plymouth + MA + US + 42.00 + -70.88 + 0 + 0 + BOX + + + MAZ007 + 210070 + Eastern_Essex + MA + US + 42.65 + -70.83 + 0 + 0 + BOX + + + NHZ014 + 290140 + Coastal_Rockingham + NH + US + 42.99 + -70.82 + 0 + 0 + GYX + + + MEZ007 + 190070 + Northern_Oxford + ME + US + 44.88 + -70.80 + 0 + 0 + GYX + + + MAZ021 + 210210 + Southern_Plymouth + MA + US + 41.72 + -70.77 + 0 + 0 + BOX + + + MAZ019 + 210190 + Eastern_Plymouth + MA + US + 42.03 + -70.73 + 0 + 0 + BOX + + + MEZ018 + 190180 + Interior_York + ME + US + 43.52 + -70.73 + 0 + 0 + GYX + + + MAZ023 + 210230 + Dukes + MA + US + 41.38 + -70.70 + 0 + 0 + BOX + + + MEZ012 + 190120 + Southern_Oxford + ME + US + 44.20 + -70.63 + 0 + 0 + GYX + + + MEZ023 + 190230 + Coastal_York + ME + US + 43.34 + -70.58 + 0 + 0 + GYX + + + MEZ019 + 190190 + Interior_Cumberland + ME + US + 43.91 + -70.49 + 0 + 0 + GYX + + + MEZ008 + 190080 + Northern_Franklin + ME + US + 45.14 + -70.48 + 0 + 0 + GYX + + + MEZ024 + 190240 + Coastal_Cumberland + ME + US + 43.75 + -70.26 + 0 + 0 + GYX + + + MEZ020 + 190200 + Androscoggin + ME + US + 44.20 + -70.24 + 0 + 0 + GYX + + + MEZ013 + 190130 + Southern_Franklin + ME + US + 44.67 + -70.23 + 0 + 0 + GYX + + + MEZ009 + 190090 + Central_Somerset + ME + US + 45.42 + -70.10 + 0 + 0 + GYX + + + MEZ003 + 190030 + Northern_Somerset + ME + US + 46.27 + -70.01 + 0 + 0 + CAR + + + MAZ024 + 210240 + Nantucket + MA + US + 41.31 + -70.00 + 0 + 0 + BOX + + + MAZ022 + 210220 + Barnstable + MA + US + 41.80 + -69.99 + 0 + 0 + BOX + + + MEZ025 + 190250 + Sagadahoc + ME + US + 43.94 + -69.89 + 0 + 0 + GYX + + + MEZ021 + 190210 + Kennebec + ME + US + 44.42 + -69.75 + 0 + 0 + GYX + + + MEZ014 + 190140 + Southern_Somerset + ME + US + 44.85 + -69.67 + 0 + 0 + GYX + + + MEZ026 + 190260 + Lincoln + ME + US + 44.05 + -69.54 + 0 + 0 + GYX + + + MEZ010 + 190100 + Central_Piscataquis + ME + US + 45.55 + -69.38 + 0 + 0 + CAR + + + MEZ004 + 190040 + Northern_Piscataquis + ME + US + 46.12 + -69.27 + 0 + 0 + CAR + + + MEZ027 + 190270 + Knox + ME + US + 44.14 + -69.23 + 0 + 0 + GYX + + + MEZ031 + 190310 + Southern_Piscataquis + ME + US + 45.27 + -69.22 + 0 + 0 + CAR + + + MEZ022 + 190220 + Interior_Waldo + ME + US + 44.53 + -69.16 + 0 + 0 + GYX + + + MEZ001 + 190010 + Northwest_Aroostook + ME + US + 47.01 + -69.06 + 0 + 0 + CAR + + + MEZ028 + 190280 + Coastal_Waldo + ME + US + 44.36 + -69.04 + 0 + 0 + GYX + + + MEZ015 + 190150 + Southern_Penobscot + ME + US + 44.93 + -68.81 + 0 + 0 + CAR + + + MEZ005 + 190050 + Northern_Penobscot + ME + US + 45.95 + -68.69 + 0 + 0 + CAR + + + MEZ011 + 190110 + Central_Penobscot + ME + US + 45.39 + -68.41 + 0 + 0 + CAR + + + MEZ016 + 190160 + Interior_Hancock + ME + US + 44.88 + -68.41 + 0 + 0 + CAR + + + MEZ029 + 190290 + Coastal_Hancock + ME + US + 44.45 + -68.39 + 0 + 0 + CAR + + + MEZ002 + 190020 + Northeast_Aroostook + ME + US + 46.83 + -68.30 + 0 + 0 + CAR + + + MEZ006 + 190060 + Southeast_Aroostook + ME + US + 45.97 + -68.09 + 0 + 0 + CAR + + + MEZ032 + 190320 + Northern_Washington + ME + US + 45.48 + -67.73 + 0 + 0 + CAR + + + MEZ017 + 190170 + Central_Washington + ME + US + 45.00 + -67.57 + 0 + 0 + CAR + + + MEZ030 + 190300 + Coastal_Washington + ME + US + 44.67 + -67.49 + 0 + 0 + CAR + + + PRZ010 + 530100 + Mayaguez_and_Vicinity + PR + US + 18.26 + -67.12 + 0 + 0 + SJU + + + PRZ011 + 530110 + Southwest + PR + US + 18.05 + -67.04 + 0 + 0 + SJU + + + PRZ008 + 530080 + Northwest + PR + US + 18.42 + -66.97 + 0 + 0 + SJU + + + PRZ009 + 530090 + Western_Interior + PR + US + 18.21 + -66.82 + 0 + 0 + SJU + + + PRZ007 + 530070 + Ponce_and_Vicinity + PR + US + 18.03 + -66.63 + 0 + 0 + SJU + + + PRZ005 + 530050 + North_Central + PR + US + 18.40 + -66.48 + 0 + 0 + SJU + + + PRZ006 + 530060 + Central_Interior + PR + US + 18.20 + -66.43 + 0 + 0 + SJU + + + PRZ001 + 530010 + San_Juan_and_Vicinity + PR + US + 18.37 + -66.11 + 0 + 0 + SJU + + + PRZ003 + 530030 + Southeast + PR + US + 18.02 + -66.07 + 0 + 0 + SJU + + + PRZ004 + 530040 + Eastern_Interior + PR + US + 18.17 + -66.04 + 0 + 0 + SJU + + + PRZ002 + 530020 + Northeast + PR + US + 18.26 + -65.76 + 0 + 0 + SJU + + + PRZ013 + 530130 + Vieques + PR + US + 18.13 + -65.42 + 0 + 0 + SJU + + + PRZ012 + 530120 + Culebra + PR + US + 18.32 + -65.31 + 0 + 0 + SJU + + + VIZ001 + 520010 + St._Thomas...St._John..._and_Adj + VI + US + 18.34 + -64.87 + 0 + 0 + SJU + + + VIZ002 + 520020 + St_Croix + VI + US + 17.73 + -64.73 + 0 + 0 + SJU + + + CAZ000 + 50000 + No_name + CA + US + 32.92 + -118.48 + 0 + 0 + + + + GUZ012 + 540120 + Sonsorol + GU + US + 5.30 + 132.22 + 0 + 0 + GUM + + + GUZ011 + 540110 + Koror + GU + US + 7.53 + 134.56 + 0 + 0 + GUM + + + GUZ013 + 540130 + Kayangel + GU + US + 8.08 + 134.72 + 0 + 0 + GUM + + + GUZ022 + 540220 + Ngulu + GU + US + 8.30 + 137.51 + 0 + 0 + GUM + + + GUZ021 + 540210 + Yap + GU + US + 9.54 + 138.12 + 0 + 0 + GUM + + + GUZ023 + 540230 + Ulithi + GU + US + 10.02 + 139.79 + 0 + 0 + GUM + + + GUZ024 + 540240 + Sorol + GU + US + 8.21 + 140.70 + 0 + 0 + GUM + + + GUZ025 + 540250 + Woleai + GU + US + 7.38 + 143.92 + 0 + 0 + GUM + + + GUZ001 + 540010 + Guam + GU + US + 13.44 + 144.79 + 0 + 0 + GUM + + + GUZ002 + 540020 + Rota + GU + US + 14.15 + 145.20 + 0 + 0 + GUM + + + GUZ003 + 540030 + Tinian + GU + US + 15.01 + 145.63 + 0 + 0 + GUM + + + GUZ005 + 540050 + Agrihan + GU + US + 18.76 + 145.66 + 0 + 0 + GUM + + + GUZ004 + 540040 + Saipan + GU + US + 15.19 + 145.76 + 0 + 0 + GUM + + + GUZ026 + 540260 + Satawal + GU + US + 7.36 + 147.04 + 0 + 0 + GUM + + + GUZ032 + 540320 + Puluwat + GU + US + 7.38 + 149.18 + 0 + 0 + GUM + + + GUZ031 + 540310 + Chuuk + GU + US + 7.35 + 151.83 + 0 + 0 + GUM + + + GUZ033 + 540330 + Lukunor + GU + US + 5.50 + 153.82 + 0 + 0 + GUM + + + GUZ041 + 540410 + Pohnpei + GU + US + 6.88 + 158.22 + 0 + 0 + GUM + + + GUZ042 + 540420 + Mokil + GU + US + 6.68 + 159.79 + 0 + 0 + GUM + + + GUZ043 + 540430 + Pingelap + GU + US + 6.21 + 160.71 + 0 + 0 + GUM + + + GUZ062 + 540620 + Ujelang + GU + US + 9.76 + 160.97 + 0 + 0 + GUM + + + GUZ063 + 540630 + Enewetak + GU + US + 11.34 + 162.33 + 0 + 0 + GUM + + + GUZ051 + 540510 + Kosrae + GU + US + 5.32 + 162.97 + 0 + 0 + GUM + + + GUZ081 + 540810 + Wake_Island + GU + US + 19.30 + 166.63 + 0 + 0 + GUM + + + GUZ064 + 540640 + Ailinglaplap + GU + US + 7.29 + 168.75 + 0 + 0 + GUM + + + GUZ065 + 540650 + Jaluit + GU + US + 5.85 + 169.53 + 0 + 0 + GUM + + + GUZ066 + 540660 + Utirik + GU + US + 11.24 + 169.86 + 0 + 0 + GUM + + + GUZ067 + 540670 + Wotje + GU + US + 9.55 + 170.24 + 0 + 0 + GUM + + + GUZ061 + 540610 + Majuro + GU + US + 7.11 + 171.08 + 0 + 0 + GUM + + + GUZ068 + 540680 + Mili + GU + US + 6.04 + 171.95 + 0 + 0 + GUM + + + AKZ191 + 21910 + Western_Aleutians + AK + US + 51.51 + 179.05 + 0 + 0 + AFC + + + PKZ175 + 691750 + Adak_to_Kiska + + US + 51.71 + -178.59 + 0 + 0 + AFC + + + PKZ185 + 691850 + St_Matthew_Island_Waters + + US + 60.43 + -174.18 + 0 + 0 + AFC + + + PKZ172 + 691720 + Nikolski_to_Adak + + US + 52.26 + -173.19 + 0 + 0 + AFC + + + PSZ152 + 721520 + Coastal_waters_of_Swain's_I + + US + -11.08 + -171.03 + 0 + 0 + STU + + + PSZ150 + 721500 + Cstal_wtrs_of_Tututila_and_Aunuu + + US + -14.31 + -170.77 + 0 + 0 + STU + + + PKZ179 + 691790 + Pribilof_Is_Nearshore_Waters + + US + 56.90 + -169.97 + 0 + 0 + AFC + + + PKZ210 + 692100 + Dall_Point_to_Wales + + US + 63.31 + -169.57 + 0 + 0 + AFG + + + PSZ151 + 721510 + Coastal_waters_of_Manua + + US + -14.21 + -169.45 + 0 + 0 + STU + + + PKZ225 + 692250 + Cape_Thompson_to_Cape_Beaufort + + US + 69.01 + -167.45 + 0 + 0 + AFG + + + PKZ170 + 691700 + Cape_Sarichef_to_Nikoski + + US + 53.72 + -166.78 + 0 + 0 + AFC + + + PKZ220 + 692200 + Wales_to_Cape_Thompson + + US + 66.97 + -166.69 + 0 + 0 + AFG + + + PKZ171 + 691710 + Unalaska_Bay + + US + 53.92 + -166.59 + 0 + 0 + AFC + + + PKZ180 + 691800 + Cape_Newenham_to_Dall_Point + + US + 59.92 + -165.98 + 0 + 0 + AFC + + + PKZ200 + 692000 + Norton_Sound + + US + 63.99 + -163.30 + 0 + 0 + AFG + + + PKZ230 + 692300 + Cape_Beaufort_to_Point_Franklin + + US + 70.53 + -163.03 + 0 + 0 + AFG + + + PKZ165 + 691650 + Port_Heiden_to_Cape_Sarichef + + US + 56.01 + -162.88 + 0 + 0 + AFC + + + PKZ215 + 692150 + Kotzebue_Sound + + US + 66.65 + -162.83 + 0 + 0 + AFG + + + PKZ155 + 691550 + Castle_Cape_to_Cape_Sarichef + + US + 54.50 + -160.72 + 0 + 0 + AFC + + + PKZ160 + 691600 + Cape_Newenham_to_Port_Heiden + + US + 57.98 + -160.52 + 0 + 0 + AFC + + + PHZ110 + 701100 + Kauai_Northwest_Waters + + US + 22.44 + -159.99 + 0 + 0 + HFO + + + PHZ112 + 701120 + Kauai_Leeward_Waters + + US + 21.64 + -159.99 + 0 + 0 + HFO + + + PHZ111 + 701110 + Kauai_Windward_Waters + + US + 22.41 + -159.03 + 0 + 0 + HFO + + + PHZ113 + 701130 + Kauai_Channel + + US + 21.62 + -159.00 + 0 + 0 + HFO + + + PHZ115 + 701150 + Oahu_Leeward_Waters + + US + 21.04 + -158.18 + 0 + 0 + HFO + + + PHZ114 + 701140 + Oahu_Windward_Waters + + US + 21.88 + -157.59 + 0 + 0 + HFO + + + PHZ116 + 701160 + Kaiwi_Channel + + US + 21.22 + -157.49 + 0 + 0 + HFO + + + PHZ118 + 701180 + Maui_County_Leeward_Waters + + US + 20.70 + -157.49 + 0 + 0 + HFO + + + PHZ120 + 701200 + Pailolo_Channel + + US + 21.03 + -156.91 + 0 + 0 + HFO + + + PHZ119 + 701190 + Maalaea_Bay + + US + 20.75 + -156.53 + 0 + 0 + HFO + + + PHZ121 + 701210 + Alenuihaha_Channel + + US + 20.30 + -156.44 + 0 + 0 + HFO + + + PHZ123 + 701230 + Big_Island_Leeward_Waters + + US + 19.34 + -156.40 + 0 + 0 + HFO + + + PHZ117 + 701170 + Maui_County_Windward_Waters + + US + 21.32 + -156.39 + 0 + 0 + HFO + + + PKZ235 + 692350 + Point_Franklin_to_Cape_Halkett + + US + 71.66 + -156.01 + 0 + 0 + AFG + + + PKZ150 + 691500 + Sitkinak_to_Castle_Cape + + US + 55.91 + -155.76 + 0 + 0 + AFC + + + PHZ124 + 701240 + Big_Island_Southeast_Waters + + US + 18.71 + -155.37 + 0 + 0 + HFO + + + PHZ122 + 701220 + Big_Island_Windward_Waters + + US + 19.92 + -154.97 + 0 + 0 + HFO + + + PKZ138 + 691380 + _Shelikof_Strait + + US + 57.83 + -153.52 + 0 + 0 + AFC + + + PKZ137 + 691370 + _Marmot_Bay + + US + 58.00 + -152.62 + 0 + 0 + AFC + + + PKZ136 + 691360 + _Chiniak_Bay + + US + 57.70 + -152.37 + 0 + 0 + AFC + + + PKZ132 + 691320 + Shuyak_Island_To_Sitkinak + + US + 56.92 + -152.20 + 0 + 0 + AFC + + + PKZ140 + 691400 + Cook_Inlt_N_of_Kamishak_Bay_and_ + + US + 60.34 + -151.89 + 0 + 0 + AFC + + + PKZ141 + 691410 + Kachemak_Bay + + US + 59.56 + -151.45 + 0 + 0 + AFC + + + PKZ130 + 691300 + Barren_Is_And_Kamishak_Bay_Wtrs + + US + 58.64 + -151.33 + 0 + 0 + AFC + + + PKZ121 + 691210 + _Resurrection_Bay + + US + 60.06 + -149.39 + 0 + 0 + AFC + + + PKZ240 + 692400 + Cape_Halkett_to_Flaxman_Island + + US + 71.09 + -149.19 + 0 + 0 + AFG + + + PKZ129 + 691290 + Passage_Canal + + US + 60.81 + -148.58 + 0 + 0 + AFC + + + PKZ125 + 691250 + Prince_William_Sound + + US + 60.48 + -147.34 + 0 + 0 + AFC + + + PKZ120 + 691200 + Cape_Suckling_to_Gore_Point + + US + 59.42 + -147.01 + 0 + 0 + AFC + + + PKZ128 + 691280 + _Valdez_Arm + + US + 60.94 + -146.86 + 0 + 0 + AFC + + + PKZ127 + 691270 + _Valdez_Narrows + + US + 61.05 + -146.67 + 0 + 0 + AFC + + + PKZ126 + 691260 + _Port_of_Valdez + + US + 61.11 + -146.44 + 0 + 0 + AFC + + + PKZ245 + 692450 + Flaxman_I_to_Demarcation_Point + + US + 70.60 + -143.39 + 0 + 0 + AFG + + + PKZ052 + 690520 + Icy_Cape_to_Cape_Suckling + + US + 59.40 + -142.97 + 0 + 0 + AJK + + + PKZ051 + 690510 + Cape_Fairweather_to_Icy_Cape + + US + 58.95 + -140.30 + 0 + 0 + AJK + + + PKZ053 + 690530 + Yakutat_Bay + + US + 59.80 + -139.76 + 0 + 0 + AJK + + + PKZ043 + 690430 + SE_AK_Outside_Wtrs_From_C_Edgecu + + US + 57.59 + -137.69 + 0 + 0 + AJK + + + PKZ022 + 690220 + Cross_Sound + + US + 58.14 + -136.36 + 0 + 0 + AJK + + + PKZ011 + 690110 + _Glacier_Bay + + US + 58.72 + -136.23 + 0 + 0 + AJK + + + PKZ042 + 690420 + Cape_Decision_to_Cape_Edgecumbe + + US + 56.23 + -136.12 + 0 + 0 + AJK + + + PKZ021 + 690210 + Icy_Strait + + US + 58.27 + -135.73 + 0 + 0 + AJK + + + PKZ012 + 690120 + Northern_Lynn_Canal + + US + 59.10 + -135.30 + 0 + 0 + AJK + + + PKZ013 + 690130 + Southern_Lynn_Canal + + US + 58.59 + -135.07 + 0 + 0 + AJK + + + PKZ032 + 690320 + Northern_Chatham_Strait + + US + 57.61 + -134.77 + 0 + 0 + AJK + + + PKZ033 + 690330 + Southern_Chatham_Strait + + US + 56.54 + -134.55 + 0 + 0 + AJK + + + PKZ041 + 690410 + Dixon_Entrance_to_Cape_Decision + + US + 55.04 + -134.31 + 0 + 0 + AJK + + + PKZ031 + 690310 + Stephens_Passage + + US + 57.94 + -134.29 + 0 + 0 + AJK + + + PKZ034 + 690340 + Frederick_Sound + + US + 56.99 + -134.28 + 0 + 0 + AJK + + + PKZ035 + 690350 + Sumner_Strait + + US + 56.40 + -133.28 + 0 + 0 + AJK + + + PKZ036 + 690360 + Clarence_Strait + + US + 55.40 + -131.52 + 0 + 0 + AJK + + + PZZ170 + 611700 + Cstal_Wtrs_From_C_Flattery_To_Ja + + US + 48.22 + -125.73 + 0 + 0 + SEW + + + PZZ173 + 611730 + Wtrs_From_James_I_To_Pt_Grenvl_2 + + US + 47.57 + -125.40 + 0 + 0 + SEW + + + PZZ376 + 613760 + Wtrs_fr_C_Blanco_OR_to_Pt._St._G + + US + 42.33 + -125.39 + 0 + 0 + MFR + + + PZZ370 + 613700 + Wtrs_fr_Florence_to_C_Blanco_OR_ + + US + 43.40 + -125.19 + 0 + 0 + MFR + + + PZZ275 + 612750 + Wtrs_fr_Cascade_Hd_to_Florence_O + + US + 44.59 + -125.15 + 0 + 0 + PQR + + + PZZ470 + 614700 + Wtrs_fr_Pt._St._Geo_to_C_Mendoci + + US + 41.14 + -125.08 + 0 + 0 + EKA + + + PZZ176 + 611760 + Cstal_Wtrs_From_Pt_Grenvl_To_C_S + + US + 46.97 + -125.06 + 0 + 0 + SEW + + + PZZ153 + 611530 + Cstal_Wtrs_From_James_I_To_Pt_Gr + + US + 47.74 + -124.99 + 0 + 0 + SEW + + + PZZ270 + 612700 + Wtrs_fr_C_Shoalwtr_WA_to_Cascade + + US + 45.92 + -124.99 + 0 + 0 + PQR + + + PZZ150 + 611500 + Cstal_Wtrs_From_C_Flattery_To_Ja + + US + 48.17 + -124.89 + 0 + 0 + SEW + + + PZZ475 + 614750 + Wtrs_fr_C_Mendocino_to_Pt._Arena + + US + 39.69 + -124.74 + 0 + 0 + EKA + + + PZZ350 + 613500 + Cstal_wtrs_fr_Florence_to_C_Blan + + US + 43.47 + -124.68 + 0 + 0 + MFR + + + PZZ330 + 613300 + Chetco_River_Bar + + US + 42.31 + -124.60 + 0 + 0 + MFR + + + PZZ130 + 611300 + W_Entr_U.S._Wtrs_St_Of_Juan_De_F + + US + 48.37 + -124.48 + 0 + 0 + SEW + + + PZZ310 + 613100 + Coos_Bay_Bar + + US + 43.43 + -124.47 + 0 + 0 + MFR + + + PZZ156 + 611560 + Cstal_Wtrs_From_Pt_Grenvl_To_C_S + + US + 47.02 + -124.44 + 0 + 0 + SEW + + + PZZ356 + 613560 + Cstal_wtrs_fr_C_Blanco_OR_to_Pt. + + US + 42.24 + -124.43 + 0 + 0 + MFR + + + PZZ450 + 614500 + Cstal_wtrs_fr_Pt._St._Geo_to_C_M + + US + 41.11 + -124.33 + 0 + 0 + EKA + + + PZZ250 + 612500 + Cstal_wtrs_fr_C_Shoalwtr_WA_to_C + + US + 45.93 + -124.20 + 0 + 0 + PQR + + + PZZ410 + 614100 + Humboldt_Bay_Bar + + US + 40.77 + -124.19 + 0 + 0 + EKA + + + PZZ255 + 612550 + Cstal_wtrs_fr_Cascade_Hd_to_Flor + + US + 44.47 + -124.10 + 0 + 0 + PQR + + + PZZ110 + 611100 + Grays_Harbor_Bar + + US + 46.93 + -123.99 + 0 + 0 + SEW + + + PZZ570 + 615700 + Wtrs_fr_Pt._Arena_to_Pigeon_Pt._ + + US + 38.08 + -123.99 + 0 + 0 + MTR + + + PZZ455 + 614550 + Cstal_wtrs_fr_C_Mendocino_to_Pt. + + US + 39.69 + -123.91 + 0 + 0 + EKA + + + PZZ131 + 611310 + Ctrl_U.S._Wtrs_St_Of_Juan_De_Fuc + + US + 48.27 + -123.68 + 0 + 0 + SEW + + + PZZ210 + 612100 + Columbia_River_Bar + + US + 46.21 + -123.68 + 0 + 0 + PQR + + + PZZ540 + 615400 + Cstal_Wtrs_fr_Pt_Arena_to_Pt_Rey + + US + 38.48 + -123.53 + 0 + 0 + MTR + + + PZZ132 + 611320 + E_Entr_U.S._Wtrs_St_Of_Juan_De_F + + US + 48.21 + -122.96 + 0 + 0 + SEW + + + PZZ133 + 611330 + Nrn_Inlnd_Wtrs_Incl_The_Sn_Juan_ + + US + 48.58 + -122.78 + 0 + 0 + SEW + + + PZZ575 + 615750 + Wtrs_fr_Pigeon_Pt._to_Pt._Piedra + + US + 36.41 + -122.76 + 0 + 0 + MTR + + + PZZ545 + 615450 + Cstal_Wtrs_fr_Pt_Reyes_to_Pigeon + + US + 37.58 + -122.72 + 0 + 0 + MTR + + + PZZ134 + 611340 + Admiralty_Inlet + + US + 48.06 + -122.68 + 0 + 0 + SEW + + + PZZ560 + 615600 + Cstal_Wtrs_fr_Pigeon_Pt_to_Pt_Pi + + US + 36.99 + -122.59 + 0 + 0 + MTR + + + PZZ135 + 611350 + Puget_Sound_and_Hood_Canal + + US + 47.56 + -122.47 + 0 + 0 + SEW + + + PZZ530 + 615300 + Sn_Francisco/Sn_Pablo/Suisun_Bay + + US + 37.83 + -122.39 + 0 + 0 + MTR + + + PZZ535 + 615350 + Monterey_Bay + + US + 36.79 + -121.89 + 0 + 0 + MTR + + + PZZ565 + 615650 + Cstal_Wtrs_fr_Pt_Pinos_to_Pt_Pie + + US + 36.11 + -121.84 + 0 + 0 + MTR + + + PZZ670 + 616700 + The_Wtrs_fr_Pt._Piedras_Blancas_ + + US + 35.14 + -121.55 + 0 + 0 + LOX + + + PZZ673 + 616730 + Wtrs_fr_Pt._Arguello_to_Sta_Cruz + + US + 34.18 + -120.98 + 0 + 0 + LOX + + + PZZ650 + 616500 + E_Sta_Barbara_Chnl_fr_Pt._Concep + + US + 34.28 + -119.87 + 0 + 0 + LOX + + + PZZ676 + 616760 + Out_wtrs_fr_Sta_Cruz_I_to_Sn_Cle + + US + 33.54 + -119.79 + 0 + 0 + LOX + + + PZZ655 + 616550 + Inr_wtrs_fr_Pt_Mugu_to_Sn_Mateo_ + + US + 33.59 + -118.55 + 0 + 0 + LOX + + + PZZ775 + 617750 + Wtrs_fr_Sn_Mateo_point_to_the_Me + + US + 32.83 + -118.20 + 0 + 0 + SGX + + + PZZ750 + 617500 + Cstal_Wtrs_fr_Sn_Mateo_Pt_to_the + + US + 32.92 + -117.55 + 0 + 0 + SGX + + + GMZ135 + 681350 + Laguna_Madre_From_5_nm_N_Of_Port + + US + 26.93 + -97.44 + 0 + 0 + BRO + + + GMZ132 + 681320 + Laguna_Madre_From_The_Arroyo_Col + + US + 26.49 + -97.37 + 0 + 0 + BRO + + + GMZ230 + 682300 + Bays_and_Wtrways_fr_Baffin_Bay_t + + US + 27.54 + -97.31 + 0 + 0 + CRP + + + GMZ130 + 681300 + Laguna_Madre_From_the_Port_Of_Br + + US + 26.19 + -97.30 + 0 + 0 + BRO + + + GMZ155 + 681550 + Cstal_wtrs_fr_Baffin_Bay_to_Port + + US + 26.92 + -97.23 + 0 + 0 + BRO + + + GMZ250 + 682500 + Cstal_wtrs_fr_Baffin_Bay_to_Port + + US + 27.52 + -97.10 + 0 + 0 + CRP + + + GMZ150 + 681500 + Cstal_wtrs_fr_Port_Mansfield_TX_ + + US + 26.28 + -97.04 + 0 + 0 + BRO + + + GMZ235 + 682350 + Bays_and_Wtrways_fr_Port_Aransas + + US + 28.16 + -96.82 + 0 + 0 + CRP + + + GMZ175 + 681750 + Wtrs_fr_Baffin_Bay_to_Port_Mansf + + US + 26.87 + -96.68 + 0 + 0 + BRO + + + GMZ255 + 682550 + Cstal_wtrs_fr_Port_Aransas_to_Ma + + US + 28.06 + -96.66 + 0 + 0 + CRP + + + GMZ270 + 682700 + Wtrs_fr_Baffin_Bay_to_Port_Arans + + US + 27.35 + -96.51 + 0 + 0 + CRP + + + GMZ170 + 681700 + Wtrs_fr_Port_Mansfield_TX_to_the + + US + 26.26 + -96.50 + 0 + 0 + BRO + + + GMZ330 + 683300 + Matagorda_Bay + + US + 28.60 + -96.32 + 0 + 0 + HGX + + + GMZ275 + 682750 + Wtrs_fr_Port_Aransas_to_Matagord + + US + 27.74 + -96.12 + 0 + 0 + CRP + + + GMZ350 + 683500 + Cstal_wtrs_fr_Freeport_to_Matago + + US + 28.52 + -95.70 + 0 + 0 + HGX + + + GMZ370 + 683700 + Wtrs_fr_Freeport_to_Matagorda_Sh + + US + 28.13 + -95.38 + 0 + 0 + HGX + + + GMZ335 + 683350 + Galveston_Bay + + US + 29.41 + -94.87 + 0 + 0 + HGX + + + GMZ355 + 683550 + Cstal_wtrs_fr_Hi_I_to_Freeport_T + + US + 29.10 + -94.78 + 0 + 0 + HGX + + + GMZ375 + 683750 + Wtrs_fr_Hi_I_to_Freeport_TX_fr_2 + + US + 28.66 + -94.60 + 0 + 0 + HGX + + + GMZ450 + 684500 + Cstal_wtrs_fr_Cameron_LA_to_Hi_I + + US + 29.58 + -93.95 + 0 + 0 + LCH + + + GMZ430 + 684300 + Sabine_Lake + + US + 29.62 + -93.85 + 0 + 0 + LCH + + + GMZ470 + 684700 + Wtrs_fr_Cameron_LA_to_Hi_I_TX_fr + + US + 29.07 + -93.82 + 0 + 0 + LCH + + + GMZ432 + 684320 + Calcasieu_Lake + + US + 29.92 + -93.31 + 0 + 0 + LCH + + + GMZ452 + 684520 + Cstal_wtrs_fr_Intracoastal_Cty_t + + US + 29.48 + -92.72 + 0 + 0 + LCH + + + GMZ472 + 684720 + Wtrs_fr__Intracoastal_Cty_to_Cam + + US + 28.95 + -92.68 + 0 + 0 + LCH + + + LSZ145 + 651450 + Duluth_MN_to_Port_Wing_WI + + US + 46.76 + -91.84 + 0 + 0 + DLH + + + LSZ144 + 651440 + Two_Harbors_to_Duluth_MN + + US + 46.89 + -91.82 + 0 + 0 + DLH + + + GMZ475 + 684750 + Wtrs_fr_Lwr_Atchafalaya_Riv_to_I + + US + 28.70 + -91.72 + 0 + 0 + LCH + + + GMZ435 + 684350 + Vermillion_Bay + + US + 29.38 + -91.70 + 0 + 0 + LCH + + + GMZ455 + 684550 + Cstal_wtrs_fr_Lwr_Atchafalaya_Ri + + US + 29.32 + -91.69 + 0 + 0 + LCH + + + LSZ143 + 651430 + Silver_Bay_Hbr_to_2_Hbrs_MN + + US + 47.13 + -91.40 + 0 + 0 + DLH + + + LSZ146 + 651460 + Port_Wing_to_Sand_Island_WI + + US + 46.91 + -91.19 + 0 + 0 + DLH + + + LSZ142 + 651420 + Taconite_Hbr_to_Silver_Bay_Hbr_M + + US + 47.38 + -91.05 + 0 + 0 + DLH + + + LSZ121 + 651210 + Chequamegon_Bay-Bayfield_to_Oak_ + + US + 46.69 + -90.81 + 0 + 0 + DLH + + + LSZ147 + 651470 + Sand_Island_to_Bayfield_WI + + US + 46.91 + -90.71 + 0 + 0 + DLH + + + LSZ148 + 651480 + Oak_Point_to_Saxon_Harbor_WI + + US + 46.67 + -90.59 + 0 + 0 + DLH + + + LSZ141 + 651410 + Grand_Marais_to_Taconite_Hbr_MN + + US + 47.58 + -90.57 + 0 + 0 + DLH + + + LSZ162 + 651620 + L_Sup_W_of_a_line_fr_Saxon_Hbr_W + + US + 47.28 + -90.56 + 0 + 0 + DLH + + + LSZ240 + 652400 + Saxon_Harbor_WI_to_Black_Riv_MI + + US + 46.66 + -90.24 + 0 + 0 + MQT + + + GMZ550 + 685500 + Cstal_wtrs_fr_the_SW_pass_of_the + + US + 29.00 + -90.19 + 0 + 0 + LIX + + + GMZ570 + 685700 + Wtrs_fr_the_SW_Pass_of_the_MS_Ri + + US + 28.39 + -90.18 + 0 + 0 + LIX + + + GMZ530 + 685300 + L_Pontchartrain_and_L_Maurepas + + US + 30.17 + -90.10 + 0 + 0 + LIX + + + LSZ241 + 652410 + Black_River_To_Ontonagon_MI + + US + 46.81 + -89.91 + 0 + 0 + MQT + + + LSZ140 + 651400 + Gnd_Portage_to_Gnd_Marais_MN + + US + 47.84 + -89.85 + 0 + 0 + DLH + + + LSZ263 + 652630 + L_Sup_fr_Saxon_Hbr_WI_to_Upr_Ent + + US + 47.45 + -89.29 + 0 + 0 + MQT + + + GMZ555 + 685550 + Cstal_wtrs_fr_Pascagoula_MS_to_t + + US + 29.72 + -89.09 + 0 + 0 + LIX + + + LSZ242 + 652420 + Ontonagon_to_Upr_Entr_of_Portage + + US + 47.10 + -88.96 + 0 + 0 + MQT + + + GMZ575 + 685750 + Wtrs_fr_Pascagoula_MS_to_the_SW_ + + US + 28.86 + -88.56 + 0 + 0 + LIX + + + LSZ243 + 652430 + Upr_Entr_of_Portage_Canal_to_Eag + + US + 47.37 + -88.47 + 0 + 0 + MQT + + + LSZ247 + 652470 + Portage_L_to_Huron_I_MI_to_Lwr_E + + US + 46.90 + -88.37 + 0 + 0 + MQT + + + LSZ246 + 652460 + Pt_Isabelle_to_Lwr_Entr_of_Porta + + US + 47.15 + -88.22 + 0 + 0 + MQT + + + LSZ264 + 652640 + L_Sup_fr_Upr_Entr_to_Portage_Can + + US + 47.83 + -88.08 + 0 + 0 + MQT + + + GMZ650 + 686500 + Cstal_wtrs_fr_Pensacola_FL_to_Pa + + US + 30.19 + -88.01 + 0 + 0 + MOB + + + LSZ244 + 652440 + Eagle_River_to_Manitou_I_MI + + US + 47.49 + -87.95 + 0 + 0 + MQT + + + GMZ630 + 686300 + Mobile_Bay + + US + 30.53 + -87.93 + 0 + 0 + MOB + + + LMZ644 + 646440 + Port_Washington_to_N_Pt_Lt_WI + + US + 43.24 + -87.87 + 0 + 0 + MKX + + + LMZ522 + 645220 + Grn_Bay_S_of_line_fr__Oconto_WI_ + + US + 44.71 + -87.79 + 0 + 0 + GRB + + + LMZ645 + 646450 + N_Point_Light_to_Wind_Point_WI + + US + 42.93 + -87.77 + 0 + 0 + MKX + + + LMZ740 + 647400 + Winthrop_Hbr_to_Wilmette_Hbr_IL + + US + 42.28 + -87.77 + 0 + 0 + LOT + + + LSZ265 + 652650 + L_Sup_W_of_Line_fr_Manitou_I_to_ + + US + 47.00 + -87.73 + 0 + 0 + MQT + + + LMZ643 + 646430 + Sheboygan_to_Port_Washington_WI + + US + 43.55 + -87.72 + 0 + 0 + MKX + + + LMZ646 + 646460 + Wind_Pt_WI_to_Winthrop_Hbr_IL + + US + 42.64 + -87.72 + 0 + 0 + MKX + + + LSZ245 + 652450 + Manitou_I_to_Point_Isabelle_MI + + US + 47.32 + -87.71 + 0 + 0 + MQT + + + GMZ670 + 686700 + Wtrs_fr_Pensacola_FL_to_Pascagou + + US + 29.60 + -87.65 + 0 + 0 + MOB + + + LMZ543 + 645430 + Two_Rivers_to_Sheboygan_WI + + US + 43.95 + -87.64 + 0 + 0 + GRB + + + LMZ742 + 647420 + Nerly_I_to_Calumet_Harbor_IL + + US + 41.84 + -87.60 + 0 + 0 + LOT + + + LMZ741 + 647410 + Wilmette_Harbor_to_Nerly_I_IL + + US + 41.98 + -87.58 + 0 + 0 + LOT + + + LSZ248 + 652480 + Huron_Islands_to_Marquette_MI + + US + 46.77 + -87.52 + 0 + 0 + MQT + + + LMZ669 + 646690 + L_MI_fr_Sheboygan_to_Port_Washin + + US + 43.63 + -87.44 + 0 + 0 + MKX + + + LMZ743 + 647430 + Calumet_Harbor_IL_to_Gary_IN + + US + 41.70 + -87.42 + 0 + 0 + LOT + + + LMZ671 + 646710 + L_MI_fr_Port_Washington_to_N_Pt_ + + US + 43.20 + -87.41 + 0 + 0 + MKX + + + LMZ673 + 646730 + L_MI_fr_N_Pt_Lt_to_Wind_Pt_WI_5N + + US + 42.93 + -87.40 + 0 + 0 + MKX + + + LMZ521 + 645210 + Grn_Bay_S_of_line_fr__Cedar_Riv_ + + US + 45.11 + -87.39 + 0 + 0 + GRB + + + LMZ542 + 645420 + Sturgeon_Bay_to_Two_Rivers_WI + + US + 44.49 + -87.37 + 0 + 0 + GRB + + + LMZ777 + 647770 + L_MI_fr_Winthrop_Hbr_to_Wilmette + + US + 42.31 + -87.37 + 0 + 0 + LOT + + + LMZ567 + 645670 + L_MI_fr_2_Rivs_to_Sheboygan_WI_5 + + US + 44.05 + -87.33 + 0 + 0 + GRB + + + LMZ675 + 646750 + L_MI_fr_Wind_Pt_WI_to_Winthrop_H + + US + 42.61 + -87.32 + 0 + 0 + MKX + + + LMZ779 + 647790 + L_MI_fr_Wilmette_Hbr_to_MI_Cty_i + + US + 41.95 + -87.26 + 0 + 0 + LOT + + + LMZ744 + 647440 + Gary_to_Burns_Harbor_IN + + US + 41.67 + -87.25 + 0 + 0 + LOT + + + LMZ565 + 645650 + L_MI_fr_Sturgeon_Bay_to_2_Rivs_W + + US + 44.47 + -87.11 + 0 + 0 + GRB + + + LSZ249 + 652490 + Marquette_to_Munising_MI + + US + 46.60 + -87.05 + 0 + 0 + MQT + + + LMZ745 + 647450 + Burns_Harbor_to_MI_City_IN + + US + 41.72 + -87.04 + 0 + 0 + LOT + + + LMZ541 + 645410 + Rock_I_Passage_to_Sturgeon_Bay_W + + US + 45.07 + -86.96 + 0 + 0 + GRB + + + LMZ870 + 648700 + L_MI_fr_Whthall_to_Pentwtr_MI_5N + + US + 43.63 + -86.96 + 0 + 0 + GRR + + + LMZ221 + 642210 + Grn_Bay_N_of_line_fr_Cedar_Riv_M + + US + 45.66 + -86.94 + 0 + 0 + MQT + + + LMZ046 + 640460 + MI_City_IN_to_New_Buffalo_MI + + US + 41.80 + -86.86 + 0 + 0 + IWX + + + LSZ266 + 652660 + L_Sup_E_of_a_line_fr_Manitou_I_t + + US + 47.21 + -86.85 + 0 + 0 + MQT + + + LMZ878 + 648780 + L_MI_fr_St_Joseph_to_S_Haven_MI_ + + US + 42.36 + -86.84 + 0 + 0 + GRR + + + GMZ675 + 686750 + Wtrs_fr_Destin_to_Pensacola_FL_f + + US + 29.72 + -86.83 + 0 + 0 + MOB + + + LMZ080 + 640800 + L_MI_MI_Cty_IN_to_St._Joseph_MI_ + + US + 41.97 + -86.79 + 0 + 0 + IWX + + + LMZ872 + 648720 + L_MI_fr_Gnd_Haven_to_Whthall_MI_ + + US + 43.22 + -86.78 + 0 + 0 + GRR + + + LMZ874 + 648740 + L_MI_fr_Holland_to_Gnd_Haven_MI_ + + US + 42.95 + -86.78 + 0 + 0 + GRR + + + LMZ366 + 643660 + L_MI_fr_Pt_Betsie_to_Manistee_MI + + US + 44.53 + -86.75 + 0 + 0 + APX + + + GMZ655 + 686550 + Cstal_wtrs_fr_Destin_to_Pensacol + + US + 30.24 + -86.72 + 0 + 0 + MOB + + + LMZ043 + 640430 + New_Buffalo_MI_to_St_Joseph_MI + + US + 41.97 + -86.67 + 0 + 0 + IWX + + + LMZ563 + 645630 + L_MI_fr_Rock_I_Passage_to_Sturge + + US + 45.02 + -86.67 + 0 + 0 + GRB + + + LMZ250 + 642500 + 5NM_E_of_a_line_fr_Fairport_MI_t + + US + 45.49 + -86.66 + 0 + 0 + MQT + + + LMZ868 + 648680 + L_MI_fr_Pentwtr_to_Manistee_MI_5 + + US + 43.95 + -86.65 + 0 + 0 + GRR + + + LMZ876 + 648760 + L_MI_fr_S_Haven_to_Holland_MI_5N + + US + 42.60 + -86.65 + 0 + 0 + GRR + + + LMZ849 + 648490 + Pentwater_to_Manistee_MI + + US + 44.03 + -86.57 + 0 + 0 + GRR + + + LMZ848 + 648480 + Whitehall_to_Pentwater_MI + + US + 43.59 + -86.53 + 0 + 0 + GRR + + + LSZ250 + 652500 + Munising_to_Grand_Marais_MI + + US + 46.59 + -86.49 + 0 + 0 + MQT + + + LMZ844 + 648440 + St_Joseph_to_South_Haven_MI + + US + 42.28 + -86.46 + 0 + 0 + GRR + + + LMZ847 + 648470 + Grand_Haven_to_Whitehall_MI + + US + 43.22 + -86.36 + 0 + 0 + GRR + + + LMZ346 + 643460 + Manistee_to_Point_Betsie_MI + + US + 44.48 + -86.33 + 0 + 0 + APX + + + LMZ261 + 642610 + L_MI_fr_Seul_Choix_Pt_to_Rock_I_ + + US + 45.60 + -86.32 + 0 + 0 + MQT + + + LMZ846 + 648460 + Holland_to_Grand_Haven_MI + + US + 42.91 + -86.30 + 0 + 0 + GRR + + + LMZ845 + 648450 + South_Haven_to_Holland_MI + + US + 42.59 + -86.28 + 0 + 0 + GRR + + + LMZ248 + 642480 + Seul_Choix_Pt_to_Pt_Detour_MI + + US + 45.79 + -86.27 + 0 + 0 + MQT + + + LMZ364 + 643640 + L_MI_fr_Charlevoix_to_Pt_Betsie_ + + US + 45.02 + -86.19 + 0 + 0 + APX + + + LMZ345 + 643450 + Pt_Betsie_to_Sleeping_Bear_Pt_MI + + US + 44.82 + -86.18 + 0 + 0 + APX + + + LMZ344 + 643440 + Sleeping_Bear_Pt_to_Gnd_Traverse + + US + 45.09 + -85.79 + 0 + 0 + APX + + + GMZ770 + 687700 + Wtrs_fr_Apalachicola_to_Destin_F + + US + 29.27 + -85.76 + 0 + 0 + TAE + + + LMZ341 + 643410 + Seul_Choix_Pt_to_5NM_W_of_Mackin + + US + 45.96 + -85.71 + 0 + 0 + APX + + + GMZ750 + 687500 + Cstal_wtrs_fr_Apalachicola_to_De + + US + 29.84 + -85.65 + 0 + 0 + TAE + + + LSZ267 + 652670 + L_Sup_fr_Gnd_Marais_MI_to_Whtfis + + US + 47.00 + -85.61 + 0 + 0 + MQT + + + LMZ362 + 643620 + L_MI_S_of_a_line_fr_Seul_Choix_P + + US + 45.60 + -85.57 + 0 + 0 + APX + + + LMZ323 + 643230 + Gnd_Traverse_Bay_S_of_a_line_Gnd + + US + 44.98 + -85.56 + 0 + 0 + APX + + + LSZ251 + 652510 + Grand_Marais_to_Whitefish_Pt_MI + + US + 46.75 + -85.41 + 0 + 0 + MQT + + + LMZ342 + 643420 + Norwood_MI_to_5NM_W_of_Mackinac_ + + US + 45.53 + -85.20 + 0 + 0 + APX + + + LSZ321 + 653210 + Whtfish_Bay_(U.S._Portion)/Whtfi + + US + 46.54 + -84.77 + 0 + 0 + APX + + + LHZ345 + 743450 + Sts_of_Mackinac_within_5NM_of_Ma + + US + 45.81 + -84.71 + 0 + 0 + APX + + + GMZ755 + 687550 + Cstal_Wtrs_From__Ochlockonee_Riv + + US + 29.61 + -84.54 + 0 + 0 + TAE + + + GMZ775 + 687750 + Wtrs_fr__Suwannee_Riv_to_Apalach + + US + 29.15 + -84.35 + 0 + 0 + TAE + + + LHZ347 + 743470 + 5NM_E_of_Mackinac_Br_to_Presque_ + + US + 45.73 + -84.31 + 0 + 0 + APX + + + LHZ346 + 743460 + St_Ignace_to_False_Detour_Chnl + + US + 45.94 + -84.13 + 0 + 0 + APX + + + LSZ322 + 653220 + St._Marys_Riv_Pt_Iroquois_to_E._ + + US + 46.26 + -84.11 + 0 + 0 + APX + + + GMZ730 + 687300 + Apalachee_Bay_or_Cstal_Wtrs_From + + US + 29.90 + -83.95 + 0 + 0 + TAE + + + LHZ361 + 743610 + L_Huron_fr_5NM_E_of_Mackinac_Br_ + + US + 45.63 + -83.69 + 0 + 0 + APX + + + LHZ422 + 744220 + Inr_Saginaw_Bay_SW_of_Pt_Au_Gres + + US + 43.80 + -83.67 + 0 + 0 + DTX + + + GMZ870 + 688700 + Wtrs_fr_Tarpon_Spgs_to_Suwannee_ + + US + 28.60 + -83.54 + 0 + 0 + TBW + + + GMZ765 + 687650 + Cstal_wtrs_fr__Suwannee_Riv_to_K + + US + 29.50 + -83.53 + 0 + 0 + TAE + + + LHZ421 + 744210 + Out_Saginaw_Bay_SW_of_Alabaster_ + + US + 44.07 + -83.38 + 0 + 0 + DTX + + + GMZ873 + 688730 + Wtrs_fr_Englewood_to_Tarpon_Spgs + + US + 27.42 + -83.36 + 0 + 0 + TBW + + + LEZ142 + 631420 + Maumee_Bay_to_Reno_Beach_OH + + US + 41.74 + -83.35 + 0 + 0 + CLE + + + LHZ348 + 743480 + Presque_I_Lt_to_Sturgeon_Pt_MI_I + + US + 45.06 + -83.32 + 0 + 0 + APX + + + LEZ444 + 634440 + MI_Wtrs_of_L_Erie_fr_Detroit_Riv + + US + 41.89 + -83.29 + 0 + 0 + DTX + + + LHZ349 + 743490 + Sturgeon_Point_to_Alabaster_MI + + US + 44.45 + -83.26 + 0 + 0 + APX + + + LEZ162 + 631620 + Detroit_Riv_Lt._to_Maumee_Bay_OH + + US + 41.86 + -83.20 + 0 + 0 + CLE + + + LCZ423 + 604230 + Detroit_River + + US + 42.18 + -83.16 + 0 + 0 + DTX + + + GMZ850 + 688500 + Cstal_wtrs_fr_Tarpon_Spgs_to_Suw + + US + 28.74 + -82.94 + 0 + 0 + TBW + + + LEZ143 + 631430 + Reno_Beach_to_The_Islands_OH + + US + 41.63 + -82.94 + 0 + 0 + CLE + + + LEZ163 + 631630 + Reno_Beach_to_The_Is_OH_beyond_5 + + US + 41.73 + -82.92 + 0 + 0 + CLE + + + GMZ853 + 688530 + Cstal_wtrs_fr_Englewood_to_Tarpo + + US + 27.53 + -82.87 + 0 + 0 + TBW + + + GMZ876 + 688760 + Wtrs_fr_Bonita_Beach_to_Englewoo + + US + 26.39 + -82.86 + 0 + 0 + TBW + + + LHZ362 + 743620 + L_Huron_fr_Presque_I_Lt_to_Sturg + + US + 45.10 + -82.84 + 0 + 0 + APX + + + LCZ460 + 604600 + L_St._Clair_Open_L_(U.S._Portion + + US + 42.52 + -82.76 + 0 + 0 + DTX + + + LHZ363 + 743630 + L_Huron_fr_Sturgeon_Pt_to_Alabas + + US + 44.42 + -82.75 + 0 + 0 + APX + + + LEZ144 + 631440 + The_Islands_to_Vermilion_OH + + US + 41.48 + -82.71 + 0 + 0 + CLE + + + GMZ830 + 688300 + Tampa_Bay_waters + + US + 27.76 + -82.60 + 0 + 0 + TBW + + + LHZ441 + 744410 + Port_Austin_to_Harbor_Beach_MI + + US + 43.93 + -82.59 + 0 + 0 + DTX + + + LHZ442 + 744420 + Harbor_Beach_to_Port_Sanilac_MI + + US + 43.64 + -82.53 + 0 + 0 + DTX + + + GMZ075 + 680750 + Wtrs_fr_Key_W_to_20_NM_W_of_Dry_ + + US + 24.26 + -82.51 + 0 + 0 + KEY + + + LHZ462 + 744620 + L_Huron_fr_Port_Austin_to_Hbr_Be + + US + 44.05 + -82.51 + 0 + 0 + DTX + + + LEZ164 + 631640 + The_Is_to_Vermilion_OH_beyond_5n + + US + 41.59 + -82.48 + 0 + 0 + CLE + + + LCZ422 + 604220 + St._Clair_River + + US + 42.77 + -82.47 + 0 + 0 + DTX + + + LHZ443 + 744430 + Port_Sanilac_to_Port_Huron_MI + + US + 43.21 + -82.43 + 0 + 0 + DTX + + + GMZ676 + 686760 + Wtrs_fr_Chokoloskee_to_Bonita_Be + + US + 25.80 + -82.42 + 0 + 0 + MFL + + + LHZ463 + 744630 + L_Huron_fr_Hbr_Beach_to_Port_Sni + + US + 43.70 + -82.41 + 0 + 0 + DTX + + + LHZ464 + 744640 + L_Huron_fr_Port_Snilac_to_Port_H + + US + 43.33 + -82.40 + 0 + 0 + DTX + + + GMZ856 + 688560 + Cstal_wtrs_fr_Bonita_Beach_to_En + + US + 26.56 + -82.28 + 0 + 0 + TBW + + + LEZ145 + 631450 + Vermilion_to_Avon_Point_OH + + US + 41.51 + -82.17 + 0 + 0 + CLE + + + LEZ165 + 631650 + Vermilion_to_Avon_Pt_OH_beyond_5 + + US + 41.61 + -82.04 + 0 + 0 + CLE + + + GMZ033 + 680330 + Wtrs_fr_E_C_Sable_to_Chokoloskee + + US + 25.27 + -82.00 + 0 + 0 + KEY + + + GMZ656 + 686560 + Cstal_wtrs_fr_Chokoloskee_to_Bon + + US + 25.96 + -81.92 + 0 + 0 + MFL + + + LEZ166 + 631660 + Avon_Pt_to_Willowick_OH_beyond_5 + + US + 41.82 + -81.81 + 0 + 0 + CLE + + + LEZ146 + 631460 + Avon_Point_to_Willowick_OH + + US + 41.54 + -81.66 + 0 + 0 + CLE + + + GMZ054 + 680540 + Cstal_wtrs_fr_the_W_end_of_the_S + + US + 24.48 + -81.61 + 0 + 0 + KEY + + + GMZ032 + 680320 + Gulf_Side_of_the_Lwr_Keys_out_20 + + US + 24.86 + -81.48 + 0 + 0 + KEY + + + GMZ074 + 680740 + Wtrs_fr_the_W_end_of_the_Seven_M + + US + 23.93 + -81.44 + 0 + 0 + KEY + + + GMZ657 + 686570 + Cstal_wtrs_fr_E_C_Sable_to_Choko + + US + 25.47 + -81.41 + 0 + 0 + MFL + + + AMZ450 + 664500 + Cstal_wtrs_fr_Altamaha_Snd_to_Fe + + US + 30.99 + -81.28 + 0 + 0 + JAX + + + LEZ147 + 631470 + Willowick_to_Geneva-on-the_L_OH + + US + 41.80 + -81.22 + 0 + 0 + CLE + + + AMZ452 + 664520 + Cstal_wtrs_fr_Fernandina_Beach_t + + US + 30.28 + -81.18 + 0 + 0 + JAX + + + LEZ167 + 631670 + Willowick_to_Geneva-on-the-L_OH_ + + US + 42.00 + -81.16 + 0 + 0 + CLE + + + AMZ354 + 663540 + Cstal_wtrs_fr_Savannah_GA_to_Alt + + US + 31.67 + -81.05 + 0 + 0 + CHS + + + AMZ550 + 665500 + Flagler_Beach_to_Volusia-Brevard + + US + 29.22 + -80.97 + 0 + 0 + MLB + + + AMZ454 + 664540 + Cstal_wtrs_fr_St._Augustine_to_F + + US + 29.66 + -80.94 + 0 + 0 + JAX + + + GMZ053 + 680530 + Cstal_wtrs_fr_Craig_Key_to_the_W + + US + 24.57 + -80.90 + 0 + 0 + KEY + + + GMZ031 + 680310 + Florida_Bay + + US + 24.99 + -80.86 + 0 + 0 + KEY + + + AMZ610 + 666100 + Lake_Okeechobee + + US + 26.94 + -80.82 + 0 + 0 + MFL + + + GMZ073 + 680730 + Wtrs_fr_Craig_Key_to_the_W_end_o + + US + 24.10 + -80.79 + 0 + 0 + KEY + + + LEZ148 + 631480 + Geneva-on-the-L_to_Conneaut_OH + + US + 41.96 + -80.75 + 0 + 0 + CLE + + + AMZ472 + 664720 + Wtrs_fr_Fernandina_Beach_to_St._ + + US + 30.27 + -80.73 + 0 + 0 + JAX + + + AMZ470 + 664700 + Wtrs_fr_Altamaha_Snd_GA_to_Ferna + + US + 30.90 + -80.71 + 0 + 0 + JAX + + + LEZ168 + 631680 + Geneva-on-the-L_to_Conneaut_OH_b + + US + 42.11 + -80.69 + 0 + 0 + CLE + + + AMZ474 + 664740 + Wtrs_fr_St._Augustine_to_Flagler + + US + 29.71 + -80.54 + 0 + 0 + JAX + + + AMZ552 + 665520 + Volusia-Brevard_Cnty_Line_to_Seb + + US + 28.39 + -80.48 + 0 + 0 + MLB + + + AMZ352 + 663520 + Cstal_wtrs_fr_Edisto_Beach_SC_to + + US + 32.18 + -80.47 + 0 + 0 + CHS + + + AMZ374 + 663740 + Wtrs_fr_Savannah_GA_to_Altamaha_ + + US + 31.48 + -80.45 + 0 + 0 + CHS + + + LEZ169 + 631690 + Conneaut_OH_to_Ripley_NY_beyond_ + + US + 42.33 + -80.35 + 0 + 0 + CLE + + + GMZ052 + 680520 + Cstal_wtrs_fr_O_Reef_to_Craig_Ke + + US + 24.94 + -80.34 + 0 + 0 + KEY + + + AMZ630 + 666300 + Biscayne_Bay + + US + 25.58 + -80.28 + 0 + 0 + MFL + + + AMZ570 + 665700 + Flagler_Beach_to_Volusia-Brevard + + US + 29.20 + -80.22 + 0 + 0 + MLB + + + LEZ149 + 631490 + Conneaut_OH_to_Ripley_NY + + US + 42.15 + -80.15 + 0 + 0 + CLE + + + GMZ072 + 680720 + Wtrs_fr_O_Reef_to_Craig_Key_fr_2 + + US + 24.53 + -80.05 + 0 + 0 + KEY + + + AMZ555 + 665550 + Sebastian_Inlt_to_Jupiter_Inlt_0 + + US + 27.40 + -80.03 + 0 + 0 + MLB + + + AMZ651 + 666510 + Cstal_wtrs_fr_Deerfield_Beach_to + + US + 25.77 + -80.01 + 0 + 0 + MFL + + + AMZ330 + 663300 + Charleston_Harbor + + US + 32.78 + -79.89 + 0 + 0 + CHS + + + AMZ572 + 665720 + Volusia-Brevard_Cnty_Line_to_Seb + + US + 28.42 + -79.87 + 0 + 0 + MLB + + + AMZ650 + 666500 + Cstal_wtrs_fr_Jupiter_Inlt_to_De + + US + 26.59 + -79.74 + 0 + 0 + MFL + + + AMZ370 + 663700 + Wtrs_fr_S_Sntee_Riv_SC_to_Savann + + US + 32.35 + -79.63 + 0 + 0 + CHS + + + LEZ040 + 630400 + Ripley_to_Dunkirk_NY + + US + 42.43 + -79.56 + 0 + 0 + BUF + + + AMZ575 + 665750 + Sebastian_Inlt_to_Jupiter_Inlt_2 + + US + 27.46 + -79.52 + 0 + 0 + MLB + + + AMZ350 + 663500 + Cstal_wtrs_fr_S_Sntee_Riv_to_Edi + + US + 32.65 + -79.51 + 0 + 0 + CHS + + + AMZ671 + 666710 + Wtrs_fr_Deerfield_Beach_to_O_Ree + + US + 25.50 + -79.50 + 0 + 0 + MFL + + + LEZ061 + 630610 + Ripley_to_Buffalo_NY_extending_f + + US + 42.55 + -79.49 + 0 + 0 + BUF + + + AMZ670 + 666700 + Wtrs_fr_Jupiter_Inlt_to_Deerfiel + + US + 26.58 + -79.34 + 0 + 0 + MFL + + + LEZ041 + 630410 + Dunkirk_to_Buffalo_NY + + US + 42.69 + -79.11 + 0 + 0 + BUF + + + LEZ020 + 630200 + Buffalo_Hbr_and_the_Upr_Niagara_ + + US + 43.11 + -79.06 + 0 + 0 + BUF + + + AMZ256 + 662560 + Cstal_wtrs_fr_Murrells_Inlt_to_S + + US + 33.21 + -78.86 + 0 + 0 + ILM + + + LOZ042 + 620420 + Niagara_Riv_to_Hamlin_Beach_NY + + US + 43.36 + -78.79 + 0 + 0 + BUF + + + LOZ062 + 620620 + Niagara_Riv_to_Hamlin_Beach_NY_b + + US + 43.55 + -78.63 + 0 + 0 + BUF + + + AMZ254 + 662540 + Cstal_wtrs_fr_Ltl_Riv_Inlt_to_Mu + + US + 33.62 + -78.59 + 0 + 0 + ILM + + + AMZ252 + 662520 + Cstal_wtrs_fr_C_Fear_NC_to_Ltl_R + + US + 33.69 + -78.01 + 0 + 0 + ILM + + + AMZ270 + 662700 + Wtrs_fr_Surf_Cty_NC_to_S_Sntee_R + + US + 33.49 + -77.96 + 0 + 0 + ILM + + + AMZ250 + 662500 + Cstal_wtrs_fr_Surf_Cty_to_C_Fear + + US + 34.07 + -77.60 + 0 + 0 + ILM + + + LOZ043 + 620430 + Hamlin_Beach_to_Sodus_Bay_NY + + US + 43.33 + -77.46 + 0 + 0 + BUF + + + LOZ063 + 620630 + Hamlin_Beach_to_Sodus_Bay_NY_bey + + US + 43.47 + -77.38 + 0 + 0 + BUF + + + ANZ536 + 675360 + Tidal_Potomac_fr_Ind_Hd_to_Cobb_ + + US + 38.42 + -77.12 + 0 + 0 + LWX + + + ANZ535 + 675350 + Tidal_Potomac_fr_Key_Br_to_Ind_H + + US + 38.75 + -77.04 + 0 + 0 + LWX + + + AMZ158 + 661580 + Cstal_wtrs_fr_C_Lookout_to_Surf_ + + US + 34.52 + -76.95 + 0 + 0 + MHX + + + LOZ064 + 620640 + Sodus_Bay_to_Mex_Bay_NY_beyond_5 + + US + 43.62 + -76.75 + 0 + 0 + BUF + + + LOZ044 + 620440 + Sodus_Bay_to_Mexico_Bay_NY + + US + 43.44 + -76.62 + 0 + 0 + BUF + + + ANZ537 + 675370 + Tidal_Potomac_fr_Cobb_I_MD_to_Sm + + US + 38.15 + -76.58 + 0 + 0 + LWX + + + ANZ533 + 675330 + Chsapke_Bay_fr_N_Beach_to_Drum_P + + US + 38.56 + -76.41 + 0 + 0 + LWX + + + LOZ065 + 620650 + Mex_Bay_NY_to_the_St._Lawrence_R + + US + 43.78 + -76.39 + 0 + 0 + BUF + + + LOZ045 + 620450 + Mex_Bay_NY_to_the_St._Lawrence_R + + US + 43.86 + -76.36 + 0 + 0 + BUF + + + ANZ531 + 675310 + Chsapke_Bay_fr_Pooles_I_to_Sndy_ + + US + 39.18 + -76.35 + 0 + 0 + LWX + + + AMZ156 + 661560 + Cstal_wtrs_fr_Ocracoke_Inlt_to_C + + US + 34.80 + -76.27 + 0 + 0 + MHX + + + ANZ532 + 675320 + Chsapke_Bay_fr_Sndy_Pt_to_N_Beac + + US + 38.90 + -76.27 + 0 + 0 + LWX + + + AMZ135 + 661350 + Pamlico_Sound + + US + 35.30 + -76.13 + 0 + 0 + MHX + + + ANZ632 + 676320 + Chsapke_Bay_fr_New_Pt_Comfort_to + + US + 37.10 + -76.13 + 0 + 0 + AKQ + + + ANZ534 + 675340 + Chsapke_Bay_fr_Drum_Pt_MD_to_Smi + + US + 38.13 + -76.11 + 0 + 0 + LWX + + + AMZ130 + 661300 + Albemarle_Sound + + US + 36.00 + -76.09 + 0 + 0 + MHX + + + ANZ631 + 676310 + Chsapke_Bay_fr_Windmill_Pt_to_Ne + + US + 37.46 + -76.09 + 0 + 0 + AKQ + + + ANZ530 + 675300 + Chesapeake_Bay_N_of_Pooles_I_MD + + US + 39.46 + -76.06 + 0 + 0 + LWX + + + ANZ630 + 676300 + Chsapke_Bay_fr_Smith_Pt_to_Windm + + US + 37.80 + -76.04 + 0 + 0 + AKQ + + + ANZ633 + 676330 + Currituck_Sound + + US + 36.40 + -75.92 + 0 + 0 + AKQ + + + SLZ022 + 730220 + St._Lawrence_Riv_above_Ogdensbg_ + + US + 44.45 + -75.79 + 0 + 0 + BUF + + + ANZ656 + 676560 + Cstal_wtrs_fr_C_Charles_Lt_VA_to + + US + 36.78 + -75.68 + 0 + 0 + AKQ + + + AMZ170 + 661700 + Wtrs_fr_Currituck_Beach_Lt_to_Su + + US + 34.83 + -75.64 + 0 + 0 + MHX + + + ANZ654 + 676540 + Cstal_wtrs_fr_Parramore_I_to_C_C + + US + 37.31 + -75.62 + 0 + 0 + AKQ + + + ANZ658 + 676580 + Cstal_wtrs_fr_NC_VA_border_to_Cu + + US + 36.36 + -75.60 + 0 + 0 + AKQ + + + AMZ154 + 661540 + Cstal_wtrs_fr_C_Hatteras_to_Ocra + + US + 35.05 + -75.58 + 0 + 0 + MHX + + + AMZ150 + 661500 + Cstal_wtrs_fr_Currituck_Beach_Lt + + US + 36.02 + -75.50 + 0 + 0 + MHX + + + ANZ652 + 676520 + Cstal_wtrs_fr_Chincoteague_to_Pa + + US + 37.81 + -75.39 + 0 + 0 + AKQ + + + AMZ152 + 661520 + Cstal_wtrs_fr_Oregon_Inlt_to_C_H + + US + 35.50 + -75.38 + 0 + 0 + MHX + + + ANZ430 + 674300 + DE_Bay_wtrs_N_of_E_Pt_NJ_to_Slau + + US + 39.32 + -75.34 + 0 + 0 + PHI + + + SLZ024 + 730240 + St._Lawrence_Riv_fr_Ogdensbg_to_ + + US + 44.86 + -75.23 + 0 + 0 + BUF + + + ANZ431 + 674310 + DE_Bay_wtrs_S_of_E_Pt_NJ_to_Slau + + US + 39.00 + -75.10 + 0 + 0 + PHI + + + ANZ670 + 676700 + Wtrs_fr_Fenwick_I_DE_to_Currituc + + US + 37.28 + -75.10 + 0 + 0 + AKQ + + + ANZ650 + 676500 + Cstal_wtrs_fr_Fenwick_I_DE_to_Ch + + US + 38.23 + -75.07 + 0 + 0 + AKQ + + + ANZ454 + 674540 + Cstal_wtrs_fr_C_May_NJ_to_C_Henl + + US + 38.80 + -74.89 + 0 + 0 + PHI + + + ANZ455 + 674550 + Cstal_wtrs_fr_C_Henlopen_to_Fenw + + US + 38.48 + -74.74 + 0 + 0 + PHI + + + ANZ453 + 674530 + Cstal_wtrs_fr_Gt_Egg_Inlt_to_C_M + + US + 38.97 + -74.57 + 0 + 0 + PHI + + + ANZ452 + 674520 + Cstal_wtrs_fr_Ltl_Egg_Inlt_to_Gt + + US + 39.26 + -74.36 + 0 + 0 + PHI + + + ANZ338 + 673380 + New_York_Harbor + + US + 40.55 + -74.09 + 0 + 0 + OKX + + + ANZ470 + 674700 + Wtrs_fr_Sndy_Hook_NJ_to_Fenwick_ + + US + 39.18 + -74.02 + 0 + 0 + PHI + + + ANZ451 + 674510 + Cstal_wtrs_fr_Manasquan_Inlt_to_ + + US + 39.65 + -73.95 + 0 + 0 + PHI + + + ANZ450 + 674500 + Cstal_wtrs_fr_Sndy_Hook_to_Manas + + US + 40.16 + -73.78 + 0 + 0 + PHI + + + ANZ355 + 673550 + Sndy_Hook_NJ_to_Fire_I_Inlt_NY_o + + US + 40.41 + -73.51 + 0 + 0 + OKX + + + ANZ335 + 673350 + Long_I_Snd_W_of_New_Haven_CT/Por + + US + 41.04 + -73.36 + 0 + 0 + OKX + + + ANZ353 + 673530 + Fire_I_Inlt_NY_to_Moriches_Inlt_ + + US + 40.55 + -73.04 + 0 + 0 + OKX + + + ANZ345 + 673450 + S_Shore_Bays_fr_Jones_Inlt_throu + + US + 40.74 + -73.00 + 0 + 0 + OKX + + + ANZ370 + 673700 + Wtrs_fr_Montauk_Pt_NY_to_Sndy_Ho + + US + 40.31 + -72.48 + 0 + 0 + OKX + + + ANZ330 + 673300 + Long_I_Snd_E_of_New_Haven_CT/Por + + US + 41.15 + -72.44 + 0 + 0 + OKX + + + ANZ340 + 673400 + Peconic_and_Gardiners_Bays + + US + 41.02 + -72.33 + 0 + 0 + OKX + + + ANZ350 + 673500 + Moriches_Inlt_NY_to_Montauk_Pt_N + + US + 40.75 + -72.21 + 0 + 0 + OKX + + + ANZ237 + 672370 + Block_Island_Sound + + US + 41.21 + -71.61 + 0 + 0 + BOX + + + ANZ236 + 672360 + Narragansett_Bay + + US + 41.62 + -71.29 + 0 + 0 + BOX + + + ANZ235 + 672350 + Rhode_Island_Sound + + US + 41.32 + -71.13 + 0 + 0 + BOX + + + ANZ230 + 672300 + Boston_Harbor + + US + 42.34 + -70.94 + 0 + 0 + BOX + + + ANZ233 + 672330 + Vineyard_Sound + + US + 41.43 + -70.78 + 0 + 0 + BOX + + + ANZ234 + 672340 + Buzzards_Bay + + US + 41.52 + -70.74 + 0 + 0 + BOX + + + ANZ255 + 672550 + Cstal_wtrs_fr_Nantucket_MA_to_Ma + + US + 41.07 + -70.74 + 0 + 0 + BOX + + + ANZ250 + 672500 + Cstal_wtrs_fr_Merrimack_Riv_MA_o + + US + 42.44 + -70.37 + 0 + 0 + BOX + + + ANZ231 + 672310 + Cape_Cod_Bay + + US + 41.92 + -70.34 + 0 + 0 + BOX + + + ANZ154 + 671540 + Cstal_Wtrs_fr_C_Elizabeth,_ME_to + + US + 43.11 + -70.26 + 0 + 0 + GYX + + + ANZ232 + 672320 + Nantucket_Sound + + US + 41.48 + -70.26 + 0 + 0 + BOX + + + ANZ153 + 671530 + Casco_Bay + + US + 43.72 + -70.06 + 0 + 0 + GYX + + + ANZ254 + 672540 + Cstal_wtrs_fr_Provincetown_MA_to + + US + 41.66 + -69.75 + 0 + 0 + BOX + + + ANZ152 + 671520 + Cstal_Wtrs_fr_Port_Clyde,_ME_to_ + + US + 43.57 + -69.47 + 0 + 0 + GYX + + + ANZ170 + 671700 + Wtrs_fr_Stonington_ME_to_Merrima + + US + 43.32 + -69.31 + 0 + 0 + GYX + + + ANZ270 + 672700 + Wtrs_fr_Merrimack_Riv_MA_to_Watc + + US + 41.69 + -69.29 + 0 + 0 + BOX + + + ANZ150 + 671500 + Cstal_Wtrs_fr_Stonington,_ME_to_ + + US + 43.84 + -68.91 + 0 + 0 + GYX + + + ANZ151 + 671510 + Penobscot_Bay + + US + 44.18 + -68.77 + 0 + 0 + GYX + + + ANZ051 + 670510 + Cstal_Wtrs_fr_Schoodic_Pt,_ME_to + + US + 44.00 + -68.25 + 0 + 0 + CAR + + + ANZ052 + 670520 + Intra_Cstal_Wtrs_fr_Schoodic_Pt, + + US + 44.19 + -68.25 + 0 + 0 + CAR + + + ANZ070 + 670700 + Wtrs_fr_Eport_ME_to_Stonington_( + + US + 43.84 + -67.86 + 0 + 0 + CAR + + + AMZ741 + 667410 + Mona_Passage_Southward_to_17N + + US + 17.74 + -67.69 + 0 + 0 + SJU + + + ANZ050 + 670500 + Cstal_Wtrs_fr_Eport,_ME_to_Schoo + + US + 44.30 + -67.48 + 0 + 0 + CAR + + + AMZ742 + 667420 + Cstal_Wtrs_OF_NWrn_Puerto_Rico_o + + US + 18.34 + -67.30 + 0 + 0 + SJU + + + AMZ745 + 667450 + Cstal_Wtrs_OF_SWrn_Puerto_Rico_o + + US + 18.06 + -67.28 + 0 + 0 + SJU + + + AMZ712 + 667120 + Cstal_Wtrs_of_Nrn_Puerto_Rico_ou + + US + 18.60 + -66.63 + 0 + 0 + SJU + + + AMZ735 + 667350 + Cstal_Wtrs_of_Srn_Puerto_Rico_ou + + US + 17.84 + -66.43 + 0 + 0 + SJU + + + AMZ710 + 667100 + Atl_Wtrs_of_Puerto_Rico_AND_USVI + + US + 19.04 + -66.01 + 0 + 0 + SJU + + + AMZ732 + 667320 + Carib_Wtrs_of_Puerto_Rico_fr_10_ + + US + 17.49 + -65.58 + 0 + 0 + SJU + + + AMZ725 + 667250 + Cstal_Wtrs_of_Srn_USVI,_Vieques, + + US + 18.24 + -65.16 + 0 + 0 + SJU + + + AMZ715 + 667150 + Cstal_Wtrs_of_Nrn_USVI_and_Culeb + + US + 18.47 + -64.85 + 0 + 0 + SJU + + + AMZ722 + 667220 + Anegada_Passage_Sward_to_17N + + US + 17.75 + -64.08 + 0 + 0 + SJU + + + PMZ161 + 711610 + Koror_Palau_Coastal_Waters + + US + 7.34 + 134.48 + 0 + 0 + GUM + + + PMZ171 + 711710 + Yap_Coastal_Waters + + US + 9.48 + 138.08 + 0 + 0 + GUM + + + PMZ151 + 711510 + Guam_Coastal_Waters + + US + 13.32 + 144.66 + 0 + 0 + GUM + + + PMZ152 + 711520 + Rota_Coastal_Waters + + US + 14.18 + 145.24 + 0 + 0 + GUM + + + PMZ153 + 711530 + Tinian_Coastal_Waters + + US + 14.83 + 145.45 + 0 + 0 + GUM + + + PMZ154 + 711540 + Saipan_Coastal_Waters + + US + 15.40 + 145.81 + 0 + 0 + GUM + + + PMZ172 + 711720 + Chuuk_Coastal_Waters + + US + 7.45 + 151.83 + 0 + 0 + GUM + + + PMZ173 + 711730 + Pohnpei_Coastal_Waters + + US + 6.97 + 158.23 + 0 + 0 + GUM + + + PMZ174 + 711740 + Kosrae_Coastal_Waters + + US + 5.35 + 162.95 + 0 + 0 + GUM + + + PMZ191 + 711910 + Waters_out_to_40_Nautical_Miles + + US + 19.30 + 166.64 + 0 + 0 + GUM + + + PMZ181 + 711810 + Majuro_Coastal_Waters + + US + 7.08 + 171.38 + 0 + 0 + GUM + + + PKZ176 + 691760 + Kiska_to_Attu + + US + 52.48 + 174.46 + 0 + 0 + AFC + + diff --git a/ncep/gov.noaa.nws.ncep.edex.gempak.jna/gov.noaa.nws.ncep.edex.gempak.jna.ecl b/ncep/gov.noaa.nws.ncep.edex.gempak.jna/gov.noaa.nws.ncep.edex.gempak.jna.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/ncep/gov.noaa.nws.ncep.edex.ingest.grib.util/gov.noaa.nws.ncep.edex.ingest.grib.util.ecl b/ncep/gov.noaa.nws.ncep.edex.ingest.grib.util/gov.noaa.nws.ncep.edex.ingest.grib.util.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/ncep/gov.noaa.nws.ncep.edex.ingest.util/gov.noaa.nws.ncep.edex.ingest.util.ecl b/ncep/gov.noaa.nws.ncep.edex.ingest.util/gov.noaa.nws.ncep.edex.ingest.util.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.airmet/gov.noaa.nws.ncep.edex.plugin.airmet.ecl b/ncep/gov.noaa.nws.ncep.edex.plugin.airmet/gov.noaa.nws.ncep.edex.plugin.airmet.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.airmet/res/spring/airmet-common.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.airmet/res/spring/airmet-common.xml index f0ee3212ee..6571acc876 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.airmet/res/spring/airmet-common.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.airmet/res/spring/airmet-common.xml @@ -1,26 +1,26 @@ - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.airmet/res/spring/airmet-ingest.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.airmet/res/spring/airmet-ingest.xml index ee3df1d67d..8eca038a2c 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.airmet/res/spring/airmet-ingest.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.airmet/res/spring/airmet-ingest.xml @@ -1,72 +1,72 @@ - - - - - - - - - - - - - - - - - - - - - - - - airmet - - - - - - - - - - - - - java.lang.Throwable - - - - - - - java.lang.Throwable - - - - - + + + + + + + + + + + + + + + + + + + + + + + + airmet + + + + + + + + + + + + + java.lang.Throwable + + + + + + + java.lang.Throwable + + + + + \ No newline at end of file diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.airmet/src/gov/noaa/nws/ncep/edex/plugin/airmet/decoder/AirmetDecoder.java b/ncep/gov.noaa.nws.ncep.edex.plugin.airmet/src/gov/noaa/nws/ncep/edex/plugin/airmet/decoder/AirmetDecoder.java index 37f7f4498c..7aad148a39 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.airmet/src/gov/noaa/nws/ncep/edex/plugin/airmet/decoder/AirmetDecoder.java +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.airmet/src/gov/noaa/nws/ncep/edex/plugin/airmet/decoder/AirmetDecoder.java @@ -1,317 +1,317 @@ -/** - * - * Airmet Decoder - * - * This java class decodes AIRMET raw data. - * HISTORY - * - * * Date Ticket# Engineer Description - * ------------ ---------- ----------- -------------------------- - * 05/2009 39 L. Lin Initial creation - * 06/2009 39 L. Lin Set updateNumber before constructing dataURI. - * 07/2009 39 L. Lin Migration to TO11 - * - * - * This code has been developed by the SIB for use in the AWIPS2 system. - * @author L. Lin - * @version 1.0 - */ - -package gov.noaa.nws.ncep.edex.plugin.airmet.decoder; - -import gov.noaa.nws.ncep.common.dataplugin.airmet.AirmetRecord; -import gov.noaa.nws.ncep.common.dataplugin.airmet.AirmetReport; -import gov.noaa.nws.ncep.edex.plugin.airmet.util.AirmetParser; -import gov.noaa.nws.ncep.edex.util.UtilN; - -import java.util.ArrayList; -import java.util.Calendar; -import java.util.Scanner; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -import com.raytheon.edex.esb.Headers; -import com.raytheon.edex.exception.DecoderException; -import com.raytheon.edex.plugin.AbstractDecoder; -import com.raytheon.uf.common.dataplugin.PluginDataObject; -import com.raytheon.uf.common.dataplugin.PluginException; -import com.raytheon.uf.edex.decodertools.core.IDecoderConstants; -import com.raytheon.uf.edex.decodertools.time.TimeTools; - -public class AirmetDecoder extends AbstractDecoder { - - private final String pluginName; - - /** - * Constructor - * - * @param name - * The name (usually pluginName) for this decoder. - * @throws DecoderException - */ - public AirmetDecoder(String name) throws DecoderException { - pluginName = name; - } - - /** - * - * @param data - * @param headers - * @return - * @throws DecoderException - */ - public PluginDataObject[] decode(byte[] data, Headers headers) - throws DecoderException { - - String traceId = ""; - if (headers != null) { - traceId = (String) headers.get("traceId"); - } - - String sectionDelim = "OTLK|AIRMET IFR|AIRMET MTN OBSCN|AIRMET TURB|AIRMET ICE|AIRMET STG SFC WNDS|LLWS POTENTIAL]"; - String etx = IDecoderConstants.ETX; - String theBulletin = null; - - Calendar startTime = null; - byte[] messageData = null; - - AirmetRecord record = null; - // Default equal to six hours from start time if there is no valid time - // in report - final int validPeriod = 6; - - AirmetSeparator sep = AirmetSeparator.separate(data, headers); - messageData = sep.next(); - String theMessage = new String(messageData); - - /* - * May have multiple duplicate bulletins, only get the first bulletin - * and eliminate the remaining bulletins after the first bulletin. - */ - Scanner cc = new Scanner(theMessage).useDelimiter(etx); - if (cc.hasNext()) { - theBulletin = cc.next(); - } else { - theBulletin = theMessage; - } - - // record = new AirmetRecord(); - // Decode and set WMO line - record = AirmetParser.processWMO(theBulletin, headers); - - Calendar issueTime = record.getIssueTime(); - - // Decode the reportName: ZULU, TANGO, or SIERRA - String reportName = AirmetParser.getReportName(theBulletin); - - /* - * Check the Airmet record object. If not, throws exception. - */ - if (record != null) { - record.setTraceId(traceId); - record.setPluginName(pluginName); - record.setReportType(pluginName); - record.setReportName(reportName); - // Decode and set the update number - record.setUpdateNumber(AirmetParser.getUpdateNumber(theBulletin)); - try { - record.constructDataURI(); - } catch (PluginException e) { - logger.error("Error constructing dataURI", e); - } - } - - if (record != null) { - try { - // Replace special characters to a blank so that it may be - // readable - record.setBullMessage(UtilN - .removeLeadingWhiteSpaces((theBulletin.substring(5)) - .replace('\036', ' ').replace('\r', ' ') - .replace('\003', ' ').replace('\000', ' ') - .replace('\001', ' '))); - - // Decode the starting time - startTime = AirmetParser.getStartTime(theBulletin, headers); - if (startTime == null) { - startTime = issueTime; - } - - // Decode the end time - Calendar endTime = AirmetParser - .getEndTime(theBulletin, headers); - if (endTime == null) { - /* - * if no end time available, end time will be the start time - * plus a valid period; the default is six hours for now. - */ - endTime = startTime; - endTime.add(Calendar.HOUR, validPeriod); - } - - Calendar validStartTime = TimeTools.copy(endTime); - validStartTime.add(Calendar.HOUR, -validPeriod); - - // Airmet report valid time lasts only six hours from start to - // end - if (startTime.before(validStartTime)) { - startTime = validStartTime; - } - - // Decode the correction flag and set - record.setCorrectionFlag(AirmetParser - .getCorrectionFlag(theBulletin)); - - /* - * Break the bulletin message into sections by a "OTLK" or - * "AIRMET [IFR|MTN OBSCN|TURB|ICE|STG SFC WNDS|LLWS PTENTIAL]". - */ - Scanner sc = new Scanner(theBulletin) - .useDelimiter(sectionDelim); - - ArrayList segmentList = new ArrayList(); - segmentList.clear(); - // throw away the prefix section - String segPrefix = sc.next(); - - while (sc.hasNext()) { - String segment = sc.next(); - segmentList.add(segment); - } - - if (segmentList.size() == 0) { - // This is NIL/EXPIRE AIRMET report containing header only. - record.setCorrectionFlag(4); - } else { - /* - * Process each report. - */ - Integer series = 1; - // Get forecastRegion - String forecastRegion = AirmetParser.getRegion(reportName); - // Get valid day - String validDay = AirmetParser.getValidDay(theBulletin); - - // System.out.println("Process a report=\n" + segment); - for (String segment : segmentList) { - // starts a new section - Scanner sc2 = new Scanner(segment); - String whatReport = sc2.next(); - - if (whatReport.equals("VALID")) { - segment = "OTLK".concat(segment); - - // process this section which starts with - // "OTLK VALID". - Scanner scOutlook = new Scanner(segment) - .useDelimiter("AREA "); - ArrayList outlookList = new ArrayList(); - outlookList.clear(); - - // Check if "OUTLOOK" section contains more than one - // "AREA". - while (scOutlook.hasNext()) { - String outlookSegment = scOutlook.next(); - outlookList.add(outlookSegment); - } - - if (outlookList.size() <= 1) { - // only one outlook report - AirmetReport outlook = AirmetParser - .processOutLook(segment, forecastRegion); - AirmetParser.processValidTime(segment, outlook, - validDay, headers); - record.addAirmetReport(outlook); - } else { - /* - * Here are more than one outlook areas Store - * the header section and remove it from the - * outlook list - */ - String outlookHeader = outlookList.get(0); - outlookList.remove(outlookHeader); - // process multiple outlook sections - for (String outlookReport : outlookList) { - outlookReport = outlookHeader.concat( - "AREA ").concat(outlookReport); - AirmetReport outlook = AirmetParser - .processOutLook(outlookReport, - forecastRegion); - AirmetParser.processValidTime( - outlookReport, outlook, validDay, - headers); - record.addAirmetReport(outlook); - } - } - } else { - // Regular expression AIRMET report - final String HAZARD_EXP = "(ICE|TURB|CIG BLW|VIS BLW|MTNS|LLWS|SUSTAINED) "; - - // Pattern used for extracting hazard - final Pattern hazardTypePattern = Pattern - .compile(HAZARD_EXP); - Matcher theMatcher = hazardTypePattern - .matcher(segment); - - if (theMatcher.find()) { - // prefix the report type - if (theMatcher.group(1).equals("ICE")) { - segment = "AIRMET ICE".concat(segment); - } else if (theMatcher.group(1).equals("TURB")) { - segment = "AIRMET TURB".concat(segment); - } else if (theMatcher.group(1) - .equals("CIG BLW")) { - segment = "AIRMET IFR".concat(segment); - } else if (theMatcher.group(1) - .equals("VIS BLW")) { - segment = "AIRMET IFR".concat(segment); - } else if (theMatcher.group(1).equals("MTNS")) { - segment = "AIRMET MTN OBSCN" - .concat(segment); - } else if (theMatcher.group(1).equals( - "SUSTAINED")) { - segment = "AIRMET STG SFC WNDS" - .concat(segment); - } else if (theMatcher.group(1).equals("LLWS")) { - segment = "LLWS POTENTIAL".concat(segment); - } - } - - // process this report which starts with "AIRMET" or - // "LLWS". - AirmetReport report = AirmetParser - .processReport(segment); - if (report != null) { - // Decode and set the sequenceID - report.setSequenceID(AirmetParser - .getSequenceID(theBulletin, series)); - report.setStartTime(startTime); - report.setEndTime(endTime); - record.addAirmetReport(report); - } else { - logger.error("Error decoding segment " - + segment); - } - } - series++; - } - } - - } catch (Exception e) { - logger.error("Error postprocessing airmet", e); - record = null; - } - } - - /* - * Return the AirmetRecord record object. - */ - if (record == null) { - return new PluginDataObject[0]; - } else { - return new PluginDataObject[] { record }; - } - - } - -} +/** + * + * Airmet Decoder + * + * This java class decodes AIRMET raw data. + * HISTORY + * + * * Date Ticket# Engineer Description + * ------------ ---------- ----------- -------------------------- + * 05/2009 39 L. Lin Initial creation + * 06/2009 39 L. Lin Set updateNumber before constructing dataURI. + * 07/2009 39 L. Lin Migration to TO11 + * + * + * This code has been developed by the SIB for use in the AWIPS2 system. + * @author L. Lin + * @version 1.0 + */ + +package gov.noaa.nws.ncep.edex.plugin.airmet.decoder; + +import gov.noaa.nws.ncep.common.dataplugin.airmet.AirmetRecord; +import gov.noaa.nws.ncep.common.dataplugin.airmet.AirmetReport; +import gov.noaa.nws.ncep.edex.plugin.airmet.util.AirmetParser; +import gov.noaa.nws.ncep.edex.util.UtilN; + +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Scanner; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import com.raytheon.edex.esb.Headers; +import com.raytheon.edex.exception.DecoderException; +import com.raytheon.edex.plugin.AbstractDecoder; +import com.raytheon.uf.common.dataplugin.PluginDataObject; +import com.raytheon.uf.common.dataplugin.PluginException; +import com.raytheon.uf.edex.decodertools.core.IDecoderConstants; +import com.raytheon.uf.edex.decodertools.time.TimeTools; + +public class AirmetDecoder extends AbstractDecoder { + + private final String pluginName; + + /** + * Constructor + * + * @param name + * The name (usually pluginName) for this decoder. + * @throws DecoderException + */ + public AirmetDecoder(String name) throws DecoderException { + pluginName = name; + } + + /** + * + * @param data + * @param headers + * @return + * @throws DecoderException + */ + public PluginDataObject[] decode(byte[] data, Headers headers) + throws DecoderException { + + String traceId = ""; + if (headers != null) { + traceId = (String) headers.get("traceId"); + } + + String sectionDelim = "OTLK|AIRMET IFR|AIRMET MTN OBSCN|AIRMET TURB|AIRMET ICE|AIRMET STG SFC WNDS|LLWS POTENTIAL]"; + String etx = IDecoderConstants.ETX; + String theBulletin = null; + + Calendar startTime = null; + byte[] messageData = null; + + AirmetRecord record = null; + // Default equal to six hours from start time if there is no valid time + // in report + final int validPeriod = 6; + + AirmetSeparator sep = AirmetSeparator.separate(data, headers); + messageData = sep.next(); + String theMessage = new String(messageData); + + /* + * May have multiple duplicate bulletins, only get the first bulletin + * and eliminate the remaining bulletins after the first bulletin. + */ + Scanner cc = new Scanner(theMessage).useDelimiter(etx); + if (cc.hasNext()) { + theBulletin = cc.next(); + } else { + theBulletin = theMessage; + } + + // record = new AirmetRecord(); + // Decode and set WMO line + record = AirmetParser.processWMO(theBulletin, headers); + + Calendar issueTime = record.getIssueTime(); + + // Decode the reportName: ZULU, TANGO, or SIERRA + String reportName = AirmetParser.getReportName(theBulletin); + + /* + * Check the Airmet record object. If not, throws exception. + */ + if (record != null) { + record.setTraceId(traceId); + record.setPluginName(pluginName); + record.setReportType(pluginName); + record.setReportName(reportName); + // Decode and set the update number + record.setUpdateNumber(AirmetParser.getUpdateNumber(theBulletin)); + try { + record.constructDataURI(); + } catch (PluginException e) { + logger.error("Error constructing dataURI", e); + } + } + + if (record != null) { + try { + // Replace special characters to a blank so that it may be + // readable + record.setBullMessage(UtilN + .removeLeadingWhiteSpaces((theBulletin.substring(5)) + .replace('\036', ' ').replace('\r', ' ') + .replace('\003', ' ').replace('\000', ' ') + .replace('\001', ' '))); + + // Decode the starting time + startTime = AirmetParser.getStartTime(theBulletin, headers); + if (startTime == null) { + startTime = issueTime; + } + + // Decode the end time + Calendar endTime = AirmetParser + .getEndTime(theBulletin, headers); + if (endTime == null) { + /* + * if no end time available, end time will be the start time + * plus a valid period; the default is six hours for now. + */ + endTime = startTime; + endTime.add(Calendar.HOUR, validPeriod); + } + + Calendar validStartTime = TimeTools.copy(endTime); + validStartTime.add(Calendar.HOUR, -validPeriod); + + // Airmet report valid time lasts only six hours from start to + // end + if (startTime.before(validStartTime)) { + startTime = validStartTime; + } + + // Decode the correction flag and set + record.setCorrectionFlag(AirmetParser + .getCorrectionFlag(theBulletin)); + + /* + * Break the bulletin message into sections by a "OTLK" or + * "AIRMET [IFR|MTN OBSCN|TURB|ICE|STG SFC WNDS|LLWS PTENTIAL]". + */ + Scanner sc = new Scanner(theBulletin) + .useDelimiter(sectionDelim); + + ArrayList segmentList = new ArrayList(); + segmentList.clear(); + // throw away the prefix section + String segPrefix = sc.next(); + + while (sc.hasNext()) { + String segment = sc.next(); + segmentList.add(segment); + } + + if (segmentList.size() == 0) { + // This is NIL/EXPIRE AIRMET report containing header only. + record.setCorrectionFlag(4); + } else { + /* + * Process each report. + */ + Integer series = 1; + // Get forecastRegion + String forecastRegion = AirmetParser.getRegion(reportName); + // Get valid day + String validDay = AirmetParser.getValidDay(theBulletin); + + // System.out.println("Process a report=\n" + segment); + for (String segment : segmentList) { + // starts a new section + Scanner sc2 = new Scanner(segment); + String whatReport = sc2.next(); + + if (whatReport.equals("VALID")) { + segment = "OTLK".concat(segment); + + // process this section which starts with + // "OTLK VALID". + Scanner scOutlook = new Scanner(segment) + .useDelimiter("AREA "); + ArrayList outlookList = new ArrayList(); + outlookList.clear(); + + // Check if "OUTLOOK" section contains more than one + // "AREA". + while (scOutlook.hasNext()) { + String outlookSegment = scOutlook.next(); + outlookList.add(outlookSegment); + } + + if (outlookList.size() <= 1) { + // only one outlook report + AirmetReport outlook = AirmetParser + .processOutLook(segment, forecastRegion); + AirmetParser.processValidTime(segment, outlook, + validDay, headers); + record.addAirmetReport(outlook); + } else { + /* + * Here are more than one outlook areas Store + * the header section and remove it from the + * outlook list + */ + String outlookHeader = outlookList.get(0); + outlookList.remove(outlookHeader); + // process multiple outlook sections + for (String outlookReport : outlookList) { + outlookReport = outlookHeader.concat( + "AREA ").concat(outlookReport); + AirmetReport outlook = AirmetParser + .processOutLook(outlookReport, + forecastRegion); + AirmetParser.processValidTime( + outlookReport, outlook, validDay, + headers); + record.addAirmetReport(outlook); + } + } + } else { + // Regular expression AIRMET report + final String HAZARD_EXP = "(ICE|TURB|CIG BLW|VIS BLW|MTNS|LLWS|SUSTAINED) "; + + // Pattern used for extracting hazard + final Pattern hazardTypePattern = Pattern + .compile(HAZARD_EXP); + Matcher theMatcher = hazardTypePattern + .matcher(segment); + + if (theMatcher.find()) { + // prefix the report type + if (theMatcher.group(1).equals("ICE")) { + segment = "AIRMET ICE".concat(segment); + } else if (theMatcher.group(1).equals("TURB")) { + segment = "AIRMET TURB".concat(segment); + } else if (theMatcher.group(1) + .equals("CIG BLW")) { + segment = "AIRMET IFR".concat(segment); + } else if (theMatcher.group(1) + .equals("VIS BLW")) { + segment = "AIRMET IFR".concat(segment); + } else if (theMatcher.group(1).equals("MTNS")) { + segment = "AIRMET MTN OBSCN" + .concat(segment); + } else if (theMatcher.group(1).equals( + "SUSTAINED")) { + segment = "AIRMET STG SFC WNDS" + .concat(segment); + } else if (theMatcher.group(1).equals("LLWS")) { + segment = "LLWS POTENTIAL".concat(segment); + } + } + + // process this report which starts with "AIRMET" or + // "LLWS". + AirmetReport report = AirmetParser + .processReport(segment); + if (report != null) { + // Decode and set the sequenceID + report.setSequenceID(AirmetParser + .getSequenceID(theBulletin, series)); + report.setStartTime(startTime); + report.setEndTime(endTime); + record.addAirmetReport(report); + } else { + logger.error("Error decoding segment " + + segment); + } + } + series++; + } + } + + } catch (Exception e) { + logger.error("Error postprocessing airmet", e); + record = null; + } + } + + /* + * Return the AirmetRecord record object. + */ + if (record == null) { + return new PluginDataObject[0]; + } else { + return new PluginDataObject[] { record }; + } + + } + +} diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.airmet/src/gov/noaa/nws/ncep/edex/plugin/airmet/decoder/AirmetSeparator.java b/ncep/gov.noaa.nws.ncep.edex.plugin.airmet/src/gov/noaa/nws/ncep/edex/plugin/airmet/decoder/AirmetSeparator.java index 9633eb542d..af210f86ed 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.airmet/src/gov/noaa/nws/ncep/edex/plugin/airmet/decoder/AirmetSeparator.java +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.airmet/src/gov/noaa/nws/ncep/edex/plugin/airmet/decoder/AirmetSeparator.java @@ -1,138 +1,138 @@ -/** - * AirmetSeparator - * - * This class sets the raw data to an Arraylist, records, of - * String based on a uniquely identified separator. - * - *
- * L. Lin                               05/2009         Creation
- * 
- * - * This code has been developed by the SIB for use in the AWIPS system. - */ - -package gov.noaa.nws.ncep.edex.plugin.airmet.decoder; - -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; -import java.util.NoSuchElementException; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - -import com.raytheon.edex.esb.Headers; -import com.raytheon.edex.plugin.AbstractRecordSeparator; -import com.raytheon.edex.util.Util; - -public class AirmetSeparator extends AbstractRecordSeparator { - private final Log logger = LogFactory.getLog(getClass()); - - /** Regex used for separate the bulletins */ - private static final String BULLSEPARATOR = "([0-9]{3})( )*\\x0d\\x0d\\x0a([A-Z]{4}[0-9]{2}) ([A-Z]{4}) ([0-9]{6})( [A-Z]{3})?\\x0d\\x0d\\x0a"; - - /** Regex matcher */ - private Matcher matcher; - - /** Pattern object for regex search */ - private Pattern pattern; - - /** List of records contained in file */ - private List records; - - private Iterator iterator = null; - - /** - * Constructor. - * - */ - public AirmetSeparator() { - records = new ArrayList(); - } - - public static AirmetSeparator separate(byte[] data, Headers headers) { - AirmetSeparator ds = new AirmetSeparator(); - ds.setData(data, headers); - return ds; - } - - public void setData(byte[] data, Headers headers) { - doSeparate(new String(data)); - iterator = records.iterator(); - } - - /* - * (non-Javadoc) - * - * @see com.raytheon.edex.plugin.IRecordSeparator#hasNext() - */ - public boolean hasNext() { - if (iterator == null) { - return false; - } else { - return iterator.hasNext(); - } - } - - /** - * Get record - */ - public byte[] next() { - try { - String temp = iterator.next(); - if (Util.isEmptyString(temp)) { - return (byte[]) null; - } else { - return temp.getBytes(); - } - } catch (NoSuchElementException e) { - return (byte[]) null; - } - } - - /** - * @param message - * separate bulletins - */ - private void doSeparate(String message) { - /* Regex used for separate the bulletins */ - - try { - pattern = Pattern.compile(BULLSEPARATOR); - matcher = pattern.matcher(message); - - /* - * Set number of bulletins to records only if the bulletin separator - * is not the same. At the point, only separators are stored in - * "records" - */ - while (matcher.find()) { - if (!records.contains(matcher.group())) { - records.add(matcher.group()); - } - } - - /* - * Append the raw data file to the records. - */ - for (int i = 0; i < records.size(); i++) { - if (i < records.size() - 1) { - records.set(i, "\n" - + message.substring( - message.indexOf(records.get(i)), message - .indexOf(records.get(i + 1)))); - } else { - records - .set(i, "\n" - + message.substring(message.indexOf(records - .get(i)))); - } - } - } catch (Exception e) { - logger.warn("No valid records found!", e); - } - return; - } -} +/** + * AirmetSeparator + * + * This class sets the raw data to an Arraylist, records, of + * String based on a uniquely identified separator. + * + *
+ * L. Lin                               05/2009         Creation
+ * 
+ * + * This code has been developed by the SIB for use in the AWIPS system. + */ + +package gov.noaa.nws.ncep.edex.plugin.airmet.decoder; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; +import java.util.NoSuchElementException; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import com.raytheon.edex.esb.Headers; +import com.raytheon.edex.plugin.AbstractRecordSeparator; +import com.raytheon.edex.util.Util; + +public class AirmetSeparator extends AbstractRecordSeparator { + private final Log logger = LogFactory.getLog(getClass()); + + /** Regex used for separate the bulletins */ + private static final String BULLSEPARATOR = "([0-9]{3})( )*\\x0d\\x0d\\x0a([A-Z]{4}[0-9]{2}) ([A-Z]{4}) ([0-9]{6})( [A-Z]{3})?\\x0d\\x0d\\x0a"; + + /** Regex matcher */ + private Matcher matcher; + + /** Pattern object for regex search */ + private Pattern pattern; + + /** List of records contained in file */ + private List records; + + private Iterator iterator = null; + + /** + * Constructor. + * + */ + public AirmetSeparator() { + records = new ArrayList(); + } + + public static AirmetSeparator separate(byte[] data, Headers headers) { + AirmetSeparator ds = new AirmetSeparator(); + ds.setData(data, headers); + return ds; + } + + public void setData(byte[] data, Headers headers) { + doSeparate(new String(data)); + iterator = records.iterator(); + } + + /* + * (non-Javadoc) + * + * @see com.raytheon.edex.plugin.IRecordSeparator#hasNext() + */ + public boolean hasNext() { + if (iterator == null) { + return false; + } else { + return iterator.hasNext(); + } + } + + /** + * Get record + */ + public byte[] next() { + try { + String temp = iterator.next(); + if (Util.isEmptyString(temp)) { + return (byte[]) null; + } else { + return temp.getBytes(); + } + } catch (NoSuchElementException e) { + return (byte[]) null; + } + } + + /** + * @param message + * separate bulletins + */ + private void doSeparate(String message) { + /* Regex used for separate the bulletins */ + + try { + pattern = Pattern.compile(BULLSEPARATOR); + matcher = pattern.matcher(message); + + /* + * Set number of bulletins to records only if the bulletin separator + * is not the same. At the point, only separators are stored in + * "records" + */ + while (matcher.find()) { + if (!records.contains(matcher.group())) { + records.add(matcher.group()); + } + } + + /* + * Append the raw data file to the records. + */ + for (int i = 0; i < records.size(); i++) { + if (i < records.size() - 1) { + records.set(i, "\n" + + message.substring( + message.indexOf(records.get(i)), message + .indexOf(records.get(i + 1)))); + } else { + records + .set(i, "\n" + + message.substring(message.indexOf(records + .get(i)))); + } + } + } catch (Exception e) { + logger.warn("No valid records found!", e); + } + return; + } +} diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.airmet/src/gov/noaa/nws/ncep/edex/plugin/airmet/decoder/package-info.java b/ncep/gov.noaa.nws.ncep.edex.plugin.airmet/src/gov/noaa/nws/ncep/edex/plugin/airmet/decoder/package-info.java index 319b08dcd8..248a770b81 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.airmet/src/gov/noaa/nws/ncep/edex/plugin/airmet/decoder/package-info.java +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.airmet/src/gov/noaa/nws/ncep/edex/plugin/airmet/decoder/package-info.java @@ -1,4 +1,4 @@ -/** -* Contains decoder.java for decoder plug-ins -*/ -package gov.noaa.nws.ncep.edex.plugin.airmet.decoder;; +/** +* Contains decoder.java for decoder plug-ins +*/ +package gov.noaa.nws.ncep.edex.plugin.airmet.decoder;; diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.airmet/src/gov/noaa/nws/ncep/edex/plugin/airmet/util/AirmetParser.java b/ncep/gov.noaa.nws.ncep.edex.plugin.airmet/src/gov/noaa/nws/ncep/edex/plugin/airmet/util/AirmetParser.java index 6ad1b03f3f..990c6c035f 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.airmet/src/gov/noaa/nws/ncep/edex/plugin/airmet/util/AirmetParser.java +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.airmet/src/gov/noaa/nws/ncep/edex/plugin/airmet/util/AirmetParser.java @@ -1,682 +1,682 @@ -/** - * Airmet DecoderUtil - * - * This java class intends to serve as a decoder utility for AIRMET. - * - * HISTORY - * - * Date Ticket# Engineer Description - * ------------ ---------- ----------- -------------------------- - * 05/2009 39 L. Lin Initial coding - * 07/2009 39 L. Lin Migration to TO11 - * 09/2009 39 L. Lin Add latitude/longitude to location table - * - * - * This code has been developed by the SIB for use in the AWIPS2 system. - * @author L. Lin - * @version 1.0 - */ - -package gov.noaa.nws.ncep.edex.plugin.airmet.util; - -import gov.noaa.nws.ncep.common.dataplugin.airmet.AirmetLocation; -import gov.noaa.nws.ncep.common.dataplugin.airmet.AirmetRecord; -import gov.noaa.nws.ncep.common.dataplugin.airmet.AirmetReport; -import gov.noaa.nws.ncep.edex.tools.decoder.LatLonLocTbl; -import gov.noaa.nws.ncep.edex.util.UtilN; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Calendar; -import java.util.Scanner; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - -import com.raytheon.edex.esb.Headers; -import com.raytheon.uf.common.time.DataTime; -import com.raytheon.uf.edex.decodertools.core.LatLonPoint; -import com.raytheon.uf.edex.decodertools.time.TimeTools; - -public class AirmetParser { - - public static final Log logger = LogFactory.getLog(AirmetParser.class); - - /** - * Constructor - */ - public AirmetParser() { - } - - /** - * Parse the WMO line and store WMO header, OfficeID, issue time, - * designatorBBB,... - * - * @param wmoline - * The bulletin message - * - * @return an AirmetRecord - */ - public static AirmetRecord processWMO(String wmoline, Headers headers) { - - AirmetRecord record = null; - // Regular expression for WMO/ICAO, station ID, and issue date (and - // maybe designator BBB) - final String WMO_EXP = "([A-Z]{4}[0-9]{2}) ([A-Z]{4}) ([0-9]{6})( ([A-Z]{3}))?"; - - // Pattern used for extracting WMO header, officeID, product purge time, - // and issue date and designatorBBB - final Pattern wmoPattern = Pattern.compile(WMO_EXP); - Matcher theMatcher = wmoPattern.matcher(wmoline); - - if (theMatcher.find()) { - record = new AirmetRecord(); - - record.setWmoHeader(theMatcher.group(1)); - record.setIssueOffice(theMatcher.group(2)); - record.setDesignatorBBB(theMatcher.group(5)); - - // Decode the issue time. - Calendar issueTime = TimeTools.findDataTime(theMatcher.group(3), headers); - - record.setIssueTime(issueTime); - DataTime dataTime = new DataTime(issueTime); - record.setDataTime(dataTime); - } - return record; - } - - /** - * Obtains reportName as: SIERRA, TANGO or ZULU from a bulletin. - * - * @param bullMessage - * The bulletin message - * @return a string for report type - */ - public static String getReportName(String bullMessage) { - - // Regular expression AIRMET reportName - final String REPORTNAME_EXP = "AIRMET (SIERRA|TANGO|ZULU) "; - - // Pattern used for extracting reportName - final Pattern reportNamePattern = Pattern.compile(REPORTNAME_EXP); - Matcher theMatcher = reportNamePattern.matcher(bullMessage); - - if (theMatcher.find()) { - return theMatcher.group(1); - } else { - return " "; - } - } - - /** - * Obtains updateNumber from a bulletin. - * - * @param bullMessage - * The bulletin message - * @return an integer for update number - */ - public static Integer getUpdateNumber(String bullMessage) { - // default update number - Integer retUpdate = 0; - - // Regular expression update number - final String UPDATE_EXP = "AIRMET (SIERRA|TANGO|ZULU) UPDT ([0-9]{1}) "; - - // Pattern used for extracting update number - final Pattern updatePattern = Pattern.compile(UPDATE_EXP); - Matcher theMatcher = updatePattern.matcher(bullMessage); - - if (theMatcher.find()) { - return Integer.parseInt(theMatcher.group(2).substring(0, 1).trim()); - } else { - return retUpdate; - } - } - - /** - * Obtains correctionFlag from a report - * - * @param bullMessage - * The bulletin message - * @return an integer for correctionFlag 0 for normal, 1 for COR or CC, 2 - * for AMD, 3 for TEST, and 4 for NIL/EXPIRE report - */ - public static Integer getCorrectionFlag(String bullMessage) { - - Integer retCorrection = 0; - - // Regular expression correction - final String CORRECTION_EXP = "(\\x1e)([A-Z]{4}) ([A-Z]{2}) ([0-9]{6}) ([A-Z]{3})"; - - // Pattern used for extracting correctionFlag - final Pattern correctionPattern = Pattern.compile(CORRECTION_EXP); - Matcher theMatcher = correctionPattern.matcher(bullMessage); - - if (theMatcher.find()) { - if (theMatcher.group(5).equals("COR")) { - retCorrection = 1; - } else if (theMatcher.group(5).equals("AMD")) { - retCorrection = 2; - } else if ((theMatcher.group(5).substring(0, 2)).equals("CC")) { - retCorrection = 1; - } - } - - // Regular expression TEST message - final String TEST_EXP = " TEST "; - // Pattern used for extracting TEST message - final Pattern testPattern = Pattern.compile(TEST_EXP); - Matcher testMatcher = testPattern.matcher(bullMessage); - if (testMatcher.find()) { - retCorrection = 3; - } - - return retCorrection; - } - - /** - * Obtains cancelFlag from a report - * - * @param bullMessage - * The bulletin message - * @return an integer for cancelFlag 0 for normal and 1 for cancel - */ - public static Integer getCancelFlag(String report) { - - Integer retCancel = 0; - - // Regular expression cancelFlag - final String CANCEL_EXP = "(CANCEL|CNCL) AIRMET"; - - // Pattern used for extracting cancel - final Pattern cancelPattern = Pattern.compile(CANCEL_EXP); - Matcher theMatcher = cancelPattern.matcher(report); - - if (theMatcher.find()) { - retCancel = 1; - } - return retCancel; - } - - /** - * Obtains hazardType as: IFR (instrument flight rules), MO (mountain - * obscuration), TB (turbulence), IC (icing), SW (sustained winds), or WS - * (low level wind shear) from a report. - * - * @param theReport - * Input report message. - * @return a string for class type - */ - public static String getHazardType(String theReport) { - - String retHazardType = " "; - // Regular expression AIRMET classType - final String HAZARDTYPE_EXP = "AIRMET (IFR|MTN OBSCN|TURB|ICE|STG SFC WNDS)"; - final String TYPE2_EXP = "(LLWS POTENTIAL)"; - final String TYPE3_EXP = "(ICE|TURB|CIG BLW|VIS BLW|MTNS|LLWS|SUSTAINED)"; - final String TYPE4_EXP = "(CANCEL|CNCL)"; - - // Pattern used for extracting hazardType - final Pattern classTypePattern = Pattern.compile(HAZARDTYPE_EXP); - final Pattern type2Pattern = Pattern.compile(TYPE2_EXP); - final Pattern type3Pattern = Pattern.compile(TYPE3_EXP); - final Pattern type4Pattern = Pattern.compile(TYPE4_EXP); - - Matcher theMatcher = classTypePattern.matcher(theReport); - Matcher type2Matcher = type2Pattern.matcher(theReport); - Matcher type3Matcher = type3Pattern.matcher(theReport); - Matcher type4Matcher = type4Pattern.matcher(theReport); - - if (theMatcher.find()) { - if (theMatcher.group(1).equals("IFR")) { - retHazardType = "INSTRUMENT FLIGHT RULES"; - } else if (theMatcher.group(1).equals("MTN OBSCN")) { - retHazardType = "MOUNTAIN OBSCURATION"; - } else if (theMatcher.group(1).equals("TURB")) { - retHazardType = "TURBULENCE"; - } else if (theMatcher.group(1).equals("ICE")) { - retHazardType = "ICING"; - } else if (theMatcher.group(1).equals("STG SFC WNDS")) { - retHazardType = "SUSTAINED SFC WINDS"; - } - } else if (type2Matcher.find()) { - if (type2Matcher.group(1).equals("LLWS")) { - retHazardType = "LOW LEVEL WIND SHEAR"; - } - } else if (type3Matcher.find()) { - if (type3Matcher.group(1).equals("ICE")) { - retHazardType = "ICING"; - } else if (type3Matcher.group(1).equals("TURB")) { - retHazardType = "TURBULENCE"; - } else if (type3Matcher.group(1).equals("CIG BLW")) { - retHazardType = "INSTRUMENT FLIGHT RULES"; - } else if (type3Matcher.group(1).equals("VIS BLW")) { - retHazardType = "INSTRUMENT FLIGHT RULES"; - } else if (type3Matcher.group(1).equals("MTNS")) { - retHazardType = "MOUNTAIN OBSCURATION"; - } else if (type3Matcher.group(1).equals("LLWS")) { - retHazardType = "LOW LEVEL WIND SHEAR"; - } else if (type3Matcher.group(1).equals("SUSTAINED")) { - retHazardType = "SUSTAINED SFC WINDS"; - } - } else if (type4Matcher.find()) { - retHazardType = "CANCEL"; - } - - return retHazardType; - } - - /** - * Obtains forecast region as: S for SIERRA, T for TANGO or Z for ZULU from - * an AirmetRecord. - * - * @param record - * The AirmetRecord - * @return a string for forecast region - */ - public static String getRegion(String reportName) { - - String retRegion = null; - String forecastRegion = reportName; - - if (forecastRegion.equals("SIERRA")) { - retRegion = "S"; - } else if (forecastRegion.equals("TANGO")) { - retRegion = "T"; - } else if (forecastRegion.equals("ZULU")) { - retRegion = "Z"; - } - return retRegion; - } - - /** - * process regular section of an AIRMET report - * - * @param theReport - * The reports from bulletin message - * @return an AirmetReport table - */ - public static AirmetReport processReport(String theReport) { - - // Regular expression for flight levels - final String FLIGHT_EXP = " (BTN) (FL)?(FRZLVL|[0-9]{3})( AND |-)FL([0-9]{3})"; - final String BLW_EXP = " (BLW) FL([0-9]{3})"; - - // Pattern used for extracting flight levels - final Pattern flightPattern = Pattern.compile(FLIGHT_EXP); - final Pattern blwPattern = Pattern.compile(BLW_EXP); - - Matcher flightMatcher = flightPattern.matcher(theReport); - Matcher blwMatcher = blwPattern.matcher(theReport); - - AirmetReport currentReport = new AirmetReport(); - // Find and set the flight levels. - if (flightMatcher.find()) { - if (flightMatcher.group(1).equals("BTN")) { - if ((flightMatcher.group(3).equals("FRZLVL"))) { - currentReport.setFlightLevel1("FRZLVL"); - } else { - currentReport.setFlightLevel1(flightMatcher.group(3) - .toString()); - } - currentReport - .setFlightLevel2(flightMatcher.group(5).toString()); - } - } else if (blwMatcher.find()) { - currentReport.setFlightLevel2(blwMatcher.group(2).toString()); - } - // Get and set reportType - currentReport.setHazardType(getHazardType(theReport)); - - // Set reportIndicator - currentReport.setReportIndicator("AIRMET"); - - // Get and set cancel flag - currentReport.setCancelFlag(AirmetParser.getCancelFlag(theReport)); - - // Replace the special characters - currentReport.setSegment(theReport.replace('\r', ' ') - .replace('\036', ' ').replace('\003', ' ').replace('\000', ' ') - .replace('\001', ' ')); - - // Decode the locations - if (!AirmetParser.processLocation(theReport, currentReport)) { - currentReport = null; - } - - return currentReport; - } - - /** - * process the outlook of an AIRMET report. - * - * @param theOutlook - * The outlook section lines from bulletin message - * @return an AirmetReport table - */ - public static AirmetReport processOutLook(String theOutlook, - String forecastRegion) { - - AirmetReport currentOutLook = new AirmetReport(); - - currentOutLook.setSegment(theOutlook.replace('\r', ' ') - .replace('\036', ' ').replace('\003', ' ').replace('\000', ' ') - .replace('\001', ' ')); - - // Get and set hazard type - currentOutLook.setHazardType(getHazardType(theOutlook)); - // Set report indicator. - currentOutLook.setReportIndicator("OUTLOOK"); - - // Decode locations - if (AirmetParser.processLocation(theOutlook, currentOutLook)) { - final String SID_EXP = "AREA ([0-9]{1})"; - - // Pattern used for extracting the number of sequence ID. - final Pattern sidPattern = Pattern.compile(SID_EXP); - - Matcher theMatcher = sidPattern.matcher(theOutlook); - - // Default sequenceID as: 1S, 1T, or 1Z if locations have been - // found. - String sequenceID = "1".concat(forecastRegion); - if (theMatcher.find()) { - // Multiple areas such as: "AREA 1", "AREA 2", ...etc - sequenceID = theMatcher.group(1).concat(forecastRegion); - } - currentOutLook.setSequenceID(sequenceID); - } else { - // Default sequenceID as: 0W, 0C, or 0E if outlook section is a NIL - // report. - String sequenceID = "0".concat(forecastRegion); - currentOutLook.setSequenceID(sequenceID); - } - - // Get and set cancel flag - currentOutLook.setCancelFlag(AirmetParser.getCancelFlag(theOutlook)); - - return currentOutLook; - } - - /** - * Obtains start time from input bulletin. - * - * @param theReport - * The bulletin message - * @return a calendar for start time - */ - public static Calendar getStartTime(String theBulletin, Headers headers) { - - // Regular expression for start time - final String STARTTIME_EXP = "(\\x1e)([A-Z]{4}) ([A-Z]{2}) ([0-9]{6})( [A-Z]{3})?"; - - // Pattern used for extracting the starting time - final Pattern starttimePattern = Pattern.compile(STARTTIME_EXP); - - // Calendar mndTime = Calendar.getInstance(); - - Matcher theMatcher = starttimePattern.matcher(theBulletin); - - if (theMatcher.find()) { - // Get start time - return TimeTools.findDataTime(theMatcher.group(4), headers); - } else { - return null; - } - } - - /** - * Obtains the valid day from input bulletin. - * - * @param theBulletin - * The input bulletin - * @return a string for valid day. - */ - public static String getValidDay(String theBulletin) { - - // Regular expression for the day - final String DAY_EXP = " VALID UNTIL ([0-9]{2})([0-9]{4})"; - // Pattern used for extracting the day - final Pattern dayPattern = Pattern.compile(DAY_EXP); - Matcher theMatcher = dayPattern.matcher(theBulletin); - - String retDay; - - // Get sequence number according to 4-digit of valid time - if (theMatcher.find()) { - retDay = theMatcher.group(1); - } else { - Calendar cal = Calendar.getInstance(); - retDay = Integer.toString(cal.get(Calendar.DAY_OF_MONTH)); - } - return retDay; - } - - /** - * Obtains the sequence ID which is composed by an identifier, a sequence - * number and a series number. - * - * @param theBulletin - * The input bulletin - * @param series - * the series number of the report - * @return a string for sequence ID - */ - public static String getSequenceID(String theBulletin, Integer series) { - - // Regular expression for the sequence number - final String SEQUENCEID_EXP = " VALID UNTIL ([0-9]{2})([0-9]{4})"; - // Pattern used for extracting the sequence number - final Pattern idPattern = Pattern.compile(SEQUENCEID_EXP); - Matcher theMatcher = idPattern.matcher(theBulletin); - - Integer timeGroup; - String seqNumber; - String identifier = "???"; - // Get sequence number according to 4-digit of valid time - if (theMatcher.find()) { - timeGroup = Integer.parseInt(theMatcher.group(2)); - if (timeGroup == 800 | timeGroup == 900) { - seqNumber = "0"; - } else if (timeGroup == 1400 | timeGroup == 1500) { - seqNumber = "2"; - } else if (timeGroup == 2000 | timeGroup == 2100) { - seqNumber = "4"; - } else if (timeGroup == 200 | timeGroup == 300) { - seqNumber = "6"; - } else { - seqNumber = "8"; - } - } else { - seqNumber = "8"; - } - // System.out.println("seqNumber=" + seqNumber); - - // Regular expression for identifier - final String IDENTIFIER_EXP = "([A-Z]{3})(S|Z|T) WA ([0-9]{6})( [A-Z]{3})?"; - ; - // Pattern used for extracting the sequence number - final Pattern identifierPattern = Pattern.compile(IDENTIFIER_EXP); - Matcher idMatcher = identifierPattern.matcher(theBulletin); - // Get identifier - if (idMatcher.find()) { - identifier = idMatcher.group(1); - } - - return identifier.concat(seqNumber).concat(Integer.toString(series)); - } - - /** - * Get the end time - * - * @param theBulletin - * The bulletin which contains end time - * @return a calendar for end time - */ - public static Calendar getEndTime(String theBulletin, Headers headers) { - - // Regular expression for end time - final String ENDTIME_EXP = "VALID UNTIL ([0-9]{6})"; - - // Pattern used for extracting the end time - final Pattern endtimePattern = Pattern.compile(ENDTIME_EXP); - - // Calendar mndTime = Calendar.getInstance(); - - Matcher theMatcher = endtimePattern.matcher(theBulletin); - - if (theMatcher.find()) { - // get the end time. - return TimeTools.findDataTime(theMatcher.group(1), headers); - } else { - return null; - } - } - - /** - * Find and set valid start time and end time for outlook report. - * - * @param theReport - * The outlook section contains the valid times group - */ - public static void processValidTime(String theReport, - AirmetReport currentOutLook, String validDay, Headers headers) { - - // Regular expression for start time - final String TIMES_EXP = "OTLK VALID ([0-9]{4})-([0-9]{4})"; - - // Pattern used for extracting the starting time and end time - final Pattern starttimePattern = Pattern.compile(TIMES_EXP); - - Calendar startTime = null; - Calendar endTime = null; - - Matcher theMatcher = starttimePattern.matcher(theReport); - - if (theMatcher.find()) { - // Decode the start time and end time; then set them. - startTime = TimeTools.findDataTime(validDay.concat(theMatcher.group(1)), - headers); - - currentOutLook.setStartTime(startTime); - endTime = TimeTools.findDataTime(validDay.concat(theMatcher.group(2)), - headers); - - if (endTime.before(startTime)) { - endTime.add(Calendar.DAY_OF_MONTH, 1); - } - currentOutLook.setEndTime(endTime); - } else { - currentOutLook.setStartTime(startTime); - currentOutLook.setEndTime(endTime); - } - - } - - /** - * Parse the location lines and add location table to the report table if - * any - * - * @param theReport - * The report from bulletin message - * @param reportTable - * The report Table - * @return true if finds any location line - */ - public static Boolean processLocation(String theReport, - AirmetReport reportTable) { - - Boolean hasLocationLine = true; - String locationDelimiter = "-| TO "; - - ArrayList terminationList = new ArrayList(); - terminationList.addAll(Arrays.asList(new String[] { "CIG", "MTNS", - "ICE", "MOD", "LLWS", "SUSTAINED", "VIS", "TURB", "CANCEL", - "CNCL" })); - - Scanner scLines = new Scanner(theReport) - .useDelimiter("FROM|BOUNDED BY"); - - LatLonPoint point = null; - - // throws away the first section which is not the "FROM" location - String locationReport = scLines.next(); - - if (scLines.hasNext()) { - locationReport = scLines.next(); - - Scanner scLocationLine = new Scanner(locationReport) - .useDelimiter("\\x0d\\x0d\\x0a"); - String lines = " "; - String curLine = null; - ArrayList locationList = new ArrayList(); - locationList.clear(); - Boolean notBreak = true; - - while (scLocationLine.hasNext() && notBreak) { - // Get next location line - curLine = scLocationLine.next(); - - Scanner scLocationToken = new Scanner(curLine); - if (scLocationToken.hasNext()) { - // Check the first token from each line - String firstToken = scLocationToken.next(); - if (terminationList.contains(firstToken)) { - // terminate - notBreak = false; - break; - } - } - lines = lines.concat(" ").concat(curLine); - } - - // Clean up the leading space - lines = UtilN.removeLeadingWhiteSpaces(lines); - // Parse the location lines by a "-" or "TO" - Scanner scLocation = new Scanner(lines) - .useDelimiter(locationDelimiter); - locationList.clear(); - // Get all locations - while (scLocation.hasNext()) { - locationList.add(scLocation.next()); - } - - // set locations to data base - Integer idxLocation = 0; - if (locationList.size() > 1) { - for (String Location : locationList) { - AirmetLocation currentLocation = new AirmetLocation(); - currentLocation.setLocationLine(lines); - currentLocation.setLocation(Location); - - // Get a latLonPoint for this station ID from "vors" - // location table - point = LatLonLocTbl.getLatLonPoint(Location, "vors"); - if (point == null) { - hasLocationLine = false; - break; - } - currentLocation.setLatitude(point - .getLatitude(LatLonPoint.INDEGREES)); - currentLocation.setLongitude(point - .getLongitude(LatLonPoint.INDEGREES)); - - currentLocation.setIndex(idxLocation + 1); - idxLocation++; - - reportTable.addAirmetLocation(currentLocation); - } - } else { - hasLocationLine = false; - } - - } else { - hasLocationLine = false; - } - - return hasLocationLine; - } -} +/** + * Airmet DecoderUtil + * + * This java class intends to serve as a decoder utility for AIRMET. + * + * HISTORY + * + * Date Ticket# Engineer Description + * ------------ ---------- ----------- -------------------------- + * 05/2009 39 L. Lin Initial coding + * 07/2009 39 L. Lin Migration to TO11 + * 09/2009 39 L. Lin Add latitude/longitude to location table + * + * + * This code has been developed by the SIB for use in the AWIPS2 system. + * @author L. Lin + * @version 1.0 + */ + +package gov.noaa.nws.ncep.edex.plugin.airmet.util; + +import gov.noaa.nws.ncep.common.dataplugin.airmet.AirmetLocation; +import gov.noaa.nws.ncep.common.dataplugin.airmet.AirmetRecord; +import gov.noaa.nws.ncep.common.dataplugin.airmet.AirmetReport; +import gov.noaa.nws.ncep.edex.tools.decoder.LatLonLocTbl; +import gov.noaa.nws.ncep.edex.util.UtilN; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Calendar; +import java.util.Scanner; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import com.raytheon.edex.esb.Headers; +import com.raytheon.uf.common.time.DataTime; +import com.raytheon.uf.edex.decodertools.core.LatLonPoint; +import com.raytheon.uf.edex.decodertools.time.TimeTools; + +public class AirmetParser { + + public static final Log logger = LogFactory.getLog(AirmetParser.class); + + /** + * Constructor + */ + public AirmetParser() { + } + + /** + * Parse the WMO line and store WMO header, OfficeID, issue time, + * designatorBBB,... + * + * @param wmoline + * The bulletin message + * + * @return an AirmetRecord + */ + public static AirmetRecord processWMO(String wmoline, Headers headers) { + + AirmetRecord record = null; + // Regular expression for WMO/ICAO, station ID, and issue date (and + // maybe designator BBB) + final String WMO_EXP = "([A-Z]{4}[0-9]{2}) ([A-Z]{4}) ([0-9]{6})( ([A-Z]{3}))?"; + + // Pattern used for extracting WMO header, officeID, product purge time, + // and issue date and designatorBBB + final Pattern wmoPattern = Pattern.compile(WMO_EXP); + Matcher theMatcher = wmoPattern.matcher(wmoline); + + if (theMatcher.find()) { + record = new AirmetRecord(); + + record.setWmoHeader(theMatcher.group(1)); + record.setIssueOffice(theMatcher.group(2)); + record.setDesignatorBBB(theMatcher.group(5)); + + // Decode the issue time. + Calendar issueTime = TimeTools.findDataTime(theMatcher.group(3), headers); + + record.setIssueTime(issueTime); + DataTime dataTime = new DataTime(issueTime); + record.setDataTime(dataTime); + } + return record; + } + + /** + * Obtains reportName as: SIERRA, TANGO or ZULU from a bulletin. + * + * @param bullMessage + * The bulletin message + * @return a string for report type + */ + public static String getReportName(String bullMessage) { + + // Regular expression AIRMET reportName + final String REPORTNAME_EXP = "AIRMET (SIERRA|TANGO|ZULU) "; + + // Pattern used for extracting reportName + final Pattern reportNamePattern = Pattern.compile(REPORTNAME_EXP); + Matcher theMatcher = reportNamePattern.matcher(bullMessage); + + if (theMatcher.find()) { + return theMatcher.group(1); + } else { + return " "; + } + } + + /** + * Obtains updateNumber from a bulletin. + * + * @param bullMessage + * The bulletin message + * @return an integer for update number + */ + public static Integer getUpdateNumber(String bullMessage) { + // default update number + Integer retUpdate = 0; + + // Regular expression update number + final String UPDATE_EXP = "AIRMET (SIERRA|TANGO|ZULU) UPDT ([0-9]{1}) "; + + // Pattern used for extracting update number + final Pattern updatePattern = Pattern.compile(UPDATE_EXP); + Matcher theMatcher = updatePattern.matcher(bullMessage); + + if (theMatcher.find()) { + return Integer.parseInt(theMatcher.group(2).substring(0, 1).trim()); + } else { + return retUpdate; + } + } + + /** + * Obtains correctionFlag from a report + * + * @param bullMessage + * The bulletin message + * @return an integer for correctionFlag 0 for normal, 1 for COR or CC, 2 + * for AMD, 3 for TEST, and 4 for NIL/EXPIRE report + */ + public static Integer getCorrectionFlag(String bullMessage) { + + Integer retCorrection = 0; + + // Regular expression correction + final String CORRECTION_EXP = "(\\x1e)([A-Z]{4}) ([A-Z]{2}) ([0-9]{6}) ([A-Z]{3})"; + + // Pattern used for extracting correctionFlag + final Pattern correctionPattern = Pattern.compile(CORRECTION_EXP); + Matcher theMatcher = correctionPattern.matcher(bullMessage); + + if (theMatcher.find()) { + if (theMatcher.group(5).equals("COR")) { + retCorrection = 1; + } else if (theMatcher.group(5).equals("AMD")) { + retCorrection = 2; + } else if ((theMatcher.group(5).substring(0, 2)).equals("CC")) { + retCorrection = 1; + } + } + + // Regular expression TEST message + final String TEST_EXP = " TEST "; + // Pattern used for extracting TEST message + final Pattern testPattern = Pattern.compile(TEST_EXP); + Matcher testMatcher = testPattern.matcher(bullMessage); + if (testMatcher.find()) { + retCorrection = 3; + } + + return retCorrection; + } + + /** + * Obtains cancelFlag from a report + * + * @param bullMessage + * The bulletin message + * @return an integer for cancelFlag 0 for normal and 1 for cancel + */ + public static Integer getCancelFlag(String report) { + + Integer retCancel = 0; + + // Regular expression cancelFlag + final String CANCEL_EXP = "(CANCEL|CNCL) AIRMET"; + + // Pattern used for extracting cancel + final Pattern cancelPattern = Pattern.compile(CANCEL_EXP); + Matcher theMatcher = cancelPattern.matcher(report); + + if (theMatcher.find()) { + retCancel = 1; + } + return retCancel; + } + + /** + * Obtains hazardType as: IFR (instrument flight rules), MO (mountain + * obscuration), TB (turbulence), IC (icing), SW (sustained winds), or WS + * (low level wind shear) from a report. + * + * @param theReport + * Input report message. + * @return a string for class type + */ + public static String getHazardType(String theReport) { + + String retHazardType = " "; + // Regular expression AIRMET classType + final String HAZARDTYPE_EXP = "AIRMET (IFR|MTN OBSCN|TURB|ICE|STG SFC WNDS)"; + final String TYPE2_EXP = "(LLWS POTENTIAL)"; + final String TYPE3_EXP = "(ICE|TURB|CIG BLW|VIS BLW|MTNS|LLWS|SUSTAINED)"; + final String TYPE4_EXP = "(CANCEL|CNCL)"; + + // Pattern used for extracting hazardType + final Pattern classTypePattern = Pattern.compile(HAZARDTYPE_EXP); + final Pattern type2Pattern = Pattern.compile(TYPE2_EXP); + final Pattern type3Pattern = Pattern.compile(TYPE3_EXP); + final Pattern type4Pattern = Pattern.compile(TYPE4_EXP); + + Matcher theMatcher = classTypePattern.matcher(theReport); + Matcher type2Matcher = type2Pattern.matcher(theReport); + Matcher type3Matcher = type3Pattern.matcher(theReport); + Matcher type4Matcher = type4Pattern.matcher(theReport); + + if (theMatcher.find()) { + if (theMatcher.group(1).equals("IFR")) { + retHazardType = "INSTRUMENT FLIGHT RULES"; + } else if (theMatcher.group(1).equals("MTN OBSCN")) { + retHazardType = "MOUNTAIN OBSCURATION"; + } else if (theMatcher.group(1).equals("TURB")) { + retHazardType = "TURBULENCE"; + } else if (theMatcher.group(1).equals("ICE")) { + retHazardType = "ICING"; + } else if (theMatcher.group(1).equals("STG SFC WNDS")) { + retHazardType = "SUSTAINED SFC WINDS"; + } + } else if (type2Matcher.find()) { + if (type2Matcher.group(1).equals("LLWS")) { + retHazardType = "LOW LEVEL WIND SHEAR"; + } + } else if (type3Matcher.find()) { + if (type3Matcher.group(1).equals("ICE")) { + retHazardType = "ICING"; + } else if (type3Matcher.group(1).equals("TURB")) { + retHazardType = "TURBULENCE"; + } else if (type3Matcher.group(1).equals("CIG BLW")) { + retHazardType = "INSTRUMENT FLIGHT RULES"; + } else if (type3Matcher.group(1).equals("VIS BLW")) { + retHazardType = "INSTRUMENT FLIGHT RULES"; + } else if (type3Matcher.group(1).equals("MTNS")) { + retHazardType = "MOUNTAIN OBSCURATION"; + } else if (type3Matcher.group(1).equals("LLWS")) { + retHazardType = "LOW LEVEL WIND SHEAR"; + } else if (type3Matcher.group(1).equals("SUSTAINED")) { + retHazardType = "SUSTAINED SFC WINDS"; + } + } else if (type4Matcher.find()) { + retHazardType = "CANCEL"; + } + + return retHazardType; + } + + /** + * Obtains forecast region as: S for SIERRA, T for TANGO or Z for ZULU from + * an AirmetRecord. + * + * @param record + * The AirmetRecord + * @return a string for forecast region + */ + public static String getRegion(String reportName) { + + String retRegion = null; + String forecastRegion = reportName; + + if (forecastRegion.equals("SIERRA")) { + retRegion = "S"; + } else if (forecastRegion.equals("TANGO")) { + retRegion = "T"; + } else if (forecastRegion.equals("ZULU")) { + retRegion = "Z"; + } + return retRegion; + } + + /** + * process regular section of an AIRMET report + * + * @param theReport + * The reports from bulletin message + * @return an AirmetReport table + */ + public static AirmetReport processReport(String theReport) { + + // Regular expression for flight levels + final String FLIGHT_EXP = " (BTN) (FL)?(FRZLVL|[0-9]{3})( AND |-)FL([0-9]{3})"; + final String BLW_EXP = " (BLW) FL([0-9]{3})"; + + // Pattern used for extracting flight levels + final Pattern flightPattern = Pattern.compile(FLIGHT_EXP); + final Pattern blwPattern = Pattern.compile(BLW_EXP); + + Matcher flightMatcher = flightPattern.matcher(theReport); + Matcher blwMatcher = blwPattern.matcher(theReport); + + AirmetReport currentReport = new AirmetReport(); + // Find and set the flight levels. + if (flightMatcher.find()) { + if (flightMatcher.group(1).equals("BTN")) { + if ((flightMatcher.group(3).equals("FRZLVL"))) { + currentReport.setFlightLevel1("FRZLVL"); + } else { + currentReport.setFlightLevel1(flightMatcher.group(3) + .toString()); + } + currentReport + .setFlightLevel2(flightMatcher.group(5).toString()); + } + } else if (blwMatcher.find()) { + currentReport.setFlightLevel2(blwMatcher.group(2).toString()); + } + // Get and set reportType + currentReport.setHazardType(getHazardType(theReport)); + + // Set reportIndicator + currentReport.setReportIndicator("AIRMET"); + + // Get and set cancel flag + currentReport.setCancelFlag(AirmetParser.getCancelFlag(theReport)); + + // Replace the special characters + currentReport.setSegment(theReport.replace('\r', ' ') + .replace('\036', ' ').replace('\003', ' ').replace('\000', ' ') + .replace('\001', ' ')); + + // Decode the locations + if (!AirmetParser.processLocation(theReport, currentReport)) { + currentReport = null; + } + + return currentReport; + } + + /** + * process the outlook of an AIRMET report. + * + * @param theOutlook + * The outlook section lines from bulletin message + * @return an AirmetReport table + */ + public static AirmetReport processOutLook(String theOutlook, + String forecastRegion) { + + AirmetReport currentOutLook = new AirmetReport(); + + currentOutLook.setSegment(theOutlook.replace('\r', ' ') + .replace('\036', ' ').replace('\003', ' ').replace('\000', ' ') + .replace('\001', ' ')); + + // Get and set hazard type + currentOutLook.setHazardType(getHazardType(theOutlook)); + // Set report indicator. + currentOutLook.setReportIndicator("OUTLOOK"); + + // Decode locations + if (AirmetParser.processLocation(theOutlook, currentOutLook)) { + final String SID_EXP = "AREA ([0-9]{1})"; + + // Pattern used for extracting the number of sequence ID. + final Pattern sidPattern = Pattern.compile(SID_EXP); + + Matcher theMatcher = sidPattern.matcher(theOutlook); + + // Default sequenceID as: 1S, 1T, or 1Z if locations have been + // found. + String sequenceID = "1".concat(forecastRegion); + if (theMatcher.find()) { + // Multiple areas such as: "AREA 1", "AREA 2", ...etc + sequenceID = theMatcher.group(1).concat(forecastRegion); + } + currentOutLook.setSequenceID(sequenceID); + } else { + // Default sequenceID as: 0W, 0C, or 0E if outlook section is a NIL + // report. + String sequenceID = "0".concat(forecastRegion); + currentOutLook.setSequenceID(sequenceID); + } + + // Get and set cancel flag + currentOutLook.setCancelFlag(AirmetParser.getCancelFlag(theOutlook)); + + return currentOutLook; + } + + /** + * Obtains start time from input bulletin. + * + * @param theReport + * The bulletin message + * @return a calendar for start time + */ + public static Calendar getStartTime(String theBulletin, Headers headers) { + + // Regular expression for start time + final String STARTTIME_EXP = "(\\x1e)([A-Z]{4}) ([A-Z]{2}) ([0-9]{6})( [A-Z]{3})?"; + + // Pattern used for extracting the starting time + final Pattern starttimePattern = Pattern.compile(STARTTIME_EXP); + + // Calendar mndTime = Calendar.getInstance(); + + Matcher theMatcher = starttimePattern.matcher(theBulletin); + + if (theMatcher.find()) { + // Get start time + return TimeTools.findDataTime(theMatcher.group(4), headers); + } else { + return null; + } + } + + /** + * Obtains the valid day from input bulletin. + * + * @param theBulletin + * The input bulletin + * @return a string for valid day. + */ + public static String getValidDay(String theBulletin) { + + // Regular expression for the day + final String DAY_EXP = " VALID UNTIL ([0-9]{2})([0-9]{4})"; + // Pattern used for extracting the day + final Pattern dayPattern = Pattern.compile(DAY_EXP); + Matcher theMatcher = dayPattern.matcher(theBulletin); + + String retDay; + + // Get sequence number according to 4-digit of valid time + if (theMatcher.find()) { + retDay = theMatcher.group(1); + } else { + Calendar cal = Calendar.getInstance(); + retDay = Integer.toString(cal.get(Calendar.DAY_OF_MONTH)); + } + return retDay; + } + + /** + * Obtains the sequence ID which is composed by an identifier, a sequence + * number and a series number. + * + * @param theBulletin + * The input bulletin + * @param series + * the series number of the report + * @return a string for sequence ID + */ + public static String getSequenceID(String theBulletin, Integer series) { + + // Regular expression for the sequence number + final String SEQUENCEID_EXP = " VALID UNTIL ([0-9]{2})([0-9]{4})"; + // Pattern used for extracting the sequence number + final Pattern idPattern = Pattern.compile(SEQUENCEID_EXP); + Matcher theMatcher = idPattern.matcher(theBulletin); + + Integer timeGroup; + String seqNumber; + String identifier = "???"; + // Get sequence number according to 4-digit of valid time + if (theMatcher.find()) { + timeGroup = Integer.parseInt(theMatcher.group(2)); + if (timeGroup == 800 | timeGroup == 900) { + seqNumber = "0"; + } else if (timeGroup == 1400 | timeGroup == 1500) { + seqNumber = "2"; + } else if (timeGroup == 2000 | timeGroup == 2100) { + seqNumber = "4"; + } else if (timeGroup == 200 | timeGroup == 300) { + seqNumber = "6"; + } else { + seqNumber = "8"; + } + } else { + seqNumber = "8"; + } + // System.out.println("seqNumber=" + seqNumber); + + // Regular expression for identifier + final String IDENTIFIER_EXP = "([A-Z]{3})(S|Z|T) WA ([0-9]{6})( [A-Z]{3})?"; + ; + // Pattern used for extracting the sequence number + final Pattern identifierPattern = Pattern.compile(IDENTIFIER_EXP); + Matcher idMatcher = identifierPattern.matcher(theBulletin); + // Get identifier + if (idMatcher.find()) { + identifier = idMatcher.group(1); + } + + return identifier.concat(seqNumber).concat(Integer.toString(series)); + } + + /** + * Get the end time + * + * @param theBulletin + * The bulletin which contains end time + * @return a calendar for end time + */ + public static Calendar getEndTime(String theBulletin, Headers headers) { + + // Regular expression for end time + final String ENDTIME_EXP = "VALID UNTIL ([0-9]{6})"; + + // Pattern used for extracting the end time + final Pattern endtimePattern = Pattern.compile(ENDTIME_EXP); + + // Calendar mndTime = Calendar.getInstance(); + + Matcher theMatcher = endtimePattern.matcher(theBulletin); + + if (theMatcher.find()) { + // get the end time. + return TimeTools.findDataTime(theMatcher.group(1), headers); + } else { + return null; + } + } + + /** + * Find and set valid start time and end time for outlook report. + * + * @param theReport + * The outlook section contains the valid times group + */ + public static void processValidTime(String theReport, + AirmetReport currentOutLook, String validDay, Headers headers) { + + // Regular expression for start time + final String TIMES_EXP = "OTLK VALID ([0-9]{4})-([0-9]{4})"; + + // Pattern used for extracting the starting time and end time + final Pattern starttimePattern = Pattern.compile(TIMES_EXP); + + Calendar startTime = null; + Calendar endTime = null; + + Matcher theMatcher = starttimePattern.matcher(theReport); + + if (theMatcher.find()) { + // Decode the start time and end time; then set them. + startTime = TimeTools.findDataTime(validDay.concat(theMatcher.group(1)), + headers); + + currentOutLook.setStartTime(startTime); + endTime = TimeTools.findDataTime(validDay.concat(theMatcher.group(2)), + headers); + + if (endTime.before(startTime)) { + endTime.add(Calendar.DAY_OF_MONTH, 1); + } + currentOutLook.setEndTime(endTime); + } else { + currentOutLook.setStartTime(startTime); + currentOutLook.setEndTime(endTime); + } + + } + + /** + * Parse the location lines and add location table to the report table if + * any + * + * @param theReport + * The report from bulletin message + * @param reportTable + * The report Table + * @return true if finds any location line + */ + public static Boolean processLocation(String theReport, + AirmetReport reportTable) { + + Boolean hasLocationLine = true; + String locationDelimiter = "-| TO "; + + ArrayList terminationList = new ArrayList(); + terminationList.addAll(Arrays.asList(new String[] { "CIG", "MTNS", + "ICE", "MOD", "LLWS", "SUSTAINED", "VIS", "TURB", "CANCEL", + "CNCL" })); + + Scanner scLines = new Scanner(theReport) + .useDelimiter("FROM|BOUNDED BY"); + + LatLonPoint point = null; + + // throws away the first section which is not the "FROM" location + String locationReport = scLines.next(); + + if (scLines.hasNext()) { + locationReport = scLines.next(); + + Scanner scLocationLine = new Scanner(locationReport) + .useDelimiter("\\x0d\\x0d\\x0a"); + String lines = " "; + String curLine = null; + ArrayList locationList = new ArrayList(); + locationList.clear(); + Boolean notBreak = true; + + while (scLocationLine.hasNext() && notBreak) { + // Get next location line + curLine = scLocationLine.next(); + + Scanner scLocationToken = new Scanner(curLine); + if (scLocationToken.hasNext()) { + // Check the first token from each line + String firstToken = scLocationToken.next(); + if (terminationList.contains(firstToken)) { + // terminate + notBreak = false; + break; + } + } + lines = lines.concat(" ").concat(curLine); + } + + // Clean up the leading space + lines = UtilN.removeLeadingWhiteSpaces(lines); + // Parse the location lines by a "-" or "TO" + Scanner scLocation = new Scanner(lines) + .useDelimiter(locationDelimiter); + locationList.clear(); + // Get all locations + while (scLocation.hasNext()) { + locationList.add(scLocation.next()); + } + + // set locations to data base + Integer idxLocation = 0; + if (locationList.size() > 1) { + for (String Location : locationList) { + AirmetLocation currentLocation = new AirmetLocation(); + currentLocation.setLocationLine(lines); + currentLocation.setLocation(Location); + + // Get a latLonPoint for this station ID from "vors" + // location table + point = LatLonLocTbl.getLatLonPoint(Location, "vors"); + if (point == null) { + hasLocationLine = false; + break; + } + currentLocation.setLatitude(point + .getLatitude(LatLonPoint.INDEGREES)); + currentLocation.setLongitude(point + .getLongitude(LatLonPoint.INDEGREES)); + + currentLocation.setIndex(idxLocation + 1); + idxLocation++; + + reportTable.addAirmetLocation(currentLocation); + } + } else { + hasLocationLine = false; + } + + } else { + hasLocationLine = false; + } + + return hasLocationLine; + } +} diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.airmet/src/gov/noaa/nws/ncep/edex/plugin/airmet/util/package-info.java b/ncep/gov.noaa.nws.ncep.edex.plugin.airmet/src/gov/noaa/nws/ncep/edex/plugin/airmet/util/package-info.java index 8610c59fa0..9e3a2d3ca7 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.airmet/src/gov/noaa/nws/ncep/edex/plugin/airmet/util/package-info.java +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.airmet/src/gov/noaa/nws/ncep/edex/plugin/airmet/util/package-info.java @@ -1,4 +1,4 @@ -/** -* Contains tools for decoder plug-ins -*/ -package gov.noaa.nws.ncep.edex.plugin.airmet.util; +/** +* Contains tools for decoder plug-ins +*/ +package gov.noaa.nws.ncep.edex.plugin.airmet.util; diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.atcf/gov.noaa.nws.ncep.edex.plugin.atcf.ecl b/ncep/gov.noaa.nws.ncep.edex.plugin.atcf/gov.noaa.nws.ncep.edex.plugin.atcf.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.atcf/src/gov/noaa/nws/ncep/edex/plugin/atcf/decoder/package-info.java b/ncep/gov.noaa.nws.ncep.edex.plugin.atcf/src/gov/noaa/nws/ncep/edex/plugin/atcf/decoder/package-info.java index 8d0596b010..af42c2466d 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.atcf/src/gov/noaa/nws/ncep/edex/plugin/atcf/decoder/package-info.java +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.atcf/src/gov/noaa/nws/ncep/edex/plugin/atcf/decoder/package-info.java @@ -1,7 +1,7 @@ -/** - * SGWH implementation of the plugin pattern. - * - * Package includes classes to decode the ATCF message and persist the data. - * - */ +/** + * SGWH implementation of the plugin pattern. + * + * Package includes classes to decode the ATCF message and persist the data. + * + */ package gov.noaa.nws.ncep.edex.plugin.atcf.decoder; \ No newline at end of file diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.aww/gov.noaa.nws.ncep.edex.plugin.aww.ecl b/ncep/gov.noaa.nws.ncep.edex.plugin.aww/gov.noaa.nws.ncep.edex.plugin.aww.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.aww/src/gov/noaa/nws/ncep/edex/plugin/aww/decoder/package-info.java b/ncep/gov.noaa.nws.ncep.edex.plugin.aww/src/gov/noaa/nws/ncep/edex/plugin/aww/decoder/package-info.java index 19e4ac5b2d..41f6ec50f7 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.aww/src/gov/noaa/nws/ncep/edex/plugin/aww/decoder/package-info.java +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.aww/src/gov/noaa/nws/ncep/edex/plugin/aww/decoder/package-info.java @@ -1,7 +1,7 @@ -/** - * AWW implementation of the plugin pattern. - * - * Package includes classes to decode the AWW message and persist the data. - * - */ +/** + * AWW implementation of the plugin pattern. + * + * Package includes classes to decode the AWW message and persist the data. + * + */ package gov.noaa.nws.ncep.edex.plugin.aww.decoder; \ No newline at end of file diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.convsigmet/gov.noaa.nws.ncep.edex.plugin.convsigmet.ecl b/ncep/gov.noaa.nws.ncep.edex.plugin.convsigmet/gov.noaa.nws.ncep.edex.plugin.convsigmet.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.convsigmet/gov.noaa.nws.ncep.edex.plugin.convsigmet/component-deploy.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.convsigmet/gov.noaa.nws.ncep.edex.plugin.convsigmet/component-deploy.xml index 777cd43ee3..ba134e3ea9 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.convsigmet/gov.noaa.nws.ncep.edex.plugin.convsigmet/component-deploy.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.convsigmet/gov.noaa.nws.ncep.edex.plugin.convsigmet/component-deploy.xml @@ -1,7 +1,7 @@ - - - - - - + + + + + + \ No newline at end of file diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.convsigmet/gov.noaa.nws.ncep.edex.plugin.convsigmet/res/spring/convsigmet-common.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.convsigmet/gov.noaa.nws.ncep.edex.plugin.convsigmet/res/spring/convsigmet-common.xml index 4e0c093444..296212af97 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.convsigmet/gov.noaa.nws.ncep.edex.plugin.convsigmet/res/spring/convsigmet-common.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.convsigmet/gov.noaa.nws.ncep.edex.plugin.convsigmet/res/spring/convsigmet-common.xml @@ -1,26 +1,26 @@ - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.convsigmet/gov.noaa.nws.ncep.edex.plugin.convsigmet/res/spring/convsigmet-ingest.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.convsigmet/gov.noaa.nws.ncep.edex.plugin.convsigmet/res/spring/convsigmet-ingest.xml index 57168d5fda..cc09493589 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.convsigmet/gov.noaa.nws.ncep.edex.plugin.convsigmet/res/spring/convsigmet-ingest.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.convsigmet/gov.noaa.nws.ncep.edex.plugin.convsigmet/res/spring/convsigmet-ingest.xml @@ -1,73 +1,73 @@ - - - - - - - - - - - - - - - - - - - - - - - - - convsigmet - - - - - - - - - - - - - java.lang.Throwable - - - - - - - java.lang.Throwable - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + convsigmet + + + + + + + + + + + + + java.lang.Throwable + + + + + + + java.lang.Throwable + + + + + \ No newline at end of file diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.convsigmet/gov.noaa.nws.ncep.edex.plugin.convsigmet/src/gov/noaa/nws/ncep/edex/plugin/convsigmet/decoder/ConvSigmetDecoder.java b/ncep/gov.noaa.nws.ncep.edex.plugin.convsigmet/gov.noaa.nws.ncep.edex.plugin.convsigmet/src/gov/noaa/nws/ncep/edex/plugin/convsigmet/decoder/ConvSigmetDecoder.java index a36a91d10e..c36de12282 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.convsigmet/gov.noaa.nws.ncep.edex.plugin.convsigmet/src/gov/noaa/nws/ncep/edex/plugin/convsigmet/decoder/ConvSigmetDecoder.java +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.convsigmet/gov.noaa.nws.ncep.edex.plugin.convsigmet/src/gov/noaa/nws/ncep/edex/plugin/convsigmet/decoder/ConvSigmetDecoder.java @@ -1,256 +1,256 @@ -/** - * - * Convective Sigmet Decoder - * - * This java class decodes CONVSIGMET (convective sigmet) raw data. - * HISTORY - * - * Date Ticket# Engineer Description - * ------------ ---------- ----------- -------------------------- - * 03/2009 87/114 L. Lin Initial coding - * 06/2009 87/114 L. Lin Increase size of locationLine and location - * and generalize method "processLocation". - * 07/2009 87/114 L. Lin Migration to TO11 - * 07/2011 87/114 F. J. Yen Fix for RTN TTR 9973--ConvSigmet Decoder Ignoring - * time range--implemented fix from Steven Harris, - * RTN to set the end time range - * - * - * This code has been developed by the SIB for use in the AWIPS2 system. - * @author L. Lin - * @version 1.0 - */ - -package gov.noaa.nws.ncep.edex.plugin.convsigmet.decoder; - -import gov.noaa.nws.ncep.common.dataplugin.convsigmet.ConvSigmetRecord; -import gov.noaa.nws.ncep.common.dataplugin.convsigmet.ConvSigmetSection; -import gov.noaa.nws.ncep.edex.plugin.convsigmet.util.ConvSigmetParser; -import gov.noaa.nws.ncep.edex.util.UtilN; - -import java.util.ArrayList; -import java.util.Calendar; -import java.util.Scanner; - -import com.raytheon.edex.esb.Headers; -import com.raytheon.edex.exception.DecoderException; -import com.raytheon.edex.plugin.AbstractDecoder; -import com.raytheon.uf.common.dataplugin.PluginDataObject; -import com.raytheon.uf.common.dataplugin.PluginException; -import com.raytheon.uf.common.time.DataTime; -import com.raytheon.uf.common.time.TimeRange; -import com.raytheon.uf.edex.decodertools.core.IDecoderConstants; - -public class ConvSigmetDecoder extends AbstractDecoder { - - private final String pluginName; - - /** - * Constructor - * - * @throws DecoderException - */ - public ConvSigmetDecoder(String name) throws DecoderException { - pluginName = name; - } - - public PluginDataObject[] decode(byte[] data, Headers headers) - throws DecoderException { - - String traceId = ""; - if (headers != null) { - traceId = (String) headers.get("traceId"); - } - - String sectionDelim = "OUTLOOK|CONVECTIVE"; - String etx = IDecoderConstants.ETX; - String theBulletin = null; - - String region = null; - Calendar startTime = null; - byte[] messageData = null; - - ConvSigmetRecord record = null; - - ConvSigmetSeparator sep = ConvSigmetSeparator.separate(data, headers); - messageData = sep.next(); - String theMessage = new String(messageData); - - /* - * May have multiple duplicate bulletins, only get the first bulletin - * and eliminate the remaining bulletins after the first bulletin. - */ - Scanner cc = new Scanner(theMessage).useDelimiter(etx); - if (cc.hasNext()) { - theBulletin = cc.next(); - } else { - theBulletin = theMessage; - } - - // record = new ConvsigmetRecord(); - // Decode and set WMO line - record = ConvSigmetParser.processWMO(theBulletin, headers); - - // Decode the forecast region such as: W, C, or E - region = ConvSigmetParser.processFcstRegion(theBulletin); - String forecastRegion = "SIG".concat(region); - - /* - * Check the Convsigmet record object. If not, throws exception. - */ - if (record != null) { - record.setTraceId(traceId); - record.setPluginName(pluginName); - record.setReportType(pluginName); - record.setForecastRegion(forecastRegion); - try { - record.constructDataURI(); - } catch (PluginException e) { - logger.error("Error constructing dataURI", e); - record = null; - } - } - - if (record != null) { - try { - // Replace special characters to a blank so that it may be - // readable - record.setBullMessage(UtilN - .removeLeadingWhiteSpaces((theBulletin.substring(5)) - .replace('\036', ' ').replace('\r', ' ') - .replace('\003', ' ').replace('\000', ' ') - .replace('\001', ' '))); - - // Decode the starting time - startTime = ConvSigmetParser.processStartTime(theBulletin, - headers); - - // Decode the correction flag and set - Boolean correctionFlag = ConvSigmetParser - .processCorrectionFlag(theBulletin); - Integer correction = 0; - if (correctionFlag) { - correction = 1; - } - record.setCorrectionFlag(correction); - - /* - * Break the bulletin message into sections by a "OUTLOOK" or - * "CONVECTIVE". - */ - Scanner sc = new Scanner(theBulletin) - .useDelimiter(sectionDelim); - - ArrayList segmentList = new ArrayList(); - segmentList.clear(); - while (sc.hasNext()) { - String segment = sc.next(); - segmentList.add(segment); - } - - Calendar issueTime = record.getIssueTime(); - /* - * process each section in a order of section and location line - */ - Calendar min = null; - Calendar max = null; - for (String segment : segmentList) { - - // starts a new section - Scanner sc2 = new Scanner(segment); - String whatSection = sc2.next(); - if (whatSection.equals("SIGMET") - || whatSection.equals("SIGMET...NONE")) { - segment = "CONVECTIVE".concat(segment); - - // process this section which starts with - // "CONVECTIVE SIGMET". - ConvSigmetSection section = ConvSigmetParser - .processSection(segment, issueTime, startTime, - region, headers); - record.addConvSigmetSection(section); - - // keep track of time range - if (min == null || min.getTime().after(section.getStartTime().getTime())) { - min = section.getStartTime(); - } - if (max == null || max.getTime().before(section.getEndTime().getTime())) { - max = section.getEndTime(); - } - } else if (whatSection.equals("VALID")) { - segment = "OUTLOOK".concat(segment); - - // process this section which starts with - // "OUTLOOK VALID". - Scanner scOutlook = new Scanner(segment) - .useDelimiter("AREA "); - ArrayList outlookList = new ArrayList(); - outlookList.clear(); - - // Check if "OUTLOOK" section contains more than one - // "AREA". - while (scOutlook.hasNext()) { - String outlookSegment = scOutlook.next(); - outlookList.add(outlookSegment); - } - - if (outlookList.size() <= 1) { - // only one "AREA" or NIL report - ConvSigmetSection outlook = ConvSigmetParser - .processOutLook(segment, region, headers); - record.addConvSigmetSection(outlook); - if (min == null || min.getTime().after(outlook.getStartTime().getTime())) { - min = outlook.getStartTime(); - } - if (max == null || max.getTime().before(outlook.getEndTime().getTime())) { - max = outlook.getEndTime(); - } - } else { - /* - * Here are more than one outlook areas Store the - * header section and remove it from the outlook - * list - */ - String outlookHeader = outlookList.get(0); - outlookList.remove(outlookHeader); - // process multiple outlook sections - for (String outlookSection : outlookList) { - outlookSection = outlookHeader.concat("AREA ") - .concat(outlookSection); - ConvSigmetSection outlook = ConvSigmetParser - .processOutLook(outlookSection, region, - headers); - record.addConvSigmetSection(outlook); - if (min == null || min.getTime().after( - outlook.getStartTime().getTime())) { - min = outlook.getStartTime(); - } - if (max == null || max.getTime().before( - outlook.getEndTime().getTime())) { - max = outlook.getEndTime(); - } - } - } - } - } - record.setDataTime(new DataTime(record.getDataTime().getRefTimeAsCalendar(), - new TimeRange(min.getTime(), - max.getTimeInMillis() - min.getTimeInMillis()))); - } catch (Exception e) { - logger.error("Error processing decoded sigmet", e); - record = null; - } - } - - /* - * Return the ConvsigmetRecord record object. - */ - if (record == null) { - return new PluginDataObject[0]; - } else { - return new PluginDataObject[] { record }; - } - - } - -} +/** + * + * Convective Sigmet Decoder + * + * This java class decodes CONVSIGMET (convective sigmet) raw data. + * HISTORY + * + * Date Ticket# Engineer Description + * ------------ ---------- ----------- -------------------------- + * 03/2009 87/114 L. Lin Initial coding + * 06/2009 87/114 L. Lin Increase size of locationLine and location + * and generalize method "processLocation". + * 07/2009 87/114 L. Lin Migration to TO11 + * 07/2011 87/114 F. J. Yen Fix for RTN TTR 9973--ConvSigmet Decoder Ignoring + * time range--implemented fix from Steven Harris, + * RTN to set the end time range + * + * + * This code has been developed by the SIB for use in the AWIPS2 system. + * @author L. Lin + * @version 1.0 + */ + +package gov.noaa.nws.ncep.edex.plugin.convsigmet.decoder; + +import gov.noaa.nws.ncep.common.dataplugin.convsigmet.ConvSigmetRecord; +import gov.noaa.nws.ncep.common.dataplugin.convsigmet.ConvSigmetSection; +import gov.noaa.nws.ncep.edex.plugin.convsigmet.util.ConvSigmetParser; +import gov.noaa.nws.ncep.edex.util.UtilN; + +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Scanner; + +import com.raytheon.edex.esb.Headers; +import com.raytheon.edex.exception.DecoderException; +import com.raytheon.edex.plugin.AbstractDecoder; +import com.raytheon.uf.common.dataplugin.PluginDataObject; +import com.raytheon.uf.common.dataplugin.PluginException; +import com.raytheon.uf.common.time.DataTime; +import com.raytheon.uf.common.time.TimeRange; +import com.raytheon.uf.edex.decodertools.core.IDecoderConstants; + +public class ConvSigmetDecoder extends AbstractDecoder { + + private final String pluginName; + + /** + * Constructor + * + * @throws DecoderException + */ + public ConvSigmetDecoder(String name) throws DecoderException { + pluginName = name; + } + + public PluginDataObject[] decode(byte[] data, Headers headers) + throws DecoderException { + + String traceId = ""; + if (headers != null) { + traceId = (String) headers.get("traceId"); + } + + String sectionDelim = "OUTLOOK|CONVECTIVE"; + String etx = IDecoderConstants.ETX; + String theBulletin = null; + + String region = null; + Calendar startTime = null; + byte[] messageData = null; + + ConvSigmetRecord record = null; + + ConvSigmetSeparator sep = ConvSigmetSeparator.separate(data, headers); + messageData = sep.next(); + String theMessage = new String(messageData); + + /* + * May have multiple duplicate bulletins, only get the first bulletin + * and eliminate the remaining bulletins after the first bulletin. + */ + Scanner cc = new Scanner(theMessage).useDelimiter(etx); + if (cc.hasNext()) { + theBulletin = cc.next(); + } else { + theBulletin = theMessage; + } + + // record = new ConvsigmetRecord(); + // Decode and set WMO line + record = ConvSigmetParser.processWMO(theBulletin, headers); + + // Decode the forecast region such as: W, C, or E + region = ConvSigmetParser.processFcstRegion(theBulletin); + String forecastRegion = "SIG".concat(region); + + /* + * Check the Convsigmet record object. If not, throws exception. + */ + if (record != null) { + record.setTraceId(traceId); + record.setPluginName(pluginName); + record.setReportType(pluginName); + record.setForecastRegion(forecastRegion); + try { + record.constructDataURI(); + } catch (PluginException e) { + logger.error("Error constructing dataURI", e); + record = null; + } + } + + if (record != null) { + try { + // Replace special characters to a blank so that it may be + // readable + record.setBullMessage(UtilN + .removeLeadingWhiteSpaces((theBulletin.substring(5)) + .replace('\036', ' ').replace('\r', ' ') + .replace('\003', ' ').replace('\000', ' ') + .replace('\001', ' '))); + + // Decode the starting time + startTime = ConvSigmetParser.processStartTime(theBulletin, + headers); + + // Decode the correction flag and set + Boolean correctionFlag = ConvSigmetParser + .processCorrectionFlag(theBulletin); + Integer correction = 0; + if (correctionFlag) { + correction = 1; + } + record.setCorrectionFlag(correction); + + /* + * Break the bulletin message into sections by a "OUTLOOK" or + * "CONVECTIVE". + */ + Scanner sc = new Scanner(theBulletin) + .useDelimiter(sectionDelim); + + ArrayList segmentList = new ArrayList(); + segmentList.clear(); + while (sc.hasNext()) { + String segment = sc.next(); + segmentList.add(segment); + } + + Calendar issueTime = record.getIssueTime(); + /* + * process each section in a order of section and location line + */ + Calendar min = null; + Calendar max = null; + for (String segment : segmentList) { + + // starts a new section + Scanner sc2 = new Scanner(segment); + String whatSection = sc2.next(); + if (whatSection.equals("SIGMET") + || whatSection.equals("SIGMET...NONE")) { + segment = "CONVECTIVE".concat(segment); + + // process this section which starts with + // "CONVECTIVE SIGMET". + ConvSigmetSection section = ConvSigmetParser + .processSection(segment, issueTime, startTime, + region, headers); + record.addConvSigmetSection(section); + + // keep track of time range + if (min == null || min.getTime().after(section.getStartTime().getTime())) { + min = section.getStartTime(); + } + if (max == null || max.getTime().before(section.getEndTime().getTime())) { + max = section.getEndTime(); + } + } else if (whatSection.equals("VALID")) { + segment = "OUTLOOK".concat(segment); + + // process this section which starts with + // "OUTLOOK VALID". + Scanner scOutlook = new Scanner(segment) + .useDelimiter("AREA "); + ArrayList outlookList = new ArrayList(); + outlookList.clear(); + + // Check if "OUTLOOK" section contains more than one + // "AREA". + while (scOutlook.hasNext()) { + String outlookSegment = scOutlook.next(); + outlookList.add(outlookSegment); + } + + if (outlookList.size() <= 1) { + // only one "AREA" or NIL report + ConvSigmetSection outlook = ConvSigmetParser + .processOutLook(segment, region, headers); + record.addConvSigmetSection(outlook); + if (min == null || min.getTime().after(outlook.getStartTime().getTime())) { + min = outlook.getStartTime(); + } + if (max == null || max.getTime().before(outlook.getEndTime().getTime())) { + max = outlook.getEndTime(); + } + } else { + /* + * Here are more than one outlook areas Store the + * header section and remove it from the outlook + * list + */ + String outlookHeader = outlookList.get(0); + outlookList.remove(outlookHeader); + // process multiple outlook sections + for (String outlookSection : outlookList) { + outlookSection = outlookHeader.concat("AREA ") + .concat(outlookSection); + ConvSigmetSection outlook = ConvSigmetParser + .processOutLook(outlookSection, region, + headers); + record.addConvSigmetSection(outlook); + if (min == null || min.getTime().after( + outlook.getStartTime().getTime())) { + min = outlook.getStartTime(); + } + if (max == null || max.getTime().before( + outlook.getEndTime().getTime())) { + max = outlook.getEndTime(); + } + } + } + } + } + record.setDataTime(new DataTime(record.getDataTime().getRefTimeAsCalendar(), + new TimeRange(min.getTime(), + max.getTimeInMillis() - min.getTimeInMillis()))); + } catch (Exception e) { + logger.error("Error processing decoded sigmet", e); + record = null; + } + } + + /* + * Return the ConvsigmetRecord record object. + */ + if (record == null) { + return new PluginDataObject[0]; + } else { + return new PluginDataObject[] { record }; + } + + } + +} diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.convsigmet/gov.noaa.nws.ncep.edex.plugin.convsigmet/src/gov/noaa/nws/ncep/edex/plugin/convsigmet/decoder/ConvSigmetSeparator.java b/ncep/gov.noaa.nws.ncep.edex.plugin.convsigmet/gov.noaa.nws.ncep.edex.plugin.convsigmet/src/gov/noaa/nws/ncep/edex/plugin/convsigmet/decoder/ConvSigmetSeparator.java index 507e9f59cc..da0b868bd5 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.convsigmet/gov.noaa.nws.ncep.edex.plugin.convsigmet/src/gov/noaa/nws/ncep/edex/plugin/convsigmet/decoder/ConvSigmetSeparator.java +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.convsigmet/gov.noaa.nws.ncep.edex.plugin.convsigmet/src/gov/noaa/nws/ncep/edex/plugin/convsigmet/decoder/ConvSigmetSeparator.java @@ -1,145 +1,145 @@ -/** - * ConvsigmetSeparator - * - * This class sets the raw data to an Arraylist, records, of - * String based on a uniquely identified separator. - * - *
- * L. Lin                               03/2009         Creation
- * 
- * - * This code has been developed by the SIB for use in the AWIPS system. - */ - -package gov.noaa.nws.ncep.edex.plugin.convsigmet.decoder; - -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; -import java.util.NoSuchElementException; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - -import com.raytheon.edex.esb.Headers; -import com.raytheon.edex.plugin.AbstractRecordSeparator; -import com.raytheon.edex.util.Util; - -public class ConvSigmetSeparator extends AbstractRecordSeparator { - private final Log logger = LogFactory.getLog(getClass()); - - /** Regex used for separate the bulletins */ - private static final String BULLSEPARATOR = "([0-9]{3})( )*\\x0d\\x0d\\x0a([A-Z]{4}[0-9]{2}) ([A-Z]{4}) ([0-9]{6})( [A-Z]{3})?\\x0d\\x0d\\x0a"; - - /** Regex matcher */ - private Matcher matcher; - - /** Pattern object for regex search */ - private Pattern pattern; - - /** List of records contained in file */ - private List records; - - private Iterator iterator = null; - - /** - * Constructor. - * - */ - public ConvSigmetSeparator() { - records = new ArrayList(); - } - - public static ConvSigmetSeparator separate(byte[] data, Headers headers) { - ConvSigmetSeparator ds = new ConvSigmetSeparator(); - ds.setData(data, headers); - return ds; - } - - public void setData(byte[] data, Headers headers) { - doSeparate(new String(data)); - iterator = records.iterator(); - } - - /* - * (non-Javadoc) - * - * @see com.raytheon.edex.plugin.IRecordSeparator#hasNext() - */ - public boolean hasNext() { - if (iterator == null) { - return false; - } else { - return iterator.hasNext(); - } - } - - /** - * Get record - */ - public byte[] next() { - try { - String temp = iterator.next(); - if (Util.isEmptyString(temp)) { - return (byte[]) null; - } else { - return temp.getBytes(); - } - } catch (NoSuchElementException e) { - return (byte[]) null; - } - } - - /** - * @param message - * separate bulletins - */ - private void doSeparate(String message) { - /* Regex used for separate the bulletins */ - - try { - pattern = Pattern.compile(BULLSEPARATOR); - matcher = pattern.matcher(message); - - /* - * Set number of bulletins to records only if the bulletin separator - * is not the same. At the point, only separators are stored in - * "records" - */ - while (matcher.find()) { - if (!records.contains(matcher.group())) { - records.add(matcher.group()); - } - } - - /* - * Append the raw data file to the records. - */ - for (int i = 0; i < records.size(); i++) { - if (i < records.size() - 1) { - records.set( - i, - "\n" - + message.substring( - message.indexOf(records.get(i)), - message.indexOf(records.get(i + 1)))); - } else { - records.set( - i, - "\n" - + message.substring(message.indexOf(records - .get(i)))); - } - } - } catch (Exception e) { - e.printStackTrace(); - if (logger.isInfoEnabled()) { - logger.info("No valid records found!"); - } - logger.warn("No valid records found!"); - } - return; - } -} +/** + * ConvsigmetSeparator + * + * This class sets the raw data to an Arraylist, records, of + * String based on a uniquely identified separator. + * + *
+ * L. Lin                               03/2009         Creation
+ * 
+ * + * This code has been developed by the SIB for use in the AWIPS system. + */ + +package gov.noaa.nws.ncep.edex.plugin.convsigmet.decoder; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; +import java.util.NoSuchElementException; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import com.raytheon.edex.esb.Headers; +import com.raytheon.edex.plugin.AbstractRecordSeparator; +import com.raytheon.edex.util.Util; + +public class ConvSigmetSeparator extends AbstractRecordSeparator { + private final Log logger = LogFactory.getLog(getClass()); + + /** Regex used for separate the bulletins */ + private static final String BULLSEPARATOR = "([0-9]{3})( )*\\x0d\\x0d\\x0a([A-Z]{4}[0-9]{2}) ([A-Z]{4}) ([0-9]{6})( [A-Z]{3})?\\x0d\\x0d\\x0a"; + + /** Regex matcher */ + private Matcher matcher; + + /** Pattern object for regex search */ + private Pattern pattern; + + /** List of records contained in file */ + private List records; + + private Iterator iterator = null; + + /** + * Constructor. + * + */ + public ConvSigmetSeparator() { + records = new ArrayList(); + } + + public static ConvSigmetSeparator separate(byte[] data, Headers headers) { + ConvSigmetSeparator ds = new ConvSigmetSeparator(); + ds.setData(data, headers); + return ds; + } + + public void setData(byte[] data, Headers headers) { + doSeparate(new String(data)); + iterator = records.iterator(); + } + + /* + * (non-Javadoc) + * + * @see com.raytheon.edex.plugin.IRecordSeparator#hasNext() + */ + public boolean hasNext() { + if (iterator == null) { + return false; + } else { + return iterator.hasNext(); + } + } + + /** + * Get record + */ + public byte[] next() { + try { + String temp = iterator.next(); + if (Util.isEmptyString(temp)) { + return (byte[]) null; + } else { + return temp.getBytes(); + } + } catch (NoSuchElementException e) { + return (byte[]) null; + } + } + + /** + * @param message + * separate bulletins + */ + private void doSeparate(String message) { + /* Regex used for separate the bulletins */ + + try { + pattern = Pattern.compile(BULLSEPARATOR); + matcher = pattern.matcher(message); + + /* + * Set number of bulletins to records only if the bulletin separator + * is not the same. At the point, only separators are stored in + * "records" + */ + while (matcher.find()) { + if (!records.contains(matcher.group())) { + records.add(matcher.group()); + } + } + + /* + * Append the raw data file to the records. + */ + for (int i = 0; i < records.size(); i++) { + if (i < records.size() - 1) { + records.set( + i, + "\n" + + message.substring( + message.indexOf(records.get(i)), + message.indexOf(records.get(i + 1)))); + } else { + records.set( + i, + "\n" + + message.substring(message.indexOf(records + .get(i)))); + } + } + } catch (Exception e) { + e.printStackTrace(); + if (logger.isInfoEnabled()) { + logger.info("No valid records found!"); + } + logger.warn("No valid records found!"); + } + return; + } +} diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.convsigmet/gov.noaa.nws.ncep.edex.plugin.convsigmet/src/gov/noaa/nws/ncep/edex/plugin/convsigmet/decoder/package-info.java b/ncep/gov.noaa.nws.ncep.edex.plugin.convsigmet/gov.noaa.nws.ncep.edex.plugin.convsigmet/src/gov/noaa/nws/ncep/edex/plugin/convsigmet/decoder/package-info.java index 428689393c..219fe9e5e6 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.convsigmet/gov.noaa.nws.ncep.edex.plugin.convsigmet/src/gov/noaa/nws/ncep/edex/plugin/convsigmet/decoder/package-info.java +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.convsigmet/gov.noaa.nws.ncep.edex.plugin.convsigmet/src/gov/noaa/nws/ncep/edex/plugin/convsigmet/decoder/package-info.java @@ -1,4 +1,4 @@ -/** -* Contains decoder.java for decoder plug-ins -*/ -package gov.noaa.nws.ncep.edex.plugin.convsigmet.decoder;; +/** +* Contains decoder.java for decoder plug-ins +*/ +package gov.noaa.nws.ncep.edex.plugin.convsigmet.decoder;; diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.convsigmet/gov.noaa.nws.ncep.edex.plugin.convsigmet/src/gov/noaa/nws/ncep/edex/plugin/convsigmet/util/ConvSigmetParser.java b/ncep/gov.noaa.nws.ncep.edex.plugin.convsigmet/gov.noaa.nws.ncep.edex.plugin.convsigmet/src/gov/noaa/nws/ncep/edex/plugin/convsigmet/util/ConvSigmetParser.java index 78fef2f955..7ee0be193e 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.convsigmet/gov.noaa.nws.ncep.edex.plugin.convsigmet/src/gov/noaa/nws/ncep/edex/plugin/convsigmet/util/ConvSigmetParser.java +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.convsigmet/gov.noaa.nws.ncep.edex.plugin.convsigmet/src/gov/noaa/nws/ncep/edex/plugin/convsigmet/util/ConvSigmetParser.java @@ -1,655 +1,655 @@ -/** - * Convsigmet DecoderUtil - * - * This java class intends to serve as a decoder utility for Convsigmet. - * - * HISTORY - * - * Date Ticket# Engineer Description - * ------------ ---------- ----------- -------------------------- - * 03/2009 87/114 L. Lin Initial coding - * 06/2009 87/114 L. Lin Generalize the method processLocation. - * 07/2009 87/114 L. Lin Migration to TO11 - * 09/2009 87/114 L. Lin Add latitude/longitude to location table - * 07/2011 87/114 F. J. Yen Fix the day of the end time when it is - * not the same as the day of the start time. - * - * - * This code has been developed by the SIB for use in the AWIPS2 system. - * @author L. Lin - * @version 1.0 - */ - -package gov.noaa.nws.ncep.edex.plugin.convsigmet.util; - -import gov.noaa.nws.ncep.common.dataplugin.convsigmet.ConvSigmetLocation; -import gov.noaa.nws.ncep.common.dataplugin.convsigmet.ConvSigmetRecord; -import gov.noaa.nws.ncep.common.dataplugin.convsigmet.ConvSigmetSection; -import gov.noaa.nws.ncep.edex.tools.decoder.LatLonLocTbl; -import gov.noaa.nws.ncep.edex.util.UtilN; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Calendar; -import java.util.Scanner; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -import com.raytheon.edex.esb.Headers; -import com.raytheon.uf.common.time.DataTime; -import com.raytheon.uf.edex.decodertools.core.LatLonPoint; -import com.raytheon.uf.edex.decodertools.time.TimeTools; - -public class ConvSigmetParser { - - /** - * Constructor - */ - public ConvSigmetParser() { - } - - /** - * Parse the WMO line and store WMO header, OfficeID, issue time, - * designatorBBB,... - * - * @param wmoline - * The bulletin message - * - * @return a ConvsigmetRecord - */ - public static ConvSigmetRecord processWMO(String wmoline, Headers headers) { - - ConvSigmetRecord record = null; - // Regular expression for WMO/ICAO, station ID, and issue date (and - // maybe designator BBB) - final String WMO_EXP = "([A-Z]{4}[0-9]{2}) ([A-Z]{4}) ([0-9]{6})( ([A-Z]{3}))?"; - - // Pattern used for extracting WMO header, officeID, product purge time, - // and issue date and designatorBBB - final Pattern wmoPattern = Pattern.compile(WMO_EXP); - Matcher theMatcher = wmoPattern.matcher(wmoline); - - if (theMatcher.find()) { - record = new ConvSigmetRecord(); - - record.setWmoHeader(theMatcher.group(1)); - record.setIssueOffice(theMatcher.group(2)); - record.setDesignatorBBB(theMatcher.group(5)); - - // Decode the issue time. - Calendar issueTime = TimeTools.findDataTime(theMatcher.group(3), - headers); - record.setIssueTime(issueTime); - - DataTime dataTime = new DataTime(issueTime); - record.setDataTime(dataTime); - } - return record; - } - - /** - * Obtains forecast region as: SIGW, SIGC, or SIGE from a report - * - * @param bullMessage - * The bulletin message - * @return a string for forecast region - */ - public static String processFcstRegion(String bullMessage) { - - // Regular expression for "SIG" forecast region - final String FCSTREGION_EXP = "SIG([A-Z]{1}) ( )*"; - - // Pattern used for extracting forecast region - final Pattern fcstregionPattern = Pattern.compile(FCSTREGION_EXP); - Matcher theMatcher = fcstregionPattern.matcher(bullMessage); - - if (theMatcher.find()) { - return theMatcher.group(1); - } else { - return " "; - } - } - - /** - * process regular section of a convective sigmet report - * - * @param theSection - * The section lines from bulletin message - * @param issueTime - * The bulletin issue time - * @param startTime - * The start time for this section - * @param forecastRegion - * as "W", "C", or "E" - * @return a ConvsigmetSection table - */ - public static ConvSigmetSection processSection(String theSection, - Calendar issueTime, Calendar startTime, String forecastRegion, - Headers headers) { - - // Default equal to one hour if there is no valid time in report - final int validPeriod = 1; - - // Decode the phenomena description - ConvSigmetSection currentSection = ConvSigmetParser - .processPhenomena(theSection); - - // Replace the special characters - currentSection.setSegment(theSection.replace('\r', ' ') - .replace('\036', ' ').replace('\003', ' ').replace('\000', ' ') - .replace('\001', ' ')); - - // Decode the locations - ConvSigmetParser.processLocation(theSection, currentSection); - - // Decode the sequence ID - String sequenceID = ConvSigmetParser.processSequenceID(theSection); - if (sequenceID.equals(" ")) { - // Default as: 0W, 0C, or 0E if no sequenceID has been found. - sequenceID = "0".concat(forecastRegion); - } - currentSection.setSequenceID(sequenceID); - - // Set the starting time - if (startTime == null) { - currentSection.setStartTime(issueTime); - } else { - currentSection.setStartTime(startTime); - } - - // Decode the end time - Calendar endTime = ConvSigmetParser.processEndTime(theSection, - currentSection, headers); - if (endTime == null) { - /* - * if no end time available, end time will be the issue time plus a - * valid period; the default is one hour for now. - */ - endTime = TimeTools.copy(issueTime); - endTime.add(Calendar.HOUR, validPeriod); - currentSection.setEndTime(endTime); - } else { - currentSection.setEndTime(endTime); - } - - int startMonth = startTime.get(Calendar.MONTH); - int endMonth = endTime.get(Calendar.MONTH); - int startDay = startTime.get(Calendar.DAY_OF_MONTH); - int endDay = endTime.get(Calendar.DAY_OF_MONTH); - if ((startMonth == endMonth) && (startDay > endDay)) { - // In case the end time needs to advance one month - endTime.add(Calendar.MONTH, 1); - } - - return currentSection; - } - - /** - * process the outlook section of a convective sigmet report. - * - * @param theOutlook - * The outlook section lines from bulletin message - * @param forecastRegion - * as "W", "C", or "E" - * @return a ConvsigmetSection table - */ - public static ConvSigmetSection processOutLook(String theOutlook, - String forecastRegion, Headers headers) { - - ConvSigmetSection currentOutLook = new ConvSigmetSection(); - - currentOutLook.setSegment(theOutlook.replace('\r', ' ') - .replace('\036', ' ').replace('\003', ' ').replace('\000', ' ') - .replace('\001', ' ')); - currentOutLook.setClassType("OUTLOOK"); - - // Decode start time and end time - ConvSigmetParser.processValidTime(theOutlook, currentOutLook, headers); - - // Decode locations - if (ConvSigmetParser.processLocation(theOutlook, currentOutLook)) { - final String SID_EXP = "AREA ([0-9]{1})...FROM"; - - // Pattern used for extracting the number of sequence ID. - final Pattern sidPattern = Pattern.compile(SID_EXP); - - Matcher theMatcher = sidPattern.matcher(theOutlook); - - // Default sequenceID as: 1W, 1C, or 1E if locations have been - // found. - String sequenceID = "1".concat(forecastRegion); - if (theMatcher.find()) { - // Multiple areas such as: "AREA 1", "AREA 2", ...etc - sequenceID = theMatcher.group(1).concat(forecastRegion); - } - currentOutLook.setSequenceID(sequenceID); - } else { - // Default sequenceID as: 0W, 0C, or 0E if outlook section is a NIL - // report. - String sequenceID = "0".concat(forecastRegion); - currentOutLook.setSequenceID(sequenceID); - } - - return currentOutLook; - } - - /** - * Obtains start time from input report - * - * @param theSection - * The bulletin message - * @return a calendar for start time - */ - public static Calendar processStartTime(String theSection, Headers headers) { - - // Regular expression for start time - final String STARTTIME_EXP = "(\\x1e)([A-Z]{4}) ([A-Z]{3}) ([0-9]{6})( [A-Z]{3})?"; - - // attern used for extracting the starting time - final Pattern starttimePattern = Pattern.compile(STARTTIME_EXP); - - // Calendar mndTime = Calendar.getInstance(); - - Matcher theMatcher = starttimePattern.matcher(theSection); - - if (theMatcher.find()) { - // Get start time - Calendar mndTime = null; - return TimeTools.findDataTime(theMatcher.group(4), headers); - } else { - return null; - } - } - - /** - * Obtains correction flag - * - * @param theSection - * The bulletin message - * @return true if finds a correction flag - */ - public static Boolean processCorrectionFlag(String theSection) { - - Boolean correctionFlag = false; - - // Regular expression for the correction flag - final String CORFLAG_EXP = "(\\x1e)([A-Z]{4}) ([A-Z]{3}) ([0-9]{6})( [A-Z]{3})?"; - - // Pattern used for extracting the correction flag - final Pattern corflagPattern = Pattern.compile(CORFLAG_EXP); - - Matcher theMatcher = corflagPattern.matcher(theSection); - - if (theMatcher.find()) { - Scanner scCorrection = new Scanner(theMatcher.group(0)); - - // check if this contains a correction flag - while (scCorrection.hasNext()) { - if (scCorrection.next().equals("COR")) { - correctionFlag = true; - } - } - - } - return correctionFlag; - } - - /** - * Obtains the sequence ID - * - * @param inSegment - * The segment which contains this sequence ID - * @return a string for sequence ID - */ - public static String processSequenceID(String inSegment) { - - // Regular expression for the sequence ID - final String SEQUENCEID_EXP = "CONVECTIVE SIGMET (([0-9]{2}|[0-9]{1})[A-Z]{1})"; - - // Pattern used for extracting the sequence ID - final Pattern sequenceidPattern = Pattern.compile(SEQUENCEID_EXP); - Matcher theMatcher = sequenceidPattern.matcher(inSegment); - - if (theMatcher.find()) { - return theMatcher.group(1); - } else { - return " "; - } - } - - /** - * Get the end time - * - * @param theSegment - * The segment which contains end time - * @param section - * The section table which contains the start time - * @return a calendar for end time - */ - public static Calendar processEndTime(String theSegment, - ConvSigmetSection section, Headers headers) { - - // Regular expression for end time - final String ENDTIME_EXP = "VALID UNTIL ([0-9]{4})Z"; - - // Pattern used for extracting the end time - final Pattern endtimePattern = Pattern.compile(ENDTIME_EXP); - - // Calendar mndTime = Calendar.getInstance(); - - Matcher theMatcher = endtimePattern.matcher(theSegment); - - if (theMatcher.find()) { - Calendar startTime = section.getStartTime(); - - String endTimeGroup = Integer.toString( - startTime.get(Calendar.DAY_OF_MONTH)).concat( - theMatcher.group(1)); - if (startTime.get(Calendar.DAY_OF_MONTH) < 10) { - // add a "0" if the day of month less than 10 - endTimeGroup = "0".concat(endTimeGroup); - } - // Determine the end time. - Calendar endTime = TimeTools.findDataTime(endTimeGroup, headers); - int startHrMn = startTime.get(Calendar.HOUR_OF_DAY) * 100 + - startTime.get(Calendar.MINUTE); - int endHrMn = Integer.parseInt(theMatcher.group(1)); - if (endHrMn < startHrMn) { - /* Increment for the next day */ - endTime.add(Calendar.DATE,1); - } - return endTime; - } else { - return null; - } - } - - /** - * Parse the phenomena... - * - * @param theFlight - * The flight level line - * @return a section record - */ - public static ConvSigmetSection processPhenomena(String theFlight) { - - String classType = null; - - // Regular expression for the flight line - final String FL_EXP = "((DMSHG|DSIPTG|INTSFYG|DVLPG) )?(LINE|AREA|ISOL)(\\S|\\s)*FROM ([0-9]{3})?([0-9]{2})KT. ((TOP|TOPS) (TO|ABV)) FL([0-9]{3})"; - - // Pattern used for extracting the direction, speed, distance, and - // flight level - final Pattern flPattern = Pattern.compile(FL_EXP); - Matcher theMatcher = flPattern.matcher(theFlight); - - // Regular expression for the classType line - final String CLASS_EXP = "((DMSHG|DSIPTG|INTSFYG|DVLPG) )?(LINE|AREA|ISOL)(\\S|\\s)*((TOP|TOPS) (TO|ABV)) FL([0-9]{3})"; - - // Pattern used for extracting the class type and flight level - final Pattern classPattern = Pattern.compile(CLASS_EXP); - Matcher classMatcher = classPattern.matcher(theFlight); - - ConvSigmetSection currentSection = new ConvSigmetSection(); - - if (theMatcher.find()) { - classType = theMatcher.group(3); - - int direction = Integer.parseInt(theMatcher.group(5)); - int speed = Integer.parseInt(theMatcher.group(6)); - int flightLevel = Integer.parseInt(theMatcher.group(10)); - String flightLevelTop = theMatcher.group(7); - String intensity = theMatcher.group(1); - - currentSection.setFlightLevel(flightLevel); - currentSection.setDirection(direction); - currentSection.setSpeed(speed); - currentSection.setClassType(classType); - currentSection.setIntensity(intensity); - currentSection.setCloudTop(flightLevelTop); - - if (classType.equals("LINE")) { - final String DISTANCE_EXP = "LINE (EMBD )?(SEV )?TS ([0-9]{2})"; - final Pattern distancePattern = Pattern.compile(DISTANCE_EXP); - Matcher disMatcher = distancePattern.matcher(theFlight); - if (disMatcher.find()) { - int distance = Integer.parseInt(disMatcher.group(3)); - currentSection.setDistance(distance); - } - } else if (classType.equals("ISOL")) { - final String ISOLDISTANCE_EXP = "ISOL (\\S|\\s)* TS D([0-9]{2})"; - final Pattern isoldistancePattern = Pattern - .compile(ISOLDISTANCE_EXP); - Matcher isoldisMatcher = isoldistancePattern.matcher(theFlight); - if (isoldisMatcher.find()) { - int distance = Integer.parseInt(isoldisMatcher.group(2)); - currentSection.setDistance(distance); - } - // get ISOL location table - getIsolLocation(theFlight, currentSection); - } - - } else if (classMatcher.find()) { - classType = classMatcher.group(3); - - int flightLevel = Integer.parseInt(classMatcher.group(8)); - String flightLevelTop = classMatcher.group(5); - String intensity = classMatcher.group(1); - - currentSection.setFlightLevel(flightLevel); - currentSection.setClassType(classType); - currentSection.setIntensity(intensity); - currentSection.setCloudTop(flightLevelTop); - - if (classType.equals("LINE")) { - final String DISTANCE_EXP = "LINE (EMBD )?(SEV )?TS ([0-9]{2})"; - final Pattern distancePattern = Pattern.compile(DISTANCE_EXP); - Matcher disMatcher = distancePattern.matcher(theFlight); - if (disMatcher.find()) { - int distance = Integer.parseInt(disMatcher.group(3)); - currentSection.setDistance(distance); - } - } else if (classType.equals("ISOL")) { - final String ISOLDISTANCE_EXP = "ISOL (\\S|\\s)* TS D([0-9]{2})"; - final Pattern isoldistancePattern = Pattern - .compile(ISOLDISTANCE_EXP); - Matcher isoldisMatcher = isoldistancePattern.matcher(theFlight); - if (isoldisMatcher.find()) { - int distance = Integer.parseInt(isoldisMatcher.group(2)); - currentSection.setDistance(distance); - } - // get ISOL location table - getIsolLocation(theFlight, currentSection); - } - - } else { - // Finds no "flight level line", "CS" as default for a NIL report. - currentSection.setClassType("CS"); - currentSection.setIntensity(null); - } - - return currentSection; - } - - /** - * Obtains the start time and end time - * - * @param theSection - * The outlook section contains the valid times group - */ - public static void processValidTime(String theSection, - ConvSigmetSection currentOutLook, Headers headers) { - - // Regular expression for start time - final String TIMES_EXP = "OUTLOOK VALID ([0-9]{6})-([0-9]{6})"; - - // Pattern used for extracting the starting time and end time - final Pattern starttimePattern = Pattern.compile(TIMES_EXP); - - Calendar startTime = null; - Calendar endTime = null; - // Calendar mndTime = Calendar.getInstance(); - - Matcher theMatcher = starttimePattern.matcher(theSection); - - if (theMatcher.find()) { - // Decode the start time and end time; then set them. - startTime = TimeTools.findDataTime(theMatcher.group(1), headers); - currentOutLook.setStartTime(startTime); - endTime = TimeTools.findDataTime(theMatcher.group(2), headers); - - int startMonth = startTime.get(Calendar.MONTH); - int endMonth = endTime.get(Calendar.MONTH); - int startDay = startTime.get(Calendar.DAY_OF_MONTH); - int endDay = endTime.get(Calendar.DAY_OF_MONTH); - - if ((startMonth == endMonth) && (startDay > endDay)) { - // Roll over a month - endTime.add(Calendar.MONTH, 1); - } - - currentOutLook.setEndTime(endTime); - } else { - currentOutLook.setStartTime(startTime); - currentOutLook.setEndTime(endTime); - } - - } - - /** - * Obtains the location information for ISOL. - * - * @param theSection - * The section lines from bulletin message - * @param sectionTable - * The section Table - */ - public static void getIsolLocation(String theSection, - ConvSigmetSection sectionTable) { - - String line = null; - LatLonPoint point = null; - - final String ISOLLOCATION_EXP = "\\x0d\\x0d\\x0a(([0-9]{2}|[0-9]{3})([ENSW])* [A-Z]{3})\\x0d\\x0d\\x0a"; - final Pattern isollocationPattern = Pattern.compile(ISOLLOCATION_EXP); - Matcher isollocMatcher = isollocationPattern.matcher(theSection); - if (isollocMatcher.find()) { - line = isollocMatcher.group(1); - } - - if (line != null) { - ConvSigmetLocation currentLocation = new ConvSigmetLocation(); - currentLocation.setLocationLine(line); - currentLocation.setLocation(line); - currentLocation.setIndex(1); - // Get a latLonPoint for this station ID from "vors" location table - point = LatLonLocTbl.getLatLonPoint(line, "vors"); - currentLocation.setLatitude(point - .getLatitude(LatLonPoint.INDEGREES)); - currentLocation.setLongitude(point - .getLongitude(LatLonPoint.INDEGREES)); - sectionTable.addConvSigmetLocation(currentLocation); - } - } - - /** - * Parse the location lines and add location table to the section table if - * any - * - * @param theSection - * The section lines from bulletin message - * @param sectionTable - * The section Table - * @return true if finds a location line - */ - public static Boolean processLocation(String theSection, - ConvSigmetSection sectionTable) { - - Boolean hasLocationLine = true; - String locationDelimiter = "-"; - - ArrayList terminationList = new ArrayList(); - terminationList.addAll(Arrays - .asList(new String[] { "WST", "REF", "LINE", "AREA", "ISOL", - "DMSHG", "DVLPG", "DSIPTG", "INTSFYG" })); - - LatLonPoint point = null; - - Scanner sclocations = new Scanner(theSection).useDelimiter("FROM"); - - // throws away the first section which is not the "FROM" location - String locationSection = sclocations.next(); - - if (sclocations.hasNext()) { - locationSection = sclocations.next(); - - Scanner scLocationLine = new Scanner(locationSection) - .useDelimiter("\\x0d\\x0d\\x0a"); - String lines = " "; - String curLine = null; - ArrayList locationList = new ArrayList(); - locationList.clear(); - Boolean notBreak = true; - - while (scLocationLine.hasNext() && notBreak) { - // Get next location line - curLine = scLocationLine.next(); - - Scanner scLocationToken = new Scanner(curLine); - if (scLocationToken.hasNext()) { - // Check the first token from each line - String firstToken = scLocationToken.next(); - if (terminationList.contains(firstToken)) { - // terminate - notBreak = false; - break; - } - } - lines = lines.concat(" ").concat(curLine); - } - - // Clean up the leading space - lines = UtilN.removeLeadingWhiteSpaces(lines); - // Parse the location lines by a "-" - Scanner scLocation = new Scanner(lines) - .useDelimiter(locationDelimiter); - locationList.clear(); - // Get all locations - while (scLocation.hasNext()) { - locationList.add(scLocation.next()); - } - - // set locations to data base - if (locationList.size() > 1) { - Integer idxLocation = 0; - for (String Location : locationList) { - - ConvSigmetLocation currentLocation = new ConvSigmetLocation(); - currentLocation.setLocationLine(lines); - currentLocation.setLocation(Location); - - // Get a latLonPoint for this station ID from "vors" - // location table - point = LatLonLocTbl.getLatLonPoint(Location, "vors"); - currentLocation.setLatitude(point - .getLatitude(LatLonPoint.INDEGREES)); - currentLocation.setLongitude(point - .getLongitude(LatLonPoint.INDEGREES)); - - currentLocation.setIndex(idxLocation + 1); - idxLocation++; - - sectionTable.addConvSigmetLocation(currentLocation); - } - } else { - hasLocationLine = false; - } - - } else { - hasLocationLine = false; - } - - return hasLocationLine; - } - -} +/** + * Convsigmet DecoderUtil + * + * This java class intends to serve as a decoder utility for Convsigmet. + * + * HISTORY + * + * Date Ticket# Engineer Description + * ------------ ---------- ----------- -------------------------- + * 03/2009 87/114 L. Lin Initial coding + * 06/2009 87/114 L. Lin Generalize the method processLocation. + * 07/2009 87/114 L. Lin Migration to TO11 + * 09/2009 87/114 L. Lin Add latitude/longitude to location table + * 07/2011 87/114 F. J. Yen Fix the day of the end time when it is + * not the same as the day of the start time. + * + * + * This code has been developed by the SIB for use in the AWIPS2 system. + * @author L. Lin + * @version 1.0 + */ + +package gov.noaa.nws.ncep.edex.plugin.convsigmet.util; + +import gov.noaa.nws.ncep.common.dataplugin.convsigmet.ConvSigmetLocation; +import gov.noaa.nws.ncep.common.dataplugin.convsigmet.ConvSigmetRecord; +import gov.noaa.nws.ncep.common.dataplugin.convsigmet.ConvSigmetSection; +import gov.noaa.nws.ncep.edex.tools.decoder.LatLonLocTbl; +import gov.noaa.nws.ncep.edex.util.UtilN; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Calendar; +import java.util.Scanner; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import com.raytheon.edex.esb.Headers; +import com.raytheon.uf.common.time.DataTime; +import com.raytheon.uf.edex.decodertools.core.LatLonPoint; +import com.raytheon.uf.edex.decodertools.time.TimeTools; + +public class ConvSigmetParser { + + /** + * Constructor + */ + public ConvSigmetParser() { + } + + /** + * Parse the WMO line and store WMO header, OfficeID, issue time, + * designatorBBB,... + * + * @param wmoline + * The bulletin message + * + * @return a ConvsigmetRecord + */ + public static ConvSigmetRecord processWMO(String wmoline, Headers headers) { + + ConvSigmetRecord record = null; + // Regular expression for WMO/ICAO, station ID, and issue date (and + // maybe designator BBB) + final String WMO_EXP = "([A-Z]{4}[0-9]{2}) ([A-Z]{4}) ([0-9]{6})( ([A-Z]{3}))?"; + + // Pattern used for extracting WMO header, officeID, product purge time, + // and issue date and designatorBBB + final Pattern wmoPattern = Pattern.compile(WMO_EXP); + Matcher theMatcher = wmoPattern.matcher(wmoline); + + if (theMatcher.find()) { + record = new ConvSigmetRecord(); + + record.setWmoHeader(theMatcher.group(1)); + record.setIssueOffice(theMatcher.group(2)); + record.setDesignatorBBB(theMatcher.group(5)); + + // Decode the issue time. + Calendar issueTime = TimeTools.findDataTime(theMatcher.group(3), + headers); + record.setIssueTime(issueTime); + + DataTime dataTime = new DataTime(issueTime); + record.setDataTime(dataTime); + } + return record; + } + + /** + * Obtains forecast region as: SIGW, SIGC, or SIGE from a report + * + * @param bullMessage + * The bulletin message + * @return a string for forecast region + */ + public static String processFcstRegion(String bullMessage) { + + // Regular expression for "SIG" forecast region + final String FCSTREGION_EXP = "SIG([A-Z]{1}) ( )*"; + + // Pattern used for extracting forecast region + final Pattern fcstregionPattern = Pattern.compile(FCSTREGION_EXP); + Matcher theMatcher = fcstregionPattern.matcher(bullMessage); + + if (theMatcher.find()) { + return theMatcher.group(1); + } else { + return " "; + } + } + + /** + * process regular section of a convective sigmet report + * + * @param theSection + * The section lines from bulletin message + * @param issueTime + * The bulletin issue time + * @param startTime + * The start time for this section + * @param forecastRegion + * as "W", "C", or "E" + * @return a ConvsigmetSection table + */ + public static ConvSigmetSection processSection(String theSection, + Calendar issueTime, Calendar startTime, String forecastRegion, + Headers headers) { + + // Default equal to one hour if there is no valid time in report + final int validPeriod = 1; + + // Decode the phenomena description + ConvSigmetSection currentSection = ConvSigmetParser + .processPhenomena(theSection); + + // Replace the special characters + currentSection.setSegment(theSection.replace('\r', ' ') + .replace('\036', ' ').replace('\003', ' ').replace('\000', ' ') + .replace('\001', ' ')); + + // Decode the locations + ConvSigmetParser.processLocation(theSection, currentSection); + + // Decode the sequence ID + String sequenceID = ConvSigmetParser.processSequenceID(theSection); + if (sequenceID.equals(" ")) { + // Default as: 0W, 0C, or 0E if no sequenceID has been found. + sequenceID = "0".concat(forecastRegion); + } + currentSection.setSequenceID(sequenceID); + + // Set the starting time + if (startTime == null) { + currentSection.setStartTime(issueTime); + } else { + currentSection.setStartTime(startTime); + } + + // Decode the end time + Calendar endTime = ConvSigmetParser.processEndTime(theSection, + currentSection, headers); + if (endTime == null) { + /* + * if no end time available, end time will be the issue time plus a + * valid period; the default is one hour for now. + */ + endTime = TimeTools.copy(issueTime); + endTime.add(Calendar.HOUR, validPeriod); + currentSection.setEndTime(endTime); + } else { + currentSection.setEndTime(endTime); + } + + int startMonth = startTime.get(Calendar.MONTH); + int endMonth = endTime.get(Calendar.MONTH); + int startDay = startTime.get(Calendar.DAY_OF_MONTH); + int endDay = endTime.get(Calendar.DAY_OF_MONTH); + if ((startMonth == endMonth) && (startDay > endDay)) { + // In case the end time needs to advance one month + endTime.add(Calendar.MONTH, 1); + } + + return currentSection; + } + + /** + * process the outlook section of a convective sigmet report. + * + * @param theOutlook + * The outlook section lines from bulletin message + * @param forecastRegion + * as "W", "C", or "E" + * @return a ConvsigmetSection table + */ + public static ConvSigmetSection processOutLook(String theOutlook, + String forecastRegion, Headers headers) { + + ConvSigmetSection currentOutLook = new ConvSigmetSection(); + + currentOutLook.setSegment(theOutlook.replace('\r', ' ') + .replace('\036', ' ').replace('\003', ' ').replace('\000', ' ') + .replace('\001', ' ')); + currentOutLook.setClassType("OUTLOOK"); + + // Decode start time and end time + ConvSigmetParser.processValidTime(theOutlook, currentOutLook, headers); + + // Decode locations + if (ConvSigmetParser.processLocation(theOutlook, currentOutLook)) { + final String SID_EXP = "AREA ([0-9]{1})...FROM"; + + // Pattern used for extracting the number of sequence ID. + final Pattern sidPattern = Pattern.compile(SID_EXP); + + Matcher theMatcher = sidPattern.matcher(theOutlook); + + // Default sequenceID as: 1W, 1C, or 1E if locations have been + // found. + String sequenceID = "1".concat(forecastRegion); + if (theMatcher.find()) { + // Multiple areas such as: "AREA 1", "AREA 2", ...etc + sequenceID = theMatcher.group(1).concat(forecastRegion); + } + currentOutLook.setSequenceID(sequenceID); + } else { + // Default sequenceID as: 0W, 0C, or 0E if outlook section is a NIL + // report. + String sequenceID = "0".concat(forecastRegion); + currentOutLook.setSequenceID(sequenceID); + } + + return currentOutLook; + } + + /** + * Obtains start time from input report + * + * @param theSection + * The bulletin message + * @return a calendar for start time + */ + public static Calendar processStartTime(String theSection, Headers headers) { + + // Regular expression for start time + final String STARTTIME_EXP = "(\\x1e)([A-Z]{4}) ([A-Z]{3}) ([0-9]{6})( [A-Z]{3})?"; + + // attern used for extracting the starting time + final Pattern starttimePattern = Pattern.compile(STARTTIME_EXP); + + // Calendar mndTime = Calendar.getInstance(); + + Matcher theMatcher = starttimePattern.matcher(theSection); + + if (theMatcher.find()) { + // Get start time + Calendar mndTime = null; + return TimeTools.findDataTime(theMatcher.group(4), headers); + } else { + return null; + } + } + + /** + * Obtains correction flag + * + * @param theSection + * The bulletin message + * @return true if finds a correction flag + */ + public static Boolean processCorrectionFlag(String theSection) { + + Boolean correctionFlag = false; + + // Regular expression for the correction flag + final String CORFLAG_EXP = "(\\x1e)([A-Z]{4}) ([A-Z]{3}) ([0-9]{6})( [A-Z]{3})?"; + + // Pattern used for extracting the correction flag + final Pattern corflagPattern = Pattern.compile(CORFLAG_EXP); + + Matcher theMatcher = corflagPattern.matcher(theSection); + + if (theMatcher.find()) { + Scanner scCorrection = new Scanner(theMatcher.group(0)); + + // check if this contains a correction flag + while (scCorrection.hasNext()) { + if (scCorrection.next().equals("COR")) { + correctionFlag = true; + } + } + + } + return correctionFlag; + } + + /** + * Obtains the sequence ID + * + * @param inSegment + * The segment which contains this sequence ID + * @return a string for sequence ID + */ + public static String processSequenceID(String inSegment) { + + // Regular expression for the sequence ID + final String SEQUENCEID_EXP = "CONVECTIVE SIGMET (([0-9]{2}|[0-9]{1})[A-Z]{1})"; + + // Pattern used for extracting the sequence ID + final Pattern sequenceidPattern = Pattern.compile(SEQUENCEID_EXP); + Matcher theMatcher = sequenceidPattern.matcher(inSegment); + + if (theMatcher.find()) { + return theMatcher.group(1); + } else { + return " "; + } + } + + /** + * Get the end time + * + * @param theSegment + * The segment which contains end time + * @param section + * The section table which contains the start time + * @return a calendar for end time + */ + public static Calendar processEndTime(String theSegment, + ConvSigmetSection section, Headers headers) { + + // Regular expression for end time + final String ENDTIME_EXP = "VALID UNTIL ([0-9]{4})Z"; + + // Pattern used for extracting the end time + final Pattern endtimePattern = Pattern.compile(ENDTIME_EXP); + + // Calendar mndTime = Calendar.getInstance(); + + Matcher theMatcher = endtimePattern.matcher(theSegment); + + if (theMatcher.find()) { + Calendar startTime = section.getStartTime(); + + String endTimeGroup = Integer.toString( + startTime.get(Calendar.DAY_OF_MONTH)).concat( + theMatcher.group(1)); + if (startTime.get(Calendar.DAY_OF_MONTH) < 10) { + // add a "0" if the day of month less than 10 + endTimeGroup = "0".concat(endTimeGroup); + } + // Determine the end time. + Calendar endTime = TimeTools.findDataTime(endTimeGroup, headers); + int startHrMn = startTime.get(Calendar.HOUR_OF_DAY) * 100 + + startTime.get(Calendar.MINUTE); + int endHrMn = Integer.parseInt(theMatcher.group(1)); + if (endHrMn < startHrMn) { + /* Increment for the next day */ + endTime.add(Calendar.DATE,1); + } + return endTime; + } else { + return null; + } + } + + /** + * Parse the phenomena... + * + * @param theFlight + * The flight level line + * @return a section record + */ + public static ConvSigmetSection processPhenomena(String theFlight) { + + String classType = null; + + // Regular expression for the flight line + final String FL_EXP = "((DMSHG|DSIPTG|INTSFYG|DVLPG) )?(LINE|AREA|ISOL)(\\S|\\s)*FROM ([0-9]{3})?([0-9]{2})KT. ((TOP|TOPS) (TO|ABV)) FL([0-9]{3})"; + + // Pattern used for extracting the direction, speed, distance, and + // flight level + final Pattern flPattern = Pattern.compile(FL_EXP); + Matcher theMatcher = flPattern.matcher(theFlight); + + // Regular expression for the classType line + final String CLASS_EXP = "((DMSHG|DSIPTG|INTSFYG|DVLPG) )?(LINE|AREA|ISOL)(\\S|\\s)*((TOP|TOPS) (TO|ABV)) FL([0-9]{3})"; + + // Pattern used for extracting the class type and flight level + final Pattern classPattern = Pattern.compile(CLASS_EXP); + Matcher classMatcher = classPattern.matcher(theFlight); + + ConvSigmetSection currentSection = new ConvSigmetSection(); + + if (theMatcher.find()) { + classType = theMatcher.group(3); + + int direction = Integer.parseInt(theMatcher.group(5)); + int speed = Integer.parseInt(theMatcher.group(6)); + int flightLevel = Integer.parseInt(theMatcher.group(10)); + String flightLevelTop = theMatcher.group(7); + String intensity = theMatcher.group(1); + + currentSection.setFlightLevel(flightLevel); + currentSection.setDirection(direction); + currentSection.setSpeed(speed); + currentSection.setClassType(classType); + currentSection.setIntensity(intensity); + currentSection.setCloudTop(flightLevelTop); + + if (classType.equals("LINE")) { + final String DISTANCE_EXP = "LINE (EMBD )?(SEV )?TS ([0-9]{2})"; + final Pattern distancePattern = Pattern.compile(DISTANCE_EXP); + Matcher disMatcher = distancePattern.matcher(theFlight); + if (disMatcher.find()) { + int distance = Integer.parseInt(disMatcher.group(3)); + currentSection.setDistance(distance); + } + } else if (classType.equals("ISOL")) { + final String ISOLDISTANCE_EXP = "ISOL (\\S|\\s)* TS D([0-9]{2})"; + final Pattern isoldistancePattern = Pattern + .compile(ISOLDISTANCE_EXP); + Matcher isoldisMatcher = isoldistancePattern.matcher(theFlight); + if (isoldisMatcher.find()) { + int distance = Integer.parseInt(isoldisMatcher.group(2)); + currentSection.setDistance(distance); + } + // get ISOL location table + getIsolLocation(theFlight, currentSection); + } + + } else if (classMatcher.find()) { + classType = classMatcher.group(3); + + int flightLevel = Integer.parseInt(classMatcher.group(8)); + String flightLevelTop = classMatcher.group(5); + String intensity = classMatcher.group(1); + + currentSection.setFlightLevel(flightLevel); + currentSection.setClassType(classType); + currentSection.setIntensity(intensity); + currentSection.setCloudTop(flightLevelTop); + + if (classType.equals("LINE")) { + final String DISTANCE_EXP = "LINE (EMBD )?(SEV )?TS ([0-9]{2})"; + final Pattern distancePattern = Pattern.compile(DISTANCE_EXP); + Matcher disMatcher = distancePattern.matcher(theFlight); + if (disMatcher.find()) { + int distance = Integer.parseInt(disMatcher.group(3)); + currentSection.setDistance(distance); + } + } else if (classType.equals("ISOL")) { + final String ISOLDISTANCE_EXP = "ISOL (\\S|\\s)* TS D([0-9]{2})"; + final Pattern isoldistancePattern = Pattern + .compile(ISOLDISTANCE_EXP); + Matcher isoldisMatcher = isoldistancePattern.matcher(theFlight); + if (isoldisMatcher.find()) { + int distance = Integer.parseInt(isoldisMatcher.group(2)); + currentSection.setDistance(distance); + } + // get ISOL location table + getIsolLocation(theFlight, currentSection); + } + + } else { + // Finds no "flight level line", "CS" as default for a NIL report. + currentSection.setClassType("CS"); + currentSection.setIntensity(null); + } + + return currentSection; + } + + /** + * Obtains the start time and end time + * + * @param theSection + * The outlook section contains the valid times group + */ + public static void processValidTime(String theSection, + ConvSigmetSection currentOutLook, Headers headers) { + + // Regular expression for start time + final String TIMES_EXP = "OUTLOOK VALID ([0-9]{6})-([0-9]{6})"; + + // Pattern used for extracting the starting time and end time + final Pattern starttimePattern = Pattern.compile(TIMES_EXP); + + Calendar startTime = null; + Calendar endTime = null; + // Calendar mndTime = Calendar.getInstance(); + + Matcher theMatcher = starttimePattern.matcher(theSection); + + if (theMatcher.find()) { + // Decode the start time and end time; then set them. + startTime = TimeTools.findDataTime(theMatcher.group(1), headers); + currentOutLook.setStartTime(startTime); + endTime = TimeTools.findDataTime(theMatcher.group(2), headers); + + int startMonth = startTime.get(Calendar.MONTH); + int endMonth = endTime.get(Calendar.MONTH); + int startDay = startTime.get(Calendar.DAY_OF_MONTH); + int endDay = endTime.get(Calendar.DAY_OF_MONTH); + + if ((startMonth == endMonth) && (startDay > endDay)) { + // Roll over a month + endTime.add(Calendar.MONTH, 1); + } + + currentOutLook.setEndTime(endTime); + } else { + currentOutLook.setStartTime(startTime); + currentOutLook.setEndTime(endTime); + } + + } + + /** + * Obtains the location information for ISOL. + * + * @param theSection + * The section lines from bulletin message + * @param sectionTable + * The section Table + */ + public static void getIsolLocation(String theSection, + ConvSigmetSection sectionTable) { + + String line = null; + LatLonPoint point = null; + + final String ISOLLOCATION_EXP = "\\x0d\\x0d\\x0a(([0-9]{2}|[0-9]{3})([ENSW])* [A-Z]{3})\\x0d\\x0d\\x0a"; + final Pattern isollocationPattern = Pattern.compile(ISOLLOCATION_EXP); + Matcher isollocMatcher = isollocationPattern.matcher(theSection); + if (isollocMatcher.find()) { + line = isollocMatcher.group(1); + } + + if (line != null) { + ConvSigmetLocation currentLocation = new ConvSigmetLocation(); + currentLocation.setLocationLine(line); + currentLocation.setLocation(line); + currentLocation.setIndex(1); + // Get a latLonPoint for this station ID from "vors" location table + point = LatLonLocTbl.getLatLonPoint(line, "vors"); + currentLocation.setLatitude(point + .getLatitude(LatLonPoint.INDEGREES)); + currentLocation.setLongitude(point + .getLongitude(LatLonPoint.INDEGREES)); + sectionTable.addConvSigmetLocation(currentLocation); + } + } + + /** + * Parse the location lines and add location table to the section table if + * any + * + * @param theSection + * The section lines from bulletin message + * @param sectionTable + * The section Table + * @return true if finds a location line + */ + public static Boolean processLocation(String theSection, + ConvSigmetSection sectionTable) { + + Boolean hasLocationLine = true; + String locationDelimiter = "-"; + + ArrayList terminationList = new ArrayList(); + terminationList.addAll(Arrays + .asList(new String[] { "WST", "REF", "LINE", "AREA", "ISOL", + "DMSHG", "DVLPG", "DSIPTG", "INTSFYG" })); + + LatLonPoint point = null; + + Scanner sclocations = new Scanner(theSection).useDelimiter("FROM"); + + // throws away the first section which is not the "FROM" location + String locationSection = sclocations.next(); + + if (sclocations.hasNext()) { + locationSection = sclocations.next(); + + Scanner scLocationLine = new Scanner(locationSection) + .useDelimiter("\\x0d\\x0d\\x0a"); + String lines = " "; + String curLine = null; + ArrayList locationList = new ArrayList(); + locationList.clear(); + Boolean notBreak = true; + + while (scLocationLine.hasNext() && notBreak) { + // Get next location line + curLine = scLocationLine.next(); + + Scanner scLocationToken = new Scanner(curLine); + if (scLocationToken.hasNext()) { + // Check the first token from each line + String firstToken = scLocationToken.next(); + if (terminationList.contains(firstToken)) { + // terminate + notBreak = false; + break; + } + } + lines = lines.concat(" ").concat(curLine); + } + + // Clean up the leading space + lines = UtilN.removeLeadingWhiteSpaces(lines); + // Parse the location lines by a "-" + Scanner scLocation = new Scanner(lines) + .useDelimiter(locationDelimiter); + locationList.clear(); + // Get all locations + while (scLocation.hasNext()) { + locationList.add(scLocation.next()); + } + + // set locations to data base + if (locationList.size() > 1) { + Integer idxLocation = 0; + for (String Location : locationList) { + + ConvSigmetLocation currentLocation = new ConvSigmetLocation(); + currentLocation.setLocationLine(lines); + currentLocation.setLocation(Location); + + // Get a latLonPoint for this station ID from "vors" + // location table + point = LatLonLocTbl.getLatLonPoint(Location, "vors"); + currentLocation.setLatitude(point + .getLatitude(LatLonPoint.INDEGREES)); + currentLocation.setLongitude(point + .getLongitude(LatLonPoint.INDEGREES)); + + currentLocation.setIndex(idxLocation + 1); + idxLocation++; + + sectionTable.addConvSigmetLocation(currentLocation); + } + } else { + hasLocationLine = false; + } + + } else { + hasLocationLine = false; + } + + return hasLocationLine; + } + +} diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.convsigmet/gov.noaa.nws.ncep.edex.plugin.convsigmet/src/gov/noaa/nws/ncep/edex/plugin/convsigmet/util/package-info.java b/ncep/gov.noaa.nws.ncep.edex.plugin.convsigmet/gov.noaa.nws.ncep.edex.plugin.convsigmet/src/gov/noaa/nws/ncep/edex/plugin/convsigmet/util/package-info.java index 4f09986546..91040f9487 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.convsigmet/gov.noaa.nws.ncep.edex.plugin.convsigmet/src/gov/noaa/nws/ncep/edex/plugin/convsigmet/util/package-info.java +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.convsigmet/gov.noaa.nws.ncep.edex.plugin.convsigmet/src/gov/noaa/nws/ncep/edex/plugin/convsigmet/util/package-info.java @@ -1,4 +1,4 @@ -/** -* Contains tools for decoder plug-ins -*/ -package gov.noaa.nws.ncep.edex.plugin.convsigmet.util; +/** +* Contains tools for decoder plug-ins +*/ +package gov.noaa.nws.ncep.edex.plugin.convsigmet.util; diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.convsigmet/res/spring/convsigmet-common.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.convsigmet/res/spring/convsigmet-common.xml index 4e0c093444..296212af97 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.convsigmet/res/spring/convsigmet-common.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.convsigmet/res/spring/convsigmet-common.xml @@ -1,26 +1,26 @@ - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.convsigmet/res/spring/convsigmet-ingest.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.convsigmet/res/spring/convsigmet-ingest.xml index 57168d5fda..cc09493589 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.convsigmet/res/spring/convsigmet-ingest.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.convsigmet/res/spring/convsigmet-ingest.xml @@ -1,73 +1,73 @@ - - - - - - - - - - - - - - - - - - - - - - - - - convsigmet - - - - - - - - - - - - - java.lang.Throwable - - - - - - - java.lang.Throwable - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + convsigmet + + + + + + + + + + + + + java.lang.Throwable + + + + + + + java.lang.Throwable + + + + + \ No newline at end of file diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.convsigmet/src/gov/noaa/nws/ncep/edex/plugin/convsigmet/decoder/ConvSigmetDecoder.java b/ncep/gov.noaa.nws.ncep.edex.plugin.convsigmet/src/gov/noaa/nws/ncep/edex/plugin/convsigmet/decoder/ConvSigmetDecoder.java index 39e26d3f2c..40ee86d5ab 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.convsigmet/src/gov/noaa/nws/ncep/edex/plugin/convsigmet/decoder/ConvSigmetDecoder.java +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.convsigmet/src/gov/noaa/nws/ncep/edex/plugin/convsigmet/decoder/ConvSigmetDecoder.java @@ -1,224 +1,224 @@ -/** - * - * Convective Sigmet Decoder - * - * This java class decodes CONVSIGMET (convective sigmet) raw data. - * HISTORY - * - * Date Ticket# Engineer Description - * ------------ ---------- ----------- -------------------------- - * 03/2009 87/114 L. Lin Initial coding - * 06/2009 87/114 L. Lin Increase size of locationLine and location - * and generalize method "processLocation". - * 07/2009 87/114 L. Lin Migration to TO11 - * - * - * This code has been developed by the SIB for use in the AWIPS2 system. - * @author L. Lin - * @version 1.0 - */ - -package gov.noaa.nws.ncep.edex.plugin.convsigmet.decoder; - -import gov.noaa.nws.ncep.common.dataplugin.convsigmet.ConvSigmetRecord; -import gov.noaa.nws.ncep.common.dataplugin.convsigmet.ConvSigmetSection; -import gov.noaa.nws.ncep.edex.plugin.convsigmet.util.ConvSigmetParser; -import gov.noaa.nws.ncep.edex.util.UtilN; - -import java.util.ArrayList; -import java.util.Calendar; -import java.util.Scanner; - -import com.raytheon.edex.esb.Headers; -import com.raytheon.edex.exception.DecoderException; -import com.raytheon.edex.plugin.AbstractDecoder; -import com.raytheon.uf.common.dataplugin.PluginDataObject; -import com.raytheon.uf.common.dataplugin.PluginException; -import com.raytheon.uf.edex.decodertools.core.IDecoderConstants; - -public class ConvSigmetDecoder extends AbstractDecoder { - - private final String pluginName; - - /** - * Constructor - * - * @throws DecoderException - */ - public ConvSigmetDecoder(String name) throws DecoderException { - pluginName = name; - } - - public PluginDataObject[] decode(byte[] data, Headers headers) - throws DecoderException { - - String traceId = ""; - if (headers != null) { - traceId = (String) headers.get("traceId"); - } - - String sectionDelim = "OUTLOOK|CONVECTIVE"; - String etx = IDecoderConstants.ETX; - String theBulletin = null; - - String region = null; - Calendar startTime = null; - byte[] messageData = null; - - ConvSigmetRecord record = null; - - ConvSigmetSeparator sep = ConvSigmetSeparator.separate(data, headers); - messageData = sep.next(); - String theMessage = new String(messageData); - - /* - * May have multiple duplicate bulletins, only get the first bulletin - * and eliminate the remaining bulletins after the first bulletin. - */ - Scanner cc = new Scanner(theMessage).useDelimiter(etx); - if (cc.hasNext()) { - theBulletin = cc.next(); - } else { - theBulletin = theMessage; - } - - // record = new ConvsigmetRecord(); - // Decode and set WMO line - record = ConvSigmetParser.processWMO(theBulletin, headers); - - // Decode the forecast region such as: W, C, or E - region = ConvSigmetParser.processFcstRegion(theBulletin); - String forecastRegion = "SIG".concat(region); - - /* - * Check the Convsigmet record object. If not, throws exception. - */ - if (record != null) { - record.setTraceId(traceId); - record.setPluginName(pluginName); - record.setReportType(pluginName); - record.setForecastRegion(forecastRegion); - try { - record.constructDataURI(); - } catch (PluginException e) { - logger.error("Error constructing dataURI", e); - record = null; - } - } - - if (record != null) { - try { - // Replace special characters to a blank so that it may be - // readable - record.setBullMessage(UtilN - .removeLeadingWhiteSpaces((theBulletin.substring(5)) - .replace('\036', ' ').replace('\r', ' ') - .replace('\003', ' ').replace('\000', ' ') - .replace('\001', ' '))); - - // Decode the starting time - startTime = ConvSigmetParser.processStartTime(theBulletin, - headers); - - // Decode the correction flag and set - Boolean correctionFlag = ConvSigmetParser - .processCorrectionFlag(theBulletin); - Integer correction = 0; - if (correctionFlag) { - correction = 1; - } - record.setCorrectionFlag(correction); - - /* - * Break the bulletin message into sections by a "OUTLOOK" or - * "CONVECTIVE". - */ - Scanner sc = new Scanner(theBulletin) - .useDelimiter(sectionDelim); - - ArrayList segmentList = new ArrayList(); - segmentList.clear(); - while (sc.hasNext()) { - String segment = sc.next(); - segmentList.add(segment); - } - - Calendar issueTime = record.getIssueTime(); - /* - * process each section in a order of section and location line - */ - for (String segment : segmentList) { - - // starts a new section - Scanner sc2 = new Scanner(segment); - String whatSection = sc2.next(); - if (whatSection.equals("SIGMET") - || whatSection.equals("SIGMET...NONE")) { - segment = "CONVECTIVE".concat(segment); - - // process this section which starts with - // "CONVECTIVE SIGMET". - ConvSigmetSection section = ConvSigmetParser - .processSection(segment, issueTime, startTime, - region, headers); - record.addConvSigmetSection(section); - } else if (whatSection.equals("VALID")) { - segment = "OUTLOOK".concat(segment); - - // process this section which starts with - // "OUTLOOK VALID". - Scanner scOutlook = new Scanner(segment) - .useDelimiter("AREA "); - ArrayList outlookList = new ArrayList(); - outlookList.clear(); - - // Check if "OUTLOOK" section contains more than one - // "AREA". - while (scOutlook.hasNext()) { - String outlookSegment = scOutlook.next(); - outlookList.add(outlookSegment); - } - - if (outlookList.size() <= 1) { - // only one "AREA" or NIL report - ConvSigmetSection outlook = ConvSigmetParser - .processOutLook(segment, region, headers); - record.addConvSigmetSection(outlook); - } else { - /* - * Here are more than one outlook areas Store the - * header section and remove it from the outlook - * list - */ - String outlookHeader = outlookList.get(0); - outlookList.remove(outlookHeader); - // process multiple outlook sections - for (String outlookSection : outlookList) { - outlookSection = outlookHeader.concat("AREA ") - .concat(outlookSection); - ConvSigmetSection outlook = ConvSigmetParser - .processOutLook(outlookSection, region, - headers); - record.addConvSigmetSection(outlook); - } - } - } - } - } catch (Exception e) { - logger.error("Error processing decoded sigmet", e); - record = null; - } - } - - /* - * Return the ConvsigmetRecord record object. - */ - if (record == null) { - return new PluginDataObject[0]; - } else { - return new PluginDataObject[] { record }; - } - - } - -} +/** + * + * Convective Sigmet Decoder + * + * This java class decodes CONVSIGMET (convective sigmet) raw data. + * HISTORY + * + * Date Ticket# Engineer Description + * ------------ ---------- ----------- -------------------------- + * 03/2009 87/114 L. Lin Initial coding + * 06/2009 87/114 L. Lin Increase size of locationLine and location + * and generalize method "processLocation". + * 07/2009 87/114 L. Lin Migration to TO11 + * + * + * This code has been developed by the SIB for use in the AWIPS2 system. + * @author L. Lin + * @version 1.0 + */ + +package gov.noaa.nws.ncep.edex.plugin.convsigmet.decoder; + +import gov.noaa.nws.ncep.common.dataplugin.convsigmet.ConvSigmetRecord; +import gov.noaa.nws.ncep.common.dataplugin.convsigmet.ConvSigmetSection; +import gov.noaa.nws.ncep.edex.plugin.convsigmet.util.ConvSigmetParser; +import gov.noaa.nws.ncep.edex.util.UtilN; + +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Scanner; + +import com.raytheon.edex.esb.Headers; +import com.raytheon.edex.exception.DecoderException; +import com.raytheon.edex.plugin.AbstractDecoder; +import com.raytheon.uf.common.dataplugin.PluginDataObject; +import com.raytheon.uf.common.dataplugin.PluginException; +import com.raytheon.uf.edex.decodertools.core.IDecoderConstants; + +public class ConvSigmetDecoder extends AbstractDecoder { + + private final String pluginName; + + /** + * Constructor + * + * @throws DecoderException + */ + public ConvSigmetDecoder(String name) throws DecoderException { + pluginName = name; + } + + public PluginDataObject[] decode(byte[] data, Headers headers) + throws DecoderException { + + String traceId = ""; + if (headers != null) { + traceId = (String) headers.get("traceId"); + } + + String sectionDelim = "OUTLOOK|CONVECTIVE"; + String etx = IDecoderConstants.ETX; + String theBulletin = null; + + String region = null; + Calendar startTime = null; + byte[] messageData = null; + + ConvSigmetRecord record = null; + + ConvSigmetSeparator sep = ConvSigmetSeparator.separate(data, headers); + messageData = sep.next(); + String theMessage = new String(messageData); + + /* + * May have multiple duplicate bulletins, only get the first bulletin + * and eliminate the remaining bulletins after the first bulletin. + */ + Scanner cc = new Scanner(theMessage).useDelimiter(etx); + if (cc.hasNext()) { + theBulletin = cc.next(); + } else { + theBulletin = theMessage; + } + + // record = new ConvsigmetRecord(); + // Decode and set WMO line + record = ConvSigmetParser.processWMO(theBulletin, headers); + + // Decode the forecast region such as: W, C, or E + region = ConvSigmetParser.processFcstRegion(theBulletin); + String forecastRegion = "SIG".concat(region); + + /* + * Check the Convsigmet record object. If not, throws exception. + */ + if (record != null) { + record.setTraceId(traceId); + record.setPluginName(pluginName); + record.setReportType(pluginName); + record.setForecastRegion(forecastRegion); + try { + record.constructDataURI(); + } catch (PluginException e) { + logger.error("Error constructing dataURI", e); + record = null; + } + } + + if (record != null) { + try { + // Replace special characters to a blank so that it may be + // readable + record.setBullMessage(UtilN + .removeLeadingWhiteSpaces((theBulletin.substring(5)) + .replace('\036', ' ').replace('\r', ' ') + .replace('\003', ' ').replace('\000', ' ') + .replace('\001', ' '))); + + // Decode the starting time + startTime = ConvSigmetParser.processStartTime(theBulletin, + headers); + + // Decode the correction flag and set + Boolean correctionFlag = ConvSigmetParser + .processCorrectionFlag(theBulletin); + Integer correction = 0; + if (correctionFlag) { + correction = 1; + } + record.setCorrectionFlag(correction); + + /* + * Break the bulletin message into sections by a "OUTLOOK" or + * "CONVECTIVE". + */ + Scanner sc = new Scanner(theBulletin) + .useDelimiter(sectionDelim); + + ArrayList segmentList = new ArrayList(); + segmentList.clear(); + while (sc.hasNext()) { + String segment = sc.next(); + segmentList.add(segment); + } + + Calendar issueTime = record.getIssueTime(); + /* + * process each section in a order of section and location line + */ + for (String segment : segmentList) { + + // starts a new section + Scanner sc2 = new Scanner(segment); + String whatSection = sc2.next(); + if (whatSection.equals("SIGMET") + || whatSection.equals("SIGMET...NONE")) { + segment = "CONVECTIVE".concat(segment); + + // process this section which starts with + // "CONVECTIVE SIGMET". + ConvSigmetSection section = ConvSigmetParser + .processSection(segment, issueTime, startTime, + region, headers); + record.addConvSigmetSection(section); + } else if (whatSection.equals("VALID")) { + segment = "OUTLOOK".concat(segment); + + // process this section which starts with + // "OUTLOOK VALID". + Scanner scOutlook = new Scanner(segment) + .useDelimiter("AREA "); + ArrayList outlookList = new ArrayList(); + outlookList.clear(); + + // Check if "OUTLOOK" section contains more than one + // "AREA". + while (scOutlook.hasNext()) { + String outlookSegment = scOutlook.next(); + outlookList.add(outlookSegment); + } + + if (outlookList.size() <= 1) { + // only one "AREA" or NIL report + ConvSigmetSection outlook = ConvSigmetParser + .processOutLook(segment, region, headers); + record.addConvSigmetSection(outlook); + } else { + /* + * Here are more than one outlook areas Store the + * header section and remove it from the outlook + * list + */ + String outlookHeader = outlookList.get(0); + outlookList.remove(outlookHeader); + // process multiple outlook sections + for (String outlookSection : outlookList) { + outlookSection = outlookHeader.concat("AREA ") + .concat(outlookSection); + ConvSigmetSection outlook = ConvSigmetParser + .processOutLook(outlookSection, region, + headers); + record.addConvSigmetSection(outlook); + } + } + } + } + } catch (Exception e) { + logger.error("Error processing decoded sigmet", e); + record = null; + } + } + + /* + * Return the ConvsigmetRecord record object. + */ + if (record == null) { + return new PluginDataObject[0]; + } else { + return new PluginDataObject[] { record }; + } + + } + +} diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.convsigmet/src/gov/noaa/nws/ncep/edex/plugin/convsigmet/decoder/ConvSigmetSeparator.java b/ncep/gov.noaa.nws.ncep.edex.plugin.convsigmet/src/gov/noaa/nws/ncep/edex/plugin/convsigmet/decoder/ConvSigmetSeparator.java index 507e9f59cc..da0b868bd5 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.convsigmet/src/gov/noaa/nws/ncep/edex/plugin/convsigmet/decoder/ConvSigmetSeparator.java +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.convsigmet/src/gov/noaa/nws/ncep/edex/plugin/convsigmet/decoder/ConvSigmetSeparator.java @@ -1,145 +1,145 @@ -/** - * ConvsigmetSeparator - * - * This class sets the raw data to an Arraylist, records, of - * String based on a uniquely identified separator. - * - *
- * L. Lin                               03/2009         Creation
- * 
- * - * This code has been developed by the SIB for use in the AWIPS system. - */ - -package gov.noaa.nws.ncep.edex.plugin.convsigmet.decoder; - -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; -import java.util.NoSuchElementException; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - -import com.raytheon.edex.esb.Headers; -import com.raytheon.edex.plugin.AbstractRecordSeparator; -import com.raytheon.edex.util.Util; - -public class ConvSigmetSeparator extends AbstractRecordSeparator { - private final Log logger = LogFactory.getLog(getClass()); - - /** Regex used for separate the bulletins */ - private static final String BULLSEPARATOR = "([0-9]{3})( )*\\x0d\\x0d\\x0a([A-Z]{4}[0-9]{2}) ([A-Z]{4}) ([0-9]{6})( [A-Z]{3})?\\x0d\\x0d\\x0a"; - - /** Regex matcher */ - private Matcher matcher; - - /** Pattern object for regex search */ - private Pattern pattern; - - /** List of records contained in file */ - private List records; - - private Iterator iterator = null; - - /** - * Constructor. - * - */ - public ConvSigmetSeparator() { - records = new ArrayList(); - } - - public static ConvSigmetSeparator separate(byte[] data, Headers headers) { - ConvSigmetSeparator ds = new ConvSigmetSeparator(); - ds.setData(data, headers); - return ds; - } - - public void setData(byte[] data, Headers headers) { - doSeparate(new String(data)); - iterator = records.iterator(); - } - - /* - * (non-Javadoc) - * - * @see com.raytheon.edex.plugin.IRecordSeparator#hasNext() - */ - public boolean hasNext() { - if (iterator == null) { - return false; - } else { - return iterator.hasNext(); - } - } - - /** - * Get record - */ - public byte[] next() { - try { - String temp = iterator.next(); - if (Util.isEmptyString(temp)) { - return (byte[]) null; - } else { - return temp.getBytes(); - } - } catch (NoSuchElementException e) { - return (byte[]) null; - } - } - - /** - * @param message - * separate bulletins - */ - private void doSeparate(String message) { - /* Regex used for separate the bulletins */ - - try { - pattern = Pattern.compile(BULLSEPARATOR); - matcher = pattern.matcher(message); - - /* - * Set number of bulletins to records only if the bulletin separator - * is not the same. At the point, only separators are stored in - * "records" - */ - while (matcher.find()) { - if (!records.contains(matcher.group())) { - records.add(matcher.group()); - } - } - - /* - * Append the raw data file to the records. - */ - for (int i = 0; i < records.size(); i++) { - if (i < records.size() - 1) { - records.set( - i, - "\n" - + message.substring( - message.indexOf(records.get(i)), - message.indexOf(records.get(i + 1)))); - } else { - records.set( - i, - "\n" - + message.substring(message.indexOf(records - .get(i)))); - } - } - } catch (Exception e) { - e.printStackTrace(); - if (logger.isInfoEnabled()) { - logger.info("No valid records found!"); - } - logger.warn("No valid records found!"); - } - return; - } -} +/** + * ConvsigmetSeparator + * + * This class sets the raw data to an Arraylist, records, of + * String based on a uniquely identified separator. + * + *
+ * L. Lin                               03/2009         Creation
+ * 
+ * + * This code has been developed by the SIB for use in the AWIPS system. + */ + +package gov.noaa.nws.ncep.edex.plugin.convsigmet.decoder; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; +import java.util.NoSuchElementException; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import com.raytheon.edex.esb.Headers; +import com.raytheon.edex.plugin.AbstractRecordSeparator; +import com.raytheon.edex.util.Util; + +public class ConvSigmetSeparator extends AbstractRecordSeparator { + private final Log logger = LogFactory.getLog(getClass()); + + /** Regex used for separate the bulletins */ + private static final String BULLSEPARATOR = "([0-9]{3})( )*\\x0d\\x0d\\x0a([A-Z]{4}[0-9]{2}) ([A-Z]{4}) ([0-9]{6})( [A-Z]{3})?\\x0d\\x0d\\x0a"; + + /** Regex matcher */ + private Matcher matcher; + + /** Pattern object for regex search */ + private Pattern pattern; + + /** List of records contained in file */ + private List records; + + private Iterator iterator = null; + + /** + * Constructor. + * + */ + public ConvSigmetSeparator() { + records = new ArrayList(); + } + + public static ConvSigmetSeparator separate(byte[] data, Headers headers) { + ConvSigmetSeparator ds = new ConvSigmetSeparator(); + ds.setData(data, headers); + return ds; + } + + public void setData(byte[] data, Headers headers) { + doSeparate(new String(data)); + iterator = records.iterator(); + } + + /* + * (non-Javadoc) + * + * @see com.raytheon.edex.plugin.IRecordSeparator#hasNext() + */ + public boolean hasNext() { + if (iterator == null) { + return false; + } else { + return iterator.hasNext(); + } + } + + /** + * Get record + */ + public byte[] next() { + try { + String temp = iterator.next(); + if (Util.isEmptyString(temp)) { + return (byte[]) null; + } else { + return temp.getBytes(); + } + } catch (NoSuchElementException e) { + return (byte[]) null; + } + } + + /** + * @param message + * separate bulletins + */ + private void doSeparate(String message) { + /* Regex used for separate the bulletins */ + + try { + pattern = Pattern.compile(BULLSEPARATOR); + matcher = pattern.matcher(message); + + /* + * Set number of bulletins to records only if the bulletin separator + * is not the same. At the point, only separators are stored in + * "records" + */ + while (matcher.find()) { + if (!records.contains(matcher.group())) { + records.add(matcher.group()); + } + } + + /* + * Append the raw data file to the records. + */ + for (int i = 0; i < records.size(); i++) { + if (i < records.size() - 1) { + records.set( + i, + "\n" + + message.substring( + message.indexOf(records.get(i)), + message.indexOf(records.get(i + 1)))); + } else { + records.set( + i, + "\n" + + message.substring(message.indexOf(records + .get(i)))); + } + } + } catch (Exception e) { + e.printStackTrace(); + if (logger.isInfoEnabled()) { + logger.info("No valid records found!"); + } + logger.warn("No valid records found!"); + } + return; + } +} diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.convsigmet/src/gov/noaa/nws/ncep/edex/plugin/convsigmet/decoder/package-info.java b/ncep/gov.noaa.nws.ncep.edex.plugin.convsigmet/src/gov/noaa/nws/ncep/edex/plugin/convsigmet/decoder/package-info.java index 428689393c..219fe9e5e6 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.convsigmet/src/gov/noaa/nws/ncep/edex/plugin/convsigmet/decoder/package-info.java +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.convsigmet/src/gov/noaa/nws/ncep/edex/plugin/convsigmet/decoder/package-info.java @@ -1,4 +1,4 @@ -/** -* Contains decoder.java for decoder plug-ins -*/ -package gov.noaa.nws.ncep.edex.plugin.convsigmet.decoder;; +/** +* Contains decoder.java for decoder plug-ins +*/ +package gov.noaa.nws.ncep.edex.plugin.convsigmet.decoder;; diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.convsigmet/src/gov/noaa/nws/ncep/edex/plugin/convsigmet/util/ConvSigmetParser.java b/ncep/gov.noaa.nws.ncep.edex.plugin.convsigmet/src/gov/noaa/nws/ncep/edex/plugin/convsigmet/util/ConvSigmetParser.java index 460c05d833..7f8718ae55 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.convsigmet/src/gov/noaa/nws/ncep/edex/plugin/convsigmet/util/ConvSigmetParser.java +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.convsigmet/src/gov/noaa/nws/ncep/edex/plugin/convsigmet/util/ConvSigmetParser.java @@ -1,644 +1,644 @@ -/** - * Convsigmet DecoderUtil - * - * This java class intends to serve as a decoder utility for Convsigmet. - * - * HISTORY - * - * Date Ticket# Engineer Description - * ------------ ---------- ----------- -------------------------- - * 03/2009 87/114 L. Lin Initial coding - * 06/2009 87/114 L. Lin Generalize the method processLocation. - * 07/2009 87/114 L. Lin Migration to TO11 - * 09/2009 87/114 L. Lin Add latitude/longitude to location table - * - * - * This code has been developed by the SIB for use in the AWIPS2 system. - * @author L. Lin - * @version 1.0 - */ - -package gov.noaa.nws.ncep.edex.plugin.convsigmet.util; - -import gov.noaa.nws.ncep.common.dataplugin.convsigmet.ConvSigmetLocation; -import gov.noaa.nws.ncep.common.dataplugin.convsigmet.ConvSigmetRecord; -import gov.noaa.nws.ncep.common.dataplugin.convsigmet.ConvSigmetSection; -import gov.noaa.nws.ncep.edex.tools.decoder.LatLonLocTbl; -import gov.noaa.nws.ncep.edex.util.UtilN; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Calendar; -import java.util.Scanner; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -import com.raytheon.edex.esb.Headers; -import com.raytheon.uf.common.time.DataTime; -import com.raytheon.uf.edex.decodertools.core.LatLonPoint; -import com.raytheon.uf.edex.decodertools.time.TimeTools; - -public class ConvSigmetParser { - - /** - * Constructor - */ - public ConvSigmetParser() { - } - - /** - * Parse the WMO line and store WMO header, OfficeID, issue time, - * designatorBBB,... - * - * @param wmoline - * The bulletin message - * - * @return a ConvsigmetRecord - */ - public static ConvSigmetRecord processWMO(String wmoline, Headers headers) { - - ConvSigmetRecord record = null; - // Regular expression for WMO/ICAO, station ID, and issue date (and - // maybe designator BBB) - final String WMO_EXP = "([A-Z]{4}[0-9]{2}) ([A-Z]{4}) ([0-9]{6})( ([A-Z]{3}))?"; - - // Pattern used for extracting WMO header, officeID, product purge time, - // and issue date and designatorBBB - final Pattern wmoPattern = Pattern.compile(WMO_EXP); - Matcher theMatcher = wmoPattern.matcher(wmoline); - - if (theMatcher.find()) { - record = new ConvSigmetRecord(); - - record.setWmoHeader(theMatcher.group(1)); - record.setIssueOffice(theMatcher.group(2)); - record.setDesignatorBBB(theMatcher.group(5)); - - // Decode the issue time. - Calendar issueTime = TimeTools.findDataTime(theMatcher.group(3), - headers); - record.setIssueTime(issueTime); - - DataTime dataTime = new DataTime(issueTime); - record.setDataTime(dataTime); - } - return record; - } - - /** - * Obtains forecast region as: SIGW, SIGC, or SIGE from a report - * - * @param bullMessage - * The bulletin message - * @return a string for forecast region - */ - public static String processFcstRegion(String bullMessage) { - - // Regular expression for "SIG" forecast region - final String FCSTREGION_EXP = "SIG([A-Z]{1}) ( )*"; - - // Pattern used for extracting forecast region - final Pattern fcstregionPattern = Pattern.compile(FCSTREGION_EXP); - Matcher theMatcher = fcstregionPattern.matcher(bullMessage); - - if (theMatcher.find()) { - return theMatcher.group(1); - } else { - return " "; - } - } - - /** - * process regular section of a convective sigmet report - * - * @param theSection - * The section lines from bulletin message - * @param issueTime - * The bulletin issue time - * @param startTime - * The start time for this section - * @param forecastRegion - * as "W", "C", or "E" - * @return a ConvsigmetSection table - */ - public static ConvSigmetSection processSection(String theSection, - Calendar issueTime, Calendar startTime, String forecastRegion, - Headers headers) { - - // Default equal to one hour if there is no valid time in report - final int validPeriod = 1; - - // Decode the phenomena description - ConvSigmetSection currentSection = ConvSigmetParser - .processPhenomena(theSection); - - // Replace the special characters - currentSection.setSegment(theSection.replace('\r', ' ') - .replace('\036', ' ').replace('\003', ' ').replace('\000', ' ') - .replace('\001', ' ')); - - // Decode the locations - ConvSigmetParser.processLocation(theSection, currentSection); - - // Decode the sequence ID - String sequenceID = ConvSigmetParser.processSequenceID(theSection); - if (sequenceID.equals(" ")) { - // Default as: 0W, 0C, or 0E if no sequenceID has been found. - sequenceID = "0".concat(forecastRegion); - } - currentSection.setSequenceID(sequenceID); - - // Set the starting time - if (startTime == null) { - currentSection.setStartTime(issueTime); - } else { - currentSection.setStartTime(startTime); - } - - // Decode the end time - Calendar endTime = ConvSigmetParser.processEndTime(theSection, - currentSection, headers); - if (endTime == null) { - /* - * if no end time available, end time will be the issue time plus a - * valid period; the default is one hour for now. - */ - endTime = TimeTools.copy(issueTime); - endTime.add(Calendar.HOUR, validPeriod); - currentSection.setEndTime(endTime); - } else { - currentSection.setEndTime(endTime); - } - - int startMonth = startTime.get(Calendar.MONTH); - int endMonth = endTime.get(Calendar.MONTH); - int startDay = startTime.get(Calendar.DAY_OF_MONTH); - int endDay = endTime.get(Calendar.DAY_OF_MONTH); - if ((startMonth == endMonth) && (startDay > endDay)) { - // In case the end time needs to advance one month - endTime.add(Calendar.MONTH, 1); - } - - return currentSection; - } - - /** - * process the outlook section of a convective sigmet report. - * - * @param theOutlook - * The outlook section lines from bulletin message - * @param forecastRegion - * as "W", "C", or "E" - * @return a ConvsigmetSection table - */ - public static ConvSigmetSection processOutLook(String theOutlook, - String forecastRegion, Headers headers) { - - ConvSigmetSection currentOutLook = new ConvSigmetSection(); - - currentOutLook.setSegment(theOutlook.replace('\r', ' ') - .replace('\036', ' ').replace('\003', ' ').replace('\000', ' ') - .replace('\001', ' ')); - currentOutLook.setClassType("OUTLOOK"); - - // Decode start time and end time - ConvSigmetParser.processValidTime(theOutlook, currentOutLook, headers); - - // Decode locations - if (ConvSigmetParser.processLocation(theOutlook, currentOutLook)) { - final String SID_EXP = "AREA ([0-9]{1})...FROM"; - - // Pattern used for extracting the number of sequence ID. - final Pattern sidPattern = Pattern.compile(SID_EXP); - - Matcher theMatcher = sidPattern.matcher(theOutlook); - - // Default sequenceID as: 1W, 1C, or 1E if locations have been - // found. - String sequenceID = "1".concat(forecastRegion); - if (theMatcher.find()) { - // Multiple areas such as: "AREA 1", "AREA 2", ...etc - sequenceID = theMatcher.group(1).concat(forecastRegion); - } - currentOutLook.setSequenceID(sequenceID); - } else { - // Default sequenceID as: 0W, 0C, or 0E if outlook section is a NIL - // report. - String sequenceID = "0".concat(forecastRegion); - currentOutLook.setSequenceID(sequenceID); - } - - return currentOutLook; - } - - /** - * Obtains start time from input report - * - * @param theSection - * The bulletin message - * @return a calendar for start time - */ - public static Calendar processStartTime(String theSection, Headers headers) { - - // Regular expression for start time - final String STARTTIME_EXP = "(\\x1e)([A-Z]{4}) ([A-Z]{3}) ([0-9]{6})( [A-Z]{3})?"; - - // attern used for extracting the starting time - final Pattern starttimePattern = Pattern.compile(STARTTIME_EXP); - - // Calendar mndTime = Calendar.getInstance(); - - Matcher theMatcher = starttimePattern.matcher(theSection); - - if (theMatcher.find()) { - // Get start time - Calendar mndTime = null; - return TimeTools.findDataTime(theMatcher.group(4), headers); - } else { - return null; - } - } - - /** - * Obtains correction flag - * - * @param theSection - * The bulletin message - * @return true if finds a correction flag - */ - public static Boolean processCorrectionFlag(String theSection) { - - Boolean correctionFlag = false; - - // Regular expression for the correction flag - final String CORFLAG_EXP = "(\\x1e)([A-Z]{4}) ([A-Z]{3}) ([0-9]{6})( [A-Z]{3})?"; - - // Pattern used for extracting the correction flag - final Pattern corflagPattern = Pattern.compile(CORFLAG_EXP); - - Matcher theMatcher = corflagPattern.matcher(theSection); - - if (theMatcher.find()) { - Scanner scCorrection = new Scanner(theMatcher.group(0)); - - // check if this contains a correction flag - while (scCorrection.hasNext()) { - if (scCorrection.next().equals("COR")) { - correctionFlag = true; - } - } - - } - return correctionFlag; - } - - /** - * Obtains the sequence ID - * - * @param inSegment - * The segment which contains this sequence ID - * @return a string for sequence ID - */ - public static String processSequenceID(String inSegment) { - - // Regular expression for the sequence ID - final String SEQUENCEID_EXP = "CONVECTIVE SIGMET (([0-9]{2}|[0-9]{1})[A-Z]{1})"; - - // Pattern used for extracting the sequence ID - final Pattern sequenceidPattern = Pattern.compile(SEQUENCEID_EXP); - Matcher theMatcher = sequenceidPattern.matcher(inSegment); - - if (theMatcher.find()) { - return theMatcher.group(1); - } else { - return " "; - } - } - - /** - * Get the end time - * - * @param theSegment - * The segment which contains end time - * @param section - * The section table which contains the start time - * @return a calendar for end time - */ - public static Calendar processEndTime(String theSegment, - ConvSigmetSection section, Headers headers) { - - // Regular expression for end time - final String ENDTIME_EXP = "VALID UNTIL ([0-9]{4})Z"; - - // Pattern used for extracting the end time - final Pattern endtimePattern = Pattern.compile(ENDTIME_EXP); - - // Calendar mndTime = Calendar.getInstance(); - - Matcher theMatcher = endtimePattern.matcher(theSegment); - - if (theMatcher.find()) { - Calendar startTime = section.getStartTime(); - String endTimeGroup = Integer.toString( - startTime.get(Calendar.DAY_OF_MONTH)).concat( - theMatcher.group(1)); - if (startTime.get(Calendar.DAY_OF_MONTH) < 10) { - // add a "0" if the day of month less than 10 - endTimeGroup = "0".concat(endTimeGroup); - } - // get the end time. - return TimeTools.findDataTime(endTimeGroup, headers); - } else { - return null; - } - } - - /** - * Parse the phenomena... - * - * @param theFlight - * The flight level line - * @return a section record - */ - public static ConvSigmetSection processPhenomena(String theFlight) { - - String classType = null; - - // Regular expression for the flight line - final String FL_EXP = "((DMSHG|DSIPTG|INTSFYG|DVLPG) )?(LINE|AREA|ISOL)(\\S|\\s)*FROM ([0-9]{3})?([0-9]{2})KT. ((TOP|TOPS) (TO|ABV)) FL([0-9]{3})"; - - // Pattern used for extracting the direction, speed, distance, and - // flight level - final Pattern flPattern = Pattern.compile(FL_EXP); - Matcher theMatcher = flPattern.matcher(theFlight); - - // Regular expression for the classType line - final String CLASS_EXP = "((DMSHG|DSIPTG|INTSFYG|DVLPG) )?(LINE|AREA|ISOL)(\\S|\\s)*((TOP|TOPS) (TO|ABV)) FL([0-9]{3})"; - - // Pattern used for extracting the class type and flight level - final Pattern classPattern = Pattern.compile(CLASS_EXP); - Matcher classMatcher = classPattern.matcher(theFlight); - - ConvSigmetSection currentSection = new ConvSigmetSection(); - - if (theMatcher.find()) { - classType = theMatcher.group(3); - - int direction = Integer.parseInt(theMatcher.group(5)); - int speed = Integer.parseInt(theMatcher.group(6)); - int flightLevel = Integer.parseInt(theMatcher.group(10)); - String flightLevelTop = theMatcher.group(7); - String intensity = theMatcher.group(1); - - currentSection.setFlightLevel(flightLevel); - currentSection.setDirection(direction); - currentSection.setSpeed(speed); - currentSection.setClassType(classType); - currentSection.setIntensity(intensity); - currentSection.setCloudTop(flightLevelTop); - - if (classType.equals("LINE")) { - final String DISTANCE_EXP = "LINE (EMBD )?(SEV )?TS ([0-9]{2})"; - final Pattern distancePattern = Pattern.compile(DISTANCE_EXP); - Matcher disMatcher = distancePattern.matcher(theFlight); - if (disMatcher.find()) { - int distance = Integer.parseInt(disMatcher.group(3)); - currentSection.setDistance(distance); - } - } else if (classType.equals("ISOL")) { - final String ISOLDISTANCE_EXP = "ISOL (\\S|\\s)* TS D([0-9]{2})"; - final Pattern isoldistancePattern = Pattern - .compile(ISOLDISTANCE_EXP); - Matcher isoldisMatcher = isoldistancePattern.matcher(theFlight); - if (isoldisMatcher.find()) { - int distance = Integer.parseInt(isoldisMatcher.group(2)); - currentSection.setDistance(distance); - } - // get ISOL location table - getIsolLocation(theFlight, currentSection); - } - - } else if (classMatcher.find()) { - classType = classMatcher.group(3); - - int flightLevel = Integer.parseInt(classMatcher.group(8)); - String flightLevelTop = classMatcher.group(5); - String intensity = classMatcher.group(1); - - currentSection.setFlightLevel(flightLevel); - currentSection.setClassType(classType); - currentSection.setIntensity(intensity); - currentSection.setCloudTop(flightLevelTop); - - if (classType.equals("LINE")) { - final String DISTANCE_EXP = "LINE (EMBD )?(SEV )?TS ([0-9]{2})"; - final Pattern distancePattern = Pattern.compile(DISTANCE_EXP); - Matcher disMatcher = distancePattern.matcher(theFlight); - if (disMatcher.find()) { - int distance = Integer.parseInt(disMatcher.group(3)); - currentSection.setDistance(distance); - } - } else if (classType.equals("ISOL")) { - final String ISOLDISTANCE_EXP = "ISOL (\\S|\\s)* TS D([0-9]{2})"; - final Pattern isoldistancePattern = Pattern - .compile(ISOLDISTANCE_EXP); - Matcher isoldisMatcher = isoldistancePattern.matcher(theFlight); - if (isoldisMatcher.find()) { - int distance = Integer.parseInt(isoldisMatcher.group(2)); - currentSection.setDistance(distance); - } - // get ISOL location table - getIsolLocation(theFlight, currentSection); - } - - } else { - // Finds no "flight level line", "CS" as default for a NIL report. - currentSection.setClassType("CS"); - currentSection.setIntensity(null); - } - - return currentSection; - } - - /** - * Obtains the start time and end time - * - * @param theSection - * The outlook section contains the valid times group - */ - public static void processValidTime(String theSection, - ConvSigmetSection currentOutLook, Headers headers) { - - // Regular expression for start time - final String TIMES_EXP = "OUTLOOK VALID ([0-9]{6})-([0-9]{6})"; - - // Pattern used for extracting the starting time and end time - final Pattern starttimePattern = Pattern.compile(TIMES_EXP); - - Calendar startTime = null; - Calendar endTime = null; - // Calendar mndTime = Calendar.getInstance(); - - Matcher theMatcher = starttimePattern.matcher(theSection); - - if (theMatcher.find()) { - // Decode the start time and end time; then set them. - startTime = TimeTools.findDataTime(theMatcher.group(1), headers); - currentOutLook.setStartTime(startTime); - endTime = TimeTools.findDataTime(theMatcher.group(2), headers); - - int startMonth = startTime.get(Calendar.MONTH); - int endMonth = endTime.get(Calendar.MONTH); - int startDay = startTime.get(Calendar.DAY_OF_MONTH); - int endDay = endTime.get(Calendar.DAY_OF_MONTH); - - if ((startMonth == endMonth) && (startDay > endDay)) { - // Roll over a month - endTime.add(Calendar.MONTH, 1); - } - - currentOutLook.setEndTime(endTime); - } else { - currentOutLook.setStartTime(startTime); - currentOutLook.setEndTime(endTime); - } - - } - - /** - * Obtains the location information for ISOL. - * - * @param theSection - * The section lines from bulletin message - * @param sectionTable - * The section Table - */ - public static void getIsolLocation(String theSection, - ConvSigmetSection sectionTable) { - - String line = null; - LatLonPoint point = null; - - final String ISOLLOCATION_EXP = "\\x0d\\x0d\\x0a(([0-9]{2}|[0-9]{3})([ENSW])* [A-Z]{3})\\x0d\\x0d\\x0a"; - final Pattern isollocationPattern = Pattern.compile(ISOLLOCATION_EXP); - Matcher isollocMatcher = isollocationPattern.matcher(theSection); - if (isollocMatcher.find()) { - line = isollocMatcher.group(1); - } - - if (line != null) { - ConvSigmetLocation currentLocation = new ConvSigmetLocation(); - currentLocation.setLocationLine(line); - currentLocation.setLocation(line); - currentLocation.setIndex(1); - // Get a latLonPoint for this station ID from "vors" location table - point = LatLonLocTbl.getLatLonPoint(line, "vors"); - currentLocation.setLatitude(point - .getLatitude(LatLonPoint.INDEGREES)); - currentLocation.setLongitude(point - .getLongitude(LatLonPoint.INDEGREES)); - sectionTable.addConvSigmetLocation(currentLocation); - } - } - - /** - * Parse the location lines and add location table to the section table if - * any - * - * @param theSection - * The section lines from bulletin message - * @param sectionTable - * The section Table - * @return true if finds a location line - */ - public static Boolean processLocation(String theSection, - ConvSigmetSection sectionTable) { - - Boolean hasLocationLine = true; - String locationDelimiter = "-"; - - ArrayList terminationList = new ArrayList(); - terminationList.addAll(Arrays - .asList(new String[] { "WST", "REF", "LINE", "AREA", "ISOL", - "DMSHG", "DVLPG", "DSIPTG", "INTSFYG" })); - - LatLonPoint point = null; - - Scanner sclocations = new Scanner(theSection).useDelimiter("FROM"); - - // throws away the first section which is not the "FROM" location - String locationSection = sclocations.next(); - - if (sclocations.hasNext()) { - locationSection = sclocations.next(); - - Scanner scLocationLine = new Scanner(locationSection) - .useDelimiter("\\x0d\\x0d\\x0a"); - String lines = " "; - String curLine = null; - ArrayList locationList = new ArrayList(); - locationList.clear(); - Boolean notBreak = true; - - while (scLocationLine.hasNext() && notBreak) { - // Get next location line - curLine = scLocationLine.next(); - - Scanner scLocationToken = new Scanner(curLine); - if (scLocationToken.hasNext()) { - // Check the first token from each line - String firstToken = scLocationToken.next(); - if (terminationList.contains(firstToken)) { - // terminate - notBreak = false; - break; - } - } - lines = lines.concat(" ").concat(curLine); - } - - // Clean up the leading space - lines = UtilN.removeLeadingWhiteSpaces(lines); - // Parse the location lines by a "-" - Scanner scLocation = new Scanner(lines) - .useDelimiter(locationDelimiter); - locationList.clear(); - // Get all locations - while (scLocation.hasNext()) { - locationList.add(scLocation.next()); - } - - // set locations to data base - if (locationList.size() > 1) { - Integer idxLocation = 0; - for (String Location : locationList) { - - ConvSigmetLocation currentLocation = new ConvSigmetLocation(); - currentLocation.setLocationLine(lines); - currentLocation.setLocation(Location); - - // Get a latLonPoint for this station ID from "vors" - // location table - point = LatLonLocTbl.getLatLonPoint(Location, "vors"); - currentLocation.setLatitude(point - .getLatitude(LatLonPoint.INDEGREES)); - currentLocation.setLongitude(point - .getLongitude(LatLonPoint.INDEGREES)); - - currentLocation.setIndex(idxLocation + 1); - idxLocation++; - - sectionTable.addConvSigmetLocation(currentLocation); - } - } else { - hasLocationLine = false; - } - - } else { - hasLocationLine = false; - } - - return hasLocationLine; - } - -} +/** + * Convsigmet DecoderUtil + * + * This java class intends to serve as a decoder utility for Convsigmet. + * + * HISTORY + * + * Date Ticket# Engineer Description + * ------------ ---------- ----------- -------------------------- + * 03/2009 87/114 L. Lin Initial coding + * 06/2009 87/114 L. Lin Generalize the method processLocation. + * 07/2009 87/114 L. Lin Migration to TO11 + * 09/2009 87/114 L. Lin Add latitude/longitude to location table + * + * + * This code has been developed by the SIB for use in the AWIPS2 system. + * @author L. Lin + * @version 1.0 + */ + +package gov.noaa.nws.ncep.edex.plugin.convsigmet.util; + +import gov.noaa.nws.ncep.common.dataplugin.convsigmet.ConvSigmetLocation; +import gov.noaa.nws.ncep.common.dataplugin.convsigmet.ConvSigmetRecord; +import gov.noaa.nws.ncep.common.dataplugin.convsigmet.ConvSigmetSection; +import gov.noaa.nws.ncep.edex.tools.decoder.LatLonLocTbl; +import gov.noaa.nws.ncep.edex.util.UtilN; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Calendar; +import java.util.Scanner; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import com.raytheon.edex.esb.Headers; +import com.raytheon.uf.common.time.DataTime; +import com.raytheon.uf.edex.decodertools.core.LatLonPoint; +import com.raytheon.uf.edex.decodertools.time.TimeTools; + +public class ConvSigmetParser { + + /** + * Constructor + */ + public ConvSigmetParser() { + } + + /** + * Parse the WMO line and store WMO header, OfficeID, issue time, + * designatorBBB,... + * + * @param wmoline + * The bulletin message + * + * @return a ConvsigmetRecord + */ + public static ConvSigmetRecord processWMO(String wmoline, Headers headers) { + + ConvSigmetRecord record = null; + // Regular expression for WMO/ICAO, station ID, and issue date (and + // maybe designator BBB) + final String WMO_EXP = "([A-Z]{4}[0-9]{2}) ([A-Z]{4}) ([0-9]{6})( ([A-Z]{3}))?"; + + // Pattern used for extracting WMO header, officeID, product purge time, + // and issue date and designatorBBB + final Pattern wmoPattern = Pattern.compile(WMO_EXP); + Matcher theMatcher = wmoPattern.matcher(wmoline); + + if (theMatcher.find()) { + record = new ConvSigmetRecord(); + + record.setWmoHeader(theMatcher.group(1)); + record.setIssueOffice(theMatcher.group(2)); + record.setDesignatorBBB(theMatcher.group(5)); + + // Decode the issue time. + Calendar issueTime = TimeTools.findDataTime(theMatcher.group(3), + headers); + record.setIssueTime(issueTime); + + DataTime dataTime = new DataTime(issueTime); + record.setDataTime(dataTime); + } + return record; + } + + /** + * Obtains forecast region as: SIGW, SIGC, or SIGE from a report + * + * @param bullMessage + * The bulletin message + * @return a string for forecast region + */ + public static String processFcstRegion(String bullMessage) { + + // Regular expression for "SIG" forecast region + final String FCSTREGION_EXP = "SIG([A-Z]{1}) ( )*"; + + // Pattern used for extracting forecast region + final Pattern fcstregionPattern = Pattern.compile(FCSTREGION_EXP); + Matcher theMatcher = fcstregionPattern.matcher(bullMessage); + + if (theMatcher.find()) { + return theMatcher.group(1); + } else { + return " "; + } + } + + /** + * process regular section of a convective sigmet report + * + * @param theSection + * The section lines from bulletin message + * @param issueTime + * The bulletin issue time + * @param startTime + * The start time for this section + * @param forecastRegion + * as "W", "C", or "E" + * @return a ConvsigmetSection table + */ + public static ConvSigmetSection processSection(String theSection, + Calendar issueTime, Calendar startTime, String forecastRegion, + Headers headers) { + + // Default equal to one hour if there is no valid time in report + final int validPeriod = 1; + + // Decode the phenomena description + ConvSigmetSection currentSection = ConvSigmetParser + .processPhenomena(theSection); + + // Replace the special characters + currentSection.setSegment(theSection.replace('\r', ' ') + .replace('\036', ' ').replace('\003', ' ').replace('\000', ' ') + .replace('\001', ' ')); + + // Decode the locations + ConvSigmetParser.processLocation(theSection, currentSection); + + // Decode the sequence ID + String sequenceID = ConvSigmetParser.processSequenceID(theSection); + if (sequenceID.equals(" ")) { + // Default as: 0W, 0C, or 0E if no sequenceID has been found. + sequenceID = "0".concat(forecastRegion); + } + currentSection.setSequenceID(sequenceID); + + // Set the starting time + if (startTime == null) { + currentSection.setStartTime(issueTime); + } else { + currentSection.setStartTime(startTime); + } + + // Decode the end time + Calendar endTime = ConvSigmetParser.processEndTime(theSection, + currentSection, headers); + if (endTime == null) { + /* + * if no end time available, end time will be the issue time plus a + * valid period; the default is one hour for now. + */ + endTime = TimeTools.copy(issueTime); + endTime.add(Calendar.HOUR, validPeriod); + currentSection.setEndTime(endTime); + } else { + currentSection.setEndTime(endTime); + } + + int startMonth = startTime.get(Calendar.MONTH); + int endMonth = endTime.get(Calendar.MONTH); + int startDay = startTime.get(Calendar.DAY_OF_MONTH); + int endDay = endTime.get(Calendar.DAY_OF_MONTH); + if ((startMonth == endMonth) && (startDay > endDay)) { + // In case the end time needs to advance one month + endTime.add(Calendar.MONTH, 1); + } + + return currentSection; + } + + /** + * process the outlook section of a convective sigmet report. + * + * @param theOutlook + * The outlook section lines from bulletin message + * @param forecastRegion + * as "W", "C", or "E" + * @return a ConvsigmetSection table + */ + public static ConvSigmetSection processOutLook(String theOutlook, + String forecastRegion, Headers headers) { + + ConvSigmetSection currentOutLook = new ConvSigmetSection(); + + currentOutLook.setSegment(theOutlook.replace('\r', ' ') + .replace('\036', ' ').replace('\003', ' ').replace('\000', ' ') + .replace('\001', ' ')); + currentOutLook.setClassType("OUTLOOK"); + + // Decode start time and end time + ConvSigmetParser.processValidTime(theOutlook, currentOutLook, headers); + + // Decode locations + if (ConvSigmetParser.processLocation(theOutlook, currentOutLook)) { + final String SID_EXP = "AREA ([0-9]{1})...FROM"; + + // Pattern used for extracting the number of sequence ID. + final Pattern sidPattern = Pattern.compile(SID_EXP); + + Matcher theMatcher = sidPattern.matcher(theOutlook); + + // Default sequenceID as: 1W, 1C, or 1E if locations have been + // found. + String sequenceID = "1".concat(forecastRegion); + if (theMatcher.find()) { + // Multiple areas such as: "AREA 1", "AREA 2", ...etc + sequenceID = theMatcher.group(1).concat(forecastRegion); + } + currentOutLook.setSequenceID(sequenceID); + } else { + // Default sequenceID as: 0W, 0C, or 0E if outlook section is a NIL + // report. + String sequenceID = "0".concat(forecastRegion); + currentOutLook.setSequenceID(sequenceID); + } + + return currentOutLook; + } + + /** + * Obtains start time from input report + * + * @param theSection + * The bulletin message + * @return a calendar for start time + */ + public static Calendar processStartTime(String theSection, Headers headers) { + + // Regular expression for start time + final String STARTTIME_EXP = "(\\x1e)([A-Z]{4}) ([A-Z]{3}) ([0-9]{6})( [A-Z]{3})?"; + + // attern used for extracting the starting time + final Pattern starttimePattern = Pattern.compile(STARTTIME_EXP); + + // Calendar mndTime = Calendar.getInstance(); + + Matcher theMatcher = starttimePattern.matcher(theSection); + + if (theMatcher.find()) { + // Get start time + Calendar mndTime = null; + return TimeTools.findDataTime(theMatcher.group(4), headers); + } else { + return null; + } + } + + /** + * Obtains correction flag + * + * @param theSection + * The bulletin message + * @return true if finds a correction flag + */ + public static Boolean processCorrectionFlag(String theSection) { + + Boolean correctionFlag = false; + + // Regular expression for the correction flag + final String CORFLAG_EXP = "(\\x1e)([A-Z]{4}) ([A-Z]{3}) ([0-9]{6})( [A-Z]{3})?"; + + // Pattern used for extracting the correction flag + final Pattern corflagPattern = Pattern.compile(CORFLAG_EXP); + + Matcher theMatcher = corflagPattern.matcher(theSection); + + if (theMatcher.find()) { + Scanner scCorrection = new Scanner(theMatcher.group(0)); + + // check if this contains a correction flag + while (scCorrection.hasNext()) { + if (scCorrection.next().equals("COR")) { + correctionFlag = true; + } + } + + } + return correctionFlag; + } + + /** + * Obtains the sequence ID + * + * @param inSegment + * The segment which contains this sequence ID + * @return a string for sequence ID + */ + public static String processSequenceID(String inSegment) { + + // Regular expression for the sequence ID + final String SEQUENCEID_EXP = "CONVECTIVE SIGMET (([0-9]{2}|[0-9]{1})[A-Z]{1})"; + + // Pattern used for extracting the sequence ID + final Pattern sequenceidPattern = Pattern.compile(SEQUENCEID_EXP); + Matcher theMatcher = sequenceidPattern.matcher(inSegment); + + if (theMatcher.find()) { + return theMatcher.group(1); + } else { + return " "; + } + } + + /** + * Get the end time + * + * @param theSegment + * The segment which contains end time + * @param section + * The section table which contains the start time + * @return a calendar for end time + */ + public static Calendar processEndTime(String theSegment, + ConvSigmetSection section, Headers headers) { + + // Regular expression for end time + final String ENDTIME_EXP = "VALID UNTIL ([0-9]{4})Z"; + + // Pattern used for extracting the end time + final Pattern endtimePattern = Pattern.compile(ENDTIME_EXP); + + // Calendar mndTime = Calendar.getInstance(); + + Matcher theMatcher = endtimePattern.matcher(theSegment); + + if (theMatcher.find()) { + Calendar startTime = section.getStartTime(); + String endTimeGroup = Integer.toString( + startTime.get(Calendar.DAY_OF_MONTH)).concat( + theMatcher.group(1)); + if (startTime.get(Calendar.DAY_OF_MONTH) < 10) { + // add a "0" if the day of month less than 10 + endTimeGroup = "0".concat(endTimeGroup); + } + // get the end time. + return TimeTools.findDataTime(endTimeGroup, headers); + } else { + return null; + } + } + + /** + * Parse the phenomena... + * + * @param theFlight + * The flight level line + * @return a section record + */ + public static ConvSigmetSection processPhenomena(String theFlight) { + + String classType = null; + + // Regular expression for the flight line + final String FL_EXP = "((DMSHG|DSIPTG|INTSFYG|DVLPG) )?(LINE|AREA|ISOL)(\\S|\\s)*FROM ([0-9]{3})?([0-9]{2})KT. ((TOP|TOPS) (TO|ABV)) FL([0-9]{3})"; + + // Pattern used for extracting the direction, speed, distance, and + // flight level + final Pattern flPattern = Pattern.compile(FL_EXP); + Matcher theMatcher = flPattern.matcher(theFlight); + + // Regular expression for the classType line + final String CLASS_EXP = "((DMSHG|DSIPTG|INTSFYG|DVLPG) )?(LINE|AREA|ISOL)(\\S|\\s)*((TOP|TOPS) (TO|ABV)) FL([0-9]{3})"; + + // Pattern used for extracting the class type and flight level + final Pattern classPattern = Pattern.compile(CLASS_EXP); + Matcher classMatcher = classPattern.matcher(theFlight); + + ConvSigmetSection currentSection = new ConvSigmetSection(); + + if (theMatcher.find()) { + classType = theMatcher.group(3); + + int direction = Integer.parseInt(theMatcher.group(5)); + int speed = Integer.parseInt(theMatcher.group(6)); + int flightLevel = Integer.parseInt(theMatcher.group(10)); + String flightLevelTop = theMatcher.group(7); + String intensity = theMatcher.group(1); + + currentSection.setFlightLevel(flightLevel); + currentSection.setDirection(direction); + currentSection.setSpeed(speed); + currentSection.setClassType(classType); + currentSection.setIntensity(intensity); + currentSection.setCloudTop(flightLevelTop); + + if (classType.equals("LINE")) { + final String DISTANCE_EXP = "LINE (EMBD )?(SEV )?TS ([0-9]{2})"; + final Pattern distancePattern = Pattern.compile(DISTANCE_EXP); + Matcher disMatcher = distancePattern.matcher(theFlight); + if (disMatcher.find()) { + int distance = Integer.parseInt(disMatcher.group(3)); + currentSection.setDistance(distance); + } + } else if (classType.equals("ISOL")) { + final String ISOLDISTANCE_EXP = "ISOL (\\S|\\s)* TS D([0-9]{2})"; + final Pattern isoldistancePattern = Pattern + .compile(ISOLDISTANCE_EXP); + Matcher isoldisMatcher = isoldistancePattern.matcher(theFlight); + if (isoldisMatcher.find()) { + int distance = Integer.parseInt(isoldisMatcher.group(2)); + currentSection.setDistance(distance); + } + // get ISOL location table + getIsolLocation(theFlight, currentSection); + } + + } else if (classMatcher.find()) { + classType = classMatcher.group(3); + + int flightLevel = Integer.parseInt(classMatcher.group(8)); + String flightLevelTop = classMatcher.group(5); + String intensity = classMatcher.group(1); + + currentSection.setFlightLevel(flightLevel); + currentSection.setClassType(classType); + currentSection.setIntensity(intensity); + currentSection.setCloudTop(flightLevelTop); + + if (classType.equals("LINE")) { + final String DISTANCE_EXP = "LINE (EMBD )?(SEV )?TS ([0-9]{2})"; + final Pattern distancePattern = Pattern.compile(DISTANCE_EXP); + Matcher disMatcher = distancePattern.matcher(theFlight); + if (disMatcher.find()) { + int distance = Integer.parseInt(disMatcher.group(3)); + currentSection.setDistance(distance); + } + } else if (classType.equals("ISOL")) { + final String ISOLDISTANCE_EXP = "ISOL (\\S|\\s)* TS D([0-9]{2})"; + final Pattern isoldistancePattern = Pattern + .compile(ISOLDISTANCE_EXP); + Matcher isoldisMatcher = isoldistancePattern.matcher(theFlight); + if (isoldisMatcher.find()) { + int distance = Integer.parseInt(isoldisMatcher.group(2)); + currentSection.setDistance(distance); + } + // get ISOL location table + getIsolLocation(theFlight, currentSection); + } + + } else { + // Finds no "flight level line", "CS" as default for a NIL report. + currentSection.setClassType("CS"); + currentSection.setIntensity(null); + } + + return currentSection; + } + + /** + * Obtains the start time and end time + * + * @param theSection + * The outlook section contains the valid times group + */ + public static void processValidTime(String theSection, + ConvSigmetSection currentOutLook, Headers headers) { + + // Regular expression for start time + final String TIMES_EXP = "OUTLOOK VALID ([0-9]{6})-([0-9]{6})"; + + // Pattern used for extracting the starting time and end time + final Pattern starttimePattern = Pattern.compile(TIMES_EXP); + + Calendar startTime = null; + Calendar endTime = null; + // Calendar mndTime = Calendar.getInstance(); + + Matcher theMatcher = starttimePattern.matcher(theSection); + + if (theMatcher.find()) { + // Decode the start time and end time; then set them. + startTime = TimeTools.findDataTime(theMatcher.group(1), headers); + currentOutLook.setStartTime(startTime); + endTime = TimeTools.findDataTime(theMatcher.group(2), headers); + + int startMonth = startTime.get(Calendar.MONTH); + int endMonth = endTime.get(Calendar.MONTH); + int startDay = startTime.get(Calendar.DAY_OF_MONTH); + int endDay = endTime.get(Calendar.DAY_OF_MONTH); + + if ((startMonth == endMonth) && (startDay > endDay)) { + // Roll over a month + endTime.add(Calendar.MONTH, 1); + } + + currentOutLook.setEndTime(endTime); + } else { + currentOutLook.setStartTime(startTime); + currentOutLook.setEndTime(endTime); + } + + } + + /** + * Obtains the location information for ISOL. + * + * @param theSection + * The section lines from bulletin message + * @param sectionTable + * The section Table + */ + public static void getIsolLocation(String theSection, + ConvSigmetSection sectionTable) { + + String line = null; + LatLonPoint point = null; + + final String ISOLLOCATION_EXP = "\\x0d\\x0d\\x0a(([0-9]{2}|[0-9]{3})([ENSW])* [A-Z]{3})\\x0d\\x0d\\x0a"; + final Pattern isollocationPattern = Pattern.compile(ISOLLOCATION_EXP); + Matcher isollocMatcher = isollocationPattern.matcher(theSection); + if (isollocMatcher.find()) { + line = isollocMatcher.group(1); + } + + if (line != null) { + ConvSigmetLocation currentLocation = new ConvSigmetLocation(); + currentLocation.setLocationLine(line); + currentLocation.setLocation(line); + currentLocation.setIndex(1); + // Get a latLonPoint for this station ID from "vors" location table + point = LatLonLocTbl.getLatLonPoint(line, "vors"); + currentLocation.setLatitude(point + .getLatitude(LatLonPoint.INDEGREES)); + currentLocation.setLongitude(point + .getLongitude(LatLonPoint.INDEGREES)); + sectionTable.addConvSigmetLocation(currentLocation); + } + } + + /** + * Parse the location lines and add location table to the section table if + * any + * + * @param theSection + * The section lines from bulletin message + * @param sectionTable + * The section Table + * @return true if finds a location line + */ + public static Boolean processLocation(String theSection, + ConvSigmetSection sectionTable) { + + Boolean hasLocationLine = true; + String locationDelimiter = "-"; + + ArrayList terminationList = new ArrayList(); + terminationList.addAll(Arrays + .asList(new String[] { "WST", "REF", "LINE", "AREA", "ISOL", + "DMSHG", "DVLPG", "DSIPTG", "INTSFYG" })); + + LatLonPoint point = null; + + Scanner sclocations = new Scanner(theSection).useDelimiter("FROM"); + + // throws away the first section which is not the "FROM" location + String locationSection = sclocations.next(); + + if (sclocations.hasNext()) { + locationSection = sclocations.next(); + + Scanner scLocationLine = new Scanner(locationSection) + .useDelimiter("\\x0d\\x0d\\x0a"); + String lines = " "; + String curLine = null; + ArrayList locationList = new ArrayList(); + locationList.clear(); + Boolean notBreak = true; + + while (scLocationLine.hasNext() && notBreak) { + // Get next location line + curLine = scLocationLine.next(); + + Scanner scLocationToken = new Scanner(curLine); + if (scLocationToken.hasNext()) { + // Check the first token from each line + String firstToken = scLocationToken.next(); + if (terminationList.contains(firstToken)) { + // terminate + notBreak = false; + break; + } + } + lines = lines.concat(" ").concat(curLine); + } + + // Clean up the leading space + lines = UtilN.removeLeadingWhiteSpaces(lines); + // Parse the location lines by a "-" + Scanner scLocation = new Scanner(lines) + .useDelimiter(locationDelimiter); + locationList.clear(); + // Get all locations + while (scLocation.hasNext()) { + locationList.add(scLocation.next()); + } + + // set locations to data base + if (locationList.size() > 1) { + Integer idxLocation = 0; + for (String Location : locationList) { + + ConvSigmetLocation currentLocation = new ConvSigmetLocation(); + currentLocation.setLocationLine(lines); + currentLocation.setLocation(Location); + + // Get a latLonPoint for this station ID from "vors" + // location table + point = LatLonLocTbl.getLatLonPoint(Location, "vors"); + currentLocation.setLatitude(point + .getLatitude(LatLonPoint.INDEGREES)); + currentLocation.setLongitude(point + .getLongitude(LatLonPoint.INDEGREES)); + + currentLocation.setIndex(idxLocation + 1); + idxLocation++; + + sectionTable.addConvSigmetLocation(currentLocation); + } + } else { + hasLocationLine = false; + } + + } else { + hasLocationLine = false; + } + + return hasLocationLine; + } + +} diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.convsigmet/src/gov/noaa/nws/ncep/edex/plugin/convsigmet/util/package-info.java b/ncep/gov.noaa.nws.ncep.edex.plugin.convsigmet/src/gov/noaa/nws/ncep/edex/plugin/convsigmet/util/package-info.java index 4f09986546..91040f9487 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.convsigmet/src/gov/noaa/nws/ncep/edex/plugin/convsigmet/util/package-info.java +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.convsigmet/src/gov/noaa/nws/ncep/edex/plugin/convsigmet/util/package-info.java @@ -1,4 +1,4 @@ -/** -* Contains tools for decoder plug-ins -*/ -package gov.noaa.nws.ncep.edex.plugin.convsigmet.util; +/** +* Contains tools for decoder plug-ins +*/ +package gov.noaa.nws.ncep.edex.plugin.convsigmet.util; diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ffg/gov.noaa.nws.ncep.edex.plugin.ffg.ecl b/ncep/gov.noaa.nws.ncep.edex.plugin.ffg/gov.noaa.nws.ncep.edex.plugin.ffg.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.idft/gov.noaa.nws.ncep.edex.plugin.idft.ecl b/ncep/gov.noaa.nws.ncep.edex.plugin.idft/gov.noaa.nws.ncep.edex.plugin.idft.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.idft/src/gov/noaa/nws/ncep/edex/plugin/idft/decoder/package-info.java b/ncep/gov.noaa.nws.ncep.edex.plugin.idft/src/gov/noaa/nws/ncep/edex/plugin/idft/decoder/package-info.java index 6be47d815c..ac808192ab 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.idft/src/gov/noaa/nws/ncep/edex/plugin/idft/decoder/package-info.java +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.idft/src/gov/noaa/nws/ncep/edex/plugin/idft/decoder/package-info.java @@ -1,7 +1,7 @@ -/** - * IDFT implementation of the plugin pattern. - * - * Package includes classes to decode the IDFT message and persist the data. - * - */ +/** + * IDFT implementation of the plugin pattern. + * + * Package includes classes to decode the IDFT message and persist the data. + * + */ package gov.noaa.nws.ncep.edex.plugin.idft.decoder; \ No newline at end of file diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.intlsigmet/gov.noaa.nws.ncep.edex.plugin.intlsigmet.ecl b/ncep/gov.noaa.nws.ncep.edex.plugin.intlsigmet/gov.noaa.nws.ncep.edex.plugin.intlsigmet.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.intlsigmet/res/spring/intlsigmet-common.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.intlsigmet/res/spring/intlsigmet-common.xml index 6acee491a6..b88e96a48d 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.intlsigmet/res/spring/intlsigmet-common.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.intlsigmet/res/spring/intlsigmet-common.xml @@ -1,26 +1,26 @@ - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.intlsigmet/res/spring/intlsigmet-ingest.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.intlsigmet/res/spring/intlsigmet-ingest.xml index 79ce6b0e5c..8c04e35c3d 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.intlsigmet/res/spring/intlsigmet-ingest.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.intlsigmet/res/spring/intlsigmet-ingest.xml @@ -1,72 +1,72 @@ - - - - - - - - - - - - - - - - - - - - - - - - intlsigmet - - - - - - - - - - - - - java.lang.Throwable - - - - - - - java.lang.Throwable - - - - - + + + + + + + + + + + + + + + + + + + + + + + + intlsigmet + + + + + + + + + + + + + java.lang.Throwable + + + + + + + java.lang.Throwable + + + + + \ No newline at end of file diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.intlsigmet/src/gov/noaa/nws/ncep/edex/plugin/intlsigmet/decoder/IntlSigmetDecoder.java b/ncep/gov.noaa.nws.ncep.edex.plugin.intlsigmet/src/gov/noaa/nws/ncep/edex/plugin/intlsigmet/decoder/IntlSigmetDecoder.java index 39648fbe79..f844f1398c 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.intlsigmet/src/gov/noaa/nws/ncep/edex/plugin/intlsigmet/decoder/IntlSigmetDecoder.java +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.intlsigmet/src/gov/noaa/nws/ncep/edex/plugin/intlsigmet/decoder/IntlSigmetDecoder.java @@ -1,197 +1,197 @@ -/** - * - * IntlSigmet Decoder - * - * This java class decodes INTLSIGMET raw data. - * HISTORY - * - * Date Ticket# Engineer Description - * ------------ ---------- ----------- -------------------------- - * 06/2009 113 L. Lin Initial creation - * 07/2009 113 L. Lin Migration to TO11 - * 05/2010 113 L. Lin Migration to TO11DR11 - * - * - * This code has been developed by the SIB for use in the AWIPS2 system. - * @author L. Lin - * @version 1.0 - */ - -package gov.noaa.nws.ncep.edex.plugin.intlsigmet.decoder; - -import gov.noaa.nws.ncep.common.dataplugin.intlsigmet.IntlSigmetRecord; -import gov.noaa.nws.ncep.edex.plugin.intlsigmet.util.IntlSigmetParser; -import gov.noaa.nws.ncep.edex.util.UtilN; - -import java.util.Calendar; -import java.util.Scanner; - -import com.raytheon.edex.esb.Headers; -import com.raytheon.edex.exception.DecoderException; -import com.raytheon.edex.plugin.AbstractDecoder; -import com.raytheon.uf.common.dataplugin.PluginDataObject; -import com.raytheon.uf.common.dataplugin.PluginException; -import com.raytheon.uf.edex.decodertools.core.IDecoderConstants; -import com.raytheon.uf.edex.decodertools.time.TimeTools; - -public class IntlSigmetDecoder extends AbstractDecoder { - - private final String pluginName; - - /** - * Constructor - * - * @throws DecoderException - */ - public IntlSigmetDecoder(String name) throws DecoderException { - pluginName = name; - } - - public PluginDataObject[] decode(byte[] data, Headers headers) - throws DecoderException { - - String traceId = ""; - if (headers != null) { - traceId = (String) headers.get("traceId"); - } - - String etx = IDecoderConstants.ETX; - String theBulletin = null; - - Calendar startTime = null; - byte[] messageData = null; - - IntlSigmetRecord record = null; - // Default equal to four hours from start time if there is no valid time - // in report - final int validPeriod = 4; - - IntlSigmetSeparator sep = IntlSigmetSeparator.separate(data, headers); - messageData = sep.next(); - String theMessage = new String(messageData); - - /* - * May have multiple duplicate bulletins, only get the first bulletin - * and eliminate the remaining bulletins after the first bulletin. - */ - Scanner cc = new Scanner(theMessage).useDelimiter(etx); - if (cc.hasNext()) { - theBulletin = cc.next(); - } else { - theBulletin = theMessage; - } - - // Decode and set WMO line - record = IntlSigmetParser.processWMO(theBulletin, headers); - - /* - * Check the IntlSigmet record object. If not, throws exception. - */ - if (record != null) { - record.setTraceId(traceId); - record.setPluginName(pluginName); - record.setReportType(pluginName); - record.setHazardType(IntlSigmetParser.getHazardType(theBulletin)); - // Decode and set the messageID - record.setMessageID(IntlSigmetParser.getMessageID(theBulletin)); - // Decode and set the sequence number - record.setSequenceNumber(IntlSigmetParser - .getSequenceNumber(theBulletin)); - try { - record.constructDataURI(); - } catch (PluginException e) { - logger.error("Error constructing dataURI", e); - record = null; - } - } - if (record != null) { - try { - // Replace special characters to a blank so that it may be - // readable - record.setBullMessage(UtilN - .removeLeadingWhiteSpaces((theBulletin.substring(5)) - .replace('\036', ' ').replace('\r', ' ') - .replace('\003', ' ').replace('\000', ' ') - .replace('\001', ' '))); - - if (!record.getHazardType().equals("NIL")) { - - // Decode the issue time - Calendar issueTime = record.getIssueTime(); - - // Decode the starting time - startTime = IntlSigmetParser.getStartTime(theBulletin, - headers); - if (startTime == null) { - startTime = issueTime; - } - - // Decode the end time - Calendar endTime = IntlSigmetParser.getEndTime(theBulletin, - headers); - if (endTime == null) { - /* - * if no end time available, end time will be the start - * time plus a valid period; the default is four hours - * for now. - */ - endTime = TimeTools.copy(startTime); - endTime.add(Calendar.HOUR, validPeriod); - } - - // Set start time and end time - record.setStartTime(startTime); - record.setEndTime(endTime); - - // Decode and set the atsu - record.setAtsu(IntlSigmetParser.getAtsu(theBulletin)); - - // Decode and set the intensity - record.setIntensity(IntlSigmetParser - .getIntensity(theBulletin)); - - // Decode and set the flight levels - IntlSigmetParser.processFlightLevels(theBulletin, record); - - // Decode and set the omwo - record.setOmwo(IntlSigmetParser.getOmwo(theBulletin)); - - // Decode and set the direction - record.setDirection(IntlSigmetParser - .getDirection(theBulletin)); - - // Decode and set the speed - record.setSpeed(IntlSigmetParser.getSpeed(theBulletin)); - - // Decode and set distance - record.setDistance(IntlSigmetParser - .getDistance(theBulletin)); - - // Decode and set nameLocation - record.setNameLocation(IntlSigmetParser - .getNameLocation(theBulletin)); - - // Decode and set the remarks - record.setRemarks(IntlSigmetParser.getRemarks(theBulletin)); - - // Decode and set polyGonExtend - record.setPolygonExtent(IntlSigmetParser.getPolygonExtent(theBulletin)); - } - } catch (Exception e) { - logger.error("Error postprocessing " + pluginName, e); - record = null; - } - } - - /* - * Return the IntlSigmetRecord record object. - */ - if (record == null) { - return new PluginDataObject[0]; - } else { - return new PluginDataObject[] { record }; - } - - } - -} +/** + * + * IntlSigmet Decoder + * + * This java class decodes INTLSIGMET raw data. + * HISTORY + * + * Date Ticket# Engineer Description + * ------------ ---------- ----------- -------------------------- + * 06/2009 113 L. Lin Initial creation + * 07/2009 113 L. Lin Migration to TO11 + * 05/2010 113 L. Lin Migration to TO11DR11 + * + * + * This code has been developed by the SIB for use in the AWIPS2 system. + * @author L. Lin + * @version 1.0 + */ + +package gov.noaa.nws.ncep.edex.plugin.intlsigmet.decoder; + +import gov.noaa.nws.ncep.common.dataplugin.intlsigmet.IntlSigmetRecord; +import gov.noaa.nws.ncep.edex.plugin.intlsigmet.util.IntlSigmetParser; +import gov.noaa.nws.ncep.edex.util.UtilN; + +import java.util.Calendar; +import java.util.Scanner; + +import com.raytheon.edex.esb.Headers; +import com.raytheon.edex.exception.DecoderException; +import com.raytheon.edex.plugin.AbstractDecoder; +import com.raytheon.uf.common.dataplugin.PluginDataObject; +import com.raytheon.uf.common.dataplugin.PluginException; +import com.raytheon.uf.edex.decodertools.core.IDecoderConstants; +import com.raytheon.uf.edex.decodertools.time.TimeTools; + +public class IntlSigmetDecoder extends AbstractDecoder { + + private final String pluginName; + + /** + * Constructor + * + * @throws DecoderException + */ + public IntlSigmetDecoder(String name) throws DecoderException { + pluginName = name; + } + + public PluginDataObject[] decode(byte[] data, Headers headers) + throws DecoderException { + + String traceId = ""; + if (headers != null) { + traceId = (String) headers.get("traceId"); + } + + String etx = IDecoderConstants.ETX; + String theBulletin = null; + + Calendar startTime = null; + byte[] messageData = null; + + IntlSigmetRecord record = null; + // Default equal to four hours from start time if there is no valid time + // in report + final int validPeriod = 4; + + IntlSigmetSeparator sep = IntlSigmetSeparator.separate(data, headers); + messageData = sep.next(); + String theMessage = new String(messageData); + + /* + * May have multiple duplicate bulletins, only get the first bulletin + * and eliminate the remaining bulletins after the first bulletin. + */ + Scanner cc = new Scanner(theMessage).useDelimiter(etx); + if (cc.hasNext()) { + theBulletin = cc.next(); + } else { + theBulletin = theMessage; + } + + // Decode and set WMO line + record = IntlSigmetParser.processWMO(theBulletin, headers); + + /* + * Check the IntlSigmet record object. If not, throws exception. + */ + if (record != null) { + record.setTraceId(traceId); + record.setPluginName(pluginName); + record.setReportType(pluginName); + record.setHazardType(IntlSigmetParser.getHazardType(theBulletin)); + // Decode and set the messageID + record.setMessageID(IntlSigmetParser.getMessageID(theBulletin)); + // Decode and set the sequence number + record.setSequenceNumber(IntlSigmetParser + .getSequenceNumber(theBulletin)); + try { + record.constructDataURI(); + } catch (PluginException e) { + logger.error("Error constructing dataURI", e); + record = null; + } + } + if (record != null) { + try { + // Replace special characters to a blank so that it may be + // readable + record.setBullMessage(UtilN + .removeLeadingWhiteSpaces((theBulletin.substring(5)) + .replace('\036', ' ').replace('\r', ' ') + .replace('\003', ' ').replace('\000', ' ') + .replace('\001', ' '))); + + if (!record.getHazardType().equals("NIL")) { + + // Decode the issue time + Calendar issueTime = record.getIssueTime(); + + // Decode the starting time + startTime = IntlSigmetParser.getStartTime(theBulletin, + headers); + if (startTime == null) { + startTime = issueTime; + } + + // Decode the end time + Calendar endTime = IntlSigmetParser.getEndTime(theBulletin, + headers); + if (endTime == null) { + /* + * if no end time available, end time will be the start + * time plus a valid period; the default is four hours + * for now. + */ + endTime = TimeTools.copy(startTime); + endTime.add(Calendar.HOUR, validPeriod); + } + + // Set start time and end time + record.setStartTime(startTime); + record.setEndTime(endTime); + + // Decode and set the atsu + record.setAtsu(IntlSigmetParser.getAtsu(theBulletin)); + + // Decode and set the intensity + record.setIntensity(IntlSigmetParser + .getIntensity(theBulletin)); + + // Decode and set the flight levels + IntlSigmetParser.processFlightLevels(theBulletin, record); + + // Decode and set the omwo + record.setOmwo(IntlSigmetParser.getOmwo(theBulletin)); + + // Decode and set the direction + record.setDirection(IntlSigmetParser + .getDirection(theBulletin)); + + // Decode and set the speed + record.setSpeed(IntlSigmetParser.getSpeed(theBulletin)); + + // Decode and set distance + record.setDistance(IntlSigmetParser + .getDistance(theBulletin)); + + // Decode and set nameLocation + record.setNameLocation(IntlSigmetParser + .getNameLocation(theBulletin)); + + // Decode and set the remarks + record.setRemarks(IntlSigmetParser.getRemarks(theBulletin)); + + // Decode and set polyGonExtend + record.setPolygonExtent(IntlSigmetParser.getPolygonExtent(theBulletin)); + } + } catch (Exception e) { + logger.error("Error postprocessing " + pluginName, e); + record = null; + } + } + + /* + * Return the IntlSigmetRecord record object. + */ + if (record == null) { + return new PluginDataObject[0]; + } else { + return new PluginDataObject[] { record }; + } + + } + +} diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.intlsigmet/src/gov/noaa/nws/ncep/edex/plugin/intlsigmet/decoder/IntlSigmetSeparator.java b/ncep/gov.noaa.nws.ncep.edex.plugin.intlsigmet/src/gov/noaa/nws/ncep/edex/plugin/intlsigmet/decoder/IntlSigmetSeparator.java index 9586140291..ccb86b4310 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.intlsigmet/src/gov/noaa/nws/ncep/edex/plugin/intlsigmet/decoder/IntlSigmetSeparator.java +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.intlsigmet/src/gov/noaa/nws/ncep/edex/plugin/intlsigmet/decoder/IntlSigmetSeparator.java @@ -1,147 +1,147 @@ -/** - * IntlsigmetSeparator - * - * This class sets the raw data to an Arraylist, records, of - * String based on a uniquely identified separator. - * - * HISTORY - * - * Date Ticket# Engineer Description - * ------------ ---------- ----------- -------------------------- - * 06/2009 113 L. Lin Initial creation - * 07/2009 113 L. Lin Migration to TO11 - * - * - * This code has been developed by the SIB for use in the AWIPS2 system. - * @author L. Lin - * @version 1.0 - */ - -package gov.noaa.nws.ncep.edex.plugin.intlsigmet.decoder; - -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; -import java.util.NoSuchElementException; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - -import com.raytheon.edex.esb.Headers; -import com.raytheon.edex.plugin.AbstractRecordSeparator; -import com.raytheon.edex.util.Util; - -public class IntlSigmetSeparator extends AbstractRecordSeparator { - private final Log logger = LogFactory.getLog(getClass()); - - /** Regex used for separate the bulletins */ - private static final String BULLSEPARATOR = "([0-9]{3})( )*\\x0d\\x0d\\x0a([A-Z]{4}[0-9]{2}) ([A-Z]{4}) ([0-9]{6})( [A-Z]{3})?\\x0d\\x0d\\x0a"; - - /** Regex matcher */ - private Matcher matcher; - - /** Pattern object for regex search */ - private Pattern pattern; - - /** List of records contained in file */ - private List records; - - private Iterator iterator = null; - - /** - * Constructor. - * - */ - public IntlSigmetSeparator() { - records = new ArrayList(); - } - - public static IntlSigmetSeparator separate(byte[] data, Headers headers) { - IntlSigmetSeparator ds = new IntlSigmetSeparator(); - ds.setData(data, headers); - return ds; - } - - public void setData(byte[] data, Headers headers) { - doSeparate(new String(data)); - iterator = records.iterator(); - } - - /* - * (non-Javadoc) - * - * @see com.raytheon.edex.plugin.IRecordSeparator#hasNext() - */ - public boolean hasNext() { - if (iterator == null) { - return false; - } else { - return iterator.hasNext(); - } - } - - /** - * Get record - */ - public byte[] next() { - try { - String temp = iterator.next(); - if (Util.isEmptyString(temp)) { - return (byte[]) null; - } else { - return temp.getBytes(); - } - } catch (NoSuchElementException e) { - return (byte[]) null; - } - } - - /** - * @param message - * separate bulletins - */ - private void doSeparate(String message) { - /* Regex used for separate the bulletins */ - - try { - pattern = Pattern.compile(BULLSEPARATOR); - matcher = pattern.matcher(message); - - /* - * Set number of bulletins to records only if the bulletin separator - * is not the same. At the point, only separators are stored in - * "records" - */ - while (matcher.find()) { - if (!records.contains(matcher.group())) { - records.add(matcher.group()); - } - } - - /* - * Append the raw data file to the records. - */ - for (int i = 0; i < records.size(); i++) { - if (i < records.size() - 1) { - records.set( - i, - "\n" - + message.substring( - message.indexOf(records.get(i)), - message.indexOf(records.get(i + 1)))); - } else { - records.set( - i, - "\n" - + message.substring(message.indexOf(records - .get(i)))); - } - } - } catch (Exception e) { - logger.warn("No valid records found!", e); - } - return; - } -} +/** + * IntlsigmetSeparator + * + * This class sets the raw data to an Arraylist, records, of + * String based on a uniquely identified separator. + * + * HISTORY + * + * Date Ticket# Engineer Description + * ------------ ---------- ----------- -------------------------- + * 06/2009 113 L. Lin Initial creation + * 07/2009 113 L. Lin Migration to TO11 + * + * + * This code has been developed by the SIB for use in the AWIPS2 system. + * @author L. Lin + * @version 1.0 + */ + +package gov.noaa.nws.ncep.edex.plugin.intlsigmet.decoder; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; +import java.util.NoSuchElementException; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import com.raytheon.edex.esb.Headers; +import com.raytheon.edex.plugin.AbstractRecordSeparator; +import com.raytheon.edex.util.Util; + +public class IntlSigmetSeparator extends AbstractRecordSeparator { + private final Log logger = LogFactory.getLog(getClass()); + + /** Regex used for separate the bulletins */ + private static final String BULLSEPARATOR = "([0-9]{3})( )*\\x0d\\x0d\\x0a([A-Z]{4}[0-9]{2}) ([A-Z]{4}) ([0-9]{6})( [A-Z]{3})?\\x0d\\x0d\\x0a"; + + /** Regex matcher */ + private Matcher matcher; + + /** Pattern object for regex search */ + private Pattern pattern; + + /** List of records contained in file */ + private List records; + + private Iterator iterator = null; + + /** + * Constructor. + * + */ + public IntlSigmetSeparator() { + records = new ArrayList(); + } + + public static IntlSigmetSeparator separate(byte[] data, Headers headers) { + IntlSigmetSeparator ds = new IntlSigmetSeparator(); + ds.setData(data, headers); + return ds; + } + + public void setData(byte[] data, Headers headers) { + doSeparate(new String(data)); + iterator = records.iterator(); + } + + /* + * (non-Javadoc) + * + * @see com.raytheon.edex.plugin.IRecordSeparator#hasNext() + */ + public boolean hasNext() { + if (iterator == null) { + return false; + } else { + return iterator.hasNext(); + } + } + + /** + * Get record + */ + public byte[] next() { + try { + String temp = iterator.next(); + if (Util.isEmptyString(temp)) { + return (byte[]) null; + } else { + return temp.getBytes(); + } + } catch (NoSuchElementException e) { + return (byte[]) null; + } + } + + /** + * @param message + * separate bulletins + */ + private void doSeparate(String message) { + /* Regex used for separate the bulletins */ + + try { + pattern = Pattern.compile(BULLSEPARATOR); + matcher = pattern.matcher(message); + + /* + * Set number of bulletins to records only if the bulletin separator + * is not the same. At the point, only separators are stored in + * "records" + */ + while (matcher.find()) { + if (!records.contains(matcher.group())) { + records.add(matcher.group()); + } + } + + /* + * Append the raw data file to the records. + */ + for (int i = 0; i < records.size(); i++) { + if (i < records.size() - 1) { + records.set( + i, + "\n" + + message.substring( + message.indexOf(records.get(i)), + message.indexOf(records.get(i + 1)))); + } else { + records.set( + i, + "\n" + + message.substring(message.indexOf(records + .get(i)))); + } + } + } catch (Exception e) { + logger.warn("No valid records found!", e); + } + return; + } +} diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.intlsigmet/src/gov/noaa/nws/ncep/edex/plugin/intlsigmet/decoder/package-info.java b/ncep/gov.noaa.nws.ncep.edex.plugin.intlsigmet/src/gov/noaa/nws/ncep/edex/plugin/intlsigmet/decoder/package-info.java index 9b5e68be59..cf944c8b08 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.intlsigmet/src/gov/noaa/nws/ncep/edex/plugin/intlsigmet/decoder/package-info.java +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.intlsigmet/src/gov/noaa/nws/ncep/edex/plugin/intlsigmet/decoder/package-info.java @@ -1,4 +1,4 @@ -/** -* Contains decoder.java for decoder plug-ins -*/ -package gov.noaa.nws.ncep.edex.plugin.intlsigmet.decoder;; +/** +* Contains decoder.java for decoder plug-ins +*/ +package gov.noaa.nws.ncep.edex.plugin.intlsigmet.decoder;; diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.intlsigmet/src/gov/noaa/nws/ncep/edex/plugin/intlsigmet/util/IntlSigmetParser.java b/ncep/gov.noaa.nws.ncep.edex.plugin.intlsigmet/src/gov/noaa/nws/ncep/edex/plugin/intlsigmet/util/IntlSigmetParser.java index b87da1056d..1e70d09e56 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.intlsigmet/src/gov/noaa/nws/ncep/edex/plugin/intlsigmet/util/IntlSigmetParser.java +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.intlsigmet/src/gov/noaa/nws/ncep/edex/plugin/intlsigmet/util/IntlSigmetParser.java @@ -1,1688 +1,1688 @@ -/** - * IntlSigmet DecoderUtil - * - * This java class intends to serve as a decoder utility for INTLSIGMET. - * - * HISTORY - * - * This code has been developed by the SIB for use in the AWIPS2 system. - * Date Ticket# Engineer Description - * ------------ ---------- ----------- -------------------------- - * 06/2009 113 L. Lin Initial coding - * 07/2009 113 L. Lin Migration to TO11 - * 09/2009 113 L. Lin Convert station ID to lat/lon - * if any exists. - * 11/2011 512 S. Gurung Fixed NullPointerException bug while processing lat/lon (from vors) - * - * - * This code has been developed by the SIB for use in the AWIPS2 system. - * @author L. Lin - * @version 1.0 - */ - -package gov.noaa.nws.ncep.edex.plugin.intlsigmet.util; - -import gov.noaa.nws.ncep.common.dataplugin.intlsigmet.IntlSigmetLocation; -import gov.noaa.nws.ncep.common.dataplugin.intlsigmet.IntlSigmetRecord; -import gov.noaa.nws.ncep.common.tools.IDecoderConstantsN; -import gov.noaa.nws.ncep.edex.tools.decoder.LatLonLocTbl; -import gov.noaa.nws.ncep.edex.util.UtilN; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Calendar; -import java.util.Scanner; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -import com.raytheon.edex.esb.Headers; -import com.raytheon.uf.common.time.DataTime; -import com.raytheon.uf.edex.decodertools.core.LatLonPoint; -import com.raytheon.uf.edex.decodertools.time.TimeTools; - -public class IntlSigmetParser { - - private static final String CONUS_EXP = "([A-Z]{4}) SIGMET (ALFA|BRAVO|CHARLIE|DELTA|ECHO|FOXTROT|GOLF|HOTEL|" - + "INDIA|JULIETT|JULIET|KILO|LIMA|MIKE|NOVEMBER|OSCAR|PAPA|QUEBEC|ROMEO|SIERRA|TANGO|" - + "UNIFORM|VICTOR|WHISKEY|XRAY|YANKEE|ZULU) ([0-9]{1}|[0-9]{2}) VALID"; - - /** - * Constructor - */ - public IntlSigmetParser() { - } - - /** - * Parse the WMO line and store WMO header, OfficeID, issue time, ... - * - * @param wmoline - * The bulletin message - * - * @return an IntlSigmetRecord - */ - public static IntlSigmetRecord processWMO(String wmoline, Headers headers) { - - IntlSigmetRecord record = null; - // Regular expression for WMO/ICAO, station ID, and issue date. - final String WMO_EXP = "([A-Z]{4}[0-9]{2}) ([A-Z]{4}) ([0-9]{6})"; - - // Pattern used for extracting WMO header, officeID, and issue date. - final Pattern wmoPattern = Pattern.compile(WMO_EXP); - Matcher theMatcher = wmoPattern.matcher(wmoline); - - if (theMatcher.find()) { - record = new IntlSigmetRecord(); - - record.setWmoHeader(theMatcher.group(1)); - record.setIssueOffice(theMatcher.group(2)); - - // Decode the issue time. - Calendar mndTime = null; - Calendar issueTime = TimeTools.findDataTime(theMatcher.group(3), - headers); - record.setIssueTime(issueTime); - - DataTime dataTime = new DataTime(issueTime); - record.setDataTime(dataTime); - } - return record; - } - - /** - * Obtains hazardType as: TS (thunderstorm), TB (turbulence), HU - * (hurricane), TR (tropical storm), TD (tropical depression), VA (volcanic - * ash cloud), MW (marked mountain waves), TC (tropical cyclone), SQ (squall - * line), CT (CAT), IC (icing), GR (hail), DS (duststorm), SS (sandstorm), - * CB (cumulonimbus), WS (low level wind shear), TEST, or CN (cancel), - * etc... - * - * @param theReport - * Input report message. - * @return a string for hazard type - */ - public static String getHazardType(String theReport) { - - String retHazardType = " "; - // Regular expression for hazardType - final String HAZARDTYPE_EXP = "(HURRICANE|HURCN |TROPICAL STORM|TROPICAL DEPRESSION|" - + " TD | SQL | TS | TS/|FRQ TS| TS| SH/TS |TURB| CB | VA | MTW |" - + " ICE | TR | GR | TC | CT | CAT | DS | SS | WS | TSGR |VOLCANIC ASH|HVYSS|" - + " ICG|ICING|LLWS|WATERSPOUTS|THUNDERSTORMS|WIND|TS OBS|CB/TS|TORNADO)"; - final String NIL_EXP = "(NIL)"; - final String MIS_EXP = "(TAF |METAR )"; - final String CNL_EXP = "(CANCEL| CNL | CNCL |:CNL| CNL|INVALID|DISCARDED|" - + "CNL SIGMET| CLN SIGMET|CNCLD)"; - final String TEST_EXP = "(TEST |DISREGARD)"; - - // Pattern used for extracting hazardType - final Pattern hazardTypePattern = Pattern.compile(HAZARDTYPE_EXP); - final Pattern nilPattern = Pattern.compile(NIL_EXP); - final Pattern cnlPattern = Pattern.compile(CNL_EXP); - final Pattern misPattern = Pattern.compile(MIS_EXP); - final Pattern testPattern = Pattern.compile(TEST_EXP); - - Matcher theMatcher = hazardTypePattern.matcher(theReport); - Matcher nilMatcher = nilPattern.matcher(theReport); - Matcher cnlMatcher = cnlPattern.matcher(theReport); - Matcher misMatcher = misPattern.matcher(theReport); - Matcher testMatcher = testPattern.matcher(theReport); - - if (cnlMatcher.find()) { - retHazardType = "CANCEL"; - } else if (testMatcher.find()) { - retHazardType = "TEST"; - } else if (theMatcher.find()) { - if (theMatcher.group(1).equals("HURRICANE")) { - retHazardType = "HURRICANE"; - } else if (theMatcher.group(1).equals("HURCN ")) { - retHazardType = "HURRICANE"; - } else if (theMatcher.group(1).equals(" TD ")) { - retHazardType = "TROPICAL DEPRESSION"; - } else if (theMatcher.group(1).equals("TROPICAL STORM")) { - retHazardType = "TROPICAL STORM"; - } else if (theMatcher.group(1).equals("TROPICAL DEPRESSION")) { - retHazardType = "TROPICAL DEPRESSION"; - } else if (theMatcher.group(1).equals(" SQL ")) { - retHazardType = "SQUALL LINE"; - } else if (theMatcher.group(1).equals("TURB")) { - retHazardType = "TURBULENCE"; - } else if (theMatcher.group(1).equals(" ICE ")) { - retHazardType = "ICING"; - } else if (theMatcher.group(1).equals(" ICG")) { - retHazardType = "ICING"; - } else if (theMatcher.group(1).equals("ICING")) { - retHazardType = "ICING"; - } else if (theMatcher.group(1).equals(" TS ")) { - retHazardType = getThunderStorm(theReport); - } else if (theMatcher.group(1).equals("FRQ TS")) { - retHazardType = getThunderStorm(theReport); - } else if (theMatcher.group(1).equals(" TS/")) { - retHazardType = getThunderStorm(theReport); - } else if (theMatcher.group(1).equals(" SH/TS ")) { - retHazardType = "THUNDERSTORM WIND SHEAR"; - } else if (theMatcher.group(1).equals(" CB ")) { - retHazardType = "CUMULONIMBUS"; - } else if (theMatcher.group(1).equals(" VA ")) { - retHazardType = "VOLCANIC ASH CLOUD"; - } else if (theMatcher.group(1).equals(" MTW ")) { - retHazardType = "MARKED MOUNTAIN WAVES"; - } else if (theMatcher.group(1).equals(" TR ")) { - retHazardType = "TROPICAL STORM"; - } else if (theMatcher.group(1).equals(" GR ")) { - retHazardType = getThunderStorm(theReport); - } else if (theMatcher.group(1).equals(" TC ")) { - retHazardType = "TROPICAL CYCLONE"; - } else if (theMatcher.group(1).equals(" CT ")) { - retHazardType = "CAT"; - } else if (theMatcher.group(1).equals(" CAT ")) { - retHazardType = "CAT"; - } else if (theMatcher.group(1).equals(" DS ")) { - retHazardType = "DUSTSTORM"; - } else if (theMatcher.group(1).equals(" SS ")) { - retHazardType = "SANDSTORM"; - } else if (theMatcher.group(1).equals(" WS ")) { - retHazardType = "LOW LEVEL WIND SHEAR"; - } else if (theMatcher.group(1).equals("LLWS")) { - retHazardType = "LOW LEVEL WIND SHEAR"; - } else if (theMatcher.group(1).equals(" TSGR ")) { - retHazardType = getThunderStorm(theReport); - } else if (theMatcher.group(1).equals("VOLCANIC ASH")) { - retHazardType = "VOLCANIC ASH CLOUD"; - } else if (theMatcher.group(1).equals("TS ")) { - retHazardType = getThunderStorm(theReport); - } else if (theMatcher.group(1).equals("HVYSS ")) { - retHazardType = "HEAVY SANDSTORM"; - } else if (theMatcher.group(1).equals("WATERSPOUTS")) { - retHazardType = "WATERSPOUTS"; - } else if (theMatcher.group(1).equals("THUNDERSTORMS")) { - retHazardType = "THUNDERSTORMS"; - } else if (theMatcher.group(1).equals("WIND")) { - retHazardType = "WINDS"; - } else if (theMatcher.group(1).equals("TS OBS")) { - retHazardType = "THUNDERSTORMS"; - } else if (theMatcher.group(1).equals(" TS")) { - retHazardType = getThunderStorm(theReport); - } else if (theMatcher.group(1).equals("CB/TS")) { - retHazardType = getThunderStorm(theReport); - } else if (theMatcher.group(1).equals("TORNADO")) { - retHazardType = "TORNADO"; - } - } else if (nilMatcher.find()) { - retHazardType = "NIL"; - } else if (misMatcher.find()) { - retHazardType = "NIL"; - } else { - retHazardType = "UNKNOWN ???"; - } - return retHazardType; - } - - /** - * Obtains the message ID. - * - * @param theBulletin - * The input bulletin - * @return a string for messageID - */ - public static String getMessageID(String theBulletin) { - - String messageID = " "; - - // // Regular expression for CONUS message ID - // final String CONUS_EXP = - // "([A-Z]{4}) SIGMET (ALFA|BRAVO|CHARLIE|DELTA|ECHO|FOXTROT|" + - // "GOLF|HOTEL|INDIA|JULIETT|JULIET|KILO|LIMA|MIKE|NOVEMBER|OSCAR|PAPA|QUEBEC|" - // + - // "ROMEO|SIERRA|TANGO|UNIFORM|VICTOR|WHISKEY|XRAY|YANKEE|ZULU) " + - // "([0-9]{1}|[0-9]{2}) VALID"; - - // Pattern used for extracting the message ID - final Pattern conusPattern = Pattern.compile(CONUS_EXP); - Matcher idconusMatcher = conusPattern.matcher(theBulletin); - - // Regular expression for CANADA message ID - final String CANADA_EXP = "SIGMET ([A-Z]{1})([0-9]{1}|[0-9]{2}) (VALID " - + "([0-9]{6})/|CANCELLED AT )([0-9]{6}) ([A-Z]{4})-"; - // Pattern used for extracting the message ID - final Pattern canadaPattern = Pattern.compile(CANADA_EXP); - Matcher idcanadaMatcher = canadaPattern.matcher(theBulletin); - - // Regular expression for JAPAN and UK message ID - final String JAPAN_EXP = "([A-Z]{4}) SIGMET ([0-9]{1}|[0-9]{2}) (VALID )?" - + "([0-9]{6})/([0-9]{6})(UTC)? ([A-Z]{4})-"; - // Pattern used for extracting the message ID - final Pattern japanPattern = Pattern.compile(JAPAN_EXP); - Matcher idjapanMatcher = japanPattern.matcher(theBulletin); - - // Regular expression for others' message ID - final String OTHER1_EXP = "([A-Z]{4}) SIGMET ([0-9]{1}|[0-9]{2}|[A-Z]{1}[0-9]{1}|[A-Z]{2}[0-9]{2}) " - + "VALID ([0-9]{6})/([0-9]{6})( UTC)? ([A-Z]{4})(-)?"; - // Pattern used for extracting the message ID - final Pattern other1Pattern = Pattern.compile(OTHER1_EXP); - Matcher idother1Matcher = other1Pattern.matcher(theBulletin); - - // Regular expression for others' message ID - final String OTHER2_EXP = "(SIGMET) ([0-9]{1}|[0-9]{2}|[A-Z]{1}[0-9]{1}|[A-Z]{2}[0-9]{2}|[A-Z]{1}[0-9]{2}) " - + "VALID ([0-9]{6})/([0-9]{6})"; - // Pattern used for extracting the message ID - final Pattern other2Pattern = Pattern.compile(OTHER2_EXP); - Matcher idother2Matcher = other2Pattern.matcher(theBulletin); - - // Regular expression for others' message ID - final String OTHER3_EXP = "([A-Z]{4}) SIGMET ([A-Z]* )?([0-9]{1}|[0-9]{2}) VALID ([0-9]{6})/([0-9]{6}) " - + "([A-Z]{4})(-)?"; - // Pattern used for extracting the message ID - final Pattern other3Pattern = Pattern.compile(OTHER3_EXP); - Matcher idother3Matcher = other3Pattern.matcher(theBulletin); - - // Regular expression for others' message ID - final String OTHER4_EXP = "([A-Z]{4}) SIGMET( )*([0-9]{1}|[0-9]{2}|[A-Z]{1}[0-9]{1}|[A-Z]{2}[0-9]{2}) " - + "VALID( )*([0-9]{6})/([0-9]{6})( )*([A-Z]{4})(-)?"; - // Pattern used for extracting the message ID - final Pattern other4Pattern = Pattern.compile(OTHER4_EXP); - Matcher idother4Matcher = other4Pattern.matcher(theBulletin); - - // Regular expression for others' message ID - final String OTHER5_EXP = "([A-Z]{4}) SIGMET( )*VALID( )*([0-9]{6})/([0-9]{6})( )*([A-Z]{4})(-)?"; - // Pattern used for extracting the message ID - final Pattern other5Pattern = Pattern.compile(OTHER5_EXP); - Matcher idother5Matcher = other5Pattern.matcher(theBulletin); - - // Regular expression for others' message ID - final String OTHER6_EXP = "([A-Z]{4}) SIGMET( )*([0-9]{1}|[0-9]{2}|[A-Z]{1}[0-9]{1}|[A-Z]{2}[0-9]{2}) " - + "VALID( )*([0-9]{6})Z/([0-9]{6})Z( )*([A-Z]{4})(-)?"; - // Pattern used for extracting the message ID - final Pattern other6Pattern = Pattern.compile(OTHER6_EXP); - Matcher idother6Matcher = other6Pattern.matcher(theBulletin); - - // Regular expression for others' message ID - final String OTHER7_EXP = "([A-Z]{4}) SIGMET( )*([0-9]{1}|[0-9]{2}|[A-Z]{1}[0-9]{1}|[A-Z]{2}[0-9]{2}) " - + "VALID( )*([0-9]{4})/([0-9]{4})( )*([A-Z]{4})(-)?"; - // Pattern used for extracting the message ID - final Pattern other7Pattern = Pattern.compile(OTHER7_EXP); - Matcher idother7Matcher = other7Pattern.matcher(theBulletin); - - // Regular expression for others' message ID - final String OTHER8_EXP = "([A-Z]{4}) SIGMET( |\\W)*VALID( |\\W)*([0-9]{6})/([0-9]{6})( )*([A-Z]{4})(-)?"; - // Pattern used for extracting the message ID - final Pattern other8Pattern = Pattern.compile(OTHER8_EXP); - Matcher idother8Matcher = other8Pattern.matcher(theBulletin); - - // Get messageID - if (idconusMatcher.find()) { - messageID = idconusMatcher.group(2); - } else if (idcanadaMatcher.find()) { - messageID = idcanadaMatcher.group(6); - } else if (idother1Matcher.find()) { - messageID = idother1Matcher.group(6); - } else if (idjapanMatcher.find()) { - messageID = idjapanMatcher.group(7); - } else if (idother2Matcher.find()) { - messageID = idother2Matcher.group(1); - } else if (idother3Matcher.find()) { - messageID = idother3Matcher.group(6); - } else if (idother4Matcher.find()) { - messageID = idother4Matcher.group(8); - } else if (idother5Matcher.find()) { - messageID = idother5Matcher.group(7); - } else if (idother6Matcher.find()) { - messageID = idother6Matcher.group(8); - } else if (idother7Matcher.find()) { - messageID = idother7Matcher.group(8); - } else if (idother8Matcher.find()) { - messageID = idother8Matcher.group(7); - } - - return messageID; - } - - /** - * Obtains the sequence number. - * - * @param theBulletin - * The input bulletin - * @return a string for sequenceNumber - */ - public static String getSequenceNumber(String theBulletin) { - - String sequenceNumber = " "; - - // // Regular expression for CONUS sequence number - // final String CONUS_EXP = - // "([A-Z]{4}) SIGMET (ALFA|BRAVO|CHARLIE|DELTA|ECHO|FOXTROT|GOLF|HOTEL|" - // + - // "INDIA|JULIETT|JULIET|KILO|LIMA|MIKE|NOVEMBER|OSCAR|PAPA|QUEBEC|ROMEO|SIERRA|TANGO|" - // + - // "UNIFORM|VICTOR|WHISKEY|XRAY|YANKEE|ZULU) ([0-9]{1}|[0-9]{2}) VALID"; - - // Pattern used for extracting the sequence number - final Pattern conusPattern = Pattern.compile(CONUS_EXP); - Matcher seqnoconusMatcher = conusPattern.matcher(theBulletin); - - // Regular expression for CANADA sequence number - final String CANADA_EXP = "SIGMET ([A-Z]{1}[0-9]{1}|[A-Z]{1}[0-9]{2}) " - + "(VALID ([0-9]{6})/|CANCELLED AT )([0-9]{6}) ([A-Z]{4})-"; - // Pattern used for extracting the sequence number - final Pattern canadaPattern = Pattern.compile(CANADA_EXP); - Matcher seqnocanadaMatcher = canadaPattern.matcher(theBulletin); - - // Regular expression for JAPAN and UK sequence number - final String JAPAN_EXP = "([A-Z]{4}) SIGMET ([0-9]{1}|[0-9]{2}) " - + "(VALID )?([0-9]{6})/([0-9]{6})(UTC)? ([A-Z]{4})-"; - // Pattern used for extracting the sequence number - final Pattern japanPattern = Pattern.compile(JAPAN_EXP); - Matcher seqnojapanMatcher = japanPattern.matcher(theBulletin); - - // Regular expression for others' sequence number - final String OTHER_EXP = "([A-Z]{4}) SIGMET ([0-9]{1}|[0-9]{2}|[A-Z]{1}[0-9]{1}|[A-Z]{2}[0-9]{2}) " - + "VALID ([0-9]{6})/([0-9]{6})( UTC)? ([A-Z]{4})(-)?"; - // Pattern used for extracting the sequence number - final Pattern otherPattern = Pattern.compile(OTHER_EXP); - Matcher seqnootherMatcher = otherPattern.matcher(theBulletin); - - // Regular expression for others' sequence number - final String OTHER2_EXP = "SIGMET ([0-9]{1}|[0-9]{2}|[A-Z]{1}[0-9]{1}|[A-Z]{2}[0-9]{2}|A-Z]{1}[0-9]{2}) " - + "VALID ([0-9]{6})/([0-9]{6})"; - // Pattern used for extracting the sequence number - final Pattern other2Pattern = Pattern.compile(OTHER2_EXP); - Matcher seqnoother2Matcher = other2Pattern.matcher(theBulletin); - - // Regular expression for others' sequence number - final String OTHER3_EXP = "([A-Z]{4}) SIGMET (([A-Z]* )?([0-9]{1}|[0-9]{2})) " - + "VALID ([0-9]{6})/([0-9]{6}) ([A-Z]{4})(-)?"; - // Pattern used for extracting the sequence number - final Pattern other3Pattern = Pattern.compile(OTHER3_EXP); - Matcher seqnoother3Matcher = other3Pattern.matcher(theBulletin); - - // Regular expression for others' sequence number - final String OTHER4_EXP = "([A-Z]{4}) SIGMET( )*([0-9]{1}|[0-9]{2}|[A-Z]{1}[0-9]{1}|[A-Z]{2}[0-9]{2}) " - + "VALID( )*([0-9]{6})/([0-9]{6})( )*([A-Z]{4})(-)?"; - // Pattern used for extracting the sequence number - final Pattern other4Pattern = Pattern.compile(OTHER4_EXP); - Matcher seqnoother4Matcher = other4Pattern.matcher(theBulletin); - - // Regular expression for others' sequence number - final String OTHER5_EXP = "([A-Z]{4}) SIGMET( )*VALID( )*([0-9]{6})/([0-9]{6})( )*([A-Z]{4})(-)?"; - // Pattern used for extracting the sequence number - final Pattern other5Pattern = Pattern.compile(OTHER5_EXP); - Matcher seqnoother5Matcher = other5Pattern.matcher(theBulletin); - - // Regular expression for others' sequence number - final String OTHER6_EXP = "([A-Z]{4}) SIGMET( )*([0-9]{1}|[0-9]{2}|[A-Z]{1}[0-9]{1}|[A-Z]{2}[0-9]{2}) " - + "VALID( )*([0-9]{6})Z/([0-9]{6})Z( )*([A-Z]{4})(-)?"; - // Pattern used for extracting the message sequence number - final Pattern other6Pattern = Pattern.compile(OTHER6_EXP); - Matcher seqnoother6Matcher = other6Pattern.matcher(theBulletin); - - // Regular expression for others' sequence number - final String OTHER7_EXP = "([A-Z]{4}) SIGMET( )*([0-9]{1}|[0-9]{2}|[A-Z]{1}[0-9]{1}|[A-Z]{2}[0-9]{2}) " - + "VALID( )*([0-9]{4})/([0-9]{4})( )*([A-Z]{4})(-)?"; - // Pattern used for extracting the sequence number - final Pattern other7Pattern = Pattern.compile(OTHER7_EXP); - Matcher seqnoother7Matcher = other7Pattern.matcher(theBulletin); - - // Regular expression for others' sequence number - final String OTHER8_EXP = "([A-Z]{4}) SIGMET( |\\W)*([0-9]{1})( |\\W)*VALID"; - // Pattern used for extracting the sequence number - final Pattern other8Pattern = Pattern.compile(OTHER8_EXP); - Matcher seqnoother8Matcher = other8Pattern.matcher(theBulletin); - - // Get sequenceNumber - if (seqnoconusMatcher.find()) { - sequenceNumber = seqnoconusMatcher.group(3); - } else if (seqnocanadaMatcher.find()) { - sequenceNumber = seqnocanadaMatcher.group(1); - } else if (seqnootherMatcher.find()) { - sequenceNumber = seqnootherMatcher.group(2); - } else if (seqnojapanMatcher.find()) { - sequenceNumber = seqnojapanMatcher.group(2); - } else if (seqnoother2Matcher.find()) { - sequenceNumber = seqnoother2Matcher.group(1); - } else if (seqnoother3Matcher.find()) { - sequenceNumber = seqnoother3Matcher.group(2); - } else if (seqnoother4Matcher.find()) { - sequenceNumber = seqnoother4Matcher.group(3); - } else if (seqnoother5Matcher.find()) { - // lacking sequence number; default 0 - sequenceNumber = "0"; - } else if (seqnoother6Matcher.find()) { - sequenceNumber = seqnoother6Matcher.group(3); - } else if (seqnoother7Matcher.find()) { - sequenceNumber = seqnoother7Matcher.group(3); - } else if (seqnoother8Matcher.find()) { - sequenceNumber = seqnoother8Matcher.group(3); - } - - return sequenceNumber; - } - - /** - * Obtains the Air Traffic Service Unit. - * - * @param theBulletin - * The input bulletin - * @return a string for atsu. - */ - public static String getAtsu(String theBulletin) { - - String atsu = null; - - // // Regular expression for CONUS ATSU - // final String CONUS_EXP = - // "([A-Z]{4}) SIGMET (ALFA|BRAVO|CHARLIE|DELTA|ECHO|FOXTROT|GOLF|" + - // "HOTEL|INDIA|JULIETT|JULIET|KILO|LIMA|MIKE|NOVEMBER|OSCAR|PAPA|QUEBEC|ROMEO|SIERRA|" - // + - // "TANGO|UNIFORM|VICTOR|WHISKEY|XRAY|YANKEE|ZULU) ([0-9]{1}|[0-9]{2}) VALID"; - - // Pattern used for extracting the ATSU - final Pattern conusPattern = Pattern.compile(CONUS_EXP); - Matcher atsuconusMatcher = conusPattern.matcher(theBulletin); - - // Regular expression for CANADA ATSU - final String CANADA_EXP = "SIGMET ([A-Z]{1}[0-9]{1}|[A-Z]{1}[0-9]{2}) " - + "(VALID ([0-9]{6})/|CANCELLED AT )([0-9]{6}) ([A-Z]{4})-"; - // Pattern used for extracting the ATSU - final Pattern canadaPattern = Pattern.compile(CANADA_EXP); - Matcher atsucanadaMatcher = canadaPattern.matcher(theBulletin); - - // Regular expression for JAPAN and UK ATSU - final String JAPAN_EXP = "([A-Z]{4}) SIGMET ([0-9]{1}|[0-9]{2}) " - + "(VALID )?([0-9]{6})/([0-9]{6})(UTC)? ([A-Z]{4})-"; - // Pattern used for extracting the ATSU - final Pattern japanPattern = Pattern.compile(JAPAN_EXP); - Matcher atsujapanMatcher = japanPattern.matcher(theBulletin); - - // Regular expression for others' ATSU - final String OTHER1_EXP = "([A-Z]{4}) SIGMET( )*([0-9]{1}|[0-9]{2}|[A-Z]{1}[0-9]{1}|[A-Z]{2}[0-9]{2})" - + "( )*VALID"; - // Pattern used for extracting the ATSU - final Pattern other1Pattern = Pattern.compile(OTHER1_EXP); - Matcher atsuother1Matcher = other1Pattern.matcher(theBulletin); - - // Regular expression for CONUS ATSU - final String CONUS2_EXP = "([A-Z]{4} ([A-Z]{4} )*)SIGMET (ALFA|BRAVO|CHARLIE|DELTA|ECHO|FOXTROT|" - + "GOLF|HOTEL|INDIA|JULIETT|JULIET|KILO|LIMA|MIKE|NOVEMBER|OSCAR|PAPA|QUEBEC|ROMEO|SIERRA|" - + "TANGO|UNIFORM|VICTOR|WHISKEY|XRAY|YANKEE|ZULU) ([0-9]{1}|[0-9]{2}) VALID"; - // Pattern used for extracting the ATSU - final Pattern conus2Pattern = Pattern.compile(CONUS2_EXP); - Matcher atsuconus2Matcher = conus2Pattern.matcher(theBulletin); - - final String OTHER2_EXP = "([A-Z]{4}) SIGMET( )*VALID( )*([0-9]{6})/([0-9]{6})( )*([A-Z]{4})(-)?"; - // Pattern used for extracting the ATSU - final Pattern other2Pattern = Pattern.compile(OTHER2_EXP); - Matcher atsuother2Matcher = other2Pattern.matcher(theBulletin); - - // Regular expression for others' ATSU - final String OTHER3_EXP = "([A-Z]{4}) SIGMET ([0-9]{1})( |\\W)*VALID( |\\W)*" - + "([0-9]{6})/([0-9]{6})( )*([A-Z]{4})(-)?"; - // Pattern used for extracting the ATSU - final Pattern other3Pattern = Pattern.compile(OTHER3_EXP); - Matcher atsuother3Matcher = other3Pattern.matcher(theBulletin); - - // Get atsu - if (atsuconus2Matcher.find()) { - atsu = atsuconus2Matcher.group(1); - } else if (atsuconusMatcher.find()) { - atsu = atsuconusMatcher.group(1); - } else if (atsucanadaMatcher.find()) { - atsu = atsucanadaMatcher.group(5); - } else if (atsuother1Matcher.find()) { - atsu = atsuother1Matcher.group(1); - } else if (atsujapanMatcher.find()) { - atsu = atsujapanMatcher.group(1); - } else if (atsuother2Matcher.find()) { - atsu = atsuother2Matcher.group(1); - } else if (atsuother3Matcher.find()) { - atsu = atsuother3Matcher.group(1); - } - - return atsu; - } - - /** - * Obtains the location indicator of the meteorological watch office - * originating the message. - * - * @param theBulletin - * The input bulletin - * @return a string for omwo. - */ - public static String getOmwo(String theBulletin) { - - String omwo = " "; - - // Regular expression for CONUS OMWO - final String CONUS_EXP = "([A-Z]{4}) ([A-Z]{4} )?SIGMET ([A-Z])* ([0-9]{1}|[0-9]{2}) " - + "VALID ([0-9]{6})/([0-9]{6})( UTC)? ([A-Z]{4})-"; - // Pattern used for extracting the OMWO - final Pattern conusPattern = Pattern.compile(CONUS_EXP); - Matcher omwoconusMatcher = conusPattern.matcher(theBulletin); - - // Regular expression for CANADA OMWO - final String CANADA_EXP = "SIGMET ([A-Z]{1}[0-9]{1}|[A-Z]{1}[0-9]{2}) " - + "(VALID ([0-9]{6})/|CANCELLED AT )([0-9]{6}) ([A-Z]{4})-"; - // Pattern used for extracting the OMWO - final Pattern canadaPattern = Pattern.compile(CANADA_EXP); - Matcher omwocanadaMatcher = canadaPattern.matcher(theBulletin); - - // Regular expression for JAPAN and UK OMWO - final String JAPAN_EXP = "([A-Z]{4}) SIGMET ([0-9]{1}|[0-9]{2}) " - + "(VALID )?([0-9]{6})/([0-9]{6})(UTC)? ([A-Z]{4})-"; - // Pattern used for extracting the OMWO - final Pattern japanPattern = Pattern.compile(JAPAN_EXP); - Matcher omwojapanMatcher = japanPattern.matcher(theBulletin); - - // Regular expression for other OMWO - final String OTHER_EXP = "([A-Z]{4}) SIGMET ([0-9]{1}|[0-9]{2}|[A-Z]{1}[0-9]{1}|[A-Z]{2}[0-9]{2}) " - + "VALID ([0-9]{6})/([0-9]{6})( UTC)? ([A-Z]{4})(-)?"; - // Pattern used for extracting the OMWO - final Pattern otherPattern = Pattern.compile(OTHER_EXP); - Matcher omwootherMatcher = otherPattern.matcher(theBulletin); - - // Regular expression for others' OMWO - final String OTHER2_EXP = "([A-Z]{4}) SIGMET( )*([0-9]{1}|[0-9]{2}|[A-Z]{1}[0-9]{1}|" - + "[A-Z]{2}[0-9]{2}|[A-Z]{1}[0-9]{2}) " - + "VALID( )*([0-9]{6})/([0-9]{6})( )*([A-Z]{4})(-)?"; - // Pattern used for extracting the message OMWO - final Pattern other2Pattern = Pattern.compile(OTHER2_EXP); - Matcher omwoother2Matcher = other2Pattern.matcher(theBulletin); - - // Regular expression for others' OMWO - final String OTHER3_EXP = "([A-Z]{4}) SIGMET( )*VALID( )*([0-9]{6})/([0-9]{6})" - + "( )*([A-Z]{4})(-)?"; - // Pattern used for extracting the message OMWO - final Pattern other3Pattern = Pattern.compile(OTHER3_EXP); - Matcher omwoother3Matcher = other3Pattern.matcher(theBulletin); - - // Regular expression for others' OMWO - final String OTHER4_EXP = "([A-Z]{4}) SIGMET( )*([0-9]{1}|[0-9]{2}|[A-Z]{1}[0-9]{1}|[A-Z]{2}[0-9]{2}) " - + "VALID( )*([0-9]{4})/([0-9]{4})( )*([A-Z]{4})(-)?"; - // Pattern used for extracting the message OMWO - final Pattern other4Pattern = Pattern.compile(OTHER4_EXP); - Matcher omwoother4Matcher = other4Pattern.matcher(theBulletin); - - // Regular expression for others' OMWO - final String OTHER5_EXP = "([A-Z]{4}) SIGMET( )*([0-9]{1}|[0-9]{2}|[A-Z]{1}[0-9]{1}|[A-Z]{2}[0-9]{2}) " - + "VALID( )*([0-9]{6})Z/([0-9]{6})Z( )*([A-Z]{4})(-)?"; - // Pattern used for extracting the message OMWO - final Pattern other5Pattern = Pattern.compile(OTHER5_EXP); - Matcher omwoother5Matcher = other5Pattern.matcher(theBulletin); - - // Regular expression for others' OMWO - final String OTHER6_EXP = "([A-Z]{4}) SIGMET ([0-9]{1})( |\\W)*" - + "VALID( |\\W)*([0-9]{6})/([0-9]{6})( )*([A-Z]{4})(-)?"; - // Pattern used for extracting the OMWO - final Pattern other6Pattern = Pattern.compile(OTHER6_EXP); - Matcher omwoother6Matcher = other6Pattern.matcher(theBulletin); - - // Get omwo - if (omwoconusMatcher.find()) { - omwo = omwoconusMatcher.group(8); - } else if (omwocanadaMatcher.find()) { - omwo = omwocanadaMatcher.group(5); - } else if (omwootherMatcher.find()) { - omwo = omwootherMatcher.group(6); - } else if (omwojapanMatcher.find()) { - omwo = omwojapanMatcher.group(7); - } else if (omwoother2Matcher.find()) { - omwo = omwoother2Matcher.group(8); - } else if (omwoother3Matcher.find()) { - omwo = omwoother3Matcher.group(7); - } else if (omwoother4Matcher.find()) { - omwo = omwoother4Matcher.group(8); - } else if (omwoother5Matcher.find()) { - omwo = omwoother5Matcher.group(8); - } else if (omwoother6Matcher.find()) { - omwo = omwoother6Matcher.group(8); - } - - return omwo; - } - - /** - * Obtains start time from input bulletin. - * - * @param theReport - * The bulletin message - * @return a calendar for start time - */ - public static Calendar getStartTime(String theBulletin, Headers headers) { - - String time = "???"; - - // Regular expression for general start time group - final String START_EXP = " VALID( )*([0-9]{6})/([0-9]{6})"; - // Pattern used for extracting the start time group - final Pattern startPattern = Pattern.compile(START_EXP); - Matcher timestartMatcher = startPattern.matcher(theBulletin); - - // Regular expression for CANADA start time group - final String CANADA_EXP = "SIGMET ([A-Z]{1}[0-9]{1}) VALID ([0-9]{6})/([0-9]{6}) ([A-Z]{4})-"; - // Pattern used for extracting the start time group - final Pattern canadaPattern = Pattern.compile(CANADA_EXP); - Matcher timecanadaMatcher = canadaPattern.matcher(theBulletin); - - // Regular expression for JAPAN and UK start time group - final String JAPAN_EXP = "([A-Z]{4}) SIGMET ([0-9]{1}|[0-9]{2}) " - + "(VALID )?([0-9]{6})/([0-9]{6})(UTC)? ([A-Z]{4})-"; - // Pattern used for extracting the start time group - final Pattern japanPattern = Pattern.compile(JAPAN_EXP); - Matcher timejapanMatcher = japanPattern.matcher(theBulletin); - - // Regular expression for others' start time - final String OTHER1_EXP = " VALID( )*([0-9]{6})(Z)?/([0-9]{6})(Z)?"; - // Pattern used for extracting the start time - final Pattern other1Pattern = Pattern.compile(OTHER1_EXP); - Matcher time1Matcher = other1Pattern.matcher(theBulletin); - - // Regular expression for others' start time - final String OTHER2_EXP = " VALID( )*([0-9]{4})/([0-9]{4})"; - // Pattern used for extracting the start time - final Pattern other2Pattern = Pattern.compile(OTHER2_EXP); - Matcher time2Matcher = other2Pattern.matcher(theBulletin); - - // Get time group - if (timestartMatcher.find()) { - time = timestartMatcher.group(2); - } else if (timejapanMatcher.find()) { - time = timejapanMatcher.group(4); - } else if (time1Matcher.find()) { - time = time1Matcher.group(2); - } else if (timecanadaMatcher.find()) { - time = timecanadaMatcher.group(2); - } else if (time2Matcher.find()) { - // Handle start time in special case without day - final String WMO_EXP = "([A-Z]{4}[0-9]{2}) ([A-Z]{4}) ([0-9]{2})([0-9]{4})"; - // Pattern used for extracting WMO header, officeID, and issue date - final Pattern wmoPattern = Pattern.compile(WMO_EXP); - Matcher theMatcher = wmoPattern.matcher(theBulletin); - if (theMatcher.find()) { - time = time2Matcher.group(2).concat(theMatcher.group(3)); - } - } - if (time != "???") { - // Get start time - return TimeTools.findDataTime(time, headers); - } else { - return null; - } - } - - /** - * Get the end time - * - * @param theBulletin - * The bulletin which contains end time - * @return a calendar for end time - */ - public static Calendar getEndTime(String theBulletin, Headers headers) { - - String time = "???"; - - // Regular expression for CONUS end time group - final String ENDTIME_EXP = " VALID( )*([0-9]{6})/([0-9]{6})"; - // Pattern used for extracting the end time group - final Pattern endtimePattern = Pattern.compile(ENDTIME_EXP); - Matcher endtimeMatcher = endtimePattern.matcher(theBulletin); - - // Regular expression for CANADA end time group - final String CANADA_EXP = "SIGMET ([A-Z]{1}[0-9]{1}) " - + "(VALID ([0-9]{6})/|CANCELLED AT )([0-9]{6}) ([A-Z]{4})-"; - // Pattern used for extracting the end time group - final Pattern canadaPattern = Pattern.compile(CANADA_EXP); - Matcher timecanadaMatcher = canadaPattern.matcher(theBulletin); - - // Regular expression for JAPAN and UK end time group - final String JAPAN_EXP = "([A-Z]{4}) SIGMET ([0-9]{1}|[0-9]{2}) " - + "(VALID )?([0-9]{6})/([0-9]{6})(UTC)? ([A-Z]{4})-"; - // Pattern used for extracting the end time group - final Pattern japanPattern = Pattern.compile(JAPAN_EXP); - Matcher timejapanMatcher = japanPattern.matcher(theBulletin); - - // Regular expression for others' end time - final String OTHER1_EXP = " VALID( )*([0-9]{6})(Z)?/([0-9]{6})(Z)?"; - // Pattern used for extracting the end time - final Pattern other1Pattern = Pattern.compile(OTHER1_EXP); - Matcher time1Matcher = other1Pattern.matcher(theBulletin); - - // Regular expression for others' end time - final String OTHER2_EXP = " VALID( )*([0-9]{4})/([0-9]{4})"; - // Pattern used for extracting the end time - final Pattern other2Pattern = Pattern.compile(OTHER2_EXP); - Matcher time2Matcher = other2Pattern.matcher(theBulletin); - - // Get time group - if (endtimeMatcher.find()) { - time = endtimeMatcher.group(3); - } else if (timejapanMatcher.find()) { - time = timejapanMatcher.group(4); - } else if (timecanadaMatcher.find()) { - time = timecanadaMatcher.group(4); - } else if (timecanadaMatcher.find()) { - time = timecanadaMatcher.group(6); - } else if (time1Matcher.find()) { - time = time1Matcher.group(4); - } else if (time2Matcher.find()) { - // Handle end time special case without day - final String WMO_EXP = "([A-Z]{4}[0-9]{2}) ([A-Z]{4}) ([0-9]{2})([0-9]{4})"; - // Pattern used for extracting WMO header, officeID and issue time - final Pattern wmoPattern = Pattern.compile(WMO_EXP); - Matcher theMatcher = wmoPattern.matcher(theBulletin); - if (theMatcher.find()) { - time = time2Matcher.group(3).concat(theMatcher.group(3)); - } - } - - if (time != "???") { - // Get end time - Calendar mndTime = null; - return TimeTools.findDataTime(time, headers); - } else { - return null; - } - } - - /** - * Parse the bulletin and store flight level 1 or level 2 if any. - * - * @param theBulletin - * The bulletin message - * @param record - * The main table - */ - public static void processFlightLevels(String theBulletin, - IntlSigmetRecord record) { - - String flevel1 = " "; - String flevel2 = " "; - - // Regular expression for general one flight level - final String FLEVEL1_EXP = "(TOP|TOPS|TOPS TO) FL( )?([0-9]{3})"; - // Pattern used for extracting the flight level - final Pattern flevel1Pattern = Pattern.compile(FLEVEL1_EXP); - Matcher flevel1Matcher = flevel1Pattern.matcher(theBulletin); - - // Regular expression for flight levels in format "BETWEEN ... AND ...." - final String BETWEEN_EXP = "(BETWEEN|BTN) (FL)?([0-9]{3}|[0-9]{2}) AND " - + "(FL)?([0-9]{3}|[0-9]{2})"; - // Pattern used for extracting the flight levels - final Pattern betweenPattern = Pattern.compile(BETWEEN_EXP); - Matcher betweenMatcher = betweenPattern.matcher(theBulletin); - - // Regular expression for flight levels in format - // "TOPS ... MAX TOPS ...." for Canada - final String MAXTOPS_EXP = "TOPS( |\\x0d\\x0d\\x0a)([0-9]{3}|[0-9]{2}) " - + "MAX TOPS ([0-9]{3}|[0-9]{2})"; - // Pattern used for extracting the flight levels - final Pattern maxtopsPattern = Pattern.compile(MAXTOPS_EXP); - Matcher maxtopsMatcher = maxtopsPattern.matcher(theBulletin); - - // Regular expression for general two flight levels in "360-440" or - // "360/440" format - final String FLEVEL2_EXP = "FL([0-9]{3}|[0-9]{2})(-|/)([0-9]{3}|[0-9]{2})"; - // Pattern used for extracting the flight levels - final Pattern flevel2Pattern = Pattern.compile(FLEVEL2_EXP); - Matcher flevel2Matcher = flevel2Pattern.matcher(theBulletin); - - // Regular expression for general one flight level - final String FLEVEL3_EXP = "(TOP|TOPS|TOPS TO) (FL )?([0-9]{3})"; - // Pattern used for extracting the flight level - final Pattern flevel3Pattern = Pattern.compile(FLEVEL3_EXP); - Matcher flevel3Matcher = flevel3Pattern.matcher(theBulletin); - - final String FLEVEL4_EXP = "FL([0-9]{3})"; - // Pattern used for extracting the flight level - final Pattern flevel4Pattern = Pattern.compile(FLEVEL4_EXP); - Matcher flevel4Matcher = flevel4Pattern.matcher(theBulletin); - - // Get flight levels group - if (maxtopsMatcher.find()) { - flevel1 = maxtopsMatcher.group(3); - } else if (flevel2Matcher.find()) { - flevel1 = flevel2Matcher.group(1); - flevel2 = flevel2Matcher.group(3); - } else if (betweenMatcher.find()) { - flevel1 = betweenMatcher.group(3); - flevel2 = betweenMatcher.group(5); - } else if (flevel1Matcher.find()) { - flevel1 = flevel1Matcher.group(3); - } else if (flevel3Matcher.find()) { - flevel1 = flevel3Matcher.group(3); - } else if (flevel4Matcher.find()) { - flevel1 = flevel4Matcher.group(1); - } - - // Set flight levels to database - if (flevel1 != " ") { - record.setFlightlevel1(Integer.parseInt(flevel1)); - } - if (flevel2 != " ") { - record.setFlightlevel2(Integer.parseInt(flevel2)); - } - - // Parse the locations - processLocation(theBulletin, record); - - } - - /** - * Obtains remarks from a bulletin - * - * @param bullMessage - * The bulletin message - * @return a string for remarks - */ - public static String getRemarks(String bullMessage) { - - String retRemarks = " "; - - // Regular expression correction - final String CORR_EXP = "(COR | (CC[A-Z]{1}))"; - - // Pattern used for extracting correction - final Pattern corrPattern = Pattern.compile(CORR_EXP); - Matcher corrMatcher = corrPattern.matcher(bullMessage); - - // Regular expression amendment - final String AMD_EXP = "(AMD )"; - // Pattern used for extracting amendment - final Pattern amdPattern = Pattern.compile(AMD_EXP); - Matcher amdMatcher = amdPattern.matcher(bullMessage); - - // Regular expression for TEST - final String TEST_EXP = "TEST "; - // Pattern used for extracting test - final Pattern testPattern = Pattern.compile(TEST_EXP); - Matcher testMatcher = testPattern.matcher(bullMessage); - - if (corrMatcher.find()) { - retRemarks = corrMatcher.group(1); - } else if (amdMatcher.find()) { - retRemarks = amdMatcher.group(); - } else if (testMatcher.find()) { - retRemarks = "TEST"; - } - - return retRemarks; - } - - /** - * Obtains speed from a bulletin - * - * @param bullMessage - * The bulletin message - * @return an integer for speed - */ - public static Integer getSpeed(String bullMessage) { - - Integer retSpeed = IDecoderConstantsN.INTEGER_MISSING; - - final String SPEED_EXP = "(MOVE|MOV|MOVG) (|E|N|S|W|\006|\012)* " - + "([0-9]{1}|[0-9]{2})(-[0-9]{2})?( )?(KT)"; - // Pattern used for extracting speed for general - final Pattern speedPattern = Pattern.compile(SPEED_EXP); - Matcher theMatcher = speedPattern.matcher(bullMessage); - - final String CANADA1_EXP = "(MOVE |MOV |MOVG )?([ENSW]{1})WD " - + "([0-9]{2}|[0-9]{1})( |\\x0d\\x0d\\x0a)?KT"; - // Pattern used for extracting speed for Canada - final Pattern canada1Pattern = Pattern.compile(CANADA1_EXP); - Matcher canada1Matcher = canada1Pattern.matcher(bullMessage); - - final String CANADA2_EXP = "(MOVE |MOV |MOVG )?([ENSW]{2})WD " - + "([0-9]{2}|[0-9]{1})(\\x0d\\x0d\\x0a| )?KT"; - // Pattern used for extracting speed for Canada - final Pattern canada2Pattern = Pattern.compile(CANADA2_EXP); - Matcher canada2Matcher = canada2Pattern.matcher(bullMessage); - - final String KMH_EXP = "([0-9]{2}|[0-9]{3})(( )*|( )?\\x0d\\x0d\\x0a)KMH"; - // Pattern used for extracting speed for KMH - final Pattern kmhPattern = Pattern.compile(KMH_EXP); - Matcher kmhMatcher = kmhPattern.matcher(bullMessage); - - if (theMatcher.find()) { - retSpeed = Integer.parseInt(theMatcher.group(3)); - } else if (canada1Matcher.find()) { - retSpeed = Integer.parseInt(canada1Matcher.group(3)); - } else if (canada2Matcher.find()) { - retSpeed = Integer.parseInt(canada2Matcher.group(3)); - } else if (kmhMatcher.find()) { - Integer kmhSpeed = Integer.parseInt(kmhMatcher.group(1)); - // Convert KMH to Knots - float speed = (float) (((double) kmhSpeed * 1000.0 / 3600.0) * 1.9425); - retSpeed = (int) speed; - } - - return retSpeed; - } - - /** - * Obtains intensity from a bulletin - * - * @param bullMessage - * The bulletin message - * @return a string for intensity - */ - public static String getIntensity(String bullMessage) { - - String intensity = null; - - // Regular expression for intensity - final String INTENSITY_EXP = "( NC | INTSF| WKN | NC=|WKN=|NC.|WKNG )"; - // Pattern used for extracting intensityFlag - final Pattern intensityPattern = Pattern.compile(INTENSITY_EXP); - Matcher theMatcher = intensityPattern.matcher(bullMessage); - - if (theMatcher.find()) { - intensity = theMatcher.group(1); - intensity = UtilN.removeLeadingWhiteSpaces(intensity); - if (intensity.substring(0, 2).equals("NC")) { - intensity = "NC"; - } else if (intensity.substring(0, 3).equals("WKN")) { - intensity = "WKN"; - } - } - - return intensity; - } - - /** - * Obtains direction from a bulletin - * - * @param bullMessage - * The bulletin message - * @return a string for direction - */ - public static String getDirection(String bullMessage) { - - String direction = null; - - final String CANADA1_EXP = "(MOVE |MOV |MOVG )?([ENSW]{1})WD " - + "([0-9]{2}|[0-9]{1})( |\\x0d\\x0d\\x0a)?KT"; - // Pattern used for extracting direction for Canada - final Pattern canada1Pattern = Pattern.compile(CANADA1_EXP); - Matcher canada1Matcher = canada1Pattern.matcher(bullMessage); - - final String CANADA2_EXP = "(MOVE |MOV |MOVG )?([ENSW]{2})WD " - + "([0-9]{2}|[0-9]{1})( |\\x0d\\x0d\\x0a)?KT"; - // Pattern used for extracting direction for Canada - final Pattern canada2Pattern = Pattern.compile(CANADA2_EXP); - Matcher canada2Matcher = canada2Pattern.matcher(bullMessage); - - // Regular expression for direction - final String DIRECTION_EXP = "(MOVE|MOV|MOVG) ([ENSW]{3}|[ENSW]{2}|[ENSW]{1})"; - // Pattern used for extracting direction for general - final Pattern directionPattern = Pattern.compile(DIRECTION_EXP); - Matcher theMatcher = directionPattern.matcher(bullMessage); - - final String DIR2_EXP = "(MOVE|MOV|MOVG)(\\D)*([ENSW]{3}|[ENSW]{2}|[ENSW]{1}) "; - // Pattern used for extracting direction for Canada - final Pattern dir2Pattern = Pattern.compile(DIR2_EXP); - Matcher dir2Matcher = dir2Pattern.matcher(bullMessage); - - final String DIR3_EXP = "(MOVE|MOV|MOVG) (SOUTH|NORTH|WEST|EAST) "; - // Pattern used for extracting direction for Canada - final Pattern dir3Pattern = Pattern.compile(DIR3_EXP); - Matcher dir3Matcher = dir3Pattern.matcher(bullMessage); - - if (canada2Matcher.find()) { - direction = canada2Matcher.group(2); - } else if (canada1Matcher.find()) { - direction = canada1Matcher.group(2); - } else if (theMatcher.find()) { - direction = theMatcher.group(2); - } else if (dir2Matcher.find()) { - direction = dir2Matcher.group(3); - } else if (dir3Matcher.find()) { - direction = dir3Matcher.group(2); - if (direction.equals("SOUTH")) { - direction = "S"; - } else if (direction.equals("NORTH")) { - direction = "N"; - } else if (direction.equals("WEST")) { - direction = "W"; - } else if (direction.equals("EAST")) { - direction = "E"; - } - } - return direction; - } - - /** - * Parse the location to set Lat/Lon or location name - * - * @param theLocation - * The location with lat/lon or location name - * @param locTb - * The location table - */ - public static void processLatLon(String theLocation, - IntlSigmetLocation locTb, Integer index, IntlSigmetRecord record) { - - double flat, flon; - - final String LATLON1_EXP = "(N|S)([0-9]{2})([0-9]{2}) (E|W)([0-9]{3})([0-9]{2})"; - // Pattern used for extracting latlon - CONUS - final Pattern latlon1Pattern = Pattern.compile(LATLON1_EXP); - Matcher latlon1Matcher = latlon1Pattern.matcher(theLocation); - - final String LATLON2_EXP = "/([0-9]{2})([0-9]{2})(N|S)([0-9]{3})" - + "([0-9]{2})(E|W)/((\\S|\\s|\\D)*)"; - // Pattern used for extracting latlon - Canada - final Pattern latlon2Pattern = Pattern.compile(LATLON2_EXP); - Matcher latlon2Matcher = latlon2Pattern.matcher(theLocation); - - final String LATLON3_EXP = "(N|S)([0-9]{2})([0-9]{2})(E|W)([0-9]{3})([0-9]{2})"; - // Pattern used for extracting latlon - final Pattern latlon3Pattern = Pattern.compile(LATLON3_EXP); - Matcher latlon3Matcher = latlon3Pattern.matcher(theLocation); - - final String LATLON4_EXP = "(N|S)([0-9]{2})(E|W)([0-9]{3}|[0-9]{2})"; - // Pattern used for extracting latlon - final Pattern latlon4Pattern = Pattern.compile(LATLON4_EXP); - Matcher latlon4Matcher = latlon4Pattern.matcher(theLocation); - - final String LATLON5_EXP = "([0-9]{2})(N|S)([0-9]{3}|[0-9]{2})(E|W)"; - // Pattern used for extracting latlon - Japan - final Pattern latlon5Pattern = Pattern.compile(LATLON5_EXP); - Matcher latlon5Matcher = latlon5Pattern.matcher(theLocation); - - final String LATLON6_EXP = "([0-9]{2})([0-9]{2})(N|S)([0-9]{3})([0-9]{2})(E|W)"; - // Pattern used for extracting latlon - final Pattern latlon6Pattern = Pattern.compile(LATLON6_EXP); - Matcher latlon6Matcher = latlon6Pattern.matcher(theLocation); - - final String LATLON7_EXP = "(N|S)([0-9]{2})([0-9]{2})[\\W| ]*(E|W)" - + "([0-9]{3})([0-9]{2})"; - // Pattern used for extracting latlon - final Pattern latlon7Pattern = Pattern.compile(LATLON7_EXP); - Matcher latlon7Matcher = latlon7Pattern.matcher(theLocation); - - final String LATLON8_EXP = "(N|S)([0-9]{2})( )*(E|W)([0-9]{3}|[0-9]{2})"; - // Pattern used for extracting latlon - final Pattern latlon8Pattern = Pattern.compile(LATLON8_EXP); - Matcher latlon8Matcher = latlon8Pattern.matcher(theLocation); - - double NSFlag = 1.0; - double EWFlag = 1.0; - double seconds = 60.0; - LatLonPoint point = null; - - if (record.getWmoHeader().equals("WSMC31")) { - // WSMC31 issues lat/lon in decimals. - seconds = 100.0; - } - - if (latlon1Matcher.find()) { - // latlon format for CONUS - if (latlon1Matcher.group(1).equals("S")) { - NSFlag = -1.0; - } - flat = NSFlag - * (Integer.parseInt(latlon1Matcher.group(2)) + (Integer - .parseInt(latlon1Matcher.group(3)) / seconds)); - if (latlon1Matcher.group(4).equals("W")) { - EWFlag = -1.0; - } - flon = EWFlag - * (Integer.parseInt(latlon1Matcher.group(5)) + (Integer - .parseInt(latlon1Matcher.group(6)) / seconds)); - locTb.setLatitude(flat); - locTb.setLongitude(flon); - locTb.setLocationName(latlon1Matcher.group()); - } else if (latlon2Matcher.find()) { - // latlon format for Canada - if (latlon2Matcher.group(3).equals("S")) { - NSFlag = -1.0; - } - flat = NSFlag - * (Integer.parseInt(latlon2Matcher.group(1)) + (Integer - .parseInt(latlon2Matcher.group(2)) / seconds)); - if (latlon2Matcher.group(6).equals("W")) { - EWFlag = -1.0; - } - flon = EWFlag - * (Integer.parseInt(latlon2Matcher.group(4)) + (Integer - .parseInt(latlon2Matcher.group(5)) / seconds)); - locTb.setLatitude(flat); - locTb.setLongitude(flon); - locTb.setLocationName(latlon2Matcher.group(7)); - } else if (latlon3Matcher.find()) { - if (latlon3Matcher.group(1).equals("S")) { - NSFlag = -1.0; - } - flat = NSFlag - * (Integer.parseInt(latlon3Matcher.group(2)) + (Integer - .parseInt(latlon3Matcher.group(3)) / seconds)); - if (latlon3Matcher.group(4).equals("W")) { - EWFlag = -1.0; - } - flon = EWFlag - * (Integer.parseInt(latlon3Matcher.group(5)) + (Integer - .parseInt(latlon3Matcher.group(6)) / seconds)); - locTb.setLatitude(flat); - locTb.setLongitude(flon); - locTb.setLocationName(latlon3Matcher.group()); - } else if (latlon4Matcher.find()) { - if (latlon4Matcher.group(1).equals("S")) { - NSFlag = -1.0; - } - flat = NSFlag * (Integer.parseInt(latlon4Matcher.group(2))); - if (latlon4Matcher.group(3).equals("W")) { - EWFlag = -1.0; - } - flon = EWFlag * (Integer.parseInt(latlon4Matcher.group(4))); - locTb.setLatitude(flat); - locTb.setLongitude(flon); - locTb.setLocationName(latlon4Matcher.group()); - } else if (latlon5Matcher.find()) { - if (latlon5Matcher.group(2).equals("S")) { - NSFlag = -1.0; - } - flat = NSFlag * (Integer.parseInt(latlon5Matcher.group(1))); - if (latlon5Matcher.group(4).equals("W")) { - EWFlag = -1.0; - } - flon = EWFlag * (Integer.parseInt(latlon5Matcher.group(3))); - locTb.setLatitude(flat); - locTb.setLongitude(flon); - locTb.setLocationName(latlon5Matcher.group()); - } else if (latlon6Matcher.find()) { - // latlon6 format - if (latlon6Matcher.group(3).equals("S")) { - NSFlag = -1.0; - } - flat = NSFlag - * (Integer.parseInt(latlon6Matcher.group(1)) + (Integer - .parseInt(latlon6Matcher.group(2)) / seconds)); - if (latlon6Matcher.group(6).equals("W")) { - EWFlag = -1.0; - } - flon = EWFlag - * (Integer.parseInt(latlon6Matcher.group(4)) + (Integer - .parseInt(latlon6Matcher.group(5)) / seconds)); - locTb.setLatitude(flat); - locTb.setLongitude(flon); - locTb.setLocationName(latlon6Matcher.group()); - } else if (latlon7Matcher.find()) { - // latlon format - if (latlon7Matcher.group(1).equals("S")) { - NSFlag = -1.0; - } - flat = NSFlag - * (Integer.parseInt(latlon7Matcher.group(2)) + (Integer - .parseInt(latlon7Matcher.group(3)) / seconds)); - if (latlon7Matcher.group(4).equals("W")) { - EWFlag = -1.0; - } - flon = EWFlag - * (Integer.parseInt(latlon7Matcher.group(5)) + (Integer - .parseInt(latlon7Matcher.group(6)) / seconds)); - locTb.setLatitude(flat); - locTb.setLongitude(flon); - locTb.setLocationName(latlon7Matcher.group()); - } else if (latlon8Matcher.find()) { - if (latlon8Matcher.group(1).equals("S")) { - NSFlag = -1.0; - } - flat = NSFlag * (Integer.parseInt(latlon8Matcher.group(2))); - if (latlon8Matcher.group(4).equals("W")) { - EWFlag = -1.0; - } - flon = EWFlag * (Integer.parseInt(latlon8Matcher.group(5))); - locTb.setLatitude(flat); - locTb.setLongitude(flon); - locTb.setLocationName(latlon8Matcher.group()); - } else { - System.out.println("theLocation=" + theLocation); - if ((index == 0) - && ((theLocation.substring(0, 3).equals("IN ")) || theLocation - .substring(0, 3).equals("OF "))) { - // handle special case with "IN " or "OF " and location - String retLoc = theLocation.substring(3); - locTb.setLocationName(retLoc); - // Get a latLonPoint for this station ID from "vors" location - // table - point = LatLonLocTbl.getLatLonPoint(retLoc, "vors"); - if (point != null) { - locTb.setLatitude(point.getLatitude(LatLonPoint.INDEGREES)); - locTb.setLongitude(point.getLongitude(LatLonPoint.INDEGREES)); - } - } else { - locTb.setLocationName(theLocation); - // Get a latLonPoint for this station ID from "vors" location - // table - point = LatLonLocTbl.getLatLonPoint(theLocation, "vors"); - if (point != null) { - locTb.setLatitude(point.getLatitude(LatLonPoint.INDEGREES)); - locTb.setLongitude(point.getLongitude(LatLonPoint.INDEGREES)); - } - - } - } - } - - /** - * Obtains distance or radius from a bulletin for a "LINE" type - * - * @param bullMessage - * The bulletin message - * @return an integer of distance - */ - public static Integer getDistance(String bullMessage) { - - Integer retDistance = IDecoderConstantsN.INTEGER_MISSING; - - // Regular expression for distance - final String DISTANCE_EXP = "(WI )?([0-9]{2}|[0-9]{3})( )?NM "; - // Pattern used for extracting distance - final Pattern distancePattern = Pattern.compile(DISTANCE_EXP); - Matcher theMatcher = distancePattern.matcher(bullMessage); - - // Regular expression distance for Canada - final String CANADA_EXP = "WTN ([0-9]{2}|[0-9]{3}) NM OF LN "; - // Pattern used for extracting distance for CANADA sigmet - final Pattern canadaPattern = Pattern.compile(CANADA_EXP); - Matcher canadaMatcher = canadaPattern.matcher(bullMessage); - - if (theMatcher.find()) { - retDistance = Integer.parseInt(theMatcher.group(2)); - } else if (canadaMatcher.find()) { - retDistance = Integer.parseInt(canadaMatcher.group(1)); - } - return retDistance; - } - - /** - * Get name location for the VA, TC, or HU.... - * - * @param bullMessage - * The bulletin message - * @return a string for nameLocation - */ - public static String getNameLocation(String bullMessage) { - - String retLocation = " "; - - final String VA_EXP = "MT (\\S)*-PEAK LOC ([NS][0-9]{4} [EW][0-9]{5}) "; - // Pattern used for extracting VA nameLocation - final Pattern vaPattern = Pattern.compile(VA_EXP); - Matcher vaMatcher = vaPattern.matcher(bullMessage); - - final String TC_EXP = " TC ((\\S)* FCST (\\S)* (\\S)*) "; - // Pattern used for extracting TC nameLocation - final Pattern tcPattern = Pattern.compile(TC_EXP); - Matcher tcMatcher = tcPattern.matcher(bullMessage); - - // final String HUR1_EXP = "(HURRICANE IRENE LOCATED AT )"; - final String HUR1_EXP = "(HURRICANE ([A-Z])* LOCATED AT ([\\w|.])* ([\\w|.])*) MOVG"; - // Pattern used for extracting Hurricane nameLocation - final Pattern hur1Pattern = Pattern.compile(HUR1_EXP); - Matcher hur1Matcher = hur1Pattern.matcher(bullMessage); - - final String HUR2_EXP = "(HURCN ([A-Z])* NEAR ([\\w|.])* ([\\w|.])*) "; - // Pattern used for extracting Hurricane nameLocation - final Pattern hur2Pattern = Pattern.compile(HUR2_EXP); - Matcher hur2Matcher = hur2Pattern.matcher(bullMessage); - - final String TS_EXP = "(TROPICAL STORM ([A-Z])* (\\w)*)"; - // Pattern used for extracting Tropical Storm nameLocation - final Pattern tsPattern = Pattern.compile(TS_EXP); - Matcher tsMatcher = tsPattern.matcher(bullMessage); - - final String TD_EXP = "(TROPICAL (DEPRESSION )?([A-Z])* (\\w)*)"; - // Pattern used for extracting Tropical Depression nameLocation - final Pattern tdPattern = Pattern.compile(TD_EXP); - Matcher tdMatcher = tdPattern.matcher(bullMessage); - - if (vaMatcher.find()) { - retLocation = vaMatcher.group(); - } else if (tcMatcher.find()) { - retLocation = tcMatcher.group(1); - } else if (hur1Matcher.find()) { - retLocation = hur1Matcher.group(1); - } else if (hur2Matcher.find()) { - retLocation = hur2Matcher.group(1); - } else if (tsMatcher.find()) { - retLocation = tsMatcher.group(1); - } else if (tdMatcher.find()) { - retLocation = tdMatcher.group(1); - } - - return retLocation; - } - - /** - * Obtains polygon extent from a bulletin for a "LINE" type - * or a polygon type - * - * @param bullMessage The bulletin message - * @return a string - */ - public static String getPolygonExtent(String bullMessage) { - - String retStr = ""; - - // Regular expression for distance - final String DISTANCE_EXP = "(WI )?([0-9]{2}|[0-9]{3})( )?NM "; - // Pattern used for extracting distance - final Pattern distancePattern = Pattern.compile(DISTANCE_EXP); - Matcher theMatcher = distancePattern.matcher( bullMessage ); - - // Regular expression for line - final String LINE_EXP = " ([0-9]{2}|[0-9]{3})( )?NM (EITHER SIDE OF)"; - // Pattern used for extracting line information - final Pattern linePattern = Pattern.compile(LINE_EXP); - Matcher lineMatcher = linePattern.matcher( bullMessage ); - - // Regular expression distance for Canada - final String CANADA_EXP = "(WTN|WITHIN) ([0-9]{2}|[0-9]{3})( )?NM OF (LN|LINE)"; - // Pattern used for extracting distance for CANADA sigmet - final Pattern canadaPattern = Pattern.compile(CANADA_EXP); - Matcher canadaMatcher = canadaPattern.matcher( bullMessage ); - - // Regular expression for POLYGON - final String POLYGON_EXP = " ([0-9]{2}|[0-9]{3})( )?NM ([EWSN]|[EWSN]{2}|[EWSN]{3}) OF"; - // Pattern used for extracting POLYGON information - final Pattern polygonPattern = Pattern.compile(POLYGON_EXP); - Matcher polygonMatcher = polygonPattern.matcher( bullMessage ); - - if (canadaMatcher.find()) { - retStr = canadaMatcher.group(1); - } else if (lineMatcher.find()) { - retStr = lineMatcher.group(3); - } else if (polygonMatcher.find()) { - retStr = polygonMatcher.group(3).concat(" OF"); - } else if (theMatcher.find()) { - retStr = theMatcher.group(1); - } - - return retStr; - } - - /** - * Parse the location lines and add location table to the main record table - * if any - * - * @param theBulletin - * The report from bulletin message - * @param record - * The main table - * @return a boolean true if any location exists. - */ - public static boolean processLocation(String theBulletin, - IntlSigmetRecord record) { - - boolean ret = false; - - String locationDelimiter = "-"; - String retLocation = "?"; - int locPositionIndex = -1; - - ArrayList terminationList = new ArrayList(); - // Locations ends with these key words - terminationList.addAll(Arrays - .asList(new String[] { "TOP", "SEV", "BKN", "STNR", "ISOL", - "MOV", "SOLID", "TOPS", "AREA", "BTN", "STG", "SEVERE", - "INTSF=", "MAINLY", "SIGMET", "OCNL", "WKN", "PL", - "FZRA", "LLWS", "TURB", "STR", "FCST", "VA", "MDT", - "STRONG", "LN", "AT", "BASED", "OF", "SVR", "OVER", - "TS", "AND", "OBL", "TURBUL", "BLW", "TOP", "TORNADO", - "CORRECTION" })); - - final String LATLON1_EXP = "(N|S)([0-9]{4}) (E|W)([0-9]{5}) -"; - // Pattern used for extracting latlon - final Pattern latlon1Pattern = Pattern.compile(LATLON1_EXP); - Matcher latlon1Matcher = latlon1Pattern.matcher(theBulletin); - - final String LATLON2_EXP = "/([0-9]{4})(N|S)([0-9]{5})(E|W)/"; - // Pattern used for extracting latlon - final Pattern latlon2Pattern = Pattern.compile(LATLON2_EXP); - Matcher latlon2Matcher = latlon2Pattern.matcher(theBulletin); - - final String LATLON3_EXP = "(N|S)([0-9]{4})(E|W)([0-9]{5})-"; - // Pattern used for extracting latlon - final Pattern latlon3Pattern = Pattern.compile(LATLON3_EXP); - Matcher latlon3Matcher = latlon3Pattern.matcher(theBulletin); - - final String LATLON4_EXP = "(N|S)([0-9]{2})(E|W)([0-9]{3})"; - // Pattern used for extracting latlon - final Pattern latlon4Pattern = Pattern.compile(LATLON4_EXP); - Matcher latlon4Matcher = latlon4Pattern.matcher(theBulletin); - - final String LATLON5_EXP = "([0-9]{2})(N|S)([0-9]{3}|[0-9]{2})(E|W)"; - // Pattern used for extracting latlon - final Pattern latlon5Pattern = Pattern.compile(LATLON5_EXP); - Matcher latlon5Matcher = latlon5Pattern.matcher(theBulletin); - - final String LATLON6_EXP = "([0-9]{4})(N|S)([0-9]{5})(E|W)"; - // Pattern used for extracting latlon - final Pattern latlon6Pattern = Pattern.compile(LATLON6_EXP); - Matcher latlon6Matcher = latlon6Pattern.matcher(theBulletin); - - final String LATLON7_EXP = " [A-Z]*( )?-( )?[A-Z]*( )?-"; - // Pattern used for extracting latlon - final Pattern latlon7Pattern = Pattern.compile(LATLON7_EXP); - Matcher latlon7Matcher = latlon7Pattern.matcher(theBulletin); - - final String LATLON9_EXP = " [A-Z]* [A-Z]*/(\\w| )*/"; - // Pattern used for extracting latlon - final Pattern latlon9Pattern = Pattern.compile(LATLON9_EXP); - Matcher latlon9Matcher = latlon9Pattern.matcher(theBulletin); - - // Find the position of first location - if (latlon7Matcher.find()) { - retLocation = latlon7Matcher.group(); - } else if (latlon1Matcher.find()) { - retLocation = latlon1Matcher.group(); - } else if (latlon2Matcher.find()) { - retLocation = latlon2Matcher.group(); - } else if (latlon3Matcher.find()) { - retLocation = latlon3Matcher.group(); - } else if (latlon4Matcher.find()) { - retLocation = latlon4Matcher.group(); - } else if (latlon5Matcher.find()) { - retLocation = latlon5Matcher.group(); - } else if (latlon6Matcher.find()) { - retLocation = latlon6Matcher.group(); - } else if (latlon9Matcher.find()) { - retLocation = latlon9Matcher.group(); - int sigmetIndex = retLocation.indexOf("SIGMET"); - int fcstIndex = retLocation.indexOf("FCST "); - int innIndex = retLocation.indexOf("IN N/"); - int sfcIndex = retLocation.indexOf(" SFC"); - int obsIndex = retLocation.indexOf(" OBS"); - // Handle special cases and throw them away - if (sigmetIndex != -1) { - retLocation = "?"; - } else if (fcstIndex != -1) { - retLocation = "?"; - } else if (innIndex != -1) { - retLocation = "?"; - } else if (sfcIndex != -1) { - retLocation = "?"; - } else if (obsIndex != -1) { - retLocation = "?"; - } - - } - - locPositionIndex = theBulletin.indexOf(retLocation); - - if (locPositionIndex > 0) { - String secondHalf = theBulletin.substring(locPositionIndex); - Scanner scLocationLine = new Scanner(secondHalf) - .useDelimiter("\\x0d\\x0d\\x0a"); - String lines = " "; - String curLine = null; - ArrayList locationList = new ArrayList(); - locationList.clear(); - Boolean notBreak = true; - - while (scLocationLine.hasNext() && notBreak) { - // Get next location line - curLine = scLocationLine.next(); - - Scanner scLocationToken = new Scanner(curLine); - while (scLocationToken.hasNext() && notBreak) { - // Check the token from each line - String token = scLocationToken.next(); - if (terminationList.contains(token)) { - // terminate and get the locations in this line - int token_pos = curLine.indexOf(token); - lines = lines.concat(" ").concat( - curLine.substring(0, token_pos)); - notBreak = false; - break; - } - } - if (notBreak) { - lines = lines.concat(" ").concat(curLine); - } - } - - // Clean up the leading space - lines = UtilN.removeLeadingWhiteSpaces(lines); - lines = removeChar(lines, '\r'); - lines = removeChar(lines, '\n'); - - // Decide the location delimiter. - Boolean whiteDel = false; - int dashPos = lines.indexOf("-"); - int slashPos = lines.indexOf("/"); - if (dashPos != -1) { - locationDelimiter = "-"; - } else if (slashPos != -1) { - locationDelimiter = "/"; - } else { - locationDelimiter = " "; - whiteDel = true; - } - // Parse the location lines by a "-", "/", or " ". - Scanner scLocation = new Scanner(lines) - .useDelimiter(locationDelimiter); - - locationList.clear(); - // Get all locations - while (scLocation.hasNext()) { - // Clean up the leading space - String location = UtilN.removeLeadingWhiteSpaces(scLocation - .next()); - if (whiteDel) { - // white space as delimiter - int lengthOfLocation = location.length(); - if (lengthOfLocation > 2) { - if (Character.isDigit(location.toCharArray()[0]) - && (lengthOfLocation > 2)) { - locationList.add(location); - } else if (Character.isDigit(location.toCharArray()[1]) - && (lengthOfLocation > 2)) { - locationList.add(location); - } - } - } else if ((location.length() > 0) - && (!location.substring(0, 2).equals("FL"))) { - // exception handle for a "FL" false location - locationList.add(location); - } - } - - // set locations to data base - Integer idxLocation = 0; - if (locationList.size() > 1) { - for (String Location : locationList) { - IntlSigmetLocation currentLocation = new IntlSigmetLocation(); - currentLocation.setLocationLine(lines); - // currentLocation.setLocationName(Location); - processLatLon(Location, currentLocation, idxLocation, - record); - currentLocation.setIndex(idxLocation + 1); - idxLocation++; - - record.addIntlSigmetLocation(currentLocation); - } - ret = true; - } - } - return ret; - } - - /** - * Get detail information for Thunderstorm. - * - * @param theReport - * the input bulletin - * @return a string for Thunderstorm - */ - public static String getThunderStorm(String theReport) { - - String retTS = "THUNDERSTORM"; - // Regular expression for tsType - final String TSTYPE_EXP = "(SQL EMBD TS |ISOL EMBD TS |EMBD TS GR |ISOL TS |EMBD TS |" - + "FRQ TS|SQL TS |TS GR |OBSC TS|FRQ TSGR |OCNL TS |EMBD TSGR | TSGR | GR |" - + "TS/CB|CB/TS)"; - // Pattern used for extracting hazardType - final Pattern tsTypePattern = Pattern.compile(TSTYPE_EXP); - Matcher tsMatcher = tsTypePattern.matcher(theReport); - - if (tsMatcher.find()) { - if (tsMatcher.group(1).equals("EMBD TS GR ")) { - retTS = "EMBEDED THUNDERSTORMS HAIL"; - } else if (tsMatcher.group(1).equals("SQL EMBD TS ")) { - retTS = "SQUALL EMBEDED THUNDERSTORMS"; - } else if (tsMatcher.group(1).equals("ISOL EMBD TS ")) { - retTS = "ISOLATED EMBEDED THUNDERSTORMS"; - } else if (tsMatcher.group(1).equals("ISOL TS ")) { - retTS = "ISOLATED THUNDERSTORMS"; - } else if (tsMatcher.group(1).equals("EMBD TS ")) { - retTS = "EMBEDED THUNDERSTORMS"; - } else if (tsMatcher.group(1).equals("FRQ TS")) { - retTS = "FREQUENT THUNDERSTORMS"; - } else if (tsMatcher.group(1).equals("SQL TS ")) { - retTS = "SQUALL THUNDERSTORMS"; - } else if (tsMatcher.group(1).equals("TS GR ")) { - retTS = "THUNDERSTORMS HAIL"; - } else if (tsMatcher.group(1).equals("OBSC TS")) { - retTS = "OBSCURE THUNDERSTORMS"; - } else if (tsMatcher.group(1).equals("FRQ TSGR ")) { - retTS = "FREQUENT THUNDERSTORMS HAIL"; - } else if (tsMatcher.group(1).equals("OCNL TS ")) { - retTS = "OCCASIONAL THUNDERSTORMS"; - } else if (tsMatcher.group(1).equals("EMBD TSGR ")) { - retTS = "EMBEDED THUNDERSTORMS HAIL"; - } else if (tsMatcher.group(1).equals(" TSGR ")) { - retTS = "THUNDERSTORMS HAIL"; - } else if (tsMatcher.group(1).equals(" GR ")) { - retTS = "HAIL"; - } else if (tsMatcher.group(1).equals("TS/CB")) { - retTS = "THUNDERSTORMS CUMULONIMBUS"; - } else if (tsMatcher.group(1).equals("CB/TS")) { - retTS = "THUNDERSTORMS CUMULONIMBUS"; - } - } - - return retTS; - } - - /** - * Remove a character from a string and return the result. - * - * @param s - * the string - * @param c - * the character to be removed - * @return a string. - */ - public static String removeChar(String s, char c) { - - String ret = ""; - - for (int i = 0; i < s.length(); i++) { - if (s.charAt(i) != c) - ret += s.charAt(i); - } - - return ret; - } - -} +/** + * IntlSigmet DecoderUtil + * + * This java class intends to serve as a decoder utility for INTLSIGMET. + * + * HISTORY + * + * This code has been developed by the SIB for use in the AWIPS2 system. + * Date Ticket# Engineer Description + * ------------ ---------- ----------- -------------------------- + * 06/2009 113 L. Lin Initial coding + * 07/2009 113 L. Lin Migration to TO11 + * 09/2009 113 L. Lin Convert station ID to lat/lon + * if any exists. + * 11/2011 512 S. Gurung Fixed NullPointerException bug while processing lat/lon (from vors) + * + * + * This code has been developed by the SIB for use in the AWIPS2 system. + * @author L. Lin + * @version 1.0 + */ + +package gov.noaa.nws.ncep.edex.plugin.intlsigmet.util; + +import gov.noaa.nws.ncep.common.dataplugin.intlsigmet.IntlSigmetLocation; +import gov.noaa.nws.ncep.common.dataplugin.intlsigmet.IntlSigmetRecord; +import gov.noaa.nws.ncep.common.tools.IDecoderConstantsN; +import gov.noaa.nws.ncep.edex.tools.decoder.LatLonLocTbl; +import gov.noaa.nws.ncep.edex.util.UtilN; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Calendar; +import java.util.Scanner; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import com.raytheon.edex.esb.Headers; +import com.raytheon.uf.common.time.DataTime; +import com.raytheon.uf.edex.decodertools.core.LatLonPoint; +import com.raytheon.uf.edex.decodertools.time.TimeTools; + +public class IntlSigmetParser { + + private static final String CONUS_EXP = "([A-Z]{4}) SIGMET (ALFA|BRAVO|CHARLIE|DELTA|ECHO|FOXTROT|GOLF|HOTEL|" + + "INDIA|JULIETT|JULIET|KILO|LIMA|MIKE|NOVEMBER|OSCAR|PAPA|QUEBEC|ROMEO|SIERRA|TANGO|" + + "UNIFORM|VICTOR|WHISKEY|XRAY|YANKEE|ZULU) ([0-9]{1}|[0-9]{2}) VALID"; + + /** + * Constructor + */ + public IntlSigmetParser() { + } + + /** + * Parse the WMO line and store WMO header, OfficeID, issue time, ... + * + * @param wmoline + * The bulletin message + * + * @return an IntlSigmetRecord + */ + public static IntlSigmetRecord processWMO(String wmoline, Headers headers) { + + IntlSigmetRecord record = null; + // Regular expression for WMO/ICAO, station ID, and issue date. + final String WMO_EXP = "([A-Z]{4}[0-9]{2}) ([A-Z]{4}) ([0-9]{6})"; + + // Pattern used for extracting WMO header, officeID, and issue date. + final Pattern wmoPattern = Pattern.compile(WMO_EXP); + Matcher theMatcher = wmoPattern.matcher(wmoline); + + if (theMatcher.find()) { + record = new IntlSigmetRecord(); + + record.setWmoHeader(theMatcher.group(1)); + record.setIssueOffice(theMatcher.group(2)); + + // Decode the issue time. + Calendar mndTime = null; + Calendar issueTime = TimeTools.findDataTime(theMatcher.group(3), + headers); + record.setIssueTime(issueTime); + + DataTime dataTime = new DataTime(issueTime); + record.setDataTime(dataTime); + } + return record; + } + + /** + * Obtains hazardType as: TS (thunderstorm), TB (turbulence), HU + * (hurricane), TR (tropical storm), TD (tropical depression), VA (volcanic + * ash cloud), MW (marked mountain waves), TC (tropical cyclone), SQ (squall + * line), CT (CAT), IC (icing), GR (hail), DS (duststorm), SS (sandstorm), + * CB (cumulonimbus), WS (low level wind shear), TEST, or CN (cancel), + * etc... + * + * @param theReport + * Input report message. + * @return a string for hazard type + */ + public static String getHazardType(String theReport) { + + String retHazardType = " "; + // Regular expression for hazardType + final String HAZARDTYPE_EXP = "(HURRICANE|HURCN |TROPICAL STORM|TROPICAL DEPRESSION|" + + " TD | SQL | TS | TS/|FRQ TS| TS| SH/TS |TURB| CB | VA | MTW |" + + " ICE | TR | GR | TC | CT | CAT | DS | SS | WS | TSGR |VOLCANIC ASH|HVYSS|" + + " ICG|ICING|LLWS|WATERSPOUTS|THUNDERSTORMS|WIND|TS OBS|CB/TS|TORNADO)"; + final String NIL_EXP = "(NIL)"; + final String MIS_EXP = "(TAF |METAR )"; + final String CNL_EXP = "(CANCEL| CNL | CNCL |:CNL| CNL|INVALID|DISCARDED|" + + "CNL SIGMET| CLN SIGMET|CNCLD)"; + final String TEST_EXP = "(TEST |DISREGARD)"; + + // Pattern used for extracting hazardType + final Pattern hazardTypePattern = Pattern.compile(HAZARDTYPE_EXP); + final Pattern nilPattern = Pattern.compile(NIL_EXP); + final Pattern cnlPattern = Pattern.compile(CNL_EXP); + final Pattern misPattern = Pattern.compile(MIS_EXP); + final Pattern testPattern = Pattern.compile(TEST_EXP); + + Matcher theMatcher = hazardTypePattern.matcher(theReport); + Matcher nilMatcher = nilPattern.matcher(theReport); + Matcher cnlMatcher = cnlPattern.matcher(theReport); + Matcher misMatcher = misPattern.matcher(theReport); + Matcher testMatcher = testPattern.matcher(theReport); + + if (cnlMatcher.find()) { + retHazardType = "CANCEL"; + } else if (testMatcher.find()) { + retHazardType = "TEST"; + } else if (theMatcher.find()) { + if (theMatcher.group(1).equals("HURRICANE")) { + retHazardType = "HURRICANE"; + } else if (theMatcher.group(1).equals("HURCN ")) { + retHazardType = "HURRICANE"; + } else if (theMatcher.group(1).equals(" TD ")) { + retHazardType = "TROPICAL DEPRESSION"; + } else if (theMatcher.group(1).equals("TROPICAL STORM")) { + retHazardType = "TROPICAL STORM"; + } else if (theMatcher.group(1).equals("TROPICAL DEPRESSION")) { + retHazardType = "TROPICAL DEPRESSION"; + } else if (theMatcher.group(1).equals(" SQL ")) { + retHazardType = "SQUALL LINE"; + } else if (theMatcher.group(1).equals("TURB")) { + retHazardType = "TURBULENCE"; + } else if (theMatcher.group(1).equals(" ICE ")) { + retHazardType = "ICING"; + } else if (theMatcher.group(1).equals(" ICG")) { + retHazardType = "ICING"; + } else if (theMatcher.group(1).equals("ICING")) { + retHazardType = "ICING"; + } else if (theMatcher.group(1).equals(" TS ")) { + retHazardType = getThunderStorm(theReport); + } else if (theMatcher.group(1).equals("FRQ TS")) { + retHazardType = getThunderStorm(theReport); + } else if (theMatcher.group(1).equals(" TS/")) { + retHazardType = getThunderStorm(theReport); + } else if (theMatcher.group(1).equals(" SH/TS ")) { + retHazardType = "THUNDERSTORM WIND SHEAR"; + } else if (theMatcher.group(1).equals(" CB ")) { + retHazardType = "CUMULONIMBUS"; + } else if (theMatcher.group(1).equals(" VA ")) { + retHazardType = "VOLCANIC ASH CLOUD"; + } else if (theMatcher.group(1).equals(" MTW ")) { + retHazardType = "MARKED MOUNTAIN WAVES"; + } else if (theMatcher.group(1).equals(" TR ")) { + retHazardType = "TROPICAL STORM"; + } else if (theMatcher.group(1).equals(" GR ")) { + retHazardType = getThunderStorm(theReport); + } else if (theMatcher.group(1).equals(" TC ")) { + retHazardType = "TROPICAL CYCLONE"; + } else if (theMatcher.group(1).equals(" CT ")) { + retHazardType = "CAT"; + } else if (theMatcher.group(1).equals(" CAT ")) { + retHazardType = "CAT"; + } else if (theMatcher.group(1).equals(" DS ")) { + retHazardType = "DUSTSTORM"; + } else if (theMatcher.group(1).equals(" SS ")) { + retHazardType = "SANDSTORM"; + } else if (theMatcher.group(1).equals(" WS ")) { + retHazardType = "LOW LEVEL WIND SHEAR"; + } else if (theMatcher.group(1).equals("LLWS")) { + retHazardType = "LOW LEVEL WIND SHEAR"; + } else if (theMatcher.group(1).equals(" TSGR ")) { + retHazardType = getThunderStorm(theReport); + } else if (theMatcher.group(1).equals("VOLCANIC ASH")) { + retHazardType = "VOLCANIC ASH CLOUD"; + } else if (theMatcher.group(1).equals("TS ")) { + retHazardType = getThunderStorm(theReport); + } else if (theMatcher.group(1).equals("HVYSS ")) { + retHazardType = "HEAVY SANDSTORM"; + } else if (theMatcher.group(1).equals("WATERSPOUTS")) { + retHazardType = "WATERSPOUTS"; + } else if (theMatcher.group(1).equals("THUNDERSTORMS")) { + retHazardType = "THUNDERSTORMS"; + } else if (theMatcher.group(1).equals("WIND")) { + retHazardType = "WINDS"; + } else if (theMatcher.group(1).equals("TS OBS")) { + retHazardType = "THUNDERSTORMS"; + } else if (theMatcher.group(1).equals(" TS")) { + retHazardType = getThunderStorm(theReport); + } else if (theMatcher.group(1).equals("CB/TS")) { + retHazardType = getThunderStorm(theReport); + } else if (theMatcher.group(1).equals("TORNADO")) { + retHazardType = "TORNADO"; + } + } else if (nilMatcher.find()) { + retHazardType = "NIL"; + } else if (misMatcher.find()) { + retHazardType = "NIL"; + } else { + retHazardType = "UNKNOWN ???"; + } + return retHazardType; + } + + /** + * Obtains the message ID. + * + * @param theBulletin + * The input bulletin + * @return a string for messageID + */ + public static String getMessageID(String theBulletin) { + + String messageID = " "; + + // // Regular expression for CONUS message ID + // final String CONUS_EXP = + // "([A-Z]{4}) SIGMET (ALFA|BRAVO|CHARLIE|DELTA|ECHO|FOXTROT|" + + // "GOLF|HOTEL|INDIA|JULIETT|JULIET|KILO|LIMA|MIKE|NOVEMBER|OSCAR|PAPA|QUEBEC|" + // + + // "ROMEO|SIERRA|TANGO|UNIFORM|VICTOR|WHISKEY|XRAY|YANKEE|ZULU) " + + // "([0-9]{1}|[0-9]{2}) VALID"; + + // Pattern used for extracting the message ID + final Pattern conusPattern = Pattern.compile(CONUS_EXP); + Matcher idconusMatcher = conusPattern.matcher(theBulletin); + + // Regular expression for CANADA message ID + final String CANADA_EXP = "SIGMET ([A-Z]{1})([0-9]{1}|[0-9]{2}) (VALID " + + "([0-9]{6})/|CANCELLED AT )([0-9]{6}) ([A-Z]{4})-"; + // Pattern used for extracting the message ID + final Pattern canadaPattern = Pattern.compile(CANADA_EXP); + Matcher idcanadaMatcher = canadaPattern.matcher(theBulletin); + + // Regular expression for JAPAN and UK message ID + final String JAPAN_EXP = "([A-Z]{4}) SIGMET ([0-9]{1}|[0-9]{2}) (VALID )?" + + "([0-9]{6})/([0-9]{6})(UTC)? ([A-Z]{4})-"; + // Pattern used for extracting the message ID + final Pattern japanPattern = Pattern.compile(JAPAN_EXP); + Matcher idjapanMatcher = japanPattern.matcher(theBulletin); + + // Regular expression for others' message ID + final String OTHER1_EXP = "([A-Z]{4}) SIGMET ([0-9]{1}|[0-9]{2}|[A-Z]{1}[0-9]{1}|[A-Z]{2}[0-9]{2}) " + + "VALID ([0-9]{6})/([0-9]{6})( UTC)? ([A-Z]{4})(-)?"; + // Pattern used for extracting the message ID + final Pattern other1Pattern = Pattern.compile(OTHER1_EXP); + Matcher idother1Matcher = other1Pattern.matcher(theBulletin); + + // Regular expression for others' message ID + final String OTHER2_EXP = "(SIGMET) ([0-9]{1}|[0-9]{2}|[A-Z]{1}[0-9]{1}|[A-Z]{2}[0-9]{2}|[A-Z]{1}[0-9]{2}) " + + "VALID ([0-9]{6})/([0-9]{6})"; + // Pattern used for extracting the message ID + final Pattern other2Pattern = Pattern.compile(OTHER2_EXP); + Matcher idother2Matcher = other2Pattern.matcher(theBulletin); + + // Regular expression for others' message ID + final String OTHER3_EXP = "([A-Z]{4}) SIGMET ([A-Z]* )?([0-9]{1}|[0-9]{2}) VALID ([0-9]{6})/([0-9]{6}) " + + "([A-Z]{4})(-)?"; + // Pattern used for extracting the message ID + final Pattern other3Pattern = Pattern.compile(OTHER3_EXP); + Matcher idother3Matcher = other3Pattern.matcher(theBulletin); + + // Regular expression for others' message ID + final String OTHER4_EXP = "([A-Z]{4}) SIGMET( )*([0-9]{1}|[0-9]{2}|[A-Z]{1}[0-9]{1}|[A-Z]{2}[0-9]{2}) " + + "VALID( )*([0-9]{6})/([0-9]{6})( )*([A-Z]{4})(-)?"; + // Pattern used for extracting the message ID + final Pattern other4Pattern = Pattern.compile(OTHER4_EXP); + Matcher idother4Matcher = other4Pattern.matcher(theBulletin); + + // Regular expression for others' message ID + final String OTHER5_EXP = "([A-Z]{4}) SIGMET( )*VALID( )*([0-9]{6})/([0-9]{6})( )*([A-Z]{4})(-)?"; + // Pattern used for extracting the message ID + final Pattern other5Pattern = Pattern.compile(OTHER5_EXP); + Matcher idother5Matcher = other5Pattern.matcher(theBulletin); + + // Regular expression for others' message ID + final String OTHER6_EXP = "([A-Z]{4}) SIGMET( )*([0-9]{1}|[0-9]{2}|[A-Z]{1}[0-9]{1}|[A-Z]{2}[0-9]{2}) " + + "VALID( )*([0-9]{6})Z/([0-9]{6})Z( )*([A-Z]{4})(-)?"; + // Pattern used for extracting the message ID + final Pattern other6Pattern = Pattern.compile(OTHER6_EXP); + Matcher idother6Matcher = other6Pattern.matcher(theBulletin); + + // Regular expression for others' message ID + final String OTHER7_EXP = "([A-Z]{4}) SIGMET( )*([0-9]{1}|[0-9]{2}|[A-Z]{1}[0-9]{1}|[A-Z]{2}[0-9]{2}) " + + "VALID( )*([0-9]{4})/([0-9]{4})( )*([A-Z]{4})(-)?"; + // Pattern used for extracting the message ID + final Pattern other7Pattern = Pattern.compile(OTHER7_EXP); + Matcher idother7Matcher = other7Pattern.matcher(theBulletin); + + // Regular expression for others' message ID + final String OTHER8_EXP = "([A-Z]{4}) SIGMET( |\\W)*VALID( |\\W)*([0-9]{6})/([0-9]{6})( )*([A-Z]{4})(-)?"; + // Pattern used for extracting the message ID + final Pattern other8Pattern = Pattern.compile(OTHER8_EXP); + Matcher idother8Matcher = other8Pattern.matcher(theBulletin); + + // Get messageID + if (idconusMatcher.find()) { + messageID = idconusMatcher.group(2); + } else if (idcanadaMatcher.find()) { + messageID = idcanadaMatcher.group(6); + } else if (idother1Matcher.find()) { + messageID = idother1Matcher.group(6); + } else if (idjapanMatcher.find()) { + messageID = idjapanMatcher.group(7); + } else if (idother2Matcher.find()) { + messageID = idother2Matcher.group(1); + } else if (idother3Matcher.find()) { + messageID = idother3Matcher.group(6); + } else if (idother4Matcher.find()) { + messageID = idother4Matcher.group(8); + } else if (idother5Matcher.find()) { + messageID = idother5Matcher.group(7); + } else if (idother6Matcher.find()) { + messageID = idother6Matcher.group(8); + } else if (idother7Matcher.find()) { + messageID = idother7Matcher.group(8); + } else if (idother8Matcher.find()) { + messageID = idother8Matcher.group(7); + } + + return messageID; + } + + /** + * Obtains the sequence number. + * + * @param theBulletin + * The input bulletin + * @return a string for sequenceNumber + */ + public static String getSequenceNumber(String theBulletin) { + + String sequenceNumber = " "; + + // // Regular expression for CONUS sequence number + // final String CONUS_EXP = + // "([A-Z]{4}) SIGMET (ALFA|BRAVO|CHARLIE|DELTA|ECHO|FOXTROT|GOLF|HOTEL|" + // + + // "INDIA|JULIETT|JULIET|KILO|LIMA|MIKE|NOVEMBER|OSCAR|PAPA|QUEBEC|ROMEO|SIERRA|TANGO|" + // + + // "UNIFORM|VICTOR|WHISKEY|XRAY|YANKEE|ZULU) ([0-9]{1}|[0-9]{2}) VALID"; + + // Pattern used for extracting the sequence number + final Pattern conusPattern = Pattern.compile(CONUS_EXP); + Matcher seqnoconusMatcher = conusPattern.matcher(theBulletin); + + // Regular expression for CANADA sequence number + final String CANADA_EXP = "SIGMET ([A-Z]{1}[0-9]{1}|[A-Z]{1}[0-9]{2}) " + + "(VALID ([0-9]{6})/|CANCELLED AT )([0-9]{6}) ([A-Z]{4})-"; + // Pattern used for extracting the sequence number + final Pattern canadaPattern = Pattern.compile(CANADA_EXP); + Matcher seqnocanadaMatcher = canadaPattern.matcher(theBulletin); + + // Regular expression for JAPAN and UK sequence number + final String JAPAN_EXP = "([A-Z]{4}) SIGMET ([0-9]{1}|[0-9]{2}) " + + "(VALID )?([0-9]{6})/([0-9]{6})(UTC)? ([A-Z]{4})-"; + // Pattern used for extracting the sequence number + final Pattern japanPattern = Pattern.compile(JAPAN_EXP); + Matcher seqnojapanMatcher = japanPattern.matcher(theBulletin); + + // Regular expression for others' sequence number + final String OTHER_EXP = "([A-Z]{4}) SIGMET ([0-9]{1}|[0-9]{2}|[A-Z]{1}[0-9]{1}|[A-Z]{2}[0-9]{2}) " + + "VALID ([0-9]{6})/([0-9]{6})( UTC)? ([A-Z]{4})(-)?"; + // Pattern used for extracting the sequence number + final Pattern otherPattern = Pattern.compile(OTHER_EXP); + Matcher seqnootherMatcher = otherPattern.matcher(theBulletin); + + // Regular expression for others' sequence number + final String OTHER2_EXP = "SIGMET ([0-9]{1}|[0-9]{2}|[A-Z]{1}[0-9]{1}|[A-Z]{2}[0-9]{2}|A-Z]{1}[0-9]{2}) " + + "VALID ([0-9]{6})/([0-9]{6})"; + // Pattern used for extracting the sequence number + final Pattern other2Pattern = Pattern.compile(OTHER2_EXP); + Matcher seqnoother2Matcher = other2Pattern.matcher(theBulletin); + + // Regular expression for others' sequence number + final String OTHER3_EXP = "([A-Z]{4}) SIGMET (([A-Z]* )?([0-9]{1}|[0-9]{2})) " + + "VALID ([0-9]{6})/([0-9]{6}) ([A-Z]{4})(-)?"; + // Pattern used for extracting the sequence number + final Pattern other3Pattern = Pattern.compile(OTHER3_EXP); + Matcher seqnoother3Matcher = other3Pattern.matcher(theBulletin); + + // Regular expression for others' sequence number + final String OTHER4_EXP = "([A-Z]{4}) SIGMET( )*([0-9]{1}|[0-9]{2}|[A-Z]{1}[0-9]{1}|[A-Z]{2}[0-9]{2}) " + + "VALID( )*([0-9]{6})/([0-9]{6})( )*([A-Z]{4})(-)?"; + // Pattern used for extracting the sequence number + final Pattern other4Pattern = Pattern.compile(OTHER4_EXP); + Matcher seqnoother4Matcher = other4Pattern.matcher(theBulletin); + + // Regular expression for others' sequence number + final String OTHER5_EXP = "([A-Z]{4}) SIGMET( )*VALID( )*([0-9]{6})/([0-9]{6})( )*([A-Z]{4})(-)?"; + // Pattern used for extracting the sequence number + final Pattern other5Pattern = Pattern.compile(OTHER5_EXP); + Matcher seqnoother5Matcher = other5Pattern.matcher(theBulletin); + + // Regular expression for others' sequence number + final String OTHER6_EXP = "([A-Z]{4}) SIGMET( )*([0-9]{1}|[0-9]{2}|[A-Z]{1}[0-9]{1}|[A-Z]{2}[0-9]{2}) " + + "VALID( )*([0-9]{6})Z/([0-9]{6})Z( )*([A-Z]{4})(-)?"; + // Pattern used for extracting the message sequence number + final Pattern other6Pattern = Pattern.compile(OTHER6_EXP); + Matcher seqnoother6Matcher = other6Pattern.matcher(theBulletin); + + // Regular expression for others' sequence number + final String OTHER7_EXP = "([A-Z]{4}) SIGMET( )*([0-9]{1}|[0-9]{2}|[A-Z]{1}[0-9]{1}|[A-Z]{2}[0-9]{2}) " + + "VALID( )*([0-9]{4})/([0-9]{4})( )*([A-Z]{4})(-)?"; + // Pattern used for extracting the sequence number + final Pattern other7Pattern = Pattern.compile(OTHER7_EXP); + Matcher seqnoother7Matcher = other7Pattern.matcher(theBulletin); + + // Regular expression for others' sequence number + final String OTHER8_EXP = "([A-Z]{4}) SIGMET( |\\W)*([0-9]{1})( |\\W)*VALID"; + // Pattern used for extracting the sequence number + final Pattern other8Pattern = Pattern.compile(OTHER8_EXP); + Matcher seqnoother8Matcher = other8Pattern.matcher(theBulletin); + + // Get sequenceNumber + if (seqnoconusMatcher.find()) { + sequenceNumber = seqnoconusMatcher.group(3); + } else if (seqnocanadaMatcher.find()) { + sequenceNumber = seqnocanadaMatcher.group(1); + } else if (seqnootherMatcher.find()) { + sequenceNumber = seqnootherMatcher.group(2); + } else if (seqnojapanMatcher.find()) { + sequenceNumber = seqnojapanMatcher.group(2); + } else if (seqnoother2Matcher.find()) { + sequenceNumber = seqnoother2Matcher.group(1); + } else if (seqnoother3Matcher.find()) { + sequenceNumber = seqnoother3Matcher.group(2); + } else if (seqnoother4Matcher.find()) { + sequenceNumber = seqnoother4Matcher.group(3); + } else if (seqnoother5Matcher.find()) { + // lacking sequence number; default 0 + sequenceNumber = "0"; + } else if (seqnoother6Matcher.find()) { + sequenceNumber = seqnoother6Matcher.group(3); + } else if (seqnoother7Matcher.find()) { + sequenceNumber = seqnoother7Matcher.group(3); + } else if (seqnoother8Matcher.find()) { + sequenceNumber = seqnoother8Matcher.group(3); + } + + return sequenceNumber; + } + + /** + * Obtains the Air Traffic Service Unit. + * + * @param theBulletin + * The input bulletin + * @return a string for atsu. + */ + public static String getAtsu(String theBulletin) { + + String atsu = null; + + // // Regular expression for CONUS ATSU + // final String CONUS_EXP = + // "([A-Z]{4}) SIGMET (ALFA|BRAVO|CHARLIE|DELTA|ECHO|FOXTROT|GOLF|" + + // "HOTEL|INDIA|JULIETT|JULIET|KILO|LIMA|MIKE|NOVEMBER|OSCAR|PAPA|QUEBEC|ROMEO|SIERRA|" + // + + // "TANGO|UNIFORM|VICTOR|WHISKEY|XRAY|YANKEE|ZULU) ([0-9]{1}|[0-9]{2}) VALID"; + + // Pattern used for extracting the ATSU + final Pattern conusPattern = Pattern.compile(CONUS_EXP); + Matcher atsuconusMatcher = conusPattern.matcher(theBulletin); + + // Regular expression for CANADA ATSU + final String CANADA_EXP = "SIGMET ([A-Z]{1}[0-9]{1}|[A-Z]{1}[0-9]{2}) " + + "(VALID ([0-9]{6})/|CANCELLED AT )([0-9]{6}) ([A-Z]{4})-"; + // Pattern used for extracting the ATSU + final Pattern canadaPattern = Pattern.compile(CANADA_EXP); + Matcher atsucanadaMatcher = canadaPattern.matcher(theBulletin); + + // Regular expression for JAPAN and UK ATSU + final String JAPAN_EXP = "([A-Z]{4}) SIGMET ([0-9]{1}|[0-9]{2}) " + + "(VALID )?([0-9]{6})/([0-9]{6})(UTC)? ([A-Z]{4})-"; + // Pattern used for extracting the ATSU + final Pattern japanPattern = Pattern.compile(JAPAN_EXP); + Matcher atsujapanMatcher = japanPattern.matcher(theBulletin); + + // Regular expression for others' ATSU + final String OTHER1_EXP = "([A-Z]{4}) SIGMET( )*([0-9]{1}|[0-9]{2}|[A-Z]{1}[0-9]{1}|[A-Z]{2}[0-9]{2})" + + "( )*VALID"; + // Pattern used for extracting the ATSU + final Pattern other1Pattern = Pattern.compile(OTHER1_EXP); + Matcher atsuother1Matcher = other1Pattern.matcher(theBulletin); + + // Regular expression for CONUS ATSU + final String CONUS2_EXP = "([A-Z]{4} ([A-Z]{4} )*)SIGMET (ALFA|BRAVO|CHARLIE|DELTA|ECHO|FOXTROT|" + + "GOLF|HOTEL|INDIA|JULIETT|JULIET|KILO|LIMA|MIKE|NOVEMBER|OSCAR|PAPA|QUEBEC|ROMEO|SIERRA|" + + "TANGO|UNIFORM|VICTOR|WHISKEY|XRAY|YANKEE|ZULU) ([0-9]{1}|[0-9]{2}) VALID"; + // Pattern used for extracting the ATSU + final Pattern conus2Pattern = Pattern.compile(CONUS2_EXP); + Matcher atsuconus2Matcher = conus2Pattern.matcher(theBulletin); + + final String OTHER2_EXP = "([A-Z]{4}) SIGMET( )*VALID( )*([0-9]{6})/([0-9]{6})( )*([A-Z]{4})(-)?"; + // Pattern used for extracting the ATSU + final Pattern other2Pattern = Pattern.compile(OTHER2_EXP); + Matcher atsuother2Matcher = other2Pattern.matcher(theBulletin); + + // Regular expression for others' ATSU + final String OTHER3_EXP = "([A-Z]{4}) SIGMET ([0-9]{1})( |\\W)*VALID( |\\W)*" + + "([0-9]{6})/([0-9]{6})( )*([A-Z]{4})(-)?"; + // Pattern used for extracting the ATSU + final Pattern other3Pattern = Pattern.compile(OTHER3_EXP); + Matcher atsuother3Matcher = other3Pattern.matcher(theBulletin); + + // Get atsu + if (atsuconus2Matcher.find()) { + atsu = atsuconus2Matcher.group(1); + } else if (atsuconusMatcher.find()) { + atsu = atsuconusMatcher.group(1); + } else if (atsucanadaMatcher.find()) { + atsu = atsucanadaMatcher.group(5); + } else if (atsuother1Matcher.find()) { + atsu = atsuother1Matcher.group(1); + } else if (atsujapanMatcher.find()) { + atsu = atsujapanMatcher.group(1); + } else if (atsuother2Matcher.find()) { + atsu = atsuother2Matcher.group(1); + } else if (atsuother3Matcher.find()) { + atsu = atsuother3Matcher.group(1); + } + + return atsu; + } + + /** + * Obtains the location indicator of the meteorological watch office + * originating the message. + * + * @param theBulletin + * The input bulletin + * @return a string for omwo. + */ + public static String getOmwo(String theBulletin) { + + String omwo = " "; + + // Regular expression for CONUS OMWO + final String CONUS_EXP = "([A-Z]{4}) ([A-Z]{4} )?SIGMET ([A-Z])* ([0-9]{1}|[0-9]{2}) " + + "VALID ([0-9]{6})/([0-9]{6})( UTC)? ([A-Z]{4})-"; + // Pattern used for extracting the OMWO + final Pattern conusPattern = Pattern.compile(CONUS_EXP); + Matcher omwoconusMatcher = conusPattern.matcher(theBulletin); + + // Regular expression for CANADA OMWO + final String CANADA_EXP = "SIGMET ([A-Z]{1}[0-9]{1}|[A-Z]{1}[0-9]{2}) " + + "(VALID ([0-9]{6})/|CANCELLED AT )([0-9]{6}) ([A-Z]{4})-"; + // Pattern used for extracting the OMWO + final Pattern canadaPattern = Pattern.compile(CANADA_EXP); + Matcher omwocanadaMatcher = canadaPattern.matcher(theBulletin); + + // Regular expression for JAPAN and UK OMWO + final String JAPAN_EXP = "([A-Z]{4}) SIGMET ([0-9]{1}|[0-9]{2}) " + + "(VALID )?([0-9]{6})/([0-9]{6})(UTC)? ([A-Z]{4})-"; + // Pattern used for extracting the OMWO + final Pattern japanPattern = Pattern.compile(JAPAN_EXP); + Matcher omwojapanMatcher = japanPattern.matcher(theBulletin); + + // Regular expression for other OMWO + final String OTHER_EXP = "([A-Z]{4}) SIGMET ([0-9]{1}|[0-9]{2}|[A-Z]{1}[0-9]{1}|[A-Z]{2}[0-9]{2}) " + + "VALID ([0-9]{6})/([0-9]{6})( UTC)? ([A-Z]{4})(-)?"; + // Pattern used for extracting the OMWO + final Pattern otherPattern = Pattern.compile(OTHER_EXP); + Matcher omwootherMatcher = otherPattern.matcher(theBulletin); + + // Regular expression for others' OMWO + final String OTHER2_EXP = "([A-Z]{4}) SIGMET( )*([0-9]{1}|[0-9]{2}|[A-Z]{1}[0-9]{1}|" + + "[A-Z]{2}[0-9]{2}|[A-Z]{1}[0-9]{2}) " + + "VALID( )*([0-9]{6})/([0-9]{6})( )*([A-Z]{4})(-)?"; + // Pattern used for extracting the message OMWO + final Pattern other2Pattern = Pattern.compile(OTHER2_EXP); + Matcher omwoother2Matcher = other2Pattern.matcher(theBulletin); + + // Regular expression for others' OMWO + final String OTHER3_EXP = "([A-Z]{4}) SIGMET( )*VALID( )*([0-9]{6})/([0-9]{6})" + + "( )*([A-Z]{4})(-)?"; + // Pattern used for extracting the message OMWO + final Pattern other3Pattern = Pattern.compile(OTHER3_EXP); + Matcher omwoother3Matcher = other3Pattern.matcher(theBulletin); + + // Regular expression for others' OMWO + final String OTHER4_EXP = "([A-Z]{4}) SIGMET( )*([0-9]{1}|[0-9]{2}|[A-Z]{1}[0-9]{1}|[A-Z]{2}[0-9]{2}) " + + "VALID( )*([0-9]{4})/([0-9]{4})( )*([A-Z]{4})(-)?"; + // Pattern used for extracting the message OMWO + final Pattern other4Pattern = Pattern.compile(OTHER4_EXP); + Matcher omwoother4Matcher = other4Pattern.matcher(theBulletin); + + // Regular expression for others' OMWO + final String OTHER5_EXP = "([A-Z]{4}) SIGMET( )*([0-9]{1}|[0-9]{2}|[A-Z]{1}[0-9]{1}|[A-Z]{2}[0-9]{2}) " + + "VALID( )*([0-9]{6})Z/([0-9]{6})Z( )*([A-Z]{4})(-)?"; + // Pattern used for extracting the message OMWO + final Pattern other5Pattern = Pattern.compile(OTHER5_EXP); + Matcher omwoother5Matcher = other5Pattern.matcher(theBulletin); + + // Regular expression for others' OMWO + final String OTHER6_EXP = "([A-Z]{4}) SIGMET ([0-9]{1})( |\\W)*" + + "VALID( |\\W)*([0-9]{6})/([0-9]{6})( )*([A-Z]{4})(-)?"; + // Pattern used for extracting the OMWO + final Pattern other6Pattern = Pattern.compile(OTHER6_EXP); + Matcher omwoother6Matcher = other6Pattern.matcher(theBulletin); + + // Get omwo + if (omwoconusMatcher.find()) { + omwo = omwoconusMatcher.group(8); + } else if (omwocanadaMatcher.find()) { + omwo = omwocanadaMatcher.group(5); + } else if (omwootherMatcher.find()) { + omwo = omwootherMatcher.group(6); + } else if (omwojapanMatcher.find()) { + omwo = omwojapanMatcher.group(7); + } else if (omwoother2Matcher.find()) { + omwo = omwoother2Matcher.group(8); + } else if (omwoother3Matcher.find()) { + omwo = omwoother3Matcher.group(7); + } else if (omwoother4Matcher.find()) { + omwo = omwoother4Matcher.group(8); + } else if (omwoother5Matcher.find()) { + omwo = omwoother5Matcher.group(8); + } else if (omwoother6Matcher.find()) { + omwo = omwoother6Matcher.group(8); + } + + return omwo; + } + + /** + * Obtains start time from input bulletin. + * + * @param theReport + * The bulletin message + * @return a calendar for start time + */ + public static Calendar getStartTime(String theBulletin, Headers headers) { + + String time = "???"; + + // Regular expression for general start time group + final String START_EXP = " VALID( )*([0-9]{6})/([0-9]{6})"; + // Pattern used for extracting the start time group + final Pattern startPattern = Pattern.compile(START_EXP); + Matcher timestartMatcher = startPattern.matcher(theBulletin); + + // Regular expression for CANADA start time group + final String CANADA_EXP = "SIGMET ([A-Z]{1}[0-9]{1}) VALID ([0-9]{6})/([0-9]{6}) ([A-Z]{4})-"; + // Pattern used for extracting the start time group + final Pattern canadaPattern = Pattern.compile(CANADA_EXP); + Matcher timecanadaMatcher = canadaPattern.matcher(theBulletin); + + // Regular expression for JAPAN and UK start time group + final String JAPAN_EXP = "([A-Z]{4}) SIGMET ([0-9]{1}|[0-9]{2}) " + + "(VALID )?([0-9]{6})/([0-9]{6})(UTC)? ([A-Z]{4})-"; + // Pattern used for extracting the start time group + final Pattern japanPattern = Pattern.compile(JAPAN_EXP); + Matcher timejapanMatcher = japanPattern.matcher(theBulletin); + + // Regular expression for others' start time + final String OTHER1_EXP = " VALID( )*([0-9]{6})(Z)?/([0-9]{6})(Z)?"; + // Pattern used for extracting the start time + final Pattern other1Pattern = Pattern.compile(OTHER1_EXP); + Matcher time1Matcher = other1Pattern.matcher(theBulletin); + + // Regular expression for others' start time + final String OTHER2_EXP = " VALID( )*([0-9]{4})/([0-9]{4})"; + // Pattern used for extracting the start time + final Pattern other2Pattern = Pattern.compile(OTHER2_EXP); + Matcher time2Matcher = other2Pattern.matcher(theBulletin); + + // Get time group + if (timestartMatcher.find()) { + time = timestartMatcher.group(2); + } else if (timejapanMatcher.find()) { + time = timejapanMatcher.group(4); + } else if (time1Matcher.find()) { + time = time1Matcher.group(2); + } else if (timecanadaMatcher.find()) { + time = timecanadaMatcher.group(2); + } else if (time2Matcher.find()) { + // Handle start time in special case without day + final String WMO_EXP = "([A-Z]{4}[0-9]{2}) ([A-Z]{4}) ([0-9]{2})([0-9]{4})"; + // Pattern used for extracting WMO header, officeID, and issue date + final Pattern wmoPattern = Pattern.compile(WMO_EXP); + Matcher theMatcher = wmoPattern.matcher(theBulletin); + if (theMatcher.find()) { + time = time2Matcher.group(2).concat(theMatcher.group(3)); + } + } + if (time != "???") { + // Get start time + return TimeTools.findDataTime(time, headers); + } else { + return null; + } + } + + /** + * Get the end time + * + * @param theBulletin + * The bulletin which contains end time + * @return a calendar for end time + */ + public static Calendar getEndTime(String theBulletin, Headers headers) { + + String time = "???"; + + // Regular expression for CONUS end time group + final String ENDTIME_EXP = " VALID( )*([0-9]{6})/([0-9]{6})"; + // Pattern used for extracting the end time group + final Pattern endtimePattern = Pattern.compile(ENDTIME_EXP); + Matcher endtimeMatcher = endtimePattern.matcher(theBulletin); + + // Regular expression for CANADA end time group + final String CANADA_EXP = "SIGMET ([A-Z]{1}[0-9]{1}) " + + "(VALID ([0-9]{6})/|CANCELLED AT )([0-9]{6}) ([A-Z]{4})-"; + // Pattern used for extracting the end time group + final Pattern canadaPattern = Pattern.compile(CANADA_EXP); + Matcher timecanadaMatcher = canadaPattern.matcher(theBulletin); + + // Regular expression for JAPAN and UK end time group + final String JAPAN_EXP = "([A-Z]{4}) SIGMET ([0-9]{1}|[0-9]{2}) " + + "(VALID )?([0-9]{6})/([0-9]{6})(UTC)? ([A-Z]{4})-"; + // Pattern used for extracting the end time group + final Pattern japanPattern = Pattern.compile(JAPAN_EXP); + Matcher timejapanMatcher = japanPattern.matcher(theBulletin); + + // Regular expression for others' end time + final String OTHER1_EXP = " VALID( )*([0-9]{6})(Z)?/([0-9]{6})(Z)?"; + // Pattern used for extracting the end time + final Pattern other1Pattern = Pattern.compile(OTHER1_EXP); + Matcher time1Matcher = other1Pattern.matcher(theBulletin); + + // Regular expression for others' end time + final String OTHER2_EXP = " VALID( )*([0-9]{4})/([0-9]{4})"; + // Pattern used for extracting the end time + final Pattern other2Pattern = Pattern.compile(OTHER2_EXP); + Matcher time2Matcher = other2Pattern.matcher(theBulletin); + + // Get time group + if (endtimeMatcher.find()) { + time = endtimeMatcher.group(3); + } else if (timejapanMatcher.find()) { + time = timejapanMatcher.group(4); + } else if (timecanadaMatcher.find()) { + time = timecanadaMatcher.group(4); + } else if (timecanadaMatcher.find()) { + time = timecanadaMatcher.group(6); + } else if (time1Matcher.find()) { + time = time1Matcher.group(4); + } else if (time2Matcher.find()) { + // Handle end time special case without day + final String WMO_EXP = "([A-Z]{4}[0-9]{2}) ([A-Z]{4}) ([0-9]{2})([0-9]{4})"; + // Pattern used for extracting WMO header, officeID and issue time + final Pattern wmoPattern = Pattern.compile(WMO_EXP); + Matcher theMatcher = wmoPattern.matcher(theBulletin); + if (theMatcher.find()) { + time = time2Matcher.group(3).concat(theMatcher.group(3)); + } + } + + if (time != "???") { + // Get end time + Calendar mndTime = null; + return TimeTools.findDataTime(time, headers); + } else { + return null; + } + } + + /** + * Parse the bulletin and store flight level 1 or level 2 if any. + * + * @param theBulletin + * The bulletin message + * @param record + * The main table + */ + public static void processFlightLevels(String theBulletin, + IntlSigmetRecord record) { + + String flevel1 = " "; + String flevel2 = " "; + + // Regular expression for general one flight level + final String FLEVEL1_EXP = "(TOP|TOPS|TOPS TO) FL( )?([0-9]{3})"; + // Pattern used for extracting the flight level + final Pattern flevel1Pattern = Pattern.compile(FLEVEL1_EXP); + Matcher flevel1Matcher = flevel1Pattern.matcher(theBulletin); + + // Regular expression for flight levels in format "BETWEEN ... AND ...." + final String BETWEEN_EXP = "(BETWEEN|BTN) (FL)?([0-9]{3}|[0-9]{2}) AND " + + "(FL)?([0-9]{3}|[0-9]{2})"; + // Pattern used for extracting the flight levels + final Pattern betweenPattern = Pattern.compile(BETWEEN_EXP); + Matcher betweenMatcher = betweenPattern.matcher(theBulletin); + + // Regular expression for flight levels in format + // "TOPS ... MAX TOPS ...." for Canada + final String MAXTOPS_EXP = "TOPS( |\\x0d\\x0d\\x0a)([0-9]{3}|[0-9]{2}) " + + "MAX TOPS ([0-9]{3}|[0-9]{2})"; + // Pattern used for extracting the flight levels + final Pattern maxtopsPattern = Pattern.compile(MAXTOPS_EXP); + Matcher maxtopsMatcher = maxtopsPattern.matcher(theBulletin); + + // Regular expression for general two flight levels in "360-440" or + // "360/440" format + final String FLEVEL2_EXP = "FL([0-9]{3}|[0-9]{2})(-|/)([0-9]{3}|[0-9]{2})"; + // Pattern used for extracting the flight levels + final Pattern flevel2Pattern = Pattern.compile(FLEVEL2_EXP); + Matcher flevel2Matcher = flevel2Pattern.matcher(theBulletin); + + // Regular expression for general one flight level + final String FLEVEL3_EXP = "(TOP|TOPS|TOPS TO) (FL )?([0-9]{3})"; + // Pattern used for extracting the flight level + final Pattern flevel3Pattern = Pattern.compile(FLEVEL3_EXP); + Matcher flevel3Matcher = flevel3Pattern.matcher(theBulletin); + + final String FLEVEL4_EXP = "FL([0-9]{3})"; + // Pattern used for extracting the flight level + final Pattern flevel4Pattern = Pattern.compile(FLEVEL4_EXP); + Matcher flevel4Matcher = flevel4Pattern.matcher(theBulletin); + + // Get flight levels group + if (maxtopsMatcher.find()) { + flevel1 = maxtopsMatcher.group(3); + } else if (flevel2Matcher.find()) { + flevel1 = flevel2Matcher.group(1); + flevel2 = flevel2Matcher.group(3); + } else if (betweenMatcher.find()) { + flevel1 = betweenMatcher.group(3); + flevel2 = betweenMatcher.group(5); + } else if (flevel1Matcher.find()) { + flevel1 = flevel1Matcher.group(3); + } else if (flevel3Matcher.find()) { + flevel1 = flevel3Matcher.group(3); + } else if (flevel4Matcher.find()) { + flevel1 = flevel4Matcher.group(1); + } + + // Set flight levels to database + if (flevel1 != " ") { + record.setFlightlevel1(Integer.parseInt(flevel1)); + } + if (flevel2 != " ") { + record.setFlightlevel2(Integer.parseInt(flevel2)); + } + + // Parse the locations + processLocation(theBulletin, record); + + } + + /** + * Obtains remarks from a bulletin + * + * @param bullMessage + * The bulletin message + * @return a string for remarks + */ + public static String getRemarks(String bullMessage) { + + String retRemarks = " "; + + // Regular expression correction + final String CORR_EXP = "(COR | (CC[A-Z]{1}))"; + + // Pattern used for extracting correction + final Pattern corrPattern = Pattern.compile(CORR_EXP); + Matcher corrMatcher = corrPattern.matcher(bullMessage); + + // Regular expression amendment + final String AMD_EXP = "(AMD )"; + // Pattern used for extracting amendment + final Pattern amdPattern = Pattern.compile(AMD_EXP); + Matcher amdMatcher = amdPattern.matcher(bullMessage); + + // Regular expression for TEST + final String TEST_EXP = "TEST "; + // Pattern used for extracting test + final Pattern testPattern = Pattern.compile(TEST_EXP); + Matcher testMatcher = testPattern.matcher(bullMessage); + + if (corrMatcher.find()) { + retRemarks = corrMatcher.group(1); + } else if (amdMatcher.find()) { + retRemarks = amdMatcher.group(); + } else if (testMatcher.find()) { + retRemarks = "TEST"; + } + + return retRemarks; + } + + /** + * Obtains speed from a bulletin + * + * @param bullMessage + * The bulletin message + * @return an integer for speed + */ + public static Integer getSpeed(String bullMessage) { + + Integer retSpeed = IDecoderConstantsN.INTEGER_MISSING; + + final String SPEED_EXP = "(MOVE|MOV|MOVG) (|E|N|S|W|\006|\012)* " + + "([0-9]{1}|[0-9]{2})(-[0-9]{2})?( )?(KT)"; + // Pattern used for extracting speed for general + final Pattern speedPattern = Pattern.compile(SPEED_EXP); + Matcher theMatcher = speedPattern.matcher(bullMessage); + + final String CANADA1_EXP = "(MOVE |MOV |MOVG )?([ENSW]{1})WD " + + "([0-9]{2}|[0-9]{1})( |\\x0d\\x0d\\x0a)?KT"; + // Pattern used for extracting speed for Canada + final Pattern canada1Pattern = Pattern.compile(CANADA1_EXP); + Matcher canada1Matcher = canada1Pattern.matcher(bullMessage); + + final String CANADA2_EXP = "(MOVE |MOV |MOVG )?([ENSW]{2})WD " + + "([0-9]{2}|[0-9]{1})(\\x0d\\x0d\\x0a| )?KT"; + // Pattern used for extracting speed for Canada + final Pattern canada2Pattern = Pattern.compile(CANADA2_EXP); + Matcher canada2Matcher = canada2Pattern.matcher(bullMessage); + + final String KMH_EXP = "([0-9]{2}|[0-9]{3})(( )*|( )?\\x0d\\x0d\\x0a)KMH"; + // Pattern used for extracting speed for KMH + final Pattern kmhPattern = Pattern.compile(KMH_EXP); + Matcher kmhMatcher = kmhPattern.matcher(bullMessage); + + if (theMatcher.find()) { + retSpeed = Integer.parseInt(theMatcher.group(3)); + } else if (canada1Matcher.find()) { + retSpeed = Integer.parseInt(canada1Matcher.group(3)); + } else if (canada2Matcher.find()) { + retSpeed = Integer.parseInt(canada2Matcher.group(3)); + } else if (kmhMatcher.find()) { + Integer kmhSpeed = Integer.parseInt(kmhMatcher.group(1)); + // Convert KMH to Knots + float speed = (float) (((double) kmhSpeed * 1000.0 / 3600.0) * 1.9425); + retSpeed = (int) speed; + } + + return retSpeed; + } + + /** + * Obtains intensity from a bulletin + * + * @param bullMessage + * The bulletin message + * @return a string for intensity + */ + public static String getIntensity(String bullMessage) { + + String intensity = null; + + // Regular expression for intensity + final String INTENSITY_EXP = "( NC | INTSF| WKN | NC=|WKN=|NC.|WKNG )"; + // Pattern used for extracting intensityFlag + final Pattern intensityPattern = Pattern.compile(INTENSITY_EXP); + Matcher theMatcher = intensityPattern.matcher(bullMessage); + + if (theMatcher.find()) { + intensity = theMatcher.group(1); + intensity = UtilN.removeLeadingWhiteSpaces(intensity); + if (intensity.substring(0, 2).equals("NC")) { + intensity = "NC"; + } else if (intensity.substring(0, 3).equals("WKN")) { + intensity = "WKN"; + } + } + + return intensity; + } + + /** + * Obtains direction from a bulletin + * + * @param bullMessage + * The bulletin message + * @return a string for direction + */ + public static String getDirection(String bullMessage) { + + String direction = null; + + final String CANADA1_EXP = "(MOVE |MOV |MOVG )?([ENSW]{1})WD " + + "([0-9]{2}|[0-9]{1})( |\\x0d\\x0d\\x0a)?KT"; + // Pattern used for extracting direction for Canada + final Pattern canada1Pattern = Pattern.compile(CANADA1_EXP); + Matcher canada1Matcher = canada1Pattern.matcher(bullMessage); + + final String CANADA2_EXP = "(MOVE |MOV |MOVG )?([ENSW]{2})WD " + + "([0-9]{2}|[0-9]{1})( |\\x0d\\x0d\\x0a)?KT"; + // Pattern used for extracting direction for Canada + final Pattern canada2Pattern = Pattern.compile(CANADA2_EXP); + Matcher canada2Matcher = canada2Pattern.matcher(bullMessage); + + // Regular expression for direction + final String DIRECTION_EXP = "(MOVE|MOV|MOVG) ([ENSW]{3}|[ENSW]{2}|[ENSW]{1})"; + // Pattern used for extracting direction for general + final Pattern directionPattern = Pattern.compile(DIRECTION_EXP); + Matcher theMatcher = directionPattern.matcher(bullMessage); + + final String DIR2_EXP = "(MOVE|MOV|MOVG)(\\D)*([ENSW]{3}|[ENSW]{2}|[ENSW]{1}) "; + // Pattern used for extracting direction for Canada + final Pattern dir2Pattern = Pattern.compile(DIR2_EXP); + Matcher dir2Matcher = dir2Pattern.matcher(bullMessage); + + final String DIR3_EXP = "(MOVE|MOV|MOVG) (SOUTH|NORTH|WEST|EAST) "; + // Pattern used for extracting direction for Canada + final Pattern dir3Pattern = Pattern.compile(DIR3_EXP); + Matcher dir3Matcher = dir3Pattern.matcher(bullMessage); + + if (canada2Matcher.find()) { + direction = canada2Matcher.group(2); + } else if (canada1Matcher.find()) { + direction = canada1Matcher.group(2); + } else if (theMatcher.find()) { + direction = theMatcher.group(2); + } else if (dir2Matcher.find()) { + direction = dir2Matcher.group(3); + } else if (dir3Matcher.find()) { + direction = dir3Matcher.group(2); + if (direction.equals("SOUTH")) { + direction = "S"; + } else if (direction.equals("NORTH")) { + direction = "N"; + } else if (direction.equals("WEST")) { + direction = "W"; + } else if (direction.equals("EAST")) { + direction = "E"; + } + } + return direction; + } + + /** + * Parse the location to set Lat/Lon or location name + * + * @param theLocation + * The location with lat/lon or location name + * @param locTb + * The location table + */ + public static void processLatLon(String theLocation, + IntlSigmetLocation locTb, Integer index, IntlSigmetRecord record) { + + double flat, flon; + + final String LATLON1_EXP = "(N|S)([0-9]{2})([0-9]{2}) (E|W)([0-9]{3})([0-9]{2})"; + // Pattern used for extracting latlon - CONUS + final Pattern latlon1Pattern = Pattern.compile(LATLON1_EXP); + Matcher latlon1Matcher = latlon1Pattern.matcher(theLocation); + + final String LATLON2_EXP = "/([0-9]{2})([0-9]{2})(N|S)([0-9]{3})" + + "([0-9]{2})(E|W)/((\\S|\\s|\\D)*)"; + // Pattern used for extracting latlon - Canada + final Pattern latlon2Pattern = Pattern.compile(LATLON2_EXP); + Matcher latlon2Matcher = latlon2Pattern.matcher(theLocation); + + final String LATLON3_EXP = "(N|S)([0-9]{2})([0-9]{2})(E|W)([0-9]{3})([0-9]{2})"; + // Pattern used for extracting latlon + final Pattern latlon3Pattern = Pattern.compile(LATLON3_EXP); + Matcher latlon3Matcher = latlon3Pattern.matcher(theLocation); + + final String LATLON4_EXP = "(N|S)([0-9]{2})(E|W)([0-9]{3}|[0-9]{2})"; + // Pattern used for extracting latlon + final Pattern latlon4Pattern = Pattern.compile(LATLON4_EXP); + Matcher latlon4Matcher = latlon4Pattern.matcher(theLocation); + + final String LATLON5_EXP = "([0-9]{2})(N|S)([0-9]{3}|[0-9]{2})(E|W)"; + // Pattern used for extracting latlon - Japan + final Pattern latlon5Pattern = Pattern.compile(LATLON5_EXP); + Matcher latlon5Matcher = latlon5Pattern.matcher(theLocation); + + final String LATLON6_EXP = "([0-9]{2})([0-9]{2})(N|S)([0-9]{3})([0-9]{2})(E|W)"; + // Pattern used for extracting latlon + final Pattern latlon6Pattern = Pattern.compile(LATLON6_EXP); + Matcher latlon6Matcher = latlon6Pattern.matcher(theLocation); + + final String LATLON7_EXP = "(N|S)([0-9]{2})([0-9]{2})[\\W| ]*(E|W)" + + "([0-9]{3})([0-9]{2})"; + // Pattern used for extracting latlon + final Pattern latlon7Pattern = Pattern.compile(LATLON7_EXP); + Matcher latlon7Matcher = latlon7Pattern.matcher(theLocation); + + final String LATLON8_EXP = "(N|S)([0-9]{2})( )*(E|W)([0-9]{3}|[0-9]{2})"; + // Pattern used for extracting latlon + final Pattern latlon8Pattern = Pattern.compile(LATLON8_EXP); + Matcher latlon8Matcher = latlon8Pattern.matcher(theLocation); + + double NSFlag = 1.0; + double EWFlag = 1.0; + double seconds = 60.0; + LatLonPoint point = null; + + if (record.getWmoHeader().equals("WSMC31")) { + // WSMC31 issues lat/lon in decimals. + seconds = 100.0; + } + + if (latlon1Matcher.find()) { + // latlon format for CONUS + if (latlon1Matcher.group(1).equals("S")) { + NSFlag = -1.0; + } + flat = NSFlag + * (Integer.parseInt(latlon1Matcher.group(2)) + (Integer + .parseInt(latlon1Matcher.group(3)) / seconds)); + if (latlon1Matcher.group(4).equals("W")) { + EWFlag = -1.0; + } + flon = EWFlag + * (Integer.parseInt(latlon1Matcher.group(5)) + (Integer + .parseInt(latlon1Matcher.group(6)) / seconds)); + locTb.setLatitude(flat); + locTb.setLongitude(flon); + locTb.setLocationName(latlon1Matcher.group()); + } else if (latlon2Matcher.find()) { + // latlon format for Canada + if (latlon2Matcher.group(3).equals("S")) { + NSFlag = -1.0; + } + flat = NSFlag + * (Integer.parseInt(latlon2Matcher.group(1)) + (Integer + .parseInt(latlon2Matcher.group(2)) / seconds)); + if (latlon2Matcher.group(6).equals("W")) { + EWFlag = -1.0; + } + flon = EWFlag + * (Integer.parseInt(latlon2Matcher.group(4)) + (Integer + .parseInt(latlon2Matcher.group(5)) / seconds)); + locTb.setLatitude(flat); + locTb.setLongitude(flon); + locTb.setLocationName(latlon2Matcher.group(7)); + } else if (latlon3Matcher.find()) { + if (latlon3Matcher.group(1).equals("S")) { + NSFlag = -1.0; + } + flat = NSFlag + * (Integer.parseInt(latlon3Matcher.group(2)) + (Integer + .parseInt(latlon3Matcher.group(3)) / seconds)); + if (latlon3Matcher.group(4).equals("W")) { + EWFlag = -1.0; + } + flon = EWFlag + * (Integer.parseInt(latlon3Matcher.group(5)) + (Integer + .parseInt(latlon3Matcher.group(6)) / seconds)); + locTb.setLatitude(flat); + locTb.setLongitude(flon); + locTb.setLocationName(latlon3Matcher.group()); + } else if (latlon4Matcher.find()) { + if (latlon4Matcher.group(1).equals("S")) { + NSFlag = -1.0; + } + flat = NSFlag * (Integer.parseInt(latlon4Matcher.group(2))); + if (latlon4Matcher.group(3).equals("W")) { + EWFlag = -1.0; + } + flon = EWFlag * (Integer.parseInt(latlon4Matcher.group(4))); + locTb.setLatitude(flat); + locTb.setLongitude(flon); + locTb.setLocationName(latlon4Matcher.group()); + } else if (latlon5Matcher.find()) { + if (latlon5Matcher.group(2).equals("S")) { + NSFlag = -1.0; + } + flat = NSFlag * (Integer.parseInt(latlon5Matcher.group(1))); + if (latlon5Matcher.group(4).equals("W")) { + EWFlag = -1.0; + } + flon = EWFlag * (Integer.parseInt(latlon5Matcher.group(3))); + locTb.setLatitude(flat); + locTb.setLongitude(flon); + locTb.setLocationName(latlon5Matcher.group()); + } else if (latlon6Matcher.find()) { + // latlon6 format + if (latlon6Matcher.group(3).equals("S")) { + NSFlag = -1.0; + } + flat = NSFlag + * (Integer.parseInt(latlon6Matcher.group(1)) + (Integer + .parseInt(latlon6Matcher.group(2)) / seconds)); + if (latlon6Matcher.group(6).equals("W")) { + EWFlag = -1.0; + } + flon = EWFlag + * (Integer.parseInt(latlon6Matcher.group(4)) + (Integer + .parseInt(latlon6Matcher.group(5)) / seconds)); + locTb.setLatitude(flat); + locTb.setLongitude(flon); + locTb.setLocationName(latlon6Matcher.group()); + } else if (latlon7Matcher.find()) { + // latlon format + if (latlon7Matcher.group(1).equals("S")) { + NSFlag = -1.0; + } + flat = NSFlag + * (Integer.parseInt(latlon7Matcher.group(2)) + (Integer + .parseInt(latlon7Matcher.group(3)) / seconds)); + if (latlon7Matcher.group(4).equals("W")) { + EWFlag = -1.0; + } + flon = EWFlag + * (Integer.parseInt(latlon7Matcher.group(5)) + (Integer + .parseInt(latlon7Matcher.group(6)) / seconds)); + locTb.setLatitude(flat); + locTb.setLongitude(flon); + locTb.setLocationName(latlon7Matcher.group()); + } else if (latlon8Matcher.find()) { + if (latlon8Matcher.group(1).equals("S")) { + NSFlag = -1.0; + } + flat = NSFlag * (Integer.parseInt(latlon8Matcher.group(2))); + if (latlon8Matcher.group(4).equals("W")) { + EWFlag = -1.0; + } + flon = EWFlag * (Integer.parseInt(latlon8Matcher.group(5))); + locTb.setLatitude(flat); + locTb.setLongitude(flon); + locTb.setLocationName(latlon8Matcher.group()); + } else { + System.out.println("theLocation=" + theLocation); + if ((index == 0) + && ((theLocation.substring(0, 3).equals("IN ")) || theLocation + .substring(0, 3).equals("OF "))) { + // handle special case with "IN " or "OF " and location + String retLoc = theLocation.substring(3); + locTb.setLocationName(retLoc); + // Get a latLonPoint for this station ID from "vors" location + // table + point = LatLonLocTbl.getLatLonPoint(retLoc, "vors"); + if (point != null) { + locTb.setLatitude(point.getLatitude(LatLonPoint.INDEGREES)); + locTb.setLongitude(point.getLongitude(LatLonPoint.INDEGREES)); + } + } else { + locTb.setLocationName(theLocation); + // Get a latLonPoint for this station ID from "vors" location + // table + point = LatLonLocTbl.getLatLonPoint(theLocation, "vors"); + if (point != null) { + locTb.setLatitude(point.getLatitude(LatLonPoint.INDEGREES)); + locTb.setLongitude(point.getLongitude(LatLonPoint.INDEGREES)); + } + + } + } + } + + /** + * Obtains distance or radius from a bulletin for a "LINE" type + * + * @param bullMessage + * The bulletin message + * @return an integer of distance + */ + public static Integer getDistance(String bullMessage) { + + Integer retDistance = IDecoderConstantsN.INTEGER_MISSING; + + // Regular expression for distance + final String DISTANCE_EXP = "(WI )?([0-9]{2}|[0-9]{3})( )?NM "; + // Pattern used for extracting distance + final Pattern distancePattern = Pattern.compile(DISTANCE_EXP); + Matcher theMatcher = distancePattern.matcher(bullMessage); + + // Regular expression distance for Canada + final String CANADA_EXP = "WTN ([0-9]{2}|[0-9]{3}) NM OF LN "; + // Pattern used for extracting distance for CANADA sigmet + final Pattern canadaPattern = Pattern.compile(CANADA_EXP); + Matcher canadaMatcher = canadaPattern.matcher(bullMessage); + + if (theMatcher.find()) { + retDistance = Integer.parseInt(theMatcher.group(2)); + } else if (canadaMatcher.find()) { + retDistance = Integer.parseInt(canadaMatcher.group(1)); + } + return retDistance; + } + + /** + * Get name location for the VA, TC, or HU.... + * + * @param bullMessage + * The bulletin message + * @return a string for nameLocation + */ + public static String getNameLocation(String bullMessage) { + + String retLocation = " "; + + final String VA_EXP = "MT (\\S)*-PEAK LOC ([NS][0-9]{4} [EW][0-9]{5}) "; + // Pattern used for extracting VA nameLocation + final Pattern vaPattern = Pattern.compile(VA_EXP); + Matcher vaMatcher = vaPattern.matcher(bullMessage); + + final String TC_EXP = " TC ((\\S)* FCST (\\S)* (\\S)*) "; + // Pattern used for extracting TC nameLocation + final Pattern tcPattern = Pattern.compile(TC_EXP); + Matcher tcMatcher = tcPattern.matcher(bullMessage); + + // final String HUR1_EXP = "(HURRICANE IRENE LOCATED AT )"; + final String HUR1_EXP = "(HURRICANE ([A-Z])* LOCATED AT ([\\w|.])* ([\\w|.])*) MOVG"; + // Pattern used for extracting Hurricane nameLocation + final Pattern hur1Pattern = Pattern.compile(HUR1_EXP); + Matcher hur1Matcher = hur1Pattern.matcher(bullMessage); + + final String HUR2_EXP = "(HURCN ([A-Z])* NEAR ([\\w|.])* ([\\w|.])*) "; + // Pattern used for extracting Hurricane nameLocation + final Pattern hur2Pattern = Pattern.compile(HUR2_EXP); + Matcher hur2Matcher = hur2Pattern.matcher(bullMessage); + + final String TS_EXP = "(TROPICAL STORM ([A-Z])* (\\w)*)"; + // Pattern used for extracting Tropical Storm nameLocation + final Pattern tsPattern = Pattern.compile(TS_EXP); + Matcher tsMatcher = tsPattern.matcher(bullMessage); + + final String TD_EXP = "(TROPICAL (DEPRESSION )?([A-Z])* (\\w)*)"; + // Pattern used for extracting Tropical Depression nameLocation + final Pattern tdPattern = Pattern.compile(TD_EXP); + Matcher tdMatcher = tdPattern.matcher(bullMessage); + + if (vaMatcher.find()) { + retLocation = vaMatcher.group(); + } else if (tcMatcher.find()) { + retLocation = tcMatcher.group(1); + } else if (hur1Matcher.find()) { + retLocation = hur1Matcher.group(1); + } else if (hur2Matcher.find()) { + retLocation = hur2Matcher.group(1); + } else if (tsMatcher.find()) { + retLocation = tsMatcher.group(1); + } else if (tdMatcher.find()) { + retLocation = tdMatcher.group(1); + } + + return retLocation; + } + + /** + * Obtains polygon extent from a bulletin for a "LINE" type + * or a polygon type + * + * @param bullMessage The bulletin message + * @return a string + */ + public static String getPolygonExtent(String bullMessage) { + + String retStr = ""; + + // Regular expression for distance + final String DISTANCE_EXP = "(WI )?([0-9]{2}|[0-9]{3})( )?NM "; + // Pattern used for extracting distance + final Pattern distancePattern = Pattern.compile(DISTANCE_EXP); + Matcher theMatcher = distancePattern.matcher( bullMessage ); + + // Regular expression for line + final String LINE_EXP = " ([0-9]{2}|[0-9]{3})( )?NM (EITHER SIDE OF)"; + // Pattern used for extracting line information + final Pattern linePattern = Pattern.compile(LINE_EXP); + Matcher lineMatcher = linePattern.matcher( bullMessage ); + + // Regular expression distance for Canada + final String CANADA_EXP = "(WTN|WITHIN) ([0-9]{2}|[0-9]{3})( )?NM OF (LN|LINE)"; + // Pattern used for extracting distance for CANADA sigmet + final Pattern canadaPattern = Pattern.compile(CANADA_EXP); + Matcher canadaMatcher = canadaPattern.matcher( bullMessage ); + + // Regular expression for POLYGON + final String POLYGON_EXP = " ([0-9]{2}|[0-9]{3})( )?NM ([EWSN]|[EWSN]{2}|[EWSN]{3}) OF"; + // Pattern used for extracting POLYGON information + final Pattern polygonPattern = Pattern.compile(POLYGON_EXP); + Matcher polygonMatcher = polygonPattern.matcher( bullMessage ); + + if (canadaMatcher.find()) { + retStr = canadaMatcher.group(1); + } else if (lineMatcher.find()) { + retStr = lineMatcher.group(3); + } else if (polygonMatcher.find()) { + retStr = polygonMatcher.group(3).concat(" OF"); + } else if (theMatcher.find()) { + retStr = theMatcher.group(1); + } + + return retStr; + } + + /** + * Parse the location lines and add location table to the main record table + * if any + * + * @param theBulletin + * The report from bulletin message + * @param record + * The main table + * @return a boolean true if any location exists. + */ + public static boolean processLocation(String theBulletin, + IntlSigmetRecord record) { + + boolean ret = false; + + String locationDelimiter = "-"; + String retLocation = "?"; + int locPositionIndex = -1; + + ArrayList terminationList = new ArrayList(); + // Locations ends with these key words + terminationList.addAll(Arrays + .asList(new String[] { "TOP", "SEV", "BKN", "STNR", "ISOL", + "MOV", "SOLID", "TOPS", "AREA", "BTN", "STG", "SEVERE", + "INTSF=", "MAINLY", "SIGMET", "OCNL", "WKN", "PL", + "FZRA", "LLWS", "TURB", "STR", "FCST", "VA", "MDT", + "STRONG", "LN", "AT", "BASED", "OF", "SVR", "OVER", + "TS", "AND", "OBL", "TURBUL", "BLW", "TOP", "TORNADO", + "CORRECTION" })); + + final String LATLON1_EXP = "(N|S)([0-9]{4}) (E|W)([0-9]{5}) -"; + // Pattern used for extracting latlon + final Pattern latlon1Pattern = Pattern.compile(LATLON1_EXP); + Matcher latlon1Matcher = latlon1Pattern.matcher(theBulletin); + + final String LATLON2_EXP = "/([0-9]{4})(N|S)([0-9]{5})(E|W)/"; + // Pattern used for extracting latlon + final Pattern latlon2Pattern = Pattern.compile(LATLON2_EXP); + Matcher latlon2Matcher = latlon2Pattern.matcher(theBulletin); + + final String LATLON3_EXP = "(N|S)([0-9]{4})(E|W)([0-9]{5})-"; + // Pattern used for extracting latlon + final Pattern latlon3Pattern = Pattern.compile(LATLON3_EXP); + Matcher latlon3Matcher = latlon3Pattern.matcher(theBulletin); + + final String LATLON4_EXP = "(N|S)([0-9]{2})(E|W)([0-9]{3})"; + // Pattern used for extracting latlon + final Pattern latlon4Pattern = Pattern.compile(LATLON4_EXP); + Matcher latlon4Matcher = latlon4Pattern.matcher(theBulletin); + + final String LATLON5_EXP = "([0-9]{2})(N|S)([0-9]{3}|[0-9]{2})(E|W)"; + // Pattern used for extracting latlon + final Pattern latlon5Pattern = Pattern.compile(LATLON5_EXP); + Matcher latlon5Matcher = latlon5Pattern.matcher(theBulletin); + + final String LATLON6_EXP = "([0-9]{4})(N|S)([0-9]{5})(E|W)"; + // Pattern used for extracting latlon + final Pattern latlon6Pattern = Pattern.compile(LATLON6_EXP); + Matcher latlon6Matcher = latlon6Pattern.matcher(theBulletin); + + final String LATLON7_EXP = " [A-Z]*( )?-( )?[A-Z]*( )?-"; + // Pattern used for extracting latlon + final Pattern latlon7Pattern = Pattern.compile(LATLON7_EXP); + Matcher latlon7Matcher = latlon7Pattern.matcher(theBulletin); + + final String LATLON9_EXP = " [A-Z]* [A-Z]*/(\\w| )*/"; + // Pattern used for extracting latlon + final Pattern latlon9Pattern = Pattern.compile(LATLON9_EXP); + Matcher latlon9Matcher = latlon9Pattern.matcher(theBulletin); + + // Find the position of first location + if (latlon7Matcher.find()) { + retLocation = latlon7Matcher.group(); + } else if (latlon1Matcher.find()) { + retLocation = latlon1Matcher.group(); + } else if (latlon2Matcher.find()) { + retLocation = latlon2Matcher.group(); + } else if (latlon3Matcher.find()) { + retLocation = latlon3Matcher.group(); + } else if (latlon4Matcher.find()) { + retLocation = latlon4Matcher.group(); + } else if (latlon5Matcher.find()) { + retLocation = latlon5Matcher.group(); + } else if (latlon6Matcher.find()) { + retLocation = latlon6Matcher.group(); + } else if (latlon9Matcher.find()) { + retLocation = latlon9Matcher.group(); + int sigmetIndex = retLocation.indexOf("SIGMET"); + int fcstIndex = retLocation.indexOf("FCST "); + int innIndex = retLocation.indexOf("IN N/"); + int sfcIndex = retLocation.indexOf(" SFC"); + int obsIndex = retLocation.indexOf(" OBS"); + // Handle special cases and throw them away + if (sigmetIndex != -1) { + retLocation = "?"; + } else if (fcstIndex != -1) { + retLocation = "?"; + } else if (innIndex != -1) { + retLocation = "?"; + } else if (sfcIndex != -1) { + retLocation = "?"; + } else if (obsIndex != -1) { + retLocation = "?"; + } + + } + + locPositionIndex = theBulletin.indexOf(retLocation); + + if (locPositionIndex > 0) { + String secondHalf = theBulletin.substring(locPositionIndex); + Scanner scLocationLine = new Scanner(secondHalf) + .useDelimiter("\\x0d\\x0d\\x0a"); + String lines = " "; + String curLine = null; + ArrayList locationList = new ArrayList(); + locationList.clear(); + Boolean notBreak = true; + + while (scLocationLine.hasNext() && notBreak) { + // Get next location line + curLine = scLocationLine.next(); + + Scanner scLocationToken = new Scanner(curLine); + while (scLocationToken.hasNext() && notBreak) { + // Check the token from each line + String token = scLocationToken.next(); + if (terminationList.contains(token)) { + // terminate and get the locations in this line + int token_pos = curLine.indexOf(token); + lines = lines.concat(" ").concat( + curLine.substring(0, token_pos)); + notBreak = false; + break; + } + } + if (notBreak) { + lines = lines.concat(" ").concat(curLine); + } + } + + // Clean up the leading space + lines = UtilN.removeLeadingWhiteSpaces(lines); + lines = removeChar(lines, '\r'); + lines = removeChar(lines, '\n'); + + // Decide the location delimiter. + Boolean whiteDel = false; + int dashPos = lines.indexOf("-"); + int slashPos = lines.indexOf("/"); + if (dashPos != -1) { + locationDelimiter = "-"; + } else if (slashPos != -1) { + locationDelimiter = "/"; + } else { + locationDelimiter = " "; + whiteDel = true; + } + // Parse the location lines by a "-", "/", or " ". + Scanner scLocation = new Scanner(lines) + .useDelimiter(locationDelimiter); + + locationList.clear(); + // Get all locations + while (scLocation.hasNext()) { + // Clean up the leading space + String location = UtilN.removeLeadingWhiteSpaces(scLocation + .next()); + if (whiteDel) { + // white space as delimiter + int lengthOfLocation = location.length(); + if (lengthOfLocation > 2) { + if (Character.isDigit(location.toCharArray()[0]) + && (lengthOfLocation > 2)) { + locationList.add(location); + } else if (Character.isDigit(location.toCharArray()[1]) + && (lengthOfLocation > 2)) { + locationList.add(location); + } + } + } else if ((location.length() > 0) + && (!location.substring(0, 2).equals("FL"))) { + // exception handle for a "FL" false location + locationList.add(location); + } + } + + // set locations to data base + Integer idxLocation = 0; + if (locationList.size() > 1) { + for (String Location : locationList) { + IntlSigmetLocation currentLocation = new IntlSigmetLocation(); + currentLocation.setLocationLine(lines); + // currentLocation.setLocationName(Location); + processLatLon(Location, currentLocation, idxLocation, + record); + currentLocation.setIndex(idxLocation + 1); + idxLocation++; + + record.addIntlSigmetLocation(currentLocation); + } + ret = true; + } + } + return ret; + } + + /** + * Get detail information for Thunderstorm. + * + * @param theReport + * the input bulletin + * @return a string for Thunderstorm + */ + public static String getThunderStorm(String theReport) { + + String retTS = "THUNDERSTORM"; + // Regular expression for tsType + final String TSTYPE_EXP = "(SQL EMBD TS |ISOL EMBD TS |EMBD TS GR |ISOL TS |EMBD TS |" + + "FRQ TS|SQL TS |TS GR |OBSC TS|FRQ TSGR |OCNL TS |EMBD TSGR | TSGR | GR |" + + "TS/CB|CB/TS)"; + // Pattern used for extracting hazardType + final Pattern tsTypePattern = Pattern.compile(TSTYPE_EXP); + Matcher tsMatcher = tsTypePattern.matcher(theReport); + + if (tsMatcher.find()) { + if (tsMatcher.group(1).equals("EMBD TS GR ")) { + retTS = "EMBEDED THUNDERSTORMS HAIL"; + } else if (tsMatcher.group(1).equals("SQL EMBD TS ")) { + retTS = "SQUALL EMBEDED THUNDERSTORMS"; + } else if (tsMatcher.group(1).equals("ISOL EMBD TS ")) { + retTS = "ISOLATED EMBEDED THUNDERSTORMS"; + } else if (tsMatcher.group(1).equals("ISOL TS ")) { + retTS = "ISOLATED THUNDERSTORMS"; + } else if (tsMatcher.group(1).equals("EMBD TS ")) { + retTS = "EMBEDED THUNDERSTORMS"; + } else if (tsMatcher.group(1).equals("FRQ TS")) { + retTS = "FREQUENT THUNDERSTORMS"; + } else if (tsMatcher.group(1).equals("SQL TS ")) { + retTS = "SQUALL THUNDERSTORMS"; + } else if (tsMatcher.group(1).equals("TS GR ")) { + retTS = "THUNDERSTORMS HAIL"; + } else if (tsMatcher.group(1).equals("OBSC TS")) { + retTS = "OBSCURE THUNDERSTORMS"; + } else if (tsMatcher.group(1).equals("FRQ TSGR ")) { + retTS = "FREQUENT THUNDERSTORMS HAIL"; + } else if (tsMatcher.group(1).equals("OCNL TS ")) { + retTS = "OCCASIONAL THUNDERSTORMS"; + } else if (tsMatcher.group(1).equals("EMBD TSGR ")) { + retTS = "EMBEDED THUNDERSTORMS HAIL"; + } else if (tsMatcher.group(1).equals(" TSGR ")) { + retTS = "THUNDERSTORMS HAIL"; + } else if (tsMatcher.group(1).equals(" GR ")) { + retTS = "HAIL"; + } else if (tsMatcher.group(1).equals("TS/CB")) { + retTS = "THUNDERSTORMS CUMULONIMBUS"; + } else if (tsMatcher.group(1).equals("CB/TS")) { + retTS = "THUNDERSTORMS CUMULONIMBUS"; + } + } + + return retTS; + } + + /** + * Remove a character from a string and return the result. + * + * @param s + * the string + * @param c + * the character to be removed + * @return a string. + */ + public static String removeChar(String s, char c) { + + String ret = ""; + + for (int i = 0; i < s.length(); i++) { + if (s.charAt(i) != c) + ret += s.charAt(i); + } + + return ret; + } + +} diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.intlsigmet/src/gov/noaa/nws/ncep/edex/plugin/intlsigmet/util/package-info.java b/ncep/gov.noaa.nws.ncep.edex.plugin.intlsigmet/src/gov/noaa/nws/ncep/edex/plugin/intlsigmet/util/package-info.java index d6c1a45bcd..91e3452c24 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.intlsigmet/src/gov/noaa/nws/ncep/edex/plugin/intlsigmet/util/package-info.java +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.intlsigmet/src/gov/noaa/nws/ncep/edex/plugin/intlsigmet/util/package-info.java @@ -1,4 +1,4 @@ -/** -* Contains tools for decoder plug-ins -*/ -package gov.noaa.nws.ncep.edex.plugin.intlsigmet.util; +/** +* Contains tools for decoder plug-ins +*/ +package gov.noaa.nws.ncep.edex.plugin.intlsigmet.util; diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.mcidas/gov.noaa.nws.ncep.edex.plugin.mcidas.ecl b/ncep/gov.noaa.nws.ncep.edex.plugin.mcidas/gov.noaa.nws.ncep.edex.plugin.mcidas.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.mosaic/gov.noaa.nws.ncep.edex.plugin.mosaic.ecl b/ncep/gov.noaa.nws.ncep.edex.plugin.mosaic/gov.noaa.nws.ncep.edex.plugin.mosaic.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.mosaic/res/endpoints/mosaic-ingest.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.mosaic/res/endpoints/mosaic-ingest.xml index ac42373d24..e89c4f1a52 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.mosaic/res/endpoints/mosaic-ingest.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.mosaic/res/endpoints/mosaic-ingest.xml @@ -1,32 +1,32 @@ - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + @@ -43,25 +43,25 @@ - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.mosaic/src/gov/noaa/nws/ncep/edex/plugin/mosaic/common/MosaicRecord.java b/ncep/gov.noaa.nws.ncep.edex.plugin.mosaic/src/gov/noaa/nws/ncep/edex/plugin/mosaic/common/MosaicRecord.java index 772af358c4..9ad33f3ebb 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.mosaic/src/gov/noaa/nws/ncep/edex/plugin/mosaic/common/MosaicRecord.java +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.mosaic/src/gov/noaa/nws/ncep/edex/plugin/mosaic/common/MosaicRecord.java @@ -1,6 +1,6 @@ -package gov.noaa.nws.ncep.edex.plugin.mosaic.common; - +package gov.noaa.nws.ncep.edex.plugin.mosaic.common; + import gov.noaa.nws.ncep.edex.plugin.mosaic.util.level3.DataLevelThreshold; import gov.noaa.nws.ncep.edex.plugin.mosaic.util.level3.SymbologyBlock; import gov.noaa.nws.ncep.edex.plugin.mosaic.util.level3.SymbologyPacket; @@ -45,7 +45,7 @@ import org.hibernate.annotations.Fetch; import org.hibernate.annotations.FetchMode; import org.opengis.referencing.crs.ProjectedCRS; import org.opengis.referencing.operation.MathTransform; - + //import com.raytheon.edex.map.MapUtil; import com.raytheon.uf.common.dataplugin.IDecoderGettable; import com.raytheon.uf.common.dataplugin.annotations.DataURI; @@ -83,7 +83,7 @@ import com.vividsolutions.jts.geom.Envelope; * This code has been developed by the SIB for use in the AWIPS2 system. * @author L. Lin * @version 1.0 - */ + */ @Entity @@ -94,41 +94,41 @@ import com.vividsolutions.jts.geom.Envelope; @DynamicSerialize public class MosaicRecord extends PersistablePluginDataObject implements IPersistable, ISpatialEnabled, IMosaicRecord { - - private static final long serialVersionUID = 1L; - - @Column - @DataURI(position = 2) - @DynamicSerializeElement - @XmlElement(nillable = false) - private Integer productCode; - + + private static final long serialVersionUID = 1L; + + @Column + @DataURI(position = 2) + @DynamicSerializeElement + @XmlElement(nillable = false) + private Integer productCode; + @Column - @DataURI(position=3) - @DynamicSerializeElement - @XmlElement(nillable = false) - private Integer resolution; - - @Column(length = 16) - @DataURI(position = 1) - @DynamicSerializeElement - @XmlElement(nillable = false) - private String prodName; - - @Column - @DynamicSerializeElement - @XmlElement(nillable = false) - private Float latitude; - - @Column - @DynamicSerializeElement - @XmlElement(nillable = false) - private Float longitude; - - @Column - @DynamicSerializeElement - @XmlElement(nillable = false) - private Float elevation; + @DataURI(position=3) + @DynamicSerializeElement + @XmlElement(nillable = false) + private Integer resolution; + + @Column(length = 16) + @DataURI(position = 1) + @DynamicSerializeElement + @XmlElement(nillable = false) + private String prodName; + + @Column + @DynamicSerializeElement + @XmlElement(nillable = false) + private Float latitude; + + @Column + @DynamicSerializeElement + @XmlElement(nillable = false) + private Float longitude; + + @Column + @DynamicSerializeElement + @XmlElement(nillable = false) + private Float elevation; @Column @DynamicSerializeElement @@ -140,12 +140,12 @@ public class MosaicRecord extends PersistablePluginDataObject implements @DynamicSerializeElement @XmlElement(nillable = false) private Integer sourceId; - - @Column - @DynamicSerializeElement - @XmlElement(nillable = false) + + @Column + @DynamicSerializeElement + @XmlElement(nillable = false) private Integer volumeCoveragePattern; - + @Column @DynamicSerializeElement @XmlElement(nillable = false) @@ -160,150 +160,150 @@ public class MosaicRecord extends PersistablePluginDataObject implements @DynamicSerializeElement @XmlElement(nillable = false) private Calendar generationTime; - - @Column - @DynamicSerializeElement - @XmlElement(nillable = false) - private Integer numLevels; - - @Column - @DynamicSerializeElement - @XmlElement(nillable = false) - private Integer nx; - - @Column - @DynamicSerializeElement - @XmlElement(nillable = false) - private Integer ny; - - @Column - @DynamicSerializeElement - @XmlElement(nillable = false) - private String format; - - @Column(length = 16) - @DynamicSerializeElement - @XmlElement(nillable = false) - private String unit; - - @Transient - private byte[] rawData; + + @Column + @DynamicSerializeElement + @XmlElement(nillable = false) + private Integer numLevels; + + @Column + @DynamicSerializeElement + @XmlElement(nillable = false) + private Integer nx; + + @Column + @DynamicSerializeElement + @XmlElement(nillable = false) + private Integer ny; + + @Column + @DynamicSerializeElement + @XmlElement(nillable = false) + private String format; + + @Column(length = 16) + @DynamicSerializeElement + @XmlElement(nillable = false) + private String unit; @Transient - private byte[] headerBlock; - - @Transient - private short[] thresholds; - - @Transient - private short[] productDependentValues; - - @Transient - private Object[] decodedThresholds; - - @Transient - private SymbologyBlock symbologyBlock; - - @Transient - private HashMap>> productVals = new HashMap>>(); - - @Transient - private HashMap> recordVals = new HashMap>(); - - @Transient - private Map symbologyData = new HashMap(); - - public MosaicRecord() { - super(); - this.nx = 0; - this.ny = 0; - rawData = null; - thresholds = new short[16]; - decodedThresholds = new Object[16]; - } - - public MosaicRecord(int rows, int columns) { - this(); - this.nx = rows; - this.ny = columns; - rawData = new byte[rows * columns]; - thresholds = new short[16]; - decodedThresholds = new Object[16]; - } - - /** - * Constructs a mosaic record from a dataURI - * - * @param uri - * The dataURI - * @param tableDef - * The table definition associated with this class - */ - public MosaicRecord(String uri) { - super(uri); - } - - /** - * @param dataStore - * @throws StorageException - */ - public void retrieveFromDataStore(IDataStore dataStore) - throws StorageException, FileNotFoundException { - - if ("Radial".equals(format) || "Raster".equals(format)) { - //ByteDataRecord byteData = (ByteDataRecord) dataStore.retrieve( + private byte[] rawData; + + @Transient + private byte[] headerBlock; + + @Transient + private short[] thresholds; + + @Transient + private short[] productDependentValues; + + @Transient + private Object[] decodedThresholds; + + @Transient + private SymbologyBlock symbologyBlock; + + @Transient + private HashMap>> productVals = new HashMap>>(); + + @Transient + private HashMap> recordVals = new HashMap>(); + + @Transient + private Map symbologyData = new HashMap(); + + public MosaicRecord() { + super(); + this.nx = 0; + this.ny = 0; + rawData = null; + thresholds = new short[16]; + decodedThresholds = new Object[16]; + } + + public MosaicRecord(int rows, int columns) { + this(); + this.nx = rows; + this.ny = columns; + rawData = new byte[rows * columns]; + thresholds = new short[16]; + decodedThresholds = new Object[16]; + } + + /** + * Constructs a mosaic record from a dataURI + * + * @param uri + * The dataURI + * @param tableDef + * The table definition associated with this class + */ + public MosaicRecord(String uri) { + super(uri); + } + + /** + * @param dataStore + * @throws StorageException + */ + public void retrieveFromDataStore(IDataStore dataStore) + throws StorageException, FileNotFoundException { + + if ("Radial".equals(format) || "Raster".equals(format)) { + //ByteDataRecord byteData = (ByteDataRecord) dataStore.retrieve( // getDataURI(), "Data"); ByteDataRecord byteData = (ByteDataRecord) dataStore.retrieve( - getDataURI(), "Data", Request.ALL); - setRawData(byteData.getByteData()); - } - - if ("Graphic".equals(format) || "XY".equals(format) - || "Graph".equals(format)) { - - try { - //ByteDataRecord byteData = (ByteDataRecord) dataStore.retrieve( + getDataURI(), "Data", Request.ALL); + setRawData(byteData.getByteData()); + } + + if ("Graphic".equals(format) || "XY".equals(format) + || "Graph".equals(format)) { + + try { + //ByteDataRecord byteData = (ByteDataRecord) dataStore.retrieve( // getDataURI(), "Symbology"); ByteDataRecord byteData = (ByteDataRecord) dataStore.retrieve( - getDataURI(), "Symbology", Request.ALL); - ByteArrayInputStream bais = new ByteArrayInputStream(byteData - .getByteData()); - Object o = DynamicSerializationManager.getManager( - SerializationType.Thrift).deserialize(bais); - setSymbologyBlock((SymbologyBlock) o); - } catch (Throwable e) { - setSymbologyBlock(null); - } - - try { - ByteDataRecord byteData = (ByteDataRecord) dataStore.retrieve( - getDataURI(), "ProductVals", Request.ALL); - ByteArrayInputStream bais = new ByteArrayInputStream(byteData - .getByteData()); - Object o = DynamicSerializationManager.getManager( - SerializationType.Thrift).deserialize(bais); - setProductVals((HashMap>>) o); - } catch (Throwable e) { - setProductVals(null); - } - - } - try { - ShortDataRecord shortData = (ShortDataRecord) dataStore.retrieve( - getDataURI(), "Thresholds", Request.ALL); - setThresholds(shortData.getShortData()); - } catch (Exception e) { - setThresholds(null); - } - - try { - ShortDataRecord depValData = (ShortDataRecord) dataStore.retrieve( - getDataURI(), "DependentValues", Request.ALL); - setProductDependentValues(depValData.getShortData()); - } catch (Throwable e) { - setProductDependentValues(null); - } - } + getDataURI(), "Symbology", Request.ALL); + ByteArrayInputStream bais = new ByteArrayInputStream(byteData + .getByteData()); + Object o = DynamicSerializationManager.getManager( + SerializationType.Thrift).deserialize(bais); + setSymbologyBlock((SymbologyBlock) o); + } catch (Throwable e) { + setSymbologyBlock(null); + } + + try { + ByteDataRecord byteData = (ByteDataRecord) dataStore.retrieve( + getDataURI(), "ProductVals", Request.ALL); + ByteArrayInputStream bais = new ByteArrayInputStream(byteData + .getByteData()); + Object o = DynamicSerializationManager.getManager( + SerializationType.Thrift).deserialize(bais); + setProductVals((HashMap>>) o); + } catch (Throwable e) { + setProductVals(null); + } + + } + try { + ShortDataRecord shortData = (ShortDataRecord) dataStore.retrieve( + getDataURI(), "Thresholds", Request.ALL); + setThresholds(shortData.getShortData()); + } catch (Exception e) { + setThresholds(null); + } + + try { + ShortDataRecord depValData = (ShortDataRecord) dataStore.retrieve( + getDataURI(), "DependentValues", Request.ALL); + setProductDependentValues(depValData.getShortData()); + } catch (Throwable e) { + setProductDependentValues(null); + } + } /** * Get the time to use for persisting this data. @@ -317,16 +317,16 @@ public class MosaicRecord extends PersistablePluginDataObject implements return null; return c.getTime(); - } - - /** - * Set the time to be used for the persistence time for this object. - * - * @param persistTime - * The persistence time to be used. - */ - public void setPersistenceTime(Calendar persistTime) { - setInsertTime(persistTime); + } + + /** + * Set the time to be used for the persistence time for this object. + * + * @param persistTime + * The persistence time to be used. + */ + public void setPersistenceTime(Calendar persistTime) { + setInsertTime(persistTime); } public String getProdName() { @@ -337,21 +337,21 @@ public class MosaicRecord extends PersistablePluginDataObject implements this.prodName = prodName; } - /** - * @return the productCode - */ - public Integer getProductCode() { - return productCode; - } - - /** - * @param productCode - * the productCode to set - */ - public void setProductCode(Integer productCode) { - this.productCode = productCode; - } - + /** + * @return the productCode + */ + public Integer getProductCode() { + return productCode; + } + + /** + * @param productCode + * the productCode to set + */ + public void setProductCode(Integer productCode) { + this.productCode = productCode; + } + public Integer getNx() { return nx; } @@ -366,16 +366,16 @@ public class MosaicRecord extends PersistablePluginDataObject implements public void setNy(Integer ny) { this.ny = ny; - } - + } + public Integer getResolution() { return resolution; } public void setResolution(Integer resolution) { this.resolution = resolution; - } - + } + public Integer getSourceId() { return sourceId; } @@ -384,22 +384,22 @@ public class MosaicRecord extends PersistablePluginDataObject implements this.sourceId = sourceId; } - public Float getLatitude() { - return latitude; - } - - public void setLatitude(Float latitude) { - this.latitude = latitude; - } - - public Float getLongitude() { - return longitude; - } - - public void setLongitude(Float longitude) { - this.longitude = longitude; - } - + public Float getLatitude() { + return latitude; + } + + public void setLatitude(Float latitude) { + this.latitude = latitude; + } + + public Float getLongitude() { + return longitude; + } + + public void setLongitude(Float longitude) { + this.longitude = longitude; + } + public Float getTrueElevationAngle() { return trueElevationAngle; } @@ -416,71 +416,71 @@ public class MosaicRecord extends PersistablePluginDataObject implements this.headerBlock = headerBlock; } - public byte[] getRawData() { - return rawData; - } - - public void setRawData(byte[] mosaicData) { - this.rawData = mosaicData; - } - - public int getOpMode() { - return 1; - } - - public void setRawDataValue(int radial, int bin, byte value) { - if ((radial < nx) && (bin < ny)) { - rawData[radial * ny + bin] = value; - } - } - - public byte getRawDataValue(int radial, int bin) { - return rawData[radial * ny + bin]; - } - - public short getThreshold(int i) { - return thresholds[i]; - } - - public Object getDecodedThreshold(int i) { - return decodedThresholds[i]; - } - - public void setThreshold(int i, short threshold) { - this.thresholds[i] = threshold; - this.decodedThresholds[i] = new DataLevelThreshold(threshold).decode(); - } - - public short[] getThresholds() { - return thresholds; - } - - public Object[] getDecodedThresholds() { - return decodedThresholds; - } - - public void setThresholds(short[] thresholds) { - this.thresholds = thresholds; - this.decodedThresholds = null; - if (thresholds != null) { - this.decodedThresholds = new Object[thresholds.length]; - int i = 0; - DataLevelThreshold dl = new DataLevelThreshold(); - for (short threshold : thresholds) { - dl.set(threshold); - this.decodedThresholds[i++] = dl.decode(); - } - } - } - - public Integer getNumLevels() { - return numLevels; - } - - public void setNumLevels(Integer numLevels) { - this.numLevels = numLevels; - } - + public byte[] getRawData() { + return rawData; + } + + public void setRawData(byte[] mosaicData) { + this.rawData = mosaicData; + } + + public int getOpMode() { + return 1; + } + + public void setRawDataValue(int radial, int bin, byte value) { + if ((radial < nx) && (bin < ny)) { + rawData[radial * ny + bin] = value; + } + } + + public byte getRawDataValue(int radial, int bin) { + return rawData[radial * ny + bin]; + } + + public short getThreshold(int i) { + return thresholds[i]; + } + + public Object getDecodedThreshold(int i) { + return decodedThresholds[i]; + } + + public void setThreshold(int i, short threshold) { + this.thresholds[i] = threshold; + this.decodedThresholds[i] = new DataLevelThreshold(threshold).decode(); + } + + public short[] getThresholds() { + return thresholds; + } + + public Object[] getDecodedThresholds() { + return decodedThresholds; + } + + public void setThresholds(short[] thresholds) { + this.thresholds = thresholds; + this.decodedThresholds = null; + if (thresholds != null) { + this.decodedThresholds = new Object[thresholds.length]; + int i = 0; + DataLevelThreshold dl = new DataLevelThreshold(); + for (short threshold : thresholds) { + dl.set(threshold); + this.decodedThresholds[i++] = dl.decode(); + } + } + } + + public Integer getNumLevels() { + return numLevels; + } + + public void setNumLevels(Integer numLevels) { + this.numLevels = numLevels; + } + public Calendar getIssueTime() { return issueTime; } @@ -504,284 +504,284 @@ public class MosaicRecord extends PersistablePluginDataObject implements public void setGenerationTime(Calendar generationTime) { this.generationTime = generationTime; } - - public String getFormat() { - return format; - } - - public void setFormat(String format) { - this.format = format; - } - - public Integer getVolumeCoveragePattern() { - return volumeCoveragePattern; - } - - public void setVolumeCoveragePattern(Integer volumeCoveragePattern) { - this.volumeCoveragePattern = volumeCoveragePattern; - } - - /** - * @return the unit - */ - public String getUnit() { - return unit; - } - - /** - * @param unit - * the unit to set - */ - public void setUnit(String unit) { - this.unit = unit; - } - - public Float getElevation() { - return elevation; - } - - public void setElevation(Float elevation) { - this.elevation = elevation; - } - - /** - * Get the IDecoderGettable reference for this record. - * - * @return The IDecoderGettable reference for this record. Null for this - * class. - */ - @Override - public IDecoderGettable getDecoderGettable() { - return null; + + public String getFormat() { + return format; } - - /** - * @return the symbologyBlock - */ - public SymbologyBlock getSymbologyBlock() { - return symbologyBlock; - } - - /** - * @param symbologyBlock - * the symbologyBlock to set - */ - public void setSymbologyBlock(SymbologyBlock symbologyBlock) { - this.symbologyBlock = symbologyBlock; - } - - public short getProductDependentValue(int value) { - return productDependentValues[value]; - } - - /** - * @return the productDependentValues - */ - public short[] getProductDependentValues() { - return productDependentValues; - } - - /** - * @param productDependentValues - * the productDependentValues to set - */ - public void setProductDependentValues(short[] productDependentValues) { - this.productDependentValues = productDependentValues; - } - - public ProjectedCRS getCRS() { - return MapUtil.constructStereographic(MapUtil.AWIPS_EARTH_RADIUS, - MapUtil.AWIPS_EARTH_RADIUS, this.latitude, this.longitude); - } - - /** - * @return the symbologyData - */ - public Map getSymbologyData() { - return symbologyData; - } - - /** - * @param symbologyData - * the symbologyData to set - */ - public void setSymbologyData(Map symbologyData) { - this.symbologyData = symbologyData; - } - - public Integer getDataValue(Coordinate latLon) { - double[] input = { latLon.x, latLon.y }; - double[] output = new double[2]; - try { - MathTransform mt = MapUtil.getTransformFromLatLon(getCRS()); - - mt.transform(input, 0, output, 0, 1); - } catch (Exception e) { - return null; - } - - int dataValue = 0; - - // ********************************** - // Raster case - // ********************************** - if ("Raster".equals(this.getFormat())) { - - int col = (int) (output[0] / this.getResolution() + (this - .getNy() / 2)); - - int row = (int) (output[1] / this.getResolution() + (this - .getNy() / 2)); - - row = this.getNy() - row - 1; - - if ((row >= 0) && (row < this.getNy()) && (col >= 0) - && (col < this.getNy())) { - dataValue = this.getRawDataValue(row, col); - } - } - - return dataValue; - } - - /** - * @param productVals - * the productVals to set - */ - public void setProductVals( - HashMap>> map) { - this.productVals = map; - } - - public void printSymbologyData() { - System.out - .println("******************************************************************************"); - System.out.println("*** START Symbology Data Contents"); - System.out - .println("******************************************************************************"); - - for (MosaicDataKey key : symbologyData.keySet()) { - System.out.println("Key: " + key); - MosaicDataPoint data = symbologyData.get(key); - HashMap> displayPointData = data - .getDisplayPointData(); - for (Integer pktType : displayPointData.keySet()) { - System.out.println("\tPt Type: " + pktType); - for (SymbologyPoint currPt : displayPointData.get(pktType)) { - System.out.println("\t\t" + currPt); - } - } - - HashMap> displayPacketData = data - .getDisplayPacketData(); - for (Integer pktType : displayPacketData.keySet()) { - System.out.println("\tPkt Type: " + pktType); - for (SymbologyPacket currPkt : displayPacketData.get(pktType)) { - System.out.println("\t\t" + currPkt); - } - } - } - - System.out - .println("******************************************************************************"); - System.out.println("*** END Symbology Data Contents"); - System.out - .println("******************************************************************************"); - } - - /* - * Return the product values map for a type, a storm id, and the desired - * value type - * - * (non-Javadoc) - * - * @see - * com.raytheon.edex.plugin.mosaic.IMosaicRecord#getProductVals(com.raytheon - * .edex.util.mosaic.MosaicConstants.MapValues) - */ - @Override - public String getProductVals(MosaicConstants.MapValues type, String id, - MapValues valueName) { - return productVals.get(type).get(id).get(valueName); - } - - /** - * Return the product values map for the product type and for a certain - * storm id - * - * @param type - * @param id - * @return - */ - public Map getProductValsPerStorm( - MosaicConstants.MapValues type, String id) { - return productVals.get(type).get(id); - } - - /** - * Return the product values map for a certain product type - * - * @param type - * @return - */ - public Map> getProductValsPerType( - MosaicConstants.MapValues type) { - return productVals.get(type); - } - - /** - * Return the entire product values map - * - * @return - */ - public Map>> getProductValsMap() { - return productVals; - } - - /** - * @return the recordVals - */ - public String getProductValsPerRecord(MosaicConstants.MapValues type, - MosaicConstants.MapValues val) { - return recordVals.get(type).get(val); - } - - /** - * @return the recordVals - */ - public HashMap> getRecordVals() { - return recordVals; - } - - /** - * @param recordVals - * the recordVals to set - */ - public void setRecordVals( - HashMap> recordVals) { - this.recordVals = recordVals; - } - - /** - * Search in the map for the storm id and send back the feature if that is - * the case - * - * @param type - * @param id - * @return - */ - public List getFeatures(MosaicConstants.MapValues type, String id) { - List list = new ArrayList(); - for (Map.Entry> entry : productVals - .get(type).entrySet()) { - if (id.trim().equals( - entry.getValue() - .get(MosaicConstants.MapValues.MESO_STORM_ID) - .toString().trim())) { - list.add(entry.getKey()); - } - } - return list; + + public void setFormat(String format) { + this.format = format; + } + + public Integer getVolumeCoveragePattern() { + return volumeCoveragePattern; + } + + public void setVolumeCoveragePattern(Integer volumeCoveragePattern) { + this.volumeCoveragePattern = volumeCoveragePattern; + } + + /** + * @return the unit + */ + public String getUnit() { + return unit; + } + + /** + * @param unit + * the unit to set + */ + public void setUnit(String unit) { + this.unit = unit; + } + + public Float getElevation() { + return elevation; + } + + public void setElevation(Float elevation) { + this.elevation = elevation; + } + + /** + * Get the IDecoderGettable reference for this record. + * + * @return The IDecoderGettable reference for this record. Null for this + * class. + */ + @Override + public IDecoderGettable getDecoderGettable() { + return null; + } + + /** + * @return the symbologyBlock + */ + public SymbologyBlock getSymbologyBlock() { + return symbologyBlock; + } + + /** + * @param symbologyBlock + * the symbologyBlock to set + */ + public void setSymbologyBlock(SymbologyBlock symbologyBlock) { + this.symbologyBlock = symbologyBlock; + } + + public short getProductDependentValue(int value) { + return productDependentValues[value]; + } + + /** + * @return the productDependentValues + */ + public short[] getProductDependentValues() { + return productDependentValues; + } + + /** + * @param productDependentValues + * the productDependentValues to set + */ + public void setProductDependentValues(short[] productDependentValues) { + this.productDependentValues = productDependentValues; + } + + public ProjectedCRS getCRS() { + return MapUtil.constructStereographic(MapUtil.AWIPS_EARTH_RADIUS, + MapUtil.AWIPS_EARTH_RADIUS, this.latitude, this.longitude); + } + + /** + * @return the symbologyData + */ + public Map getSymbologyData() { + return symbologyData; + } + + /** + * @param symbologyData + * the symbologyData to set + */ + public void setSymbologyData(Map symbologyData) { + this.symbologyData = symbologyData; + } + + public Integer getDataValue(Coordinate latLon) { + double[] input = { latLon.x, latLon.y }; + double[] output = new double[2]; + try { + MathTransform mt = MapUtil.getTransformFromLatLon(getCRS()); + + mt.transform(input, 0, output, 0, 1); + } catch (Exception e) { + return null; + } + + int dataValue = 0; + + // ********************************** + // Raster case + // ********************************** + if ("Raster".equals(this.getFormat())) { + + int col = (int) (output[0] / this.getResolution() + (this + .getNy() / 2)); + + int row = (int) (output[1] / this.getResolution() + (this + .getNy() / 2)); + + row = this.getNy() - row - 1; + + if ((row >= 0) && (row < this.getNy()) && (col >= 0) + && (col < this.getNy())) { + dataValue = this.getRawDataValue(row, col); + } + } + + return dataValue; + } + + /** + * @param productVals + * the productVals to set + */ + public void setProductVals( + HashMap>> map) { + this.productVals = map; + } + + public void printSymbologyData() { + System.out + .println("******************************************************************************"); + System.out.println("*** START Symbology Data Contents"); + System.out + .println("******************************************************************************"); + + for (MosaicDataKey key : symbologyData.keySet()) { + System.out.println("Key: " + key); + MosaicDataPoint data = symbologyData.get(key); + HashMap> displayPointData = data + .getDisplayPointData(); + for (Integer pktType : displayPointData.keySet()) { + System.out.println("\tPt Type: " + pktType); + for (SymbologyPoint currPt : displayPointData.get(pktType)) { + System.out.println("\t\t" + currPt); + } + } + + HashMap> displayPacketData = data + .getDisplayPacketData(); + for (Integer pktType : displayPacketData.keySet()) { + System.out.println("\tPkt Type: " + pktType); + for (SymbologyPacket currPkt : displayPacketData.get(pktType)) { + System.out.println("\t\t" + currPkt); + } + } + } + + System.out + .println("******************************************************************************"); + System.out.println("*** END Symbology Data Contents"); + System.out + .println("******************************************************************************"); + } + + /* + * Return the product values map for a type, a storm id, and the desired + * value type + * + * (non-Javadoc) + * + * @see + * com.raytheon.edex.plugin.mosaic.IMosaicRecord#getProductVals(com.raytheon + * .edex.util.mosaic.MosaicConstants.MapValues) + */ + @Override + public String getProductVals(MosaicConstants.MapValues type, String id, + MapValues valueName) { + return productVals.get(type).get(id).get(valueName); + } + + /** + * Return the product values map for the product type and for a certain + * storm id + * + * @param type + * @param id + * @return + */ + public Map getProductValsPerStorm( + MosaicConstants.MapValues type, String id) { + return productVals.get(type).get(id); + } + + /** + * Return the product values map for a certain product type + * + * @param type + * @return + */ + public Map> getProductValsPerType( + MosaicConstants.MapValues type) { + return productVals.get(type); + } + + /** + * Return the entire product values map + * + * @return + */ + public Map>> getProductValsMap() { + return productVals; + } + + /** + * @return the recordVals + */ + public String getProductValsPerRecord(MosaicConstants.MapValues type, + MosaicConstants.MapValues val) { + return recordVals.get(type).get(val); + } + + /** + * @return the recordVals + */ + public HashMap> getRecordVals() { + return recordVals; + } + + /** + * @param recordVals + * the recordVals to set + */ + public void setRecordVals( + HashMap> recordVals) { + this.recordVals = recordVals; + } + + /** + * Search in the map for the storm id and send back the feature if that is + * the case + * + * @param type + * @param id + * @return + */ + public List getFeatures(MosaicConstants.MapValues type, String id) { + List list = new ArrayList(); + for (Map.Entry> entry : productVals + .get(type).entrySet()) { + if (id.trim().equals( + entry.getValue() + .get(MosaicConstants.MapValues.MESO_STORM_ID) + .toString().trim())) { + list.add(entry.getKey()); + } + } + return list; } @Override @@ -794,5 +794,5 @@ public class MosaicRecord extends PersistablePluginDataObject implements public ISpatialObject getSpatialObject() { // TODO Auto-generated method stub return null; - } -} + } +} diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.mosaic/src/gov/noaa/nws/ncep/edex/plugin/mosaic/common/package-info.java b/ncep/gov.noaa.nws.ncep.edex.plugin.mosaic/src/gov/noaa/nws/ncep/edex/plugin/mosaic/common/package-info.java index c6d66da4ab..41a4d5fb8e 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.mosaic/src/gov/noaa/nws/ncep/edex/plugin/mosaic/common/package-info.java +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.mosaic/src/gov/noaa/nws/ncep/edex/plugin/mosaic/common/package-info.java @@ -1,4 +1,4 @@ -/** - * Core classes for radar plugin. Core files include the decoder, record, separator, and writer implementations - */ +/** + * Core classes for radar plugin. Core files include the decoder, record, separator, and writer implementations + */ package gov.noaa.nws.ncep.edex.plugin.mosaic.common; \ No newline at end of file diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.mosaic/src/gov/noaa/nws/ncep/edex/plugin/mosaic/decoder/package-info.java b/ncep/gov.noaa.nws.ncep.edex.plugin.mosaic/src/gov/noaa/nws/ncep/edex/plugin/mosaic/decoder/package-info.java index 5d85283f76..605caf019e 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.mosaic/src/gov/noaa/nws/ncep/edex/plugin/mosaic/decoder/package-info.java +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.mosaic/src/gov/noaa/nws/ncep/edex/plugin/mosaic/decoder/package-info.java @@ -1,4 +1,4 @@ -/** - * Core classes for radar plugin. Core files include the decoder, record, separator, and writer implementations - */ +/** + * Core classes for radar plugin. Core files include the decoder, record, separator, and writer implementations + */ package gov.noaa.nws.ncep.edex.plugin.mosaic.decoder; \ No newline at end of file diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.mosaic/src/gov/noaa/nws/ncep/edex/plugin/mosaic/uengine/package-info.java b/ncep/gov.noaa.nws.ncep.edex.plugin.mosaic/src/gov/noaa/nws/ncep/edex/plugin/mosaic/uengine/package-info.java index 1d3d23fe73..65aaf17643 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.mosaic/src/gov/noaa/nws/ncep/edex/plugin/mosaic/uengine/package-info.java +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.mosaic/src/gov/noaa/nws/ncep/edex/plugin/mosaic/uengine/package-info.java @@ -1,5 +1,5 @@ -/** - * Contains JavaScript oriented μEngine tasks specific to mosaic - * - */ +/** + * Contains JavaScript oriented μEngine tasks specific to mosaic + * + */ package gov.noaa.nws.ncep.edex.plugin.mosaic.uengine; \ No newline at end of file diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.mosaic/src/gov/noaa/nws/ncep/edex/plugin/mosaic/util/level3/Level3Parser.java b/ncep/gov.noaa.nws.ncep.edex.plugin.mosaic/src/gov/noaa/nws/ncep/edex/plugin/mosaic/util/level3/Level3Parser.java index 944dedae95..9ad37f9859 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.mosaic/src/gov/noaa/nws/ncep/edex/plugin/mosaic/util/level3/Level3Parser.java +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.mosaic/src/gov/noaa/nws/ncep/edex/plugin/mosaic/util/level3/Level3Parser.java @@ -1,21 +1,21 @@ -package gov.noaa.nws.ncep.edex.plugin.mosaic.util.level3; - +package gov.noaa.nws.ncep.edex.plugin.mosaic.util.level3; + import gov.noaa.nws.ncep.edex.plugin.mosaic.util.MosaicUtil; -import java.io.ByteArrayInputStream; -import java.io.DataInputStream; -import java.io.File; -import java.io.FileInputStream; -import java.io.IOException; -import java.util.Calendar; -import java.util.regex.Matcher; -import java.util.regex.Pattern; -import java.util.zip.DataFormatException; -import java.util.zip.Inflater; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; +import java.io.ByteArrayInputStream; +import java.io.DataInputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.util.Calendar; +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import java.util.zip.DataFormatException; +import java.util.zip.Inflater; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; /** * Level3Parser is a class that will allow the user to do the following: @@ -32,147 +32,147 @@ import org.apache.commons.logging.LogFactory; * This code has been developed by the SIB for use in the AWIPS2 system. * @author L. Lin * @version 1.0 - */ - -public class Level3Parser { - - private static final int Z_DEFLATED = 8; - - private static final int DEF_WBITS = 15; - - private static final Pattern WMO_PATTERN = Pattern - .compile("([A-Z]{4}[0-9]{2} [A-Z]{4} [0-9]{6})\\x0D\\x0D\\x0A(\\w{6})\\x0D\\x0D\\x0A"); - - /** The logger */ - private final transient Log logger = LogFactory.getLog(getClass()); - - protected DataInputStream theMosaicData = null; - - private ByteArrayInputStream theRawMosaicData = null; - - protected byte[] theRawMosaicByteArray = null; - - // message header - private int theMessageCode; - - private Calendar theMsgTimestamp; - - private int theMsgLength; - - private int theSourceId; - - private int theDestinationId; - - private int numberOfBlocks; - - // product description block - private double theLatitude; - - private double theLongitude; - - private int theHeight; - - private int theProductCode; - - private int theOperationalMode; - - private int theVolumeCoveragePattern; - - private int theSequenceNumber; - - private int theVolumeScanNumber; - - private Calendar theVolScanTime; - - private Calendar theProdGenTime; - - private static short[] productDependentValues; - - private int elevationNumber; - + */ + +public class Level3Parser { + + private static final int Z_DEFLATED = 8; + + private static final int DEF_WBITS = 15; + + private static final Pattern WMO_PATTERN = Pattern + .compile("([A-Z]{4}[0-9]{2} [A-Z]{4} [0-9]{6})\\x0D\\x0D\\x0A(\\w{6})\\x0D\\x0D\\x0A"); + + /** The logger */ + private final transient Log logger = LogFactory.getLog(getClass()); + + protected DataInputStream theMosaicData = null; + + private ByteArrayInputStream theRawMosaicData = null; + + protected byte[] theRawMosaicByteArray = null; + + // message header + private int theMessageCode; + + private Calendar theMsgTimestamp; + + private int theMsgLength; + + private int theSourceId; + + private int theDestinationId; + + private int numberOfBlocks; + + // product description block + private double theLatitude; + + private double theLongitude; + + private int theHeight; + + private int theProductCode; + + private int theOperationalMode; + + private int theVolumeCoveragePattern; + + private int theSequenceNumber; + + private int theVolumeScanNumber; + + private Calendar theVolScanTime; + + private Calendar theProdGenTime; + + private static short[] productDependentValues; + + private int elevationNumber; + private short[] dataLevelThresholds; private int maximumDataLevel; // Use for raster display! - private static int numberOfColumns; - - private SymbologyBlock symbologyBlock; - - private int numberOfMaps; - - /** - * This level3Parser constructor accepts a mosaic file contained within a - * java.io.File object. - * - * @param aMosaic - * A java.io.File object containing a raw mosaic file - * @throws IOException - * If the mosaic head parsing fails, an IO exception is thrown - */ - public Level3Parser(File aMosaic) throws IOException { - int fileSize = (int) aMosaic.length(); - byte[] tempRawMosaicByteArray = new byte[fileSize]; - - FileInputStream mosaicFile = null; - - try { - mosaicFile = new FileInputStream(aMosaic); + private static int numberOfColumns; + + private SymbologyBlock symbologyBlock; + + private int numberOfMaps; + + /** + * This level3Parser constructor accepts a mosaic file contained within a + * java.io.File object. + * + * @param aMosaic + * A java.io.File object containing a raw mosaic file + * @throws IOException + * If the mosaic head parsing fails, an IO exception is thrown + */ + public Level3Parser(File aMosaic) throws IOException { + int fileSize = (int) aMosaic.length(); + byte[] tempRawMosaicByteArray = new byte[fileSize]; + + FileInputStream mosaicFile = null; + + try { + mosaicFile = new FileInputStream(aMosaic); mosaicFile.read(tempRawMosaicByteArray); - } finally { - if (mosaicFile != null) { - mosaicFile.close(); - } - } - init(tempRawMosaicByteArray); - } - - /** - * This level3Parser constructor accepts a mosaic file already converted to a - * byte array. - * - * @param aMosaic - * A byte array containing a raw mosaic file - * @throws IOException - * If the mosaic head parsing fails, an IO exception is thrown - */ + } finally { + if (mosaicFile != null) { + mosaicFile.close(); + } + } + init(tempRawMosaicByteArray); + } + + /** + * This level3Parser constructor accepts a mosaic file already converted to a + * byte array. + * + * @param aMosaic + * A byte array containing a raw mosaic file + * @throws IOException + * If the mosaic head parsing fails, an IO exception is thrown + */ public Level3Parser(byte[] aMosaic) throws IOException { - init(aMosaic); - } - - /** - * @param aMosaic - * @throws IOException - */ - private void init(byte[] aMosaic) throws IOException { - // skip the WMO header if any + init(aMosaic); + } + + /** + * @param aMosaic + * @throws IOException + */ + private void init(byte[] aMosaic) throws IOException { + // skip the WMO header if any String headerSearch = new String(aMosaic, 0, 80); - // decide where the mosaic starts + // decide where the mosaic starts int wmoHeaderSize = findStartMosaicData(headerSearch); - //check if mosaic file compressed or not compressed + //check if mosaic file compressed or not compressed if (isCompressed(aMosaic, wmoHeaderSize)) { - theRawMosaicByteArray = decompressMosaic(aMosaic, wmoHeaderSize); + theRawMosaicByteArray = decompressMosaic(aMosaic, wmoHeaderSize); } else { - theRawMosaicByteArray = new byte[aMosaic.length - wmoHeaderSize]; - System.arraycopy(aMosaic, wmoHeaderSize, theRawMosaicByteArray, 0, - theRawMosaicByteArray.length); - } + theRawMosaicByteArray = new byte[aMosaic.length - wmoHeaderSize]; + System.arraycopy(aMosaic, wmoHeaderSize, theRawMosaicByteArray, 0, + theRawMosaicByteArray.length); + } - //allocate the same length of buf + //allocate the same length of buf theRawMosaicData = new ByteArrayInputStream(theRawMosaicByteArray); //create DataInputStream so that it may be accessible - //to read by the object "theMosaicData" in parseMosaicHeader - theMosaicData = new DataInputStream(theRawMosaicData); - - // parse the header to get constants in message header block - this.parseMosaicHeader(); - if (this.theMessageCode != 2) { - this.parseMosaicMessage(); + //to read by the object "theMosaicData" in parseMosaicHeader + theMosaicData = new DataInputStream(theRawMosaicData); + + // parse the header to get constants in message header block + this.parseMosaicHeader(); + if (this.theMessageCode != 2) { + this.parseMosaicMessage(); } - } - + } + public int getNumberOfMaps() { return numberOfMaps; } @@ -181,433 +181,433 @@ public class Level3Parser { this.numberOfMaps = numberOfMaps; } - /** - * Returns the NEXRAD message code from the level 3 header - * - * @return An integer that can range from -131 to -16 and 0 to 211 - */ - public int getMessageCode() { - return theMessageCode; - } - - /** - * Returns a Date object which represents the time of the message. This is - * for the time of the message only and does not reflect the time of the - * scan or the time the product was generated. - * - * @return A Date object for the time the NEXRAD message was generated - */ - public Calendar getMessageTimestamp() { - return theMsgTimestamp; - } - - /** - * Returns the total length of the message. This is the number of bytes for - * the entire message including this header information being parsed right - * now. - * - * @return A long which will be from 18 to 409586 - */ - public long getMessageLength() { - return theMsgLength; - } - - /** - * Returns an integer reflecting the the sender of the message. - * - * @return A number from 0 to 999 - */ - public int getSourceId() { - return theSourceId; - } - - /** - * Returns an integer reflecting the the destination of the message. - * - * @return A number from 0 to 999 - */ - public int getDestinationId() { - return theDestinationId; - } - - /** - * Returns the latitude of the mosaic site. Positive indicates north, - * negative will indicate south. - * - * @return A latitude in decimal degree between -90.0 to 90.0 - */ - public double getLatitude() { - return theLatitude; - } - - /** - * Returns the longitude of the mosaic site. Positive indicates east, - * negative will indicate west. - * - * @return A longitude in decimal degrees between -180.0 to 180.0 - */ - public double getLongitude() { - return theLongitude; - } - - /** - * Returns the height of the mosaic. This will be in the units feet. - * - * @return An integer from -100 to 11,000 - */ - public int getHeight() { - return theHeight; - } - - /** - * Returns the internal NEXRAD product code of the weather product being - * transmitted. - * - * @return A product code from -131 to -16 and 16 to 131 - */ - public int getProductCode() { - return theProductCode; - } - - /** - * Returns the operational mode the mosaic is currently running in. - * - * @return A operational mode number from 0 to 2 - */ - public int getOperationalMode() { - return theOperationalMode; - } - - /** - * Returns the RDA volum coverage pattern. This indicates the scan strategy - * being used. Not entirely sure what this means in an operational setting. - * - * @return A number 1 to 767 for the volume coverage pattern - */ - public int getVolumeCoveragePattern() { - return theVolumeCoveragePattern; - } - - /** - * Returns the sequence number of the request that generated the NEXRAD - * product. In case the product was requested by an alert condition, it will - * return a -13. - * - * @return A sequence number either -13 or 0 to 32767 - */ - public int getSequenceNumber() { - return theSequenceNumber; - } - - /** - * Returns the mosaic site's internal counter entry. This will start at 1 and - * go to 80. - * - * @return A counter number 1 to 80 - */ - public int getVolumeScanNumber() { - return theVolumeScanNumber; - } - - /** - * Returns a Date object which represents the time the scan was done. This - * is for the time of the volume scan only and does not reflect the time of - * the message or the time the product was generated. - * - * @return A Date object for the time of the volume scan - */ - public Calendar getVolumeScanTime() { - return theVolScanTime; - } - - /** - * Returns a Date object which represents the time the product was - * generated. This is for the time of product generation only and does not - * reflect the time of the message or the time the scan was done. - * - * @return A Date object for the time the product was generated - */ - public Calendar getProductGenerationTime() { - return theProdGenTime; - } - - /** - * Returns the entire raw mosaic message. - * - * @return The mosaic message - */ - public byte[] getRawMosaicData() { - return theRawMosaicByteArray; - } - - public static short getProductDependentValue(int value) { - return productDependentValues[value]; - } - - public short[] getProductDependentValue() { - return productDependentValues; - } - - public short getDataLevelThreshold(int code) { - return dataLevelThresholds[code]; - } - + /** + * Returns the NEXRAD message code from the level 3 header + * + * @return An integer that can range from -131 to -16 and 0 to 211 + */ + public int getMessageCode() { + return theMessageCode; + } + + /** + * Returns a Date object which represents the time of the message. This is + * for the time of the message only and does not reflect the time of the + * scan or the time the product was generated. + * + * @return A Date object for the time the NEXRAD message was generated + */ + public Calendar getMessageTimestamp() { + return theMsgTimestamp; + } + + /** + * Returns the total length of the message. This is the number of bytes for + * the entire message including this header information being parsed right + * now. + * + * @return A long which will be from 18 to 409586 + */ + public long getMessageLength() { + return theMsgLength; + } + + /** + * Returns an integer reflecting the the sender of the message. + * + * @return A number from 0 to 999 + */ + public int getSourceId() { + return theSourceId; + } + + /** + * Returns an integer reflecting the the destination of the message. + * + * @return A number from 0 to 999 + */ + public int getDestinationId() { + return theDestinationId; + } + + /** + * Returns the latitude of the mosaic site. Positive indicates north, + * negative will indicate south. + * + * @return A latitude in decimal degree between -90.0 to 90.0 + */ + public double getLatitude() { + return theLatitude; + } + + /** + * Returns the longitude of the mosaic site. Positive indicates east, + * negative will indicate west. + * + * @return A longitude in decimal degrees between -180.0 to 180.0 + */ + public double getLongitude() { + return theLongitude; + } + + /** + * Returns the height of the mosaic. This will be in the units feet. + * + * @return An integer from -100 to 11,000 + */ + public int getHeight() { + return theHeight; + } + + /** + * Returns the internal NEXRAD product code of the weather product being + * transmitted. + * + * @return A product code from -131 to -16 and 16 to 131 + */ + public int getProductCode() { + return theProductCode; + } + + /** + * Returns the operational mode the mosaic is currently running in. + * + * @return A operational mode number from 0 to 2 + */ + public int getOperationalMode() { + return theOperationalMode; + } + + /** + * Returns the RDA volum coverage pattern. This indicates the scan strategy + * being used. Not entirely sure what this means in an operational setting. + * + * @return A number 1 to 767 for the volume coverage pattern + */ + public int getVolumeCoveragePattern() { + return theVolumeCoveragePattern; + } + + /** + * Returns the sequence number of the request that generated the NEXRAD + * product. In case the product was requested by an alert condition, it will + * return a -13. + * + * @return A sequence number either -13 or 0 to 32767 + */ + public int getSequenceNumber() { + return theSequenceNumber; + } + + /** + * Returns the mosaic site's internal counter entry. This will start at 1 and + * go to 80. + * + * @return A counter number 1 to 80 + */ + public int getVolumeScanNumber() { + return theVolumeScanNumber; + } + + /** + * Returns a Date object which represents the time the scan was done. This + * is for the time of the volume scan only and does not reflect the time of + * the message or the time the product was generated. + * + * @return A Date object for the time of the volume scan + */ + public Calendar getVolumeScanTime() { + return theVolScanTime; + } + + /** + * Returns a Date object which represents the time the product was + * generated. This is for the time of product generation only and does not + * reflect the time of the message or the time the scan was done. + * + * @return A Date object for the time the product was generated + */ + public Calendar getProductGenerationTime() { + return theProdGenTime; + } + + /** + * Returns the entire raw mosaic message. + * + * @return The mosaic message + */ + public byte[] getRawMosaicData() { + return theRawMosaicByteArray; + } + + public static short getProductDependentValue(int value) { + return productDependentValues[value]; + } + + public short[] getProductDependentValue() { + return productDependentValues; + } + + public short getDataLevelThreshold(int code) { + return dataLevelThresholds[code]; + } + private SymbologyBlock readSymbologyBlock(int offset) throws IOException { - - SymbologyBlock symBlock = null; - if (offset != 0) { + + SymbologyBlock symBlock = null; + if (offset != 0) { theMosaicData.reset(); - theMosaicData.skip(offset); + theMosaicData.skip(offset); int divider = theMosaicData.readShort(); int blockId = theMosaicData.readUnsignedShort(); - if ((divider != -1) || (blockId != SymbologyBlock.getBlockId())) { - throw new IOException( - "This does not appear to be a symbology block"); - } + if ((divider != -1) || (blockId != SymbologyBlock.getBlockId())) { + throw new IOException( + "This does not appear to be a symbology block"); + } int blockLen = theMosaicData.readInt(); - byte[] buf = MosaicUtil.subArray(theRawMosaicByteArray, offset, - blockLen); - DataInputStream in = new DataInputStream(new ByteArrayInputStream( - buf)); - - // Skipping the number of layers, layer divider, - // and data layer length + byte[] buf = MosaicUtil.subArray(theRawMosaicByteArray, offset, + blockLen); + DataInputStream in = new DataInputStream(new ByteArrayInputStream( + buf)); + + // Skipping the number of layers, layer divider, + // and data layer length in.skip(8); - symBlock = new SymbologyBlock(in); - } - return symBlock; - } - - /** - * Goes through the mosaic header and reads in all the important fields. - * - * @throws IOException - */ + symBlock = new SymbologyBlock(in); + } + return symBlock; + } + + /** + * Goes through the mosaic header and reads in all the important fields. + * + * @throws IOException + */ private void parseMosaicHeader() throws IOException { - - // Message Header Block + + // Message Header Block theMessageCode = theMosaicData.readUnsignedShort(); - - theMsgTimestamp = Calendar.getInstance(); - theMsgTimestamp.setTimeInMillis(this.createTimestamp(theMosaicData + + theMsgTimestamp = Calendar.getInstance(); + theMsgTimestamp.setTimeInMillis(this.createTimestamp(theMosaicData .readUnsignedShort(), theMosaicData.readInt())); - + theMsgLength = theMosaicData.readInt(); - - // TODO: validate message length here and not everywhere else - + + // TODO: validate message length here and not everywhere else + theSourceId = theMosaicData.readShort(); - + theDestinationId = theMosaicData.readShort(); - + numberOfBlocks = theMosaicData.readShort(); - } - + } + private void parseMosaicMessage() throws IOException { - + // Product Description Block - // skip two bytes for the "BLock Divider" - always equals to -1 + // skip two bytes for the "BLock Divider" - always equals to -1 theMosaicData.skip(2); - - theLatitude = theMosaicData.readInt() * 0.001; + + theLatitude = theMosaicData.readInt() * 0.001; theLongitude = theMosaicData.readInt() * 0.001; - - theHeight = theMosaicData.readShort(); + + theHeight = theMosaicData.readShort(); theProductCode = theMosaicData.readShort(); - - theOperationalMode = theMosaicData.readUnsignedShort(); - theVolumeCoveragePattern = theMosaicData.readUnsignedShort(); - theSequenceNumber = theMosaicData.readShort(); - theVolumeScanNumber = theMosaicData.readUnsignedShort(); - theVolScanTime = Calendar.getInstance(); - theVolScanTime.setTimeInMillis(this.createTimestamp(theMosaicData - .readUnsignedShort(), theMosaicData.readInt())); - theProdGenTime = Calendar.getInstance(); - theProdGenTime.setTimeInMillis(this.createTimestamp(theMosaicData - .readUnsignedShort(), theMosaicData.readInt())); - - productDependentValues = new short[10]; - productDependentValues[0] = theMosaicData.readShort(); + + theOperationalMode = theMosaicData.readUnsignedShort(); + theVolumeCoveragePattern = theMosaicData.readUnsignedShort(); + theSequenceNumber = theMosaicData.readShort(); + theVolumeScanNumber = theMosaicData.readUnsignedShort(); + theVolScanTime = Calendar.getInstance(); + theVolScanTime.setTimeInMillis(this.createTimestamp(theMosaicData + .readUnsignedShort(), theMosaicData.readInt())); + theProdGenTime = Calendar.getInstance(); + theProdGenTime.setTimeInMillis(this.createTimestamp(theMosaicData + .readUnsignedShort(), theMosaicData.readInt())); + + productDependentValues = new short[10]; + productDependentValues[0] = theMosaicData.readShort(); productDependentValues[1] = theMosaicData.readShort(); - - elevationNumber = theMosaicData.readUnsignedShort(); + + elevationNumber = theMosaicData.readUnsignedShort(); productDependentValues[2] = theMosaicData.readShort(); - - dataLevelThresholds = new short[16]; - for (int i = 0; i < dataLevelThresholds.length; i++) { + + dataLevelThresholds = new short[16]; + for (int i = 0; i < dataLevelThresholds.length; i++) { dataLevelThresholds[i] = theMosaicData.readShort(); - } + } maximumDataLevel = theMosaicData.readShort(); - + //for (int i = 3; i < productDependentValues.length; i++) { //In Mosaic, there are only 8 product dependent values - for (int i = 3; i < productDependentValues.length -2; i++) { + for (int i = 3; i < productDependentValues.length -2; i++) { productDependentValues[i] = theMosaicData.readShort(); } - //Use for raster display! + //Use for raster display! numberOfColumns = theMosaicData.readShort(); //Use for raster display! numberOfMaps = theMosaicData.readShort(); - int symbologyBlockOffset = theMosaicData.readInt() * 2; - symbologyBlock = readSymbologyBlock(symbologyBlockOffset); - } - - /** - * Takes the various time and date fields from the mosaic data and creates - * and Date object. - * - * @param aDayCount - * @param aSecondCount - * @return - */ - private long createTimestamp(long aDayCount, long aSecondCount) { - aDayCount--; - long timeStamp = ((aDayCount * 60 * 60 * 24) + aSecondCount) * 1000; - return timeStamp; - } - - /** - * Takes a string from the beginning of the file and determines if the WMO - * header is there. - * - * @param headerInfo - * The string from the beginning of the file that might contain a - * wmo header - * @return The count from the beginning of the file to the actual mosaic data - */ - private int findStartMosaicData(String headerInfo) { - int startOfMosaicData = 0; - Matcher matcher = WMO_PATTERN.matcher(headerInfo); - boolean foundHeader = matcher.find(); - String wmoHeader = ""; + int symbologyBlockOffset = theMosaicData.readInt() * 2; + symbologyBlock = readSymbologyBlock(symbologyBlockOffset); + } + + /** + * Takes the various time and date fields from the mosaic data and creates + * and Date object. + * + * @param aDayCount + * @param aSecondCount + * @return + */ + private long createTimestamp(long aDayCount, long aSecondCount) { + aDayCount--; + long timeStamp = ((aDayCount * 60 * 60 * 24) + aSecondCount) * 1000; + return timeStamp; + } + + /** + * Takes a string from the beginning of the file and determines if the WMO + * header is there. + * + * @param headerInfo + * The string from the beginning of the file that might contain a + * wmo header + * @return The count from the beginning of the file to the actual mosaic data + */ + private int findStartMosaicData(String headerInfo) { + int startOfMosaicData = 0; + Matcher matcher = WMO_PATTERN.matcher(headerInfo); + boolean foundHeader = matcher.find(); + String wmoHeader = ""; String awipsID = ""; - - if (foundHeader) { - wmoHeader = matcher.group(1); - awipsID = matcher.group(2); - startOfMosaicData = matcher.end(); - } - - return startOfMosaicData; - } - - /** - * Checks to see if data at the specified offset of the buffer is the start - * of a compressed block - * - * @param inBuf - * the data buffer - * @param inOff - * the offset into the buffer - * @return true if data is compressed - */ - private boolean isCompressed(byte[] inBuf, int inOff) { - int b0 = inBuf[inOff] & 0xFF; - int b1 = inBuf[inOff + 1] & 0xFF; - if ((b0 & 0xf) == Z_DEFLATED) { - if ((b0 >> 4) + 8 <= DEF_WBITS) { - if ((((b0 << 8) + b1) % 31) == 0) { - return true; - } - } - } - - return false; - } - - /** - * Method to handle compressed mosaic data. If data is not compressed it is - * just copied to the output buffer. - * - * @return The decompressed byte array for the mosaic data - */ - private byte[] decompressMosaic(byte[] inBuf, int offset) { - byte[] outBuf = new byte[4000]; - int inOff = offset; - int outOff = 0; - Inflater decompressor = new Inflater(); + + if (foundHeader) { + wmoHeader = matcher.group(1); + awipsID = matcher.group(2); + startOfMosaicData = matcher.end(); + } + + return startOfMosaicData; + } + + /** + * Checks to see if data at the specified offset of the buffer is the start + * of a compressed block + * + * @param inBuf + * the data buffer + * @param inOff + * the offset into the buffer + * @return true if data is compressed + */ + private boolean isCompressed(byte[] inBuf, int inOff) { + int b0 = inBuf[inOff] & 0xFF; + int b1 = inBuf[inOff + 1] & 0xFF; + if ((b0 & 0xf) == Z_DEFLATED) { + if ((b0 >> 4) + 8 <= DEF_WBITS) { + if ((((b0 << 8) + b1) % 31) == 0) { + return true; + } + } + } + + return false; + } + + /** + * Method to handle compressed mosaic data. If data is not compressed it is + * just copied to the output buffer. + * + * @return The decompressed byte array for the mosaic data + */ + private byte[] decompressMosaic(byte[] inBuf, int offset) { + byte[] outBuf = new byte[4000]; + int inOff = offset; + int outOff = 0; + Inflater decompressor = new Inflater(); int decompressedLen = 0; - - try { - do { - if (inBuf.length - inOff <= 0) { - logger - .error("An error occurred. Apparently, the mosaic product expects more data. Aborting decompress."); - break; - } - - // if compressed then decompress this block - if (isCompressed(inBuf, inOff)) { - decompressor.reset(); - decompressor.setInput(inBuf, inOff, inBuf.length - inOff); - decompressor - .inflate(outBuf, outOff, outBuf.length - outOff); - - inOff += decompressor.getTotalIn(); - outOff += decompressor.getTotalOut(); - - // else just copy the remainder of the data - } else { - int len = inBuf.length - inOff; - len = Math.min(len, outBuf.length - outOff); - System.arraycopy(inBuf, inOff, outBuf, outOff, len); - inOff += len; - outOff += len; - } - - if (decompressedLen == 0) { - decompressedLen = (outBuf[62] << 24 & 0xFF000000) - | (outBuf[63] << 16 & 0x00FF0000) - | (outBuf[64] << 8 & 0x0000FF00) - | (outBuf[65] & 0x000000FF); - - byte[] tmpBuf = outBuf; - outBuf = new byte[decompressedLen]; - outOff = Math.min(decompressedLen, outOff - 54); - System.arraycopy(tmpBuf, 54, outBuf, 0, outOff); - } - - } while (outOff < outBuf.length); - - } catch (DataFormatException e) { - logger - .error("Invalid data format encountered during decompression"); - } finally { - decompressor.end(); - } - - return outBuf; - } - - public int getNumberOfBlocks() { - return numberOfBlocks; - } - - public int getElevationNumber() { - return elevationNumber; - } - - public int getTheSourceId() { - return theSourceId; - } - - public void setTheSourceId(int theSourceId) { - this.theSourceId = theSourceId; - } - - public int getTheDestinationId() { - return theDestinationId; - } - - public void setTheDestinationId(int theDestinationId) { - this.theDestinationId = theDestinationId; - } - - public SymbologyBlock getSymbologyBlock() { - return symbologyBlock; + + try { + do { + if (inBuf.length - inOff <= 0) { + logger + .error("An error occurred. Apparently, the mosaic product expects more data. Aborting decompress."); + break; + } + + // if compressed then decompress this block + if (isCompressed(inBuf, inOff)) { + decompressor.reset(); + decompressor.setInput(inBuf, inOff, inBuf.length - inOff); + decompressor + .inflate(outBuf, outOff, outBuf.length - outOff); + + inOff += decompressor.getTotalIn(); + outOff += decompressor.getTotalOut(); + + // else just copy the remainder of the data + } else { + int len = inBuf.length - inOff; + len = Math.min(len, outBuf.length - outOff); + System.arraycopy(inBuf, inOff, outBuf, outOff, len); + inOff += len; + outOff += len; + } + + if (decompressedLen == 0) { + decompressedLen = (outBuf[62] << 24 & 0xFF000000) + | (outBuf[63] << 16 & 0x00FF0000) + | (outBuf[64] << 8 & 0x0000FF00) + | (outBuf[65] & 0x000000FF); + + byte[] tmpBuf = outBuf; + outBuf = new byte[decompressedLen]; + outOff = Math.min(decompressedLen, outOff - 54); + System.arraycopy(tmpBuf, 54, outBuf, 0, outOff); + } + + } while (outOff < outBuf.length); + + } catch (DataFormatException e) { + logger + .error("Invalid data format encountered during decompression"); + } finally { + decompressor.end(); + } + + return outBuf; + } + + public int getNumberOfBlocks() { + return numberOfBlocks; + } + + public int getElevationNumber() { + return elevationNumber; + } + + public int getTheSourceId() { + return theSourceId; + } + + public void setTheSourceId(int theSourceId) { + this.theSourceId = theSourceId; + } + + public int getTheDestinationId() { + return theDestinationId; + } + + public void setTheDestinationId(int theDestinationId) { + this.theDestinationId = theDestinationId; + } + + public SymbologyBlock getSymbologyBlock() { + return symbologyBlock; } public int getMaximumDataLevel() { @@ -625,6 +625,6 @@ public class Level3Parser { @SuppressWarnings("static-access") public void setNumberOfColumns(int numberOfColumns) { this.numberOfColumns = numberOfColumns; - } - -} + } + +} diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.mosaic/src/gov/noaa/nws/ncep/edex/plugin/mosaic/util/level3/SymbologyBlock.java b/ncep/gov.noaa.nws.ncep.edex.plugin.mosaic/src/gov/noaa/nws/ncep/edex/plugin/mosaic/util/level3/SymbologyBlock.java index 55782faa69..0ef60ba2fc 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.mosaic/src/gov/noaa/nws/ncep/edex/plugin/mosaic/util/level3/SymbologyBlock.java +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.mosaic/src/gov/noaa/nws/ncep/edex/plugin/mosaic/util/level3/SymbologyBlock.java @@ -1,14 +1,14 @@ -package gov.noaa.nws.ncep.edex.plugin.mosaic.util.level3; - -import java.io.DataInputStream; -import java.io.IOException; -import java.util.ArrayList; -import java.util.List; - -import com.raytheon.uf.common.serialization.ISerializableObject; -import com.raytheon.uf.common.serialization.annotations.DynamicSerialize; -import com.raytheon.uf.common.serialization.annotations.DynamicSerializeElement; +package gov.noaa.nws.ncep.edex.plugin.mosaic.util.level3; + +import java.io.DataInputStream; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +import com.raytheon.uf.common.serialization.ISerializableObject; +import com.raytheon.uf.common.serialization.annotations.DynamicSerialize; +import com.raytheon.uf.common.serialization.annotations.DynamicSerializeElement; /** * SymbologyBlock creates an object that will allow the iteration over 1 to 15 @@ -22,160 +22,160 @@ import com.raytheon.uf.common.serialization.annotations.DynamicSerializeElement; * This code has been developed by the SIB for use in the AWIPS2 system. * @author L. Lin * @version 1.0 - */ - -@DynamicSerialize -public class SymbologyBlock extends AbstractBlock implements - ISerializableObject { - - private static final int BLOCK_ID = 1; - - public static int getBlockId() { - return BLOCK_ID; - } - - @DynamicSerializeElement - private Layer[] layers; - - /** - * @param in - * @throws IOException - */ - public SymbologyBlock(DataInputStream in) throws IOException { - super(in); - } - - public SymbologyBlock() { - - } - - /** - * @return the layers - */ - public Layer[] getLayers() { - return layers; - } - - /** - * @param layers - * the layers to set - */ - public void setLayers(Layer[] layers) { - this.layers = layers; - } - - /** - * Parses the symbology block header for all the important information. - * - * @throws IOException - */ - @Override + */ + +@DynamicSerialize +public class SymbologyBlock extends AbstractBlock implements + ISerializableObject { + + private static final int BLOCK_ID = 1; + + public static int getBlockId() { + return BLOCK_ID; + } + + @DynamicSerializeElement + private Layer[] layers; + + /** + * @param in + * @throws IOException + */ + public SymbologyBlock(DataInputStream in) throws IOException { + super(in); + } + + public SymbologyBlock() { + + } + + /** + * @return the layers + */ + public Layer[] getLayers() { + return layers; + } + + /** + * @param layers + * the layers to set + */ + public void setLayers(Layer[] layers) { + this.layers = layers; + } + + /** + * Parses the symbology block header for all the important information. + * + * @throws IOException + */ + @Override protected void init(DataInputStream in) throws IOException { - //numLayers starts at 65th half-word + //numLayers starts at 65th half-word int numLayers = in.readShort(); - List layerList = new ArrayList(); - + List layerList = new ArrayList(); + in.skip(2); // skip first layer divider - NEXT_LAYER: for (int i = 0; i < 1; i++) { - Layer layer = new Layer(); - layer.setLayerId(i); + NEXT_LAYER: for (int i = 0; i < 1; i++) { + Layer layer = new Layer(); + layer.setLayerId(i); List packet = new ArrayList(); int layerSize = in.readInt(); - in.mark(layerSize); - - int packetId; + in.mark(layerSize); + + int packetId; do { - //Raster Opcode at 69th half-word - packetId is the Opcode + //Raster Opcode at 69th half-word - packetId is the Opcode packetId = in.readUnsignedShort(); - if (packetId == 0xFFFF || packetId == 0x0000) { - break; // found layer divider break out of packet loop + if (packetId == 0xFFFF || packetId == 0x0000) { + break; // found layer divider break out of packet loop } - - SymbologyPacket symPacket = PacketFactory.createPacket( - packetId, in); - + + SymbologyPacket symPacket = PacketFactory.createPacket( + packetId, in); + if (symPacket != null) { - packet.add(symPacket); - } else { - in.reset(); - in.skip(layerSize); - if (in.available() >= 2) { - in.skip(2); // skip next layer divider - } - continue NEXT_LAYER; - } + packet.add(symPacket); + } else { + in.reset(); + in.skip(layerSize); + if (in.available() >= 2) { + in.skip(2); // skip next layer divider + } + continue NEXT_LAYER; + } } while (in.available() >= 2); - - layer.setPackets(packet.toArray(new SymbologyPacket[packet - .size()])); - layerList.add(layer); - } - - this.layers = layerList.toArray(new Layer[layerList.size()]); - } - - /** - * This method will return an object representing the layer number passed - * in. This method will examine the layer and create and instance of its - * actual type (i.e. Radial) and return that layer.
- *
- * Important Presently, only radial data is supported. All others - * will return null. - * - * @return An object for that layer - * @throws IOException - */ - public SymbologyPacket getSymbologyLayerContent(int layerNumber) - throws IOException { - SymbologyPacket symLayer = null; - return symLayer; - } - - /** - * Returns the number of symbology layers contained with the block. Most - * likely, this will be 1, but in case a file contains more, they can be - * iterated through. - * - * @return An integer of the number of layers, 1 to 15 - */ - public int getNumLayers() { - if (layers != null) { - return layers.length; - } - return 0; - } - - public int getNumPackets(int l) { - if (layers != null) { - SymbologyPacket[] layer = layers[l].packets; - if (layer != null) { - return layer.length; - } - } - return 0; - } - - public SymbologyPacket[] getPackets(int layer) { - return layers[layer].packets; - } - - public SymbologyPacket getPacket(int layer, int packet) { - return layers[layer].packets[packet]; - } - - @Override - public String toString() { - String s = ""; - if (layers != null) { - for (int l = 0; l < layers.length; l++) { - s += "\nLayer " + (l + 1); - for (SymbologyPacket packet : layers[l].packets) { - s += "\n" + packet; - } - } - } - return s; - } - -} + + layer.setPackets(packet.toArray(new SymbologyPacket[packet + .size()])); + layerList.add(layer); + } + + this.layers = layerList.toArray(new Layer[layerList.size()]); + } + + /** + * This method will return an object representing the layer number passed + * in. This method will examine the layer and create and instance of its + * actual type (i.e. Radial) and return that layer.
+ *
+ * Important Presently, only radial data is supported. All others + * will return null. + * + * @return An object for that layer + * @throws IOException + */ + public SymbologyPacket getSymbologyLayerContent(int layerNumber) + throws IOException { + SymbologyPacket symLayer = null; + return symLayer; + } + + /** + * Returns the number of symbology layers contained with the block. Most + * likely, this will be 1, but in case a file contains more, they can be + * iterated through. + * + * @return An integer of the number of layers, 1 to 15 + */ + public int getNumLayers() { + if (layers != null) { + return layers.length; + } + return 0; + } + + public int getNumPackets(int l) { + if (layers != null) { + SymbologyPacket[] layer = layers[l].packets; + if (layer != null) { + return layer.length; + } + } + return 0; + } + + public SymbologyPacket[] getPackets(int layer) { + return layers[layer].packets; + } + + public SymbologyPacket getPacket(int layer, int packet) { + return layers[layer].packets[packet]; + } + + @Override + public String toString() { + String s = ""; + if (layers != null) { + for (int l = 0; l < layers.length; l++) { + s += "\nLayer " + (l + 1); + for (SymbologyPacket packet : layers[l].packets) { + s += "\n" + packet; + } + } + } + return s; + } + +} diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.mosaic/src/gov/noaa/nws/ncep/edex/plugin/mosaic/util/level3/SymbologyPacket.java b/ncep/gov.noaa.nws.ncep.edex.plugin.mosaic/src/gov/noaa/nws/ncep/edex/plugin/mosaic/util/level3/SymbologyPacket.java index 0e141a523e..e9b9a65959 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.mosaic/src/gov/noaa/nws/ncep/edex/plugin/mosaic/util/level3/SymbologyPacket.java +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.mosaic/src/gov/noaa/nws/ncep/edex/plugin/mosaic/util/level3/SymbologyPacket.java @@ -1,10 +1,10 @@ -package gov.noaa.nws.ncep.edex.plugin.mosaic.util.level3; - -import java.io.DataInputStream; -import java.io.IOException; - -import com.raytheon.uf.common.serialization.annotations.DynamicSerializeElement; +package gov.noaa.nws.ncep.edex.plugin.mosaic.util.level3; + +import java.io.DataInputStream; +import java.io.IOException; + +import com.raytheon.uf.common.serialization.annotations.DynamicSerializeElement; /** * Abstract class that defines the binary values for the various symbology @@ -18,43 +18,43 @@ import com.raytheon.uf.common.serialization.annotations.DynamicSerializeElement; * This code has been developed by the SIB for use in the AWIPS2 system. * @author L. Lin * @version 1.0 - */ - -public abstract class SymbologyPacket { - - @DynamicSerializeElement - protected int packetId; - - public SymbologyPacket(int packetId, DataInputStream in) throws IOException { - this.packetId = packetId; - init(in); - } - - protected SymbologyPacket() { - - } - - protected abstract void init(DataInputStream in) throws IOException; - - /** - * @return the packetId - */ - public int getPacketId() { - return packetId; - } - - /** - * @param packetId - * the packetId to set - */ - public void setPacketId(int packetId) { - this.packetId = packetId; - } - - @Override - public String toString() { - String s = String.format("\tPacket ID: 0x%04X", packetId); - return s; - } - -} + */ + +public abstract class SymbologyPacket { + + @DynamicSerializeElement + protected int packetId; + + public SymbologyPacket(int packetId, DataInputStream in) throws IOException { + this.packetId = packetId; + init(in); + } + + protected SymbologyPacket() { + + } + + protected abstract void init(DataInputStream in) throws IOException; + + /** + * @return the packetId + */ + public int getPacketId() { + return packetId; + } + + /** + * @param packetId + * the packetId to set + */ + public void setPacketId(int packetId) { + this.packetId = packetId; + } + + @Override + public String toString() { + String s = String.format("\tPacket ID: 0x%04X", packetId); + return s; + } + +} diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.mosaic/src/gov/noaa/nws/ncep/edex/plugin/mosaic/util/package-info.java b/ncep/gov.noaa.nws.ncep.edex.plugin.mosaic/src/gov/noaa/nws/ncep/edex/plugin/mosaic/util/package-info.java index fa41f0fba5..f45b2ee224 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.mosaic/src/gov/noaa/nws/ncep/edex/plugin/mosaic/util/package-info.java +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.mosaic/src/gov/noaa/nws/ncep/edex/plugin/mosaic/util/package-info.java @@ -1,4 +1,4 @@ -/** - * Contains utility classes for the mosaic plugin. - */ -package gov.noaa.nws.ncep.edex.plugin.mosaic.util; +/** + * Contains utility classes for the mosaic plugin. + */ +package gov.noaa.nws.ncep.edex.plugin.mosaic.util; diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncairep/gov.noaa.nws.ncep.edex.plugin.ncairep.ecl b/ncep/gov.noaa.nws.ncep.edex.plugin.ncairep/gov.noaa.nws.ncep.edex.plugin.ncairep.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncairep/src/gov/noaa/nws/ncep/edex/plugin/ncairep/NcAirepDecoder.java b/ncep/gov.noaa.nws.ncep.edex.plugin.ncairep/src/gov/noaa/nws/ncep/edex/plugin/ncairep/NcAirepDecoder.java index d6300210d0..a79f0c4912 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncairep/src/gov/noaa/nws/ncep/edex/plugin/ncairep/NcAirepDecoder.java +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncairep/src/gov/noaa/nws/ncep/edex/plugin/ncairep/NcAirepDecoder.java @@ -1,161 +1,161 @@ /** * This software was modified from Raytheon's airep plugin by * NOAA/NWS/NCEP/NCO to order to output point data in HDF5. - **/ -package gov.noaa.nws.ncep.edex.plugin.ncairep; - -import java.util.Calendar; -import java.util.Map; + **/ +package gov.noaa.nws.ncep.edex.plugin.ncairep; -import com.raytheon.edex.exception.DecoderException; -import com.raytheon.edex.plugin.AbstractDecoder; -import com.raytheon.uf.common.dataplugin.PluginDataObject; -import com.raytheon.uf.common.dataplugin.PluginException; +import java.util.Calendar; +import java.util.Map; + +import com.raytheon.edex.exception.DecoderException; +import com.raytheon.edex.plugin.AbstractDecoder; +import com.raytheon.uf.common.dataplugin.PluginDataObject; +import com.raytheon.uf.common.dataplugin.PluginException; import com.raytheon.uf.common.pointdata.spatial.AircraftObsLocation; -import com.raytheon.uf.common.time.DataTime; -import com.raytheon.uf.edex.decodertools.time.TimeTools; -import com.raytheon.uf.edex.wmo.message.WMOHeader; +import com.raytheon.uf.common.time.DataTime; +import com.raytheon.uf.edex.decodertools.time.TimeTools; +import com.raytheon.uf.edex.wmo.message.WMOHeader; import gov.noaa.nws.ncep.common.dataplugin.ncairep.NcAirepRecord; import gov.noaa.nws.ncep.edex.plugin.ncairep.decoder.NcAIREPWeather; import gov.noaa.nws.ncep.edex.plugin.ncairep.decoder.NcAirepParser; - -/** - * Decoder strategy for Aicraft Report (AIREP) observation data. Most common - * usage is as follows. - * NcAIREPDecoder dec = new NcAIREPDecoder(); - * dec.setMessage(messageData); - * while(dec.hasNext()) - * { - * PluginDataObject r = dec.decode(); - * // do something with record. - * } - * - * - * - *
- * 
- * SOFTWARE HISTORY
- * 
- * Date         Ticket#    Engineer    Description
- * ------------ ---------- ----------- --------------------------
+
+/**
+ * Decoder strategy for Aicraft Report (AIREP) observation data. Most common
+ * usage is as follows. 
+ *   NcAIREPDecoder dec = new NcAIREPDecoder();
+ *   dec.setMessage(messageData);
+ *   while(dec.hasNext())
+ *   {
+ *      PluginDataObject r = dec.decode();
+ *      // do something with record.
+ *   }
+ * 
+ * 
+ * 
+ * 
+ * 
+ * SOFTWARE HISTORY
+ * 
+ * Date         Ticket#    Engineer    Description
+ * ------------ ---------- ----------- --------------------------
  * 04/27/2011              F.J.Yen       Initial creation from airep.
- * 09/19/2011    286       Q.Zhou      Modified populateRecord to add 8 new fields for TB, IC and SK.
- * 
- * - * @author F. J. Yen - * @version 1.0 - */ -public class NcAirepDecoder extends AbstractDecoder { - // Name of the plugin controlling this decoder. - private final String PLUGIN_NAME; - - public static class NcAirepDecoderInput { - public WMOHeader wmoHeader; - - public String report; - } - - /** - * @param pluginName - * Name that identifies this decoder. - * @throws DecoderException - */ - public NcAirepDecoder(String pluginName) throws DecoderException { - PLUGIN_NAME = pluginName; - } - - /** - * Get the next decoded data record. - * - * @param input - * the decoder input - * @return One record of decoded data. - * @throws DecoderException - * Thrown if no data is available. - */ - public PluginDataObject[] decode(NcAirepDecoderInput input) + * 09/19/2011 286 Q.Zhou Modified populateRecord to add 8 new fields for TB, IC and SK. + *
+ * + * @author F. J. Yen + * @version 1.0 + */ +public class NcAirepDecoder extends AbstractDecoder { + // Name of the plugin controlling this decoder. + private final String PLUGIN_NAME; + + public static class NcAirepDecoderInput { + public WMOHeader wmoHeader; + + public String report; + } + + /** + * @param pluginName + * Name that identifies this decoder. + * @throws DecoderException + */ + public NcAirepDecoder(String pluginName) throws DecoderException { + PLUGIN_NAME = pluginName; + } + + /** + * Get the next decoded data record. + * + * @param input + * the decoder input + * @return One record of decoded data. + * @throws DecoderException + * Thrown if no data is available. + */ + public PluginDataObject[] decode(NcAirepDecoderInput input) throws DecoderException { - - PluginDataObject[] reports = null; - - NcAirepRecord report = null; + + PluginDataObject[] reports = null; + + NcAirepRecord report = null; String traceId = null; System.out.println("====" +new String(input.report)); //input.report ); - - try { - // traceId = getTraceId(hdrMap); - logger.debug(traceId + "- NcAirepDecoder.decode()"); + + try { + // traceId = getTraceId(hdrMap); + logger.debug(traceId + "- NcAirepDecoder.decode()"); report = populateRecord(new NcAirepParser(input.report)); - - if (report != null) { - report.setTraceId(traceId); + + if (report != null) { + report.setTraceId(traceId); report.setPluginName(PLUGIN_NAME); - - try { - report.constructDataURI(); - } catch (PluginException e) { - throw new DecoderException("Error constructing dataURI", e); + + try { + report.constructDataURI(); + } catch (PluginException e) { + throw new DecoderException("Error constructing dataURI", e); } - - reports = new PluginDataObject[] { report }; - } - - } catch (Exception e) { - logger.error(traceId + "- Error in NcAirepDecoder", e); - } finally { - if (reports == null) { - reports = new PluginDataObject[0]; - } + + reports = new PluginDataObject[] { report }; + } + + } catch (Exception e) { + logger.error(traceId + "- Error in NcAirepDecoder", e); + } finally { + if (reports == null) { + reports = new PluginDataObject[0]; + } } - - return reports; - - } - - /** - * @param parser - * The reccon parser that contains the decoded data. - * @return The populated record. - */ - private NcAirepRecord populateRecord(NcAirepParser parser) { - - NcAirepRecord record = null; + + return reports; + + } + + /** + * @param parser + * The reccon parser that contains the decoded data. + * @return The populated record. + */ + private NcAirepRecord populateRecord(NcAirepParser parser) { + + NcAirepRecord record = null; AircraftObsLocation location = null; - - if (parser != null) { - // If there is no obstime, don't bother going further. + + if (parser != null) { + // If there is no obstime, don't bother going further. Calendar oTime = parser.getObservationTime(); - + if (oTime != null) { - - record = new NcAirepRecord(); - location = new AircraftObsLocation(); - - record.setTimeObs(oTime); - record.setRefHour(TimeTools.copyToNearestHour(oTime)); - DataTime dataTime = new DataTime(oTime); - record.setDataTime(dataTime); - - record.setReportData(parser.getReportData()); - location.setStationId(parser.getAircraftId()); - record.setReportType(parser.getReportType()); - location.setLatitude(parser.getLatitude()); - location.setLongitude(parser.getLongitude()); - location.setFlightLevel(parser.getFlightLevel()); - location.setLocation(parser.getLatitude(), parser - .getLongitude()); + + record = new NcAirepRecord(); + location = new AircraftObsLocation(); + + record.setTimeObs(oTime); + record.setRefHour(TimeTools.copyToNearestHour(oTime)); + DataTime dataTime = new DataTime(oTime); + record.setDataTime(dataTime); + + record.setReportData(parser.getReportData()); + location.setStationId(parser.getAircraftId()); + record.setReportType(parser.getReportType()); + location.setLatitude(parser.getLatitude()); + location.setLongitude(parser.getLongitude()); + location.setFlightLevel(parser.getFlightLevel()); + location.setLocation(parser.getLatitude(), parser + .getLongitude()); record.setTemp(parser.getTemperature()); record.setWindDirection(parser.getWindDirection()); - record.setWindSpeed(parser.getWindSpeed()); - record.setLocation(location); - - NcAIREPWeather wx = parser.getWeatherGroup(); - if (wx != null) { - record.setFlightConditions(wx.getFlightConditions()); - record.setFlightHazard(wx.getHazard()); - record.setFlightWeather(wx.getWeather()); + record.setWindSpeed(parser.getWindSpeed()); + record.setLocation(location); + + NcAIREPWeather wx = parser.getWeatherGroup(); + if (wx != null) { + record.setFlightConditions(wx.getFlightConditions()); + record.setFlightHazard(wx.getHazard()); + record.setFlightWeather(wx.getWeather()); } //record.setWeatherCondition(parser.getWeatherCondition()); @@ -168,26 +168,26 @@ public class NcAirepDecoder extends AbstractDecoder { record.setSkyBaseHeight(parser.getSkyBaseHeight()); record.setSkyTopHeight(parser.getSkyTopHeight()); record.setSuspectTimeFlag(parser.getSuspectTimeFlag()); - - } - } - return record; - } - - /** - * - * @param hdrMap - * @return - */ - String getTraceId(Map hdrMap) { - String traceId = null; - if (hdrMap != null) { - Object o = hdrMap.get("CamelFileName"); - if (o != null) { - traceId = (String) o; - } - } - return traceId; - } - -} + + } + } + return record; + } + + /** + * + * @param hdrMap + * @return + */ + String getTraceId(Map hdrMap) { + String traceId = null; + if (hdrMap != null) { + Object o = hdrMap.get("CamelFileName"); + if (o != null) { + traceId = (String) o; + } + } + return traceId; + } + +} diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncairep/src/gov/noaa/nws/ncep/edex/plugin/ncairep/NcAirepSeparator.java b/ncep/gov.noaa.nws.ncep.edex.plugin.ncairep/src/gov/noaa/nws/ncep/edex/plugin/ncairep/NcAirepSeparator.java index f5b9369236..3cae3698a3 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncairep/src/gov/noaa/nws/ncep/edex/plugin/ncairep/NcAirepSeparator.java +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncairep/src/gov/noaa/nws/ncep/edex/plugin/ncairep/NcAirepSeparator.java @@ -1,149 +1,149 @@ /** * This software was modified from Raytheon's airep plugin by * NOAA/NWS/NCEP/NCO to order to output point data in HDF5. - **/ -package gov.noaa.nws.ncep.edex.plugin.ncairep; - + **/ +package gov.noaa.nws.ncep.edex.plugin.ncairep; + import java.util.ArrayList; -import java.util.List; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + import com.raytheon.edex.esb.Headers; import com.raytheon.edex.plugin.AbstractRecordSeparator; -import com.raytheon.uf.edex.wmo.message.WMOHeader; +import com.raytheon.uf.edex.wmo.message.WMOHeader; import gov.noaa.nws.ncep.edex.plugin.ncairep.NcAirepDecoder.NcAirepDecoderInput; - -/** - * The NcAirepSeparator takes a potential weather message and attempts to - * determine the WMO header and data type of the enclosed data. Normal usage is - * to create an instance and set the message data using the setData method. When - * complete the separator contains the WMO header, the message data with all - * leading data up to and including the WMO header removed. In addition all - * extraneous spaces and carriage control has been removed. The message reports - * are available using hasNext to determine if data is available, and the - * getRecord method to retrieve the actual report data. Note that this separator - * implementation should not be used on mixed text/binary weather messages. - * - *
- * 
- * SOFTWARE HISTORY
- * 
- * Date         Ticket#    Engineer    Description
- * ------------ ---------- ----------- --------------------------
+
+/**
+ * The NcAirepSeparator takes a potential weather message and attempts to
+ * determine the WMO header and data type of the enclosed data. Normal usage is
+ * to create an instance and set the message data using the setData method. When
+ * complete the separator contains the WMO header, the message data with all
+ * leading data up to and including the WMO header removed. In addition all
+ * extraneous spaces and carriage control has been removed. The message reports
+ * are available using hasNext to determine if data is available, and the
+ * getRecord method to retrieve the actual report data. Note that this separator
+ * implementation should not be used on mixed text/binary weather messages.
+ * 
+ * 
+ * 
+ * SOFTWARE HISTORY
+ * 
+ * Date         Ticket#    Engineer    Description
+ * ------------ ---------- ----------- --------------------------
  * 04/27/2011              F.J.Yen       Initial creation from airep.
  * 09/19/2011    286       Q.Zhou      Put new regex pattern. Separate message according to new patterns.
  * 									   Modified separate(), separateNcAIREP() and separateARPARS().
  * 									   Added addDayInTime(). 
  * 									   Removed DecoderTools.cleanData(), stripHeader().
  * 									   Handle amdar in the airep separator.		
- * 10/04/2011    286       Q.Zhou      Move addDayInTime() to the parser	
- * 
- * - * @author F. J. Yen - * @version 1.0 - */ -public class NcAirepSeparator extends AbstractRecordSeparator { - /** The logger */ - private Log logger = LogFactory.getLog(getClass()); - -// private static final String SPLITCHARS = "[=;$][^\\r\\n]*[\\r\\n]+"; -// private static final String AIREP_HDR = "AIREP[\\r\\n]+"; + * 10/04/2011 286 Q.Zhou Move addDayInTime() to the parser + *
+ * + * @author F. J. Yen + * @version 1.0 + */ +public class NcAirepSeparator extends AbstractRecordSeparator { + /** The logger */ + private Log logger = LogFactory.getLog(getClass()); + +// private static final String SPLITCHARS = "[=;$][^\\r\\n]*[\\r\\n]+"; +// private static final String AIREP_HDR = "AIREP[\\r\\n]+"; private static final String SPLITMSG = "\\r\\n\\x03"; // \\x03 - private static final String AIREP_MSG_LINE = "(ARP|ARS)"; + private static final String AIREP_MSG_LINE = "(ARP|ARS)"; private static final String HEADER_TIME = "[0-9]{6}"; - - private WMOHeader wmoHeader = null; - - private byte[] messageData = null; - - private List reports = null; - - private int currentReport = -1; - + + private WMOHeader wmoHeader = null; + + private byte[] messageData = null; + + private List reports = null; + + private int currentReport = -1; + public static NcAirepSeparator separate(byte[] data, Headers headers) { - NcAirepSeparator ncAirepSeparator = new NcAirepSeparator(); - ncAirepSeparator.setData(data, headers); - return ncAirepSeparator; - } - - /** - * Get the next record. This implementation returns the record as a String. - * - * @return The next observation record as a String. - */ - public NcAirepDecoderInput next() { - NcAirepDecoderInput data = null; - if (hasNext()) { - data = new NcAirepDecoderInput(); - data.report = reports.get(currentReport++); - data.wmoHeader = wmoHeader; - } - return data; - } - - /** - * Is there another record available? - * - * @return Is there another record available? - */ - @Override - public boolean hasNext() { - return ((reports != null) && (reports.size() > 0) && (currentReport < reports - .size())); - } - - /** - * Set the raw message data and invoke the internal message separation - * process. - * - * @param rawMessage - * The raw weather text message. - */ - @Override - public void setData(byte[] rawMessage, Headers headers) { - currentReport = -1; + NcAirepSeparator ncAirepSeparator = new NcAirepSeparator(); + ncAirepSeparator.setData(data, headers); + return ncAirepSeparator; + } + + /** + * Get the next record. This implementation returns the record as a String. + * + * @return The next observation record as a String. + */ + public NcAirepDecoderInput next() { + NcAirepDecoderInput data = null; + if (hasNext()) { + data = new NcAirepDecoderInput(); + data.report = reports.get(currentReport++); + data.wmoHeader = wmoHeader; + } + return data; + } + + /** + * Is there another record available? + * + * @return Is there another record available? + */ + @Override + public boolean hasNext() { + return ((reports != null) && (reports.size() > 0) && (currentReport < reports + .size())); + } + + /** + * Set the raw message data and invoke the internal message separation + * process. + * + * @param rawMessage + * The raw weather text message. + */ + @Override + public void setData(byte[] rawMessage, Headers headers) { + currentReport = -1; reports = null; - //rawMessage = DecoderTools.cleanData(rawMessage); - if (rawMessage != null) { - wmoHeader = new WMOHeader(rawMessage); + //rawMessage = DecoderTools.cleanData(rawMessage); + if (rawMessage != null) { + wmoHeader = new WMOHeader(rawMessage); if (wmoHeader.isValid()) { - //messageData = DecoderTools.stripWMOHeader(rawMessage, IDecoderConstants.WMO_HEADER); - - separate(new String(rawMessage)); - } - } - - if ((reports != null) && (reports.size() > 0)) { - currentReport = 0; - } else { - logger.info("No reports found in data"); - } - } - - /** - * Get the message data. - * - * @return The cleaned message data. - */ - public byte[] getMessage() { - return messageData; - } - - /** - * Get the WMO header associated with the message data. - * - * @return The WMO header. - */ - public WMOHeader getWmoHeader() { - return wmoHeader; - } - - private void separate(String message) { + //messageData = DecoderTools.stripWMOHeader(rawMessage, IDecoderConstants.WMO_HEADER); + + separate(new String(rawMessage)); + } + } + + if ((reports != null) && (reports.size() > 0)) { + currentReport = 0; + } else { + logger.info("No reports found in data"); + } + } + + /** + * Get the message data. + * + * @return The cleaned message data. + */ + public byte[] getMessage() { + return messageData; + } + + /** + * Get the WMO header associated with the message data. + * + * @return The WMO header. + */ + public WMOHeader getWmoHeader() { + return wmoHeader; + } + + private void separate(String message) { reports = new ArrayList(); int start = 0; @@ -166,27 +166,27 @@ public class NcAirepSeparator extends AbstractRecordSeparator { separateARPARS(subMsg); //amdar also goes to here } start = matcher.end(); - } - } - - /** + } + } + + /** * Separate amdar data that comes in with AMDAR header line. * 097 ^M * UDAS02 BABJ 190113^M * AMDAR 1901^M - * LVR CNFNXL 3315N 11850E 190113 F226 MS123 278/038 TB/ S//1=^M - */ + * LVR CNFNXL 3315N 11850E 190113 F226 MS123 278/038 TB/ S//1=^M + */ private void separateNcAMDAR(String message) { // find header time. Later append it to observation String headerTime = findHeaderTime(message); - // find body msg - Pattern pattern = Pattern.compile("="); - Matcher matcher = pattern.matcher(message); - - int start = 0; - int stop = message.length(); - while (matcher.find()) { + // find body msg + Pattern pattern = Pattern.compile("="); + Matcher matcher = pattern.matcher(message); + + int start = 0; + int stop = message.length(); + while (matcher.find()) { stop = matcher.start() + 1; String observation = message.substring(start, stop); @@ -195,12 +195,12 @@ public class NcAirepSeparator extends AbstractRecordSeparator { int iAir = observation.indexOf("AMDAR"); observation = observation.substring(iAir + 10); } - + reports.add( headerTime + " AMDAR " +observation); - - start = matcher.end(); - } - } + + start = matcher.end(); + } + } /** * Separate airep data that comes in with AIREP header line. @@ -234,41 +234,41 @@ public class NcAirepSeparator extends AbstractRecordSeparator { start = matcher.end(); } } - - /** - * Separate airep data that does not have the AIREP header line. This data + + /** + * Separate airep data that does not have the AIREP header line. This data * is checked to ensure that it contains ARP/ARS report start data. * The ending of the ARP/ARS report could be "=", or only has one ARP/ARS report. * 706 ^M * UAPA01 KWBC 200000^M - * ARP UAL559 3401N 13421W 2351 F360 MS52 260/025KT= - */ - private void separateARPARS(String message) { + * ARP UAL559 3401N 13421W 2351 F360 MS52 260/025KT= + */ + private void separateARPARS(String message) { // find header time. Later append it to observation String headerTime = findHeaderTime(message); // find body msg - ArrayList bodyRecords = new ArrayList(); - Pattern pattern = Pattern.compile(AIREP_MSG_LINE); - Matcher matcher = pattern.matcher(message); + ArrayList bodyRecords = new ArrayList(); + Pattern pattern = Pattern.compile(AIREP_MSG_LINE); + Matcher matcher = pattern.matcher(message); - while (matcher.find()) { - bodyRecords.add(matcher.start()); - } - - for (int i = 0; i < bodyRecords.size(); i++) { - String observation = null; - if (i < bodyRecords.size() - 1) { - observation = message.substring(bodyRecords.get(i), - bodyRecords.get(i + 1)).trim(); - } else { - observation = message.substring(bodyRecords.get(i)).trim(); + while (matcher.find()) { + bodyRecords.add(matcher.start()); + } + + for (int i = 0; i < bodyRecords.size(); i++) { + String observation = null; + if (i < bodyRecords.size() - 1) { + observation = message.substring(bodyRecords.get(i), + bodyRecords.get(i + 1)).trim(); + } else { + observation = message.substring(bodyRecords.get(i)).trim(); } - - reports.add( headerTime +" " +observation); - } - bodyRecords = null; - } + + reports.add( headerTime +" " +observation); + } + bodyRecords = null; + } /* * find header time for each report @@ -284,6 +284,6 @@ public class NcAirepSeparator extends AbstractRecordSeparator { return headerTime; } - -} + +} diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncairep/src/gov/noaa/nws/ncep/edex/plugin/ncairep/decoder/NcAIREPObsType.java b/ncep/gov.noaa.nws.ncep.edex.plugin.ncairep/src/gov/noaa/nws/ncep/edex/plugin/ncairep/decoder/NcAIREPObsType.java index 57fbbe894e..1f3c135e06 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncairep/src/gov/noaa/nws/ncep/edex/plugin/ncairep/decoder/NcAIREPObsType.java +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncairep/src/gov/noaa/nws/ncep/edex/plugin/ncairep/decoder/NcAIREPObsType.java @@ -1,66 +1,66 @@ /** * This software was modified from Raytheon's airep plugin by * NOAA/NWS/NCEP/NCO to order to output point data in HDF5. - **/ -package gov.noaa.nws.ncep.edex.plugin.ncairep.decoder; - -import java.util.HashMap; - -import com.raytheon.uf.edex.decodertools.core.IDecoderConstants; - -/** - * TODO Change this to a Java 1.5 enum. - * - *
- * SOFTWARE HISTORY
- * Date           PTR#     Engineer      Description
- * ------------   -------- ------------- -------------------------------------
- * 04/27/2011              F. J. Yen     Initial creation from airep
- * 
- */ -public class NcAIREPObsType -{ - private static final HashMap AIREP_TYPES = - new HashMap(); - static { - AIREP_TYPES.put("ARP",IDecoderConstants.AIREP_NORMAL); - AIREP_TYPES.put("AIREP",IDecoderConstants.AIREP_NORMAL); - AIREP_TYPES.put("ARS",IDecoderConstants.AIREP_SPECIAL); - } - - private final String obsType; - - /** - * - * @param aType - */ - private NcAIREPObsType(String aType) { - obsType = aType; - } // NcAIREPObsType() - - /** - * - * @param anObsType - * @return - */ - public static NcAIREPObsType obsTypeFactory(String anObsType) { - NcAIREPObsType obsTypeInstance = null; - - if(AIREP_TYPES.containsKey(anObsType)) { - obsTypeInstance = new NcAIREPObsType(anObsType); - } - return obsTypeInstance; - } // obsTypeFactory() - - /** - * - * @return - */ - public Integer getValue() { - return AIREP_TYPES.get(obsType); - } // getValue() - - public String getType() { - return obsType; - } -} + **/ +package gov.noaa.nws.ncep.edex.plugin.ncairep.decoder; + +import java.util.HashMap; + +import com.raytheon.uf.edex.decodertools.core.IDecoderConstants; + +/** + * TODO Change this to a Java 1.5 enum. + * + *
+ * SOFTWARE HISTORY
+ * Date           PTR#     Engineer      Description
+ * ------------   -------- ------------- -------------------------------------
+ * 04/27/2011              F. J. Yen     Initial creation from airep
+ * 
+ */ +public class NcAIREPObsType +{ + private static final HashMap AIREP_TYPES = + new HashMap(); + static { + AIREP_TYPES.put("ARP",IDecoderConstants.AIREP_NORMAL); + AIREP_TYPES.put("AIREP",IDecoderConstants.AIREP_NORMAL); + AIREP_TYPES.put("ARS",IDecoderConstants.AIREP_SPECIAL); + } + + private final String obsType; + + /** + * + * @param aType + */ + private NcAIREPObsType(String aType) { + obsType = aType; + } // NcAIREPObsType() + + /** + * + * @param anObsType + * @return + */ + public static NcAIREPObsType obsTypeFactory(String anObsType) { + NcAIREPObsType obsTypeInstance = null; + + if(AIREP_TYPES.containsKey(anObsType)) { + obsTypeInstance = new NcAIREPObsType(anObsType); + } + return obsTypeInstance; + } // obsTypeFactory() + + /** + * + * @return + */ + public Integer getValue() { + return AIREP_TYPES.get(obsType); + } // getValue() + + public String getType() { + return obsType; + } +} diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncairep/src/gov/noaa/nws/ncep/edex/plugin/ncairep/decoder/NcAIREPWeather.java b/ncep/gov.noaa.nws.ncep.edex.plugin.ncairep/src/gov/noaa/nws/ncep/edex/plugin/ncairep/decoder/NcAIREPWeather.java index b9a9e55762..72fc3e79c4 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncairep/src/gov/noaa/nws/ncep/edex/plugin/ncairep/decoder/NcAIREPWeather.java +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncairep/src/gov/noaa/nws/ncep/edex/plugin/ncairep/decoder/NcAIREPWeather.java @@ -1,143 +1,143 @@ /** * This software was modified from Raytheon's airep plugin by * NOAA/NWS/NCEP/NCO to order to output point data in HDF5. - **/ -package gov.noaa.nws.ncep.edex.plugin.ncairep.decoder; + **/ +package gov.noaa.nws.ncep.edex.plugin.ncairep.decoder; import gov.noaa.nws.ncep.common.tools.IDecoderConstantsN; - -/*a - * TODO Enter a description here. - * - *
- * SOFTWARE HISTORY
- * Date           PTR#     Engineer      Description
+
+/*a
+ * TODO Enter a description here.
+ * 
+ * 
+ * SOFTWARE HISTORY
+ * Date           PTR#     Engineer      Description
  * ------------   -------- ------------- -------------------------------------
- * 04/27/2011              F.J.Yen       Initial creation from airep.
+ * 04/27/2011              F.J.Yen       Initial creation from airep.
  * 
* * * @author F. J. Yen - * @version 1.0 - */ -public class NcAIREPWeather -{ - private static final String VALID_CHARS = "/0123456789"; - private static final int WX_LENGTH = 3; - - private static final int WX_HAZARD = 0; - private static final int WX_WEATHER = 1; + * @version 1.0 + */ +public class NcAIREPWeather +{ + private static final String VALID_CHARS = "/0123456789"; + private static final int WX_LENGTH = 3; + + private static final int WX_HAZARD = 0; + private static final int WX_WEATHER = 1; private static final int WX_FLIGHT = 2; - private static final int IMISSD = IDecoderConstantsN.INTEGER_MISSING; - - private final String theRawData; - - // Decoded flight hazards - See table 3.3 + private static final int IMISSD = IDecoderConstantsN.INTEGER_MISSING; + + private final String theRawData; + + // Decoded flight hazards - See table 3.3 // private Integer theHazard = null; - private Integer theHazard = IMISSD; + private Integer theHazard = IMISSD; // private Integer theWeather = null; - private Integer theWeather = IMISSD; + private Integer theWeather = IMISSD; // private Integer theFlightConditions = null; - private Integer theFlightConditions = IMISSD; - - /** - * - * @param aType - */ - public NcAIREPWeather(String aWeatherGroup) - { - theRawData = aWeatherGroup; - decodeElement(); - } // NcAIREPWeather() - - public Integer getHazard() - { - return theHazard; - } // getHazard() - - public Integer getWeather() - { - return theWeather; - } // getWeather() - - public Integer getFlightConditions() - { - return theFlightConditions; - } // getFlightConditions() - - - //*********************************************** - // Table 3.3. AIREP Hazards (H). - // Code Figure Explanation - // 0 None - // 1 Light Turbulence - // 2 Moderate Turbulence - // 3 Severe Turbulence - // 4 Extreme Turbulence - // 5 Trace of Icing - // 6 Light Icing - // 7 Moderate Icing - // 8 Severe Icing - // 9 Hail - // - // Table 3.4. AIREP Weather (W). - // Code Figure Explanation - // 0 Clear - // 1 Scattered Clouds - // 2 Broken Clouds - // 3 Continuous Layers - // 4 Lightning - // 5 Drizzle - // 6 Continuous Rain - // 7 Continuous Snow - // 8 Rain or Snow Showers - // 9 Thunderstorms - // - // - // Table 3.5. AIREP Flight Conditions (FC). - // Code Figure Explanation - // 0 Clear - // 1 Above Clouds (tops less than 10,000 ft) - // 2 Above Clouds (tops 10,000 to 18,000 ft) - // 3 Above Clouds (tops over 18,000 ft) - // 4 Below Clouds (bases less than 10,000 ft) - // 5 Below Clouds (bases 10,000 to 18,000 ft) - // 6 Below Clouds (bases above 18,000 ft) - // 7 Between Broken or Overcast Layers - // 8 In Clouds - // 9 In and Out of Clouds - //*********************************************** - - private void decodeElement() - { - if(theRawData.length() == WX_LENGTH) - { - int pos = VALID_CHARS.indexOf(theRawData.charAt(WX_HAZARD)); - if(pos >= 0) - { - theHazard = pos-1; - } - pos = VALID_CHARS.indexOf(theRawData.charAt(WX_WEATHER)); - if(pos >= 0) - { - theWeather = pos-1; - } - pos = VALID_CHARS.indexOf(theRawData.charAt(WX_FLIGHT)); - if(pos >= 0) - { - theFlightConditions = pos-1; - } - } - } // decodeElement() - - public String toString() - { - StringBuffer retData = new StringBuffer(); - retData.append((theHazard >= 0) ? String.valueOf(theHazard) : "/"); - retData.append((theWeather >= 0) ? String.valueOf(theWeather) : "/"); - retData.append((theFlightConditions >= 0) ? String.valueOf(theFlightConditions) : "/"); - - - return retData.toString(); - } // toString() -} + private Integer theFlightConditions = IMISSD; + + /** + * + * @param aType + */ + public NcAIREPWeather(String aWeatherGroup) + { + theRawData = aWeatherGroup; + decodeElement(); + } // NcAIREPWeather() + + public Integer getHazard() + { + return theHazard; + } // getHazard() + + public Integer getWeather() + { + return theWeather; + } // getWeather() + + public Integer getFlightConditions() + { + return theFlightConditions; + } // getFlightConditions() + + + //*********************************************** + // Table 3.3. AIREP Hazards (H). + // Code Figure Explanation + // 0 None + // 1 Light Turbulence + // 2 Moderate Turbulence + // 3 Severe Turbulence + // 4 Extreme Turbulence + // 5 Trace of Icing + // 6 Light Icing + // 7 Moderate Icing + // 8 Severe Icing + // 9 Hail + // + // Table 3.4. AIREP Weather (W). + // Code Figure Explanation + // 0 Clear + // 1 Scattered Clouds + // 2 Broken Clouds + // 3 Continuous Layers + // 4 Lightning + // 5 Drizzle + // 6 Continuous Rain + // 7 Continuous Snow + // 8 Rain or Snow Showers + // 9 Thunderstorms + // + // + // Table 3.5. AIREP Flight Conditions (FC). + // Code Figure Explanation + // 0 Clear + // 1 Above Clouds (tops less than 10,000 ft) + // 2 Above Clouds (tops 10,000 to 18,000 ft) + // 3 Above Clouds (tops over 18,000 ft) + // 4 Below Clouds (bases less than 10,000 ft) + // 5 Below Clouds (bases 10,000 to 18,000 ft) + // 6 Below Clouds (bases above 18,000 ft) + // 7 Between Broken or Overcast Layers + // 8 In Clouds + // 9 In and Out of Clouds + //*********************************************** + + private void decodeElement() + { + if(theRawData.length() == WX_LENGTH) + { + int pos = VALID_CHARS.indexOf(theRawData.charAt(WX_HAZARD)); + if(pos >= 0) + { + theHazard = pos-1; + } + pos = VALID_CHARS.indexOf(theRawData.charAt(WX_WEATHER)); + if(pos >= 0) + { + theWeather = pos-1; + } + pos = VALID_CHARS.indexOf(theRawData.charAt(WX_FLIGHT)); + if(pos >= 0) + { + theFlightConditions = pos-1; + } + } + } // decodeElement() + + public String toString() + { + StringBuffer retData = new StringBuffer(); + retData.append((theHazard >= 0) ? String.valueOf(theHazard) : "/"); + retData.append((theWeather >= 0) ? String.valueOf(theWeather) : "/"); + retData.append((theFlightConditions >= 0) ? String.valueOf(theFlightConditions) : "/"); + + + return retData.toString(); + } // toString() +} diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncairep/src/gov/noaa/nws/ncep/edex/plugin/ncairep/decoder/NcAirepParser.java b/ncep/gov.noaa.nws.ncep.edex.plugin.ncairep/src/gov/noaa/nws/ncep/edex/plugin/ncairep/decoder/NcAirepParser.java index 1798b37175..e6cebf204b 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncairep/src/gov/noaa/nws/ncep/edex/plugin/ncairep/decoder/NcAirepParser.java +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncairep/src/gov/noaa/nws/ncep/edex/plugin/ncairep/decoder/NcAirepParser.java @@ -1,36 +1,36 @@ /** * This software was modified from Raytheon's airep plugin by * NOAA/NWS/NCEP/NCO to order to output point data in HDF5. - **/ -package gov.noaa.nws.ncep.edex.plugin.ncairep.decoder; + **/ +package gov.noaa.nws.ncep.edex.plugin.ncairep.decoder; import java.util.ArrayList; import java.util.Calendar; import java.util.HashMap; import java.util.Map; -import java.util.StringTokenizer; -import java.util.regex.Pattern; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - -import com.raytheon.uf.edex.decodertools.aircraft.AircraftFlightLevel; -import com.raytheon.uf.edex.decodertools.aircraft.AircraftLatitude; -import com.raytheon.uf.edex.decodertools.aircraft.AircraftLongitude; -import com.raytheon.uf.edex.decodertools.aircraft.AircraftRemarks; -import com.raytheon.uf.edex.decodertools.core.BasePoint; -import com.raytheon.uf.edex.decodertools.core.PlatformLocationProxy; +import java.util.StringTokenizer; +import java.util.regex.Pattern; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import com.raytheon.uf.edex.decodertools.aircraft.AircraftFlightLevel; +import com.raytheon.uf.edex.decodertools.aircraft.AircraftLatitude; +import com.raytheon.uf.edex.decodertools.aircraft.AircraftLongitude; +import com.raytheon.uf.edex.decodertools.aircraft.AircraftRemarks; +import com.raytheon.uf.edex.decodertools.core.BasePoint; +import com.raytheon.uf.edex.decodertools.core.PlatformLocationProxy; import com.raytheon.uf.edex.decodertools.time.TimeTools; -import gov.noaa.nws.ncep.common.tools.IDecoderConstantsN; - -/** - * The NcAirepParser takes a String that should contain a single AIREP observation - * and parses the individual elements of the observation, and performs a decode - * of those elements. The data is made available to clients through a set of get - * methods for each data item. - *
- * SOFTWARE HISTORY
- * Date           PTR#     Engineer      Description
+import gov.noaa.nws.ncep.common.tools.IDecoderConstantsN;
+
+/**
+ * The NcAirepParser takes a String that should contain a single AIREP observation
+ * and parses the individual elements of the observation, and performs a decode
+ * of those elements. The data is made available to clients through a set of get
+ * methods for each data item.
+ * 
+ * SOFTWARE HISTORY
+ * Date           PTR#     Engineer      Description
  * ------------   -------- ------------- -------------------------------------
  * 04/27/2011              F.J.Yen       Initial creation from airep.  Change
  * 										 temperature and windSpeed from Double to
@@ -45,22 +45,22 @@ import gov.noaa.nws.ncep.common.tools.IDecoderConstantsN;
  * 09/29/2011    286       Q.Zhou        Modified decodeTempreture to work for both amdar and airep.
  * 10/04/2011    286       Q.Zhou        Removed wmoHeader parameter. Modified splitLatLon() to solve 3606S 15942E
  * 10/17/2011    286       Q.Zhou        Added WX_COND_WORDS and checking.
- * 11/01/2011    286       Q.Zhou        Added month and year to decodetime
- * 
- */ -public class NcAirepParser -{ - /** The logger */ - private Log logger = LogFactory.getLog(getClass()); - - private static final boolean WANT_DELIMITERS = false; - // Only going to delimit aireps with spaces and carriage control. - private static final String DELIMITER = " ;$=\r\n"; - - private static final int MAX_WIND_SPEED = 500; - - // Once set the obs data cannot be changed! - private final String reportData; + * 11/01/2011 286 Q.Zhou Added month and year to decodetime + *
+ */ +public class NcAirepParser +{ + /** The logger */ + private Log logger = LogFactory.getLog(getClass()); + + private static final boolean WANT_DELIMITERS = false; + // Only going to delimit aireps with spaces and carriage control. + private static final String DELIMITER = " ;$=\r\n"; + + private static final int MAX_WIND_SPEED = 500; + + // Once set the obs data cannot be changed! + private final String reportData; private static final float RMISSD = IDecoderConstantsN.UAIR_FLOAT_MISSING; private static final int IMISSD = IDecoderConstantsN.INTEGER_MISSING; @@ -115,49 +115,49 @@ public class NcAirepParser WX_COND_WORDS.put("UNKN", "UNKN"); WX_COND_WORDS.put("UNKNOWN", "UNKN"); } - - // - // Determine if the input data corresponds to a hour minute time - // - // i.e. 0000 to 2359 - // - // "^([0..1]{1}[0..9]{1})|(2[0..3]{1})[0..5]{1}[0..9]{1}" - // - // Start of token "^" - // 0 or 1 followed by 0 to 9 or - // 2 followed by 0 to 3 - // - // 0 to 5 followed by 0 to 9 - // End of token "$" - // - final Pattern TIME_Airep = Pattern.compile("[0-9]{4}"); - final Pattern TIME_Amdar = Pattern.compile("[0-9]{6}"); - //Pattern.compile("^(([0-1]{1}[0-9]{1})|(2[0-3]{1}))([0-5]{1}[0-9]{1})$"); - - final Pattern WX_GROUP = Pattern.compile("^[0-9/]{3}$"); - // Two different flight level patterns - final Pattern FL_SHORT = Pattern.compile("F\\d{3}"); - final Pattern FL_LONG = Pattern.compile("FL\\d{3}"); - - final Pattern TEMP_SHORT = Pattern.compile("^(M|P)\\d{2}"); - final Pattern TEMP_LONG = Pattern.compile("^(MS|PS)\\d{2}"); + + // + // Determine if the input data corresponds to a hour minute time + // + // i.e. 0000 to 2359 + // + // "^([0..1]{1}[0..9]{1})|(2[0..3]{1})[0..5]{1}[0..9]{1}" + // + // Start of token "^" + // 0 or 1 followed by 0 to 9 or + // 2 followed by 0 to 3 + // + // 0 to 5 followed by 0 to 9 + // End of token "$" + // + final Pattern TIME_Airep = Pattern.compile("[0-9]{4}"); + final Pattern TIME_Amdar = Pattern.compile("[0-9]{6}"); + //Pattern.compile("^(([0-1]{1}[0-9]{1})|(2[0-3]{1}))([0-5]{1}[0-9]{1})$"); + + final Pattern WX_GROUP = Pattern.compile("^[0-9/]{3}$"); + // Two different flight level patterns + final Pattern FL_SHORT = Pattern.compile("F\\d{3}"); + final Pattern FL_LONG = Pattern.compile("FL\\d{3}"); + + final Pattern TEMP_SHORT = Pattern.compile("^(M|P)\\d{2}"); + final Pattern TEMP_LONG = Pattern.compile("^(MS|PS)\\d{2}"); final Pattern TEMP_SHORT2 = Pattern.compile("^(M|P)\\d{3}"); final Pattern TEMP_LONG2 = Pattern.compile("^(MS|PS)\\d{3}"); - - // Parsed and/or decoded observation elements. - private ArrayList theElements = new ArrayList(); - - private String aircraftId = null; - private String reportType = null; - private Double latitude = null; - private Double longitude = null; - private Calendar observationTime = null; + + // Parsed and/or decoded observation elements. + private ArrayList theElements = new ArrayList(); + + private String aircraftId = null; + private String reportType = null; + private Double latitude = null; + private Double longitude = null; + private Calendar observationTime = null; private AircraftFlightLevel flightLevel = null; - private Float temperature = RMISSD; + private Float temperature = RMISSD; private NcAIREPWeather weatherGroup = null; private Float windDirection = RMISSD; - private Float windSpeed = RMISSD; - private AircraftRemarks rptRemarks = null; + private Float windSpeed = RMISSD; + private AircraftRemarks rptRemarks = null; private String turbInten; private String turbType; @@ -169,45 +169,45 @@ public class NcAirepParser private int skyTopHeight; private String suspectTimeFlag; private String headerTime; - - /** - * Create the parser for and decode an observation from a String. - * @param anObservation A string containing the observation. - */ + + /** + * Create the parser for and decode an observation from a String. + * @param anObservation A string containing the observation. + */ public NcAirepParser(String anObservation) { reportData = anObservation; - parseElements(); - } - - /** - * Create the parser for and decode an observation from a String. - * @param anObservation A string containing the observation. - */ - public NcAirepParser(byte [] anObservation) { + parseElements(); + } + + /** + * Create the parser for and decode an observation from a String. + * @param anObservation A string containing the observation. + */ + public NcAirepParser(byte [] anObservation) { reportData = new String(anObservation); - parseElements(); - } - - /** - * Expose the internal parsed elements for testing. - * @return A collection of the parsed elements. - */ - ArrayList parseElementsTestPoint() { - ArrayList retElements = new ArrayList(); - retElements.addAll(theElements); - return retElements; - } - - /** - * Parse the AIREP observation into individual elements. - * Note that during parse or decode the order of the elements does not - * change. The only exception to this rule is that all elements identified - * as comments/remarks are placed at the end of the observation elements. - */ + parseElements(); + } + + /** + * Expose the internal parsed elements for testing. + * @return A collection of the parsed elements. + */ + ArrayList parseElementsTestPoint() { + ArrayList retElements = new ArrayList(); + retElements.addAll(theElements); + return retElements; + } + + /** + * Parse the AIREP observation into individual elements. + * Note that during parse or decode the order of the elements does not + * change. The only exception to this rule is that all elements identified + * as comments/remarks are placed at the end of the observation elements. + */ private void parseElements() { - - StringTokenizer st = - new StringTokenizer(reportData,DELIMITER,WANT_DELIMITERS); + + StringTokenizer st = + new StringTokenizer(reportData,DELIMITER,WANT_DELIMITERS); // parse first record in st --headerTime if (st.hasMoreTokens()) @@ -221,73 +221,73 @@ public class NcAirepParser if (temp.equalsIgnoreCase("AMDAR") && st.hasMoreTokens()) st.nextToken(); } - - // Now get the elements - while(st.hasMoreTokens()) { + + // Now get the elements + while(st.hasMoreTokens()) { String s = st.nextToken(); if (s!= null ) theElements.add(s); //System.out.println("**********theElements "+s); - -// if(!DELIMITER.equals(s)) { -// Object o = NcAIREPObsType.obsTypeFactory(s); -// if((o != null)&&(reportType == null)) { -// reportType = ((NcAIREPObsType) o).getValue(); -// } else { -// theElements.add(s); -// } -// } + +// if(!DELIMITER.equals(s)) { +// Object o = NcAIREPObsType.obsTypeFactory(s); +// if((o != null)&&(reportType == null)) { +// reportType = ((NcAIREPObsType) o).getValue(); +// } else { +// theElements.add(s); +// } +// } } decodeReportType(); - decodeHazard(); - decodeMID(); - splitLatLon(); - decodeLatitude(); - decodeLongitude(); + decodeHazard(); + decodeMID(); + splitLatLon(); + decodeLatitude(); + decodeLongitude(); decodeTime(); - - // By now we should have found lat lon information. If not then - // run back through the data to see if there is a waypoint. If we - // get to the time information, quit, it's not there. - if((latitude == null)&&(longitude == null)) - { - for(int i = 0;i < theElements.size();i++) - { - Object o = theElements.get(i); - if(o instanceof String) - { - BasePoint wayPoint = PlatformLocationProxy.lookup((String)o,null); - // found a waypoint - if(wayPoint != null) - { - latitude = AircraftLatitude.createLatitude(wayPoint); + + // By now we should have found lat lon information. If not then + // run back through the data to see if there is a waypoint. If we + // get to the time information, quit, it's not there. + if((latitude == null)&&(longitude == null)) + { + for(int i = 0;i < theElements.size();i++) + { + Object o = theElements.get(i); + if(o instanceof String) + { + BasePoint wayPoint = PlatformLocationProxy.lookup((String)o,null); + // found a waypoint + if(wayPoint != null) + { + latitude = AircraftLatitude.createLatitude(wayPoint); longitude = AircraftLongitude.createLongitude(wayPoint); - - theElements.set(i,latitude); - theElements.add(i+1,longitude); - break; - } - } - else if(o instanceof Calendar) - { - break; - } - } - } - // Need to have lat / lon data - if((latitude == null)||(longitude == null)) { - observationTime = null; - return; - } - decodeFlightLevel(); - decodeTemperature(); - decodeWeatherGroup(); - decodeWinds(); - collectRemarks(); - determineAircraftId(); - } // parseElements() + + theElements.set(i,latitude); + theElements.add(i+1,longitude); + break; + } + } + else if(o instanceof Calendar) + { + break; + } + } + } + // Need to have lat / lon data + if((latitude == null)||(longitude == null)) { + observationTime = null; + return; + } + decodeFlightLevel(); + decodeTemperature(); + decodeWeatherGroup(); + decodeWinds(); + collectRemarks(); + determineAircraftId(); + } // parseElements() /* * get ReportType @@ -298,44 +298,44 @@ public class NcAirepParser reportType = "AIREP"; else if (reportData.contains("AMDAR")) reportType = "AMDAR"; - } - /** - * When the primary decode is complete the aircraft ID should be the only - * data left prior to the latitude/longitude data. If found then set this - * data as the id. - */ - private void determineAircraftId() - { - for(int i = 0;i < theElements.size();i++) - { - Object o = theElements.get(i); - if(o instanceof Double) - { - break; - } - if(o instanceof String) - { - aircraftId = (String) o; - break; - } - } - } // determineAircraftId() - - /** - * Determine if a latitude/longitude group is run-together or may be a - * navigation waypoint. As an example - *
5802N02015W
- * is split into 2 groups - *
5802N 02015W
- * which is then processed normally. - */ - private void splitLatLon() + } + /** + * When the primary decode is complete the aircraft ID should be the only + * data left prior to the latitude/longitude data. If found then set this + * data as the id. + */ + private void determineAircraftId() { - int latlonCnt =0; - for(int i = 0;i < theElements.size();i++) - { - Object o = theElements.get(i); - if(o !=null && o instanceof String) + for(int i = 0;i < theElements.size();i++) + { + Object o = theElements.get(i); + if(o instanceof Double) + { + break; + } + if(o instanceof String) + { + aircraftId = (String) o; + break; + } + } + } // determineAircraftId() + + /** + * Determine if a latitude/longitude group is run-together or may be a + * navigation waypoint. As an example + *
5802N02015W
+ * is split into 2 groups + *
5802N 02015W
+ * which is then processed normally. + */ + private void splitLatLon() + { + int latlonCnt =0; + for(int i = 0;i < theElements.size();i++) + { + Object o = theElements.get(i); + if(o !=null && o instanceof String) { String s = theElements.get(i).toString().trim(); //e.g. UAE412 3606S 15942E 1150 F410 MS47 281/75= @@ -364,71 +364,71 @@ public class NcAirepParser } } } - } - } + } + } } // for - - } // splitLatLon() - - /** - * Attempt to locate and decode the latitude information within this - * AIREP observation. The decode object replaces the string data within - * the observation elements collection. - */ - private void decodeLatitude() - { - if(latitude == null) - { - for(int i = 0;i < theElements.size();i++) - { - Object o = theElements.get(i); - if(o instanceof String) - { - AircraftLatitude lat = AircraftLatitude.aircraftLatitudeFactory((String) o); - if(lat != null) - { - theElements.set(i,lat); - latitude = lat.decodeLatitude(); - break; - } - } - } - } - } // decodeLatitude() - - /** - * Attempt to locate and decode the longitude information within this - * AIREP observation. The decode object replaces the string data within - * the observation elements collection. - */ - private void decodeLongitude() - { - if(longitude == null) - { - for(int i = 0;i < theElements.size();i++) - { - Object o = theElements.get(i); - if(o instanceof String) - { - AircraftLongitude lon = AircraftLongitude.aircraftLongitudeFactory((String) o); - if(lon != null) - { - theElements.set(i,lon); - longitude = lon.decodeLongitude(); - break; - } - } - } - } - } // decodeLongitude() + + } // splitLatLon() - - /** - * Attempt to locate and decode the time information within this - * AIREP observation. The decode object replaces the string data within - * the observation elements collection. - */ - private void decodeTime() + /** + * Attempt to locate and decode the latitude information within this + * AIREP observation. The decode object replaces the string data within + * the observation elements collection. + */ + private void decodeLatitude() + { + if(latitude == null) + { + for(int i = 0;i < theElements.size();i++) + { + Object o = theElements.get(i); + if(o instanceof String) + { + AircraftLatitude lat = AircraftLatitude.aircraftLatitudeFactory((String) o); + if(lat != null) + { + theElements.set(i,lat); + latitude = lat.decodeLatitude(); + break; + } + } + } + } + } // decodeLatitude() + + /** + * Attempt to locate and decode the longitude information within this + * AIREP observation. The decode object replaces the string data within + * the observation elements collection. + */ + private void decodeLongitude() + { + if(longitude == null) + { + for(int i = 0;i < theElements.size();i++) + { + Object o = theElements.get(i); + if(o instanceof String) + { + AircraftLongitude lon = AircraftLongitude.aircraftLongitudeFactory((String) o); + if(lon != null) + { + theElements.set(i,lon); + longitude = lon.decodeLongitude(); + break; + } + } + } + } + } // decodeLongitude() + + + /** + * Attempt to locate and decode the time information within this + * AIREP observation. The decode object replaces the string data within + * the observation elements collection. + */ + private void decodeTime() { Calendar oTime = TimeTools.getSystemCalendar(); @@ -456,14 +456,14 @@ public class NcAirepParser issuTime.set(Calendar.MINUTE,minute); issuTime.set(Calendar.SECOND,0); issuTime.set(Calendar.MILLISECOND,0); - - for(int i = 1; i < theElements.size();i++) //start from second record - { - Object o = theElements.get(i); - if(o instanceof String) - { - String s = (String) o; - if(TIME_Airep.matcher(s).matches()) + + for(int i = 1; i < theElements.size();i++) //start from second record + { + Object o = theElements.get(i); + if(o instanceof String) + { + String s = (String) o; + if(TIME_Airep.matcher(s).matches()) { hour = Integer.parseInt(s.substring(0, 2)); minute = Integer.parseInt(s.substring(2, 4)); @@ -501,13 +501,13 @@ public class NcAirepParser observationTime.add(Calendar.DAY_OF_MONTH,-1); } //System.out.println("***********time2 "+observationTime.getTime()); - - theElements.set(i,observationTime); - break; - - } - } - } + + theElements.set(i,observationTime); + break; + + } + } + } private Calendar checkDayInTime (Calendar obs, Calendar issue) { @@ -538,190 +538,190 @@ public class NcAirepParser return obs; } - - private void decodeFlightLevel() { - for(int i = 0;i < theElements.size();i++) { - Object o = theElements.get(i); - if(o instanceof String) { - String s = (String) o; - if(FL_SHORT.matcher(s).matches()) { - double fLevel = Integer.parseInt(s.substring(1))*100; - - flightLevel = new AircraftFlightLevel(fLevel); - theElements.set(i,flightLevel); - break; - } else if(FL_LONG.matcher(s).matches()) { - double fLevel = Integer.parseInt(s.substring(1))*100; - - flightLevel = new AircraftFlightLevel(fLevel); - theElements.set(i,flightLevel); - break; - } - } - } - } - - /** + + private void decodeFlightLevel() { + for(int i = 0;i < theElements.size();i++) { + Object o = theElements.get(i); + if(o instanceof String) { + String s = (String) o; + if(FL_SHORT.matcher(s).matches()) { + double fLevel = Integer.parseInt(s.substring(1))*100; + + flightLevel = new AircraftFlightLevel(fLevel); + theElements.set(i,flightLevel); + break; + } else if(FL_LONG.matcher(s).matches()) { + double fLevel = Integer.parseInt(s.substring(1))*100; + + flightLevel = new AircraftFlightLevel(fLevel); + theElements.set(i,flightLevel); + break; + } + } + } + } + + /** * Decode the temperature information in this observation. - * e.g. Airep MS45, AMDAR MS456 - */ - private void decodeTemperature() - { - for(int i = 0;i < theElements.size();i++) - { - Object o = theElements.get(i); - if(o instanceof String) + * e.g. Airep MS45, AMDAR MS456 + */ + private void decodeTemperature() + { + for(int i = 0;i < theElements.size();i++) + { + Object o = theElements.get(i); + if(o instanceof String) { float temp = RMISSD; - temperature = RMISSD; + temperature = RMISSD; String s = (String) o; - - if(TEMP_LONG.matcher(s).matches() ||TEMP_LONG2.matcher(s).matches()) - { + + if(TEMP_LONG.matcher(s).matches() ||TEMP_LONG2.matcher(s).matches()) + { String ss = s.substring(2); - - if(!"//".equals(ss)) + + if(!"//".equals(ss)) { if (ss.length()>2) ss = ss.substring(0, 2) + "." + ss.substring(2); - temp = Float.parseFloat(ss); - - if("MS".equals(s.substring(0,2))) - { - temp *= -1; + temp = Float.parseFloat(ss); + + if("MS".equals(s.substring(0,2))) + { + temp *= -1; } - temperature = new Float(temp); - theElements.set(i,temperature); - } - break; - } - else if(TEMP_SHORT.matcher(s).matches() ||TEMP_SHORT2.matcher(s).matches()) - { - String ss = s.substring(1); - if(!"//".equals(ss)) + temperature = new Float(temp); + theElements.set(i,temperature); + } + break; + } + else if(TEMP_SHORT.matcher(s).matches() ||TEMP_SHORT2.matcher(s).matches()) + { + String ss = s.substring(1); + if(!"//".equals(ss)) { if (ss.length()>2) ss = ss.substring(0, 2) + "." + ss.substring(2); - temp = Float.parseFloat(ss); - - if("M".equals(s.substring(0,1))) - { - temp *= -1; + temp = Float.parseFloat(ss); + + if("M".equals(s.substring(0,1))) + { + temp *= -1; } - temperature = new Float(temp); - theElements.set(i,temperature); - } - break; - } - } - } - } - - /** - * Attempt to locate and decode the 3 digit hazards and weather group. - */ - private void decodeWeatherGroup() - { - for(int i = 0;i < theElements.size();i++) - { - Object o = theElements.get(i); - if(o instanceof String) - { - String s = (String) o; - if(s.length() == 3) - { - if(WX_GROUP.matcher(s).find()) - { - weatherGroup = new NcAIREPWeather(s); - theElements.set(i,weatherGroup); - break; - } - } - } - } - } // decodeWeatherGroup() - - /** - * Decode the wind data group in the following forms. - * 16080 - * 160080 - * 163/080 - * 163/080KT - * @throws DecodeException if winds are bad - */ + temperature = new Float(temp); + theElements.set(i,temperature); + } + break; + } + } + } + } + + /** + * Attempt to locate and decode the 3 digit hazards and weather group. + */ + private void decodeWeatherGroup() + { + for(int i = 0;i < theElements.size();i++) + { + Object o = theElements.get(i); + if(o instanceof String) + { + String s = (String) o; + if(s.length() == 3) + { + if(WX_GROUP.matcher(s).find()) + { + weatherGroup = new NcAIREPWeather(s); + theElements.set(i,weatherGroup); + break; + } + } + } + } + } // decodeWeatherGroup() + + /** + * Decode the wind data group in the following forms. + * 16080 + * 160080 + * 163/080 + * 163/080KT + * @throws DecodeException if winds are bad + */ private void decodeWinds() { - - // By now we should have found the flight level data. - int i = 0; - for(;i < theElements.size();i++) { - if(theElements.get(i) instanceof AircraftFlightLevel) { - i++; - break; - } - } // for() + + // By now we should have found the flight level data. + int i = 0; + for(;i < theElements.size();i++) { + if(theElements.get(i) instanceof AircraftFlightLevel) { + i++; + break; + } + } // for() - - for(;i < theElements.size();i++) { + + for(;i < theElements.size();i++) { Object o = theElements.get(i); windSpeed = RMISSD; - windDirection = RMISSD; - if(o instanceof String) { - String s = (String) o; - if(s != null) { - if(s.startsWith("M") || s.startsWith("P") || s.startsWith("/")) { - // These are temperatures. Some temps are - // being reported as 5 digits (MS513 which is -51.3) - continue; - } else if(s.endsWith("KT")) { - s = s.substring(0,s.length() - 2); - } else if(s.endsWith("KTS")) { - s = s.substring(0,s.length() - 3); - } - int solidusPos = s.indexOf("/"); - + windDirection = RMISSD; + if(o instanceof String) { + String s = (String) o; + if(s != null) { + if(s.startsWith("M") || s.startsWith("P") || s.startsWith("/")) { + // These are temperatures. Some temps are + // being reported as 5 digits (MS513 which is -51.3) + continue; + } else if(s.endsWith("KT")) { + s = s.substring(0,s.length() - 2); + } else if(s.endsWith("KTS")) { + s = s.substring(0,s.length() - 3); + } + int solidusPos = s.indexOf("/"); + String windDir = null; - String windSpd = null; - if(solidusPos > 0) { - windDir = s.substring(0,solidusPos); - windSpd = s.substring(solidusPos+1); - } else if(s.length() == 5) { - windDir = s.substring(0,2) + "0"; - windSpd = s.substring(2); - } else if(s.length() == 6) { - windDir = s.substring(0,3); - windSpd = s.substring(3); - } - if((windSpd != null)&&(windDir != null)) { + String windSpd = null; + if(solidusPos > 0) { + windDir = s.substring(0,solidusPos); + windSpd = s.substring(solidusPos+1); + } else if(s.length() == 5) { + windDir = s.substring(0,2) + "0"; + windSpd = s.substring(2); + } else if(s.length() == 6) { + windDir = s.substring(0,3); + windSpd = s.substring(3); + } + if((windSpd != null)&&(windDir != null)) { try { - float value = Float.parseFloat(windSpd); - if((value >= 0)&&(value < MAX_WIND_SPEED)) { - windSpeed = value; - } else { - windSpeed = RMISSD; + float value = Float.parseFloat(windSpd); + if((value >= 0)&&(value < MAX_WIND_SPEED)) { + windSpeed = value; + } else { + windSpeed = RMISSD; } - + - value = Float.parseFloat(windDir); - // Database constraint is 1 - 360. - if (value == 0) - { - value = 360; - } + value = Float.parseFloat(windDir); + // Database constraint is 1 - 360. + if (value == 0) + { + value = 360; + } windDirection = value; // windDirection.fromDegree(value); - // Database constraint is 1 - 360. - - theElements.set(i,windDirection); - theElements.add(i+1,windSpeed); - } - catch(Exception nothing) { - String msg = String.format("Error decoding winds: [%s] [%s]",windSpd,windDir); - - logger.info(msg); - } - break; + // Database constraint is 1 - 360. + + theElements.set(i,windDirection); + theElements.add(i+1,windSpeed); + } + catch(Exception nothing) { + String msg = String.format("Error decoding winds: [%s] [%s]",windSpd,windDir); + + logger.info(msg); + } + break; } if (windDir ==null) { windDirection = RMISSD; @@ -730,16 +730,16 @@ public class NcAirepParser if (windSpeed ==null) { windSpeed = RMISSD; theElements.set(i,windSpeed); - } - } + } + } } if (windDirection ==null) { windDirection = RMISSD; theElements.set(i,windDirection); - } - } - } + } + } + } /* Observed hazard in TB, SK, IC order in Airep. Observed appear once at most for each. * e.g. airep: ARP ASA858 3948N 13807W 2354 F370 MS53 263/046KT TB SMTH= @@ -873,172 +873,172 @@ public class NcAirepParser } } - - /** - * The "MID" section only occurs in the AIREP remarks section. So if we find - * a "MID" token we create a remarks object using all data from the MID token - * to the end of the data. - */ - private void decodeMID() - { - for(int i = 0;i < theElements.size();i++) - { - Object o = theElements.get(i); - if(o instanceof String) - { - String s = (String) o; - if("MID".equals(s)) - { - AircraftRemarks remarks = new AircraftRemarks(s); - for(i++;i < theElements.size();) - { - remarks.addRemarks(" "); - remarks.addRemarks((String) theElements.get(i)); - theElements.remove(i); - } - rptRemarks = remarks; - } - } - } - } - - /** - * Iterate over any remaining data left in the observation that is AFTER - * the time information. These data are bundled together as a remarks - * string that will be appended to the end of the observation data. - */ - private void collectRemarks() { - boolean timeFound = false; - int i = 0; - for(;i < theElements.size();i++) { - Object o = theElements.get(i); - if(timeFound = (o instanceof Calendar)) { - break; - } - } // for - if(timeFound) { - StringBuffer remarksBuffer = new StringBuffer(); - for(;i < theElements.size();i++) { - Object o = theElements.get(i); - if(o instanceof String) { - theElements.remove(i); - i--; - remarksBuffer.append(o); - remarksBuffer.append(" "); - } - } // for - if(remarksBuffer.length() > 0) { - if(rptRemarks != null) { - remarksBuffer.insert(0," "); - remarksBuffer.insert(0,rptRemarks.getValue()); - } - rptRemarks = new AircraftRemarks(remarksBuffer.toString()); - } - } - } // collectRemarks() - - - /** - * @return the reportData - */ - public String getReportData() { - return reportData; - } - - /** - * @return the reportType - */ - public String getReportType() { - return reportType; - } - - /** - * @param reportType the reportType to set - */ - public void setReportType(String reportType) { - this.reportType = reportType; - } - - /** - * Get the decoded Aircraft id. - * @return The decoded Aircraft id. - */ - public String getAircraftId() - { - return aircraftId; - } // getAircraftId() - - /** - * Get the decoded Latitude instance. - * @return The decoded Latitude - */ - public Double getLatitude() - { - return latitude; - } // getLatitude() - - /** - * Get the decoded Longitude instance. - * @return The decoded Longitude. - */ - public Double getLongitude() - { - return longitude; - } // getLongitude() - - /** - * Get the AIREP observation time. - * @return The AIREP observation time. - */ - public Calendar getObservationTime() - { - return observationTime; - } // getObservationTime() - - /** - * Get the decoded aircraft flight level data. - * @return The decoded aircraft flight level data. - */ - public Integer getFlightLevel() { + + /** + * The "MID" section only occurs in the AIREP remarks section. So if we find + * a "MID" token we create a remarks object using all data from the MID token + * to the end of the data. + */ + private void decodeMID() + { + for(int i = 0;i < theElements.size();i++) + { + Object o = theElements.get(i); + if(o instanceof String) + { + String s = (String) o; + if("MID".equals(s)) + { + AircraftRemarks remarks = new AircraftRemarks(s); + for(i++;i < theElements.size();) + { + remarks.addRemarks(" "); + remarks.addRemarks((String) theElements.get(i)); + theElements.remove(i); + } + rptRemarks = remarks; + } + } + } + } + + /** + * Iterate over any remaining data left in the observation that is AFTER + * the time information. These data are bundled together as a remarks + * string that will be appended to the end of the observation data. + */ + private void collectRemarks() { + boolean timeFound = false; + int i = 0; + for(;i < theElements.size();i++) { + Object o = theElements.get(i); + if(timeFound = (o instanceof Calendar)) { + break; + } + } // for + if(timeFound) { + StringBuffer remarksBuffer = new StringBuffer(); + for(;i < theElements.size();i++) { + Object o = theElements.get(i); + if(o instanceof String) { + theElements.remove(i); + i--; + remarksBuffer.append(o); + remarksBuffer.append(" "); + } + } // for + if(remarksBuffer.length() > 0) { + if(rptRemarks != null) { + remarksBuffer.insert(0," "); + remarksBuffer.insert(0,rptRemarks.getValue()); + } + rptRemarks = new AircraftRemarks(remarksBuffer.toString()); + } + } + } // collectRemarks() + + + /** + * @return the reportData + */ + public String getReportData() { + return reportData; + } + + /** + * @return the reportType + */ + public String getReportType() { + return reportType; + } + + /** + * @param reportType the reportType to set + */ + public void setReportType(String reportType) { + this.reportType = reportType; + } + + /** + * Get the decoded Aircraft id. + * @return The decoded Aircraft id. + */ + public String getAircraftId() + { + return aircraftId; + } // getAircraftId() + + /** + * Get the decoded Latitude instance. + * @return The decoded Latitude + */ + public Double getLatitude() + { + return latitude; + } // getLatitude() + + /** + * Get the decoded Longitude instance. + * @return The decoded Longitude. + */ + public Double getLongitude() + { + return longitude; + } // getLongitude() + + /** + * Get the AIREP observation time. + * @return The AIREP observation time. + */ + public Calendar getObservationTime() + { + return observationTime; + } // getObservationTime() + + /** + * Get the decoded aircraft flight level data. + * @return The decoded aircraft flight level data. + */ + public Integer getFlightLevel() { // Integer retValue = null; - Integer retValue = IMISSD; - if(flightLevel != null) { - retValue = flightLevel.getFlightLevel(); - } - return retValue; - } // getFlightLevel() - - /** - * Get the decoded temperature data. - * @return The decoded temperature. + Integer retValue = IMISSD; + if(flightLevel != null) { + retValue = flightLevel.getFlightLevel(); + } + return retValue; + } // getFlightLevel() + + /** + * Get the decoded temperature data. + * @return The decoded temperature. */ - public Float getTemperature() - { - return temperature; - } // getAirTemperature() - - public NcAIREPWeather getWeatherGroup() - { - return weatherGroup; - } // getWeatherGroup() - - /** - * Get the decoded wind direction data. - * @return The decoded wind direction data. + public Float getTemperature() + { + return temperature; + } // getAirTemperature() + + public NcAIREPWeather getWeatherGroup() + { + return weatherGroup; + } // getWeatherGroup() + + /** + * Get the decoded wind direction data. + * @return The decoded wind direction data. */ - public Float getWindDirection() - { - return windDirection; - } // getWindDirection() - - /** - * Get the decoded wind speed data. - * @return The decoded wind speed data. + public Float getWindDirection() + { + return windDirection; + } // getWindDirection() + + /** + * Get the decoded wind speed data. + * @return The decoded wind speed data. */ - public Float getWindSpeed() - { - return windSpeed; - } // getWindSpeed() + public Float getWindSpeed() + { + return windSpeed; + } // getWindSpeed() public String getTurbInten() { return turbInten; @@ -1067,15 +1067,15 @@ public class NcAirepParser public String getSuspectTimeFlag() { return suspectTimeFlag; } - - /** - * Get any remarks information found. - * @return The remarks information. An empty string is returned if no - * remarks data was found. - */ - public String getRemarks() - { - return (rptRemarks != null) ? rptRemarks.toString() : ""; + + /** + * Get any remarks information found. + * @return The remarks information. An empty string is returned if no + * remarks data was found. + */ + public String getRemarks() + { + return (rptRemarks != null) ? rptRemarks.toString() : ""; } // getRemarks() /* @@ -1242,5 +1242,5 @@ public class NcAirepParser } } - } + } } \ No newline at end of file diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncccfp/gov.noaa.nws.ncep.edex.plugin.ncccfp.ecl b/ncep/gov.noaa.nws.ncep.edex.plugin.ncccfp/gov.noaa.nws.ncep.edex.plugin.ncccfp.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/gov.noaa.nws.ncep.edex.plugin.ncgrib.ecl b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/gov.noaa.nws.ncep.edex.plugin.ncgrib.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/src/gov/noaa/nws/ncep/edex/plugin/ncgrib/dao/NcMercatorDao.java b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/src/gov/noaa/nws/ncep/edex/plugin/ncgrib/dao/NcMercatorDao.java index c06d742572..4377d6d5cc 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/src/gov/noaa/nws/ncep/edex/plugin/ncgrib/dao/NcMercatorDao.java +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/src/gov/noaa/nws/ncep/edex/plugin/ncgrib/dao/NcMercatorDao.java @@ -1,19 +1,19 @@ /** * This software was developed and / or modified by Raytheon Company, - * pursuant to Contract DG133W-05-CQ-1067 with the US Government. - * - * U.S. EXPORT CONTROLLED TECHNICAL DATA + * pursuant to Contract DG133W-05-CQ-1067 with the US Government. + * + * U.S. EXPORT CONTROLLED TECHNICAL DATA * This software product contains export-restricted data whose * export/transfer/disclosure is restricted by U.S. law. Dissemination * to non-U.S. persons whether in the United States or abroad requires * an export license or other authorization. * - * Contractor Name: Raytheon Company - * Contractor Address: 6825 Pine Street, Suite 340 - * Mail Stop B8 - * Omaha, NE 68106 - * 402.291.0100 - * + * Contractor Name: Raytheon Company + * Contractor Address: 6825 Pine Street, Suite 340 + * Mail Stop B8 + * Omaha, NE 68106 + * 402.291.0100 + * * See the AWIPS II Master Rights File ("Master Rights File.pdf") for * further licensing information. **/ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/src/gov/noaa/nws/ncep/edex/plugin/ncgrib/dao/NcPolarStereoDao.java b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/src/gov/noaa/nws/ncep/edex/plugin/ncgrib/dao/NcPolarStereoDao.java index a344c3a679..4c92e5c75c 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/src/gov/noaa/nws/ncep/edex/plugin/ncgrib/dao/NcPolarStereoDao.java +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/src/gov/noaa/nws/ncep/edex/plugin/ncgrib/dao/NcPolarStereoDao.java @@ -1,19 +1,19 @@ /** * This software was developed and / or modified by Raytheon Company, - * pursuant to Contract DG133W-05-CQ-1067 with the US Government. - * - * U.S. EXPORT CONTROLLED TECHNICAL DATA + * pursuant to Contract DG133W-05-CQ-1067 with the US Government. + * + * U.S. EXPORT CONTROLLED TECHNICAL DATA * This software product contains export-restricted data whose * export/transfer/disclosure is restricted by U.S. law. Dissemination * to non-U.S. persons whether in the United States or abroad requires * an export license or other authorization. * - * Contractor Name: Raytheon Company - * Contractor Address: 6825 Pine Street, Suite 340 - * Mail Stop B8 - * Omaha, NE 68106 - * 402.291.0100 - * + * Contractor Name: Raytheon Company + * Contractor Address: 6825 Pine Street, Suite 340 + * Mail Stop B8 + * Omaha, NE 68106 + * 402.291.0100 + * * See the AWIPS II Master Rights File ("Master Rights File.pdf") for * further licensing information. **/ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/src/gov/noaa/nws/ncep/edex/plugin/ncgrib/dao/NcgribDao.java b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/src/gov/noaa/nws/ncep/edex/plugin/ncgrib/dao/NcgribDao.java index 048078a59b..5f6ecb6401 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/src/gov/noaa/nws/ncep/edex/plugin/ncgrib/dao/NcgribDao.java +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/src/gov/noaa/nws/ncep/edex/plugin/ncgrib/dao/NcgribDao.java @@ -1,19 +1,19 @@ /** * This software was developed and / or modified by Raytheon Company, - * pursuant to Contract DG133W-05-CQ-1067 with the US Government. - * - * U.S. EXPORT CONTROLLED TECHNICAL DATA + * pursuant to Contract DG133W-05-CQ-1067 with the US Government. + * + * U.S. EXPORT CONTROLLED TECHNICAL DATA * This software product contains export-restricted data whose * export/transfer/disclosure is restricted by U.S. law. Dissemination * to non-U.S. persons whether in the United States or abroad requires * an export license or other authorization. * - * Contractor Name: Raytheon Company - * Contractor Address: 6825 Pine Street, Suite 340 - * Mail Stop B8 - * Omaha, NE 68106 - * 402.291.0100 - * + * Contractor Name: Raytheon Company + * Contractor Address: 6825 Pine Street, Suite 340 + * Mail Stop B8 + * Omaha, NE 68106 + * 402.291.0100 + * * See the AWIPS II Master Rights File ("Master Rights File.pdf") for * further licensing information. **/ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/src/gov/noaa/nws/ncep/edex/plugin/ncgrib/handler/GetNcCoverageHandler.java b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/src/gov/noaa/nws/ncep/edex/plugin/ncgrib/handler/GetNcCoverageHandler.java index 59d2349d4f..433a72e364 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/src/gov/noaa/nws/ncep/edex/plugin/ncgrib/handler/GetNcCoverageHandler.java +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/src/gov/noaa/nws/ncep/edex/plugin/ncgrib/handler/GetNcCoverageHandler.java @@ -1,19 +1,19 @@ /** * This software was developed and / or modified by Raytheon Company, - * pursuant to Contract DG133W-05-CQ-1067 with the US Government. - * - * U.S. EXPORT CONTROLLED TECHNICAL DATA + * pursuant to Contract DG133W-05-CQ-1067 with the US Government. + * + * U.S. EXPORT CONTROLLED TECHNICAL DATA * This software product contains export-restricted data whose * export/transfer/disclosure is restricted by U.S. law. Dissemination * to non-U.S. persons whether in the United States or abroad requires * an export license or other authorization. * - * Contractor Name: Raytheon Company - * Contractor Address: 6825 Pine Street, Suite 340 - * Mail Stop B8 - * Omaha, NE 68106 - * 402.291.0100 - * + * Contractor Name: Raytheon Company + * Contractor Address: 6825 Pine Street, Suite 340 + * Mail Stop B8 + * Omaha, NE 68106 + * 402.291.0100 + * * See the AWIPS II Master Rights File ("Master Rights File.pdf") for * further licensing information. **/ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/src/gov/noaa/nws/ncep/edex/plugin/ncgrib/notify/NcgribNotifyTransform.java b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/src/gov/noaa/nws/ncep/edex/plugin/ncgrib/notify/NcgribNotifyTransform.java index 25f39e1908..b228e65bfe 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/src/gov/noaa/nws/ncep/edex/plugin/ncgrib/notify/NcgribNotifyTransform.java +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/src/gov/noaa/nws/ncep/edex/plugin/ncgrib/notify/NcgribNotifyTransform.java @@ -1,19 +1,19 @@ /** * This software was developed and / or modified by Raytheon Company, - * pursuant to Contract DG133W-05-CQ-1067 with the US Government. - * - * U.S. EXPORT CONTROLLED TECHNICAL DATA + * pursuant to Contract DG133W-05-CQ-1067 with the US Government. + * + * U.S. EXPORT CONTROLLED TECHNICAL DATA * This software product contains export-restricted data whose * export/transfer/disclosure is restricted by U.S. law. Dissemination * to non-U.S. persons whether in the United States or abroad requires * an export license or other authorization. * - * Contractor Name: Raytheon Company - * Contractor Address: 6825 Pine Street, Suite 340 - * Mail Stop B8 - * Omaha, NE 68106 - * 402.291.0100 - * + * Contractor Name: Raytheon Company + * Contractor Address: 6825 Pine Street, Suite 340 + * Mail Stop B8 + * Omaha, NE 68106 + * 402.291.0100 + * * See the AWIPS II Master Rights File ("Master Rights File.pdf") for * further licensing information. **/ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/src/gov/noaa/nws/ncep/edex/plugin/ncgrib/spatial/NcgribSpatialCache.java b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/src/gov/noaa/nws/ncep/edex/plugin/ncgrib/spatial/NcgribSpatialCache.java index 989e19ea7d..0b417ebc06 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/src/gov/noaa/nws/ncep/edex/plugin/ncgrib/spatial/NcgribSpatialCache.java +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/src/gov/noaa/nws/ncep/edex/plugin/ncgrib/spatial/NcgribSpatialCache.java @@ -1,19 +1,19 @@ /** * This software was developed and / or modified by Raytheon Company, - * pursuant to Contract DG133W-05-CQ-1067 with the US Government. - * - * U.S. EXPORT CONTROLLED TECHNICAL DATA + * pursuant to Contract DG133W-05-CQ-1067 with the US Government. + * + * U.S. EXPORT CONTROLLED TECHNICAL DATA * This software product contains export-restricted data whose * export/transfer/disclosure is restricted by U.S. law. Dissemination * to non-U.S. persons whether in the United States or abroad requires * an export license or other authorization. * - * Contractor Name: Raytheon Company - * Contractor Address: 6825 Pine Street, Suite 340 - * Mail Stop B8 - * Omaha, NE 68106 - * 402.291.0100 - * + * Contractor Name: Raytheon Company + * Contractor Address: 6825 Pine Street, Suite 340 + * Mail Stop B8 + * Omaha, NE 68106 + * 402.291.0100 + * * See the AWIPS II Master Rights File ("Master Rights File.pdf") for * further licensing information. **/ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/src/gov/noaa/nws/ncep/edex/plugin/ncgrib/util/NcgribModelCache.java b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/src/gov/noaa/nws/ncep/edex/plugin/ncgrib/util/NcgribModelCache.java index 329c43375b..286d5e836d 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/src/gov/noaa/nws/ncep/edex/plugin/ncgrib/util/NcgribModelCache.java +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/src/gov/noaa/nws/ncep/edex/plugin/ncgrib/util/NcgribModelCache.java @@ -1,19 +1,19 @@ /** * This software was developed and / or modified by Raytheon Company, - * pursuant to Contract DG133W-05-CQ-1067 with the US Government. - * - * U.S. EXPORT CONTROLLED TECHNICAL DATA + * pursuant to Contract DG133W-05-CQ-1067 with the US Government. + * + * U.S. EXPORT CONTROLLED TECHNICAL DATA * This software product contains export-restricted data whose * export/transfer/disclosure is restricted by U.S. law. Dissemination * to non-U.S. persons whether in the United States or abroad requires * an export license or other authorization. * - * Contractor Name: Raytheon Company - * Contractor Address: 6825 Pine Street, Suite 340 - * Mail Stop B8 - * Omaha, NE 68106 - * 402.291.0100 - * + * Contractor Name: Raytheon Company + * Contractor Address: 6825 Pine Street, Suite 340 + * Mail Stop B8 + * Omaha, NE 68106 + * 402.291.0100 + * * See the AWIPS II Master Rights File ("Master Rights File.pdf") for * further licensing information. **/ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/src/gov/noaa/nws/ncep/edex/plugin/ncgrib/util/TableTimeStamp.java b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/src/gov/noaa/nws/ncep/edex/plugin/ncgrib/util/TableTimeStamp.java index 9a25c2c05c..98bb3d41f6 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/src/gov/noaa/nws/ncep/edex/plugin/ncgrib/util/TableTimeStamp.java +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/src/gov/noaa/nws/ncep/edex/plugin/ncgrib/util/TableTimeStamp.java @@ -1,166 +1,166 @@ -/** - * TableTimeStamp - A Java class to update some known - * ncep grib2 vars.xml and vcrd.xml and ncgribmodel.xml. - * - * SOFTWARE HISTORY - * - * Date Ticket# Engineer Description - * ------------ ---------- ----------- -------------------------- - * 10/2010 276 L. Lin Initial creation - * - * - * - * This code has been developed by the SIB for use in the AWIPS2 system. - * @author L. Lin - * @version 1.0 - */ - -package gov.noaa.nws.ncep.edex.plugin.ncgrib.util; - -import gov.noaa.nws.ncep.common.dataplugin.ncgrib.exception.GribException; -import gov.noaa.nws.ncep.edex.util.grib2vars.Grib2VarsTableLookup; -import gov.noaa.nws.ncep.edex.util.grib2vcrd.Grib2VcrdTableLookup; -import gov.noaa.nws.ncep.edex.util.ncgrib.NcgribModelLookup; - -import java.io.File; - -import com.raytheon.uf.common.localization.IPathManager; -import com.raytheon.uf.common.localization.LocalizationContext; -import com.raytheon.uf.common.localization.PathManagerFactory; - -public class TableTimeStamp { - - private static long ncepVarsTimeStamp; - - private static long ncepVcrdTimeStamp; - - private static long ncepNcgribModelTimeStamp; - - public TableTimeStamp() { - } - - public static synchronized void updateXmlTables() throws GribException { - - long ncepVarsFileTime = 0; - long ncepVcrdFileTime = 0; - long ncepGribModelFileTime = 0; - - /* - * Gets all predefined found in the utility directory - */ - IPathManager pathMgr = PathManagerFactory.getPathManager(); - LocalizationContext commonStaticBase = pathMgr.getContext( - LocalizationContext.LocalizationType.COMMON_STATIC, - LocalizationContext.LocalizationLevel.BASE); - - /* check NCEP VARS control file */ - String ncepVarsPath = ""; - - try { - ncepVarsPath = pathMgr.getFile(commonStaticBase, - "ncgrid" + File.separator + "grib2vars.xml") - .getCanonicalPath(); - - } catch (Exception e) { - throw new GribException( - "Unable to unmarshal ncep grib2vars.xml file"); - } - - File ncepVarsTable = new File(ncepVarsPath); - try { - if (ncepVarsTable.exists()) { - ncepVarsFileTime = ncepVarsTable.lastModified(); - if (ncepVarsFileTime != getNcepVarsTimeStamp()) { - System.out - .println("NCEP grib2vars.xml has been modified or the first time, so load it ..."); - Grib2VarsTableLookup.readG2varsTable(); - setNcepVarsTimeStamp(ncepVarsFileTime); - } - } - } catch (Exception e) { - throw new GribException("Unable to read ncep grib2vars file"); - } - - /* check NCEP VCRD control file */ - String ncepVcrdPath = ""; - - try { - ncepVcrdPath = pathMgr.getFile(commonStaticBase, - "ncgrid" + File.separator + "grib2vcrd.xml") - .getCanonicalPath(); - - } catch (Exception e) { - throw new GribException( - "Unable to unmarshal ncep grib2vcrd.xml file"); - } - - File ncepVcrdTable = new File(ncepVcrdPath); - try { - if (ncepVcrdTable.exists()) { - ncepVcrdFileTime = ncepVcrdTable.lastModified(); - if (ncepVcrdFileTime != getNcepVcrdTimeStamp()) { - System.out - .println("NCEP grib2vcrd.xml has been modified or the first time, so load it ..."); - Grib2VcrdTableLookup.readG2vcrdTable(); - setNcepVcrdTimeStamp(ncepVcrdFileTime); - } - } - } catch (Exception e) { - throw new GribException("Unable to read ncep grib2vcrd file"); - } - - /* check NCEP Grib Model control file */ - String ncepGridModelPath = ""; - - try { - ncepGridModelPath = pathMgr.getFile(commonStaticBase, - "ncgrid" + File.separator + "ncgribModels.xml") - .getCanonicalPath(); - - } catch (Exception e) { - throw new GribException( - "Unable to unmarshal ncep ncgribModels.xml file"); - } - - File ncepGribModelTable = new File(ncepGridModelPath); - try { - if (ncepGribModelTable.exists()) { - ncepGribModelFileTime = ncepGribModelTable.lastModified(); - if (ncepGribModelFileTime != getNcepNcgribModelTimeStamp()) { - System.out - .println("NCEP ncgribModels.xml has been modified or the first time, so load it ..."); - NcgribModelLookup.ReloadInstance(); - setNcepNcgribModelTimeStamp(ncepGribModelFileTime); - } - } - } catch (Exception e) { - throw new GribException("Unable to read ncep grib2vcrd file"); - } - - } - - public static long getNcepVarsTimeStamp() { - return ncepVarsTimeStamp; - } - - public static void setNcepVarsTimeStamp(long ncepVarsTimeStamp) { - TableTimeStamp.ncepVarsTimeStamp = ncepVarsTimeStamp; - } - - public static long getNcepVcrdTimeStamp() { - return ncepVcrdTimeStamp; - } - - public static void setNcepVcrdTimeStamp(long ncepVcrdTimeStamp) { - TableTimeStamp.ncepVcrdTimeStamp = ncepVcrdTimeStamp; - } - - public static long getNcepNcgribModelTimeStamp() { - return ncepNcgribModelTimeStamp; - } - - public static void setNcepNcgribModelTimeStamp(long ncepNcgribModelTimeStamp) { - TableTimeStamp.ncepNcgribModelTimeStamp = ncepNcgribModelTimeStamp; - } - -} +/** + * TableTimeStamp - A Java class to update some known + * ncep grib2 vars.xml and vcrd.xml and ncgribmodel.xml. + * + * SOFTWARE HISTORY + * + * Date Ticket# Engineer Description + * ------------ ---------- ----------- -------------------------- + * 10/2010 276 L. Lin Initial creation + * + * + * + * This code has been developed by the SIB for use in the AWIPS2 system. + * @author L. Lin + * @version 1.0 + */ + +package gov.noaa.nws.ncep.edex.plugin.ncgrib.util; + +import gov.noaa.nws.ncep.common.dataplugin.ncgrib.exception.GribException; +import gov.noaa.nws.ncep.edex.util.grib2vars.Grib2VarsTableLookup; +import gov.noaa.nws.ncep.edex.util.grib2vcrd.Grib2VcrdTableLookup; +import gov.noaa.nws.ncep.edex.util.ncgrib.NcgribModelLookup; + +import java.io.File; + +import com.raytheon.uf.common.localization.IPathManager; +import com.raytheon.uf.common.localization.LocalizationContext; +import com.raytheon.uf.common.localization.PathManagerFactory; + +public class TableTimeStamp { + + private static long ncepVarsTimeStamp; + + private static long ncepVcrdTimeStamp; + + private static long ncepNcgribModelTimeStamp; + + public TableTimeStamp() { + } + + public static synchronized void updateXmlTables() throws GribException { + + long ncepVarsFileTime = 0; + long ncepVcrdFileTime = 0; + long ncepGribModelFileTime = 0; + + /* + * Gets all predefined found in the utility directory + */ + IPathManager pathMgr = PathManagerFactory.getPathManager(); + LocalizationContext commonStaticBase = pathMgr.getContext( + LocalizationContext.LocalizationType.COMMON_STATIC, + LocalizationContext.LocalizationLevel.BASE); + + /* check NCEP VARS control file */ + String ncepVarsPath = ""; + + try { + ncepVarsPath = pathMgr.getFile(commonStaticBase, + "ncgrid" + File.separator + "grib2vars.xml") + .getCanonicalPath(); + + } catch (Exception e) { + throw new GribException( + "Unable to unmarshal ncep grib2vars.xml file"); + } + + File ncepVarsTable = new File(ncepVarsPath); + try { + if (ncepVarsTable.exists()) { + ncepVarsFileTime = ncepVarsTable.lastModified(); + if (ncepVarsFileTime != getNcepVarsTimeStamp()) { + System.out + .println("NCEP grib2vars.xml has been modified or the first time, so load it ..."); + Grib2VarsTableLookup.readG2varsTable(); + setNcepVarsTimeStamp(ncepVarsFileTime); + } + } + } catch (Exception e) { + throw new GribException("Unable to read ncep grib2vars file"); + } + + /* check NCEP VCRD control file */ + String ncepVcrdPath = ""; + + try { + ncepVcrdPath = pathMgr.getFile(commonStaticBase, + "ncgrid" + File.separator + "grib2vcrd.xml") + .getCanonicalPath(); + + } catch (Exception e) { + throw new GribException( + "Unable to unmarshal ncep grib2vcrd.xml file"); + } + + File ncepVcrdTable = new File(ncepVcrdPath); + try { + if (ncepVcrdTable.exists()) { + ncepVcrdFileTime = ncepVcrdTable.lastModified(); + if (ncepVcrdFileTime != getNcepVcrdTimeStamp()) { + System.out + .println("NCEP grib2vcrd.xml has been modified or the first time, so load it ..."); + Grib2VcrdTableLookup.readG2vcrdTable(); + setNcepVcrdTimeStamp(ncepVcrdFileTime); + } + } + } catch (Exception e) { + throw new GribException("Unable to read ncep grib2vcrd file"); + } + + /* check NCEP Grib Model control file */ + String ncepGridModelPath = ""; + + try { + ncepGridModelPath = pathMgr.getFile(commonStaticBase, + "ncgrid" + File.separator + "ncgribModels.xml") + .getCanonicalPath(); + + } catch (Exception e) { + throw new GribException( + "Unable to unmarshal ncep ncgribModels.xml file"); + } + + File ncepGribModelTable = new File(ncepGridModelPath); + try { + if (ncepGribModelTable.exists()) { + ncepGribModelFileTime = ncepGribModelTable.lastModified(); + if (ncepGribModelFileTime != getNcepNcgribModelTimeStamp()) { + System.out + .println("NCEP ncgribModels.xml has been modified or the first time, so load it ..."); + NcgribModelLookup.ReloadInstance(); + setNcepNcgribModelTimeStamp(ncepGribModelFileTime); + } + } + } catch (Exception e) { + throw new GribException("Unable to read ncep grib2vcrd file"); + } + + } + + public static long getNcepVarsTimeStamp() { + return ncepVarsTimeStamp; + } + + public static void setNcepVarsTimeStamp(long ncepVarsTimeStamp) { + TableTimeStamp.ncepVarsTimeStamp = ncepVarsTimeStamp; + } + + public static long getNcepVcrdTimeStamp() { + return ncepVcrdTimeStamp; + } + + public static void setNcepVcrdTimeStamp(long ncepVcrdTimeStamp) { + TableTimeStamp.ncepVcrdTimeStamp = ncepVcrdTimeStamp; + } + + public static long getNcepNcgribModelTimeStamp() { + return ncepNcgribModelTimeStamp; + } + + public static void setNcepNcgribModelTimeStamp(long ncepNcgribModelTimeStamp) { + TableTimeStamp.ncepNcgribModelTimeStamp = ncepNcgribModelTimeStamp; + } + +} diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/src/gov/noaa/nws/ncep/edex/uengine/tasks/ncgrib/package-info.java b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/src/gov/noaa/nws/ncep/edex/uengine/tasks/ncgrib/package-info.java index c80ab35d77..41b91513e7 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/src/gov/noaa/nws/ncep/edex/uengine/tasks/ncgrib/package-info.java +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/src/gov/noaa/nws/ncep/edex/uengine/tasks/ncgrib/package-info.java @@ -1,4 +1,4 @@ -/** - * Contains JavaScript oriented μEngine tasks specific to gribs - */ +/** + * Contains JavaScript oriented μEngine tasks specific to gribs + */ package gov.noaa.nws.ncep.edex.uengine.tasks.ncgrib; \ No newline at end of file diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/src/gov/noaa/nws/ncep/edex/util/grib2vars/Grib2VarsComparator.java b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/src/gov/noaa/nws/ncep/edex/util/grib2vars/Grib2VarsComparator.java index 24b49ef02e..7d495a6552 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/src/gov/noaa/nws/ncep/edex/util/grib2vars/Grib2VarsComparator.java +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/src/gov/noaa/nws/ncep/edex/util/grib2vars/Grib2VarsComparator.java @@ -1,56 +1,56 @@ -package gov.noaa.nws.ncep.edex.util.grib2vars; - -import java.util.Comparator; - -/** - * Comparator for Grib2Vars fields. - *
- * 
- * SOFTWARE HISTORY
- * 
- * Date         Ticket#    Engineer    Description
- * ------------ ---------- ----------- --------------------------
- * 10/10		276  		L. Lin	   Initial Creation
- *                       
- * 
- * - * @author llin - * @version 1 - */ - -public class Grib2VarsComparator implements Comparator, IGrib2VarsField { - - private Grib2VarsField field; - - public Grib2VarsComparator(Grib2VarsField f) { - this.field = f; - } - - public int compare(Grib2Vars o1, Grib2Vars o2) { - switch (field) { - case G2VARSID: - return o1.getG2Varsid() - o2.getG2Varsid(); - case DISCIPLINE: - return o1.getDiscipline() - o2.getDiscipline(); - case CATEGORY: - return o1.getCategory() - o2.getCategory(); - case PID: - return o1.getPid() - o2.getPid(); - case PDT: - return o1.getPdt() - o2.getPdt(); - case NAME: - return o1.getName().compareToIgnoreCase(o2.getName()); - case UNITS: - return o1.getUnits().compareToIgnoreCase(o2.getUnits()); - case GNAM: - return o1.getGnam().compareToIgnoreCase(o2.getGnam()); - case SCALE: - return o1.getScale() - o2.getScale(); - case MISSING: - return o1.getMissing().compareTo(o2.getMissing()); - default: - return 0; - } - - } +package gov.noaa.nws.ncep.edex.util.grib2vars; + +import java.util.Comparator; + +/** + * Comparator for Grib2Vars fields. + *
+ * 
+ * SOFTWARE HISTORY
+ * 
+ * Date         Ticket#    Engineer    Description
+ * ------------ ---------- ----------- --------------------------
+ * 10/10		276  		L. Lin	   Initial Creation
+ *                       
+ * 
+ * + * @author llin + * @version 1 + */ + +public class Grib2VarsComparator implements Comparator, IGrib2VarsField { + + private Grib2VarsField field; + + public Grib2VarsComparator(Grib2VarsField f) { + this.field = f; + } + + public int compare(Grib2Vars o1, Grib2Vars o2) { + switch (field) { + case G2VARSID: + return o1.getG2Varsid() - o2.getG2Varsid(); + case DISCIPLINE: + return o1.getDiscipline() - o2.getDiscipline(); + case CATEGORY: + return o1.getCategory() - o2.getCategory(); + case PID: + return o1.getPid() - o2.getPid(); + case PDT: + return o1.getPdt() - o2.getPdt(); + case NAME: + return o1.getName().compareToIgnoreCase(o2.getName()); + case UNITS: + return o1.getUnits().compareToIgnoreCase(o2.getUnits()); + case GNAM: + return o1.getGnam().compareToIgnoreCase(o2.getGnam()); + case SCALE: + return o1.getScale() - o2.getScale(); + case MISSING: + return o1.getMissing().compareTo(o2.getMissing()); + default: + return 0; + } + + } } \ No newline at end of file diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/src/gov/noaa/nws/ncep/edex/util/grib2vars/Grib2VarsTable.java b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/src/gov/noaa/nws/ncep/edex/util/grib2vars/Grib2VarsTable.java index 77827218d6..87d0c0bcd5 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/src/gov/noaa/nws/ncep/edex/util/grib2vars/Grib2VarsTable.java +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/src/gov/noaa/nws/ncep/edex/util/grib2vars/Grib2VarsTable.java @@ -1,185 +1,185 @@ -package gov.noaa.nws.ncep.edex.util.grib2vars; - -import java.io.File; -import java.io.FileNotFoundException; -import java.io.FileReader; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; - -import javax.xml.bind.JAXBContext; -import javax.xml.bind.JAXBException; -import javax.xml.bind.Unmarshaller; - -/** - * This class reads a g2Vars table from an xml file and contains a list of g2Varss. - * This class also provide general g2Vars search functions given g2Vars field, and - * field value. - * - *
- * 
- * SOFTWARE HISTORY
- * 
- * Date         Ticket#    Engineer    Description
- * ------------ ---------- ----------- --------------------------
- * 10/10  		276   	   	L. Lin	   Initial Creation
- * 07/11                    X. Guo     Added getGrib2Vars4Grib1()
- *                       
- * 
- * - * @author llin - * @version 1 - */ - -public class Grib2VarsTable implements IGrib2VarsField { - - private final String PACKAGE = "gov.noaa.nws.ncep.edex.util.grib2vars"; - - private List g2VarsList; - - private static Grib2VarsField last = null; - - /** - * Constructor. - * @param tableFileName - full path of the xml table file - */ - public Grib2VarsTable( String tableFileName ) { - - try{ - g2VarsList = readGrib2VarsTable( tableFileName ); - } - catch ( JAXBException exp ){ - g2VarsList = null; - exp.printStackTrace(); - } - - } - - /** - * Reads the contents of the input g2Vars table file - * @param xmlFilename - full path of the xml table name - * @return - a list of g2Varss - * @throws JAXBException - */ - private List readGrib2VarsTable( String xmlFilename ) throws JAXBException{ - - File xmlFile = new File(xmlFilename); - - JAXBContext context = JAXBContext.newInstance( - PACKAGE); - Unmarshaller unmarshaller = context.createUnmarshaller(); - Grib2VarsList g2Varslist = null; - - try { - g2Varslist = (Grib2VarsList)unmarshaller.unmarshal( - new FileReader(xmlFile)); - List listOfItems = g2Varslist.getGrib2Vars(); - return listOfItems; - - } catch (FileNotFoundException e1) { - e1.printStackTrace(); - - } catch (NullPointerException e2) { - e2.printStackTrace(); - } - - return null; - - } - - /** - * Gets the list of the g2Varss - * @return - the list of g2Varss - */ - public List getGrib2VarsList(){ - - return g2VarsList; - - } - - /** - * Search a g2Vars given a field, and search key value. - * - * @param sf - * @param key - * @return Grib2Vars - */ - public Grib2Vars getGrib2Vars(int discipline, int category, int pid, int pdt) { - - if (g2VarsList == null || g2VarsList.isEmpty()) return null; - - for (Grib2Vars g2Vars : g2VarsList) { - if (g2Vars.discipline == discipline && - g2Vars.category == category && - g2Vars.pid == pid && - g2Vars.pdt == pdt ) { - return g2Vars; - } - } - return null; - } - - public Grib2Vars getGrib2Vars4Grib1(int discipline, int category, int pid) { - - if (g2VarsList == null || g2VarsList.isEmpty()) return null; - - for (Grib2Vars g2Vars : g2VarsList) { - if (g2Vars.discipline == discipline && - g2Vars.category == category && - g2Vars.pid == pid ) { - return g2Vars; - } - } - return null; - } - /** - * Search g2Vars list given a field, and search key value. - * - * @param sf - * @param key - * @return Grib2Vars - */ - public List getGrib2Varss(Grib2VarsField sf, Integer key) { - if (g2VarsList == null || g2VarsList.isEmpty()) return null; - - Grib2VarsComparator comparator = new Grib2VarsComparator(sf); - if (last == null || (last != null && last != sf )) { - Collections.sort(g2VarsList, comparator); - last = sf; - } - - List list = new ArrayList(); - - Grib2Vars s = getComparedGrib2Vars(sf, key); - int index; - while ((index = Collections.binarySearch(g2VarsList, s, comparator)) >= 0) { - list.add(g2VarsList.get(index)); - g2VarsList.remove(index); - } - - if (list.size() > 0) { - for (Grib2Vars st : list) { - g2VarsList.add(st); - } - - last = null; - return list; - } - else { - return null; - } - } - - - private Grib2Vars getComparedGrib2Vars(Grib2VarsField sf, Integer key){ - Grib2Vars g2Vars = new Grib2Vars(); - switch (sf) { - case G2VARSID: - g2Vars.setG2Varsid((Integer)key); - break; - } - - return g2Vars; - } - +package gov.noaa.nws.ncep.edex.util.grib2vars; + +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileReader; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +import javax.xml.bind.JAXBContext; +import javax.xml.bind.JAXBException; +import javax.xml.bind.Unmarshaller; + +/** + * This class reads a g2Vars table from an xml file and contains a list of g2Varss. + * This class also provide general g2Vars search functions given g2Vars field, and + * field value. + * + *
+ * 
+ * SOFTWARE HISTORY
+ * 
+ * Date         Ticket#    Engineer    Description
+ * ------------ ---------- ----------- --------------------------
+ * 10/10  		276   	   	L. Lin	   Initial Creation
+ * 07/11                    X. Guo     Added getGrib2Vars4Grib1()
+ *                       
+ * 
+ * + * @author llin + * @version 1 + */ + +public class Grib2VarsTable implements IGrib2VarsField { + + private final String PACKAGE = "gov.noaa.nws.ncep.edex.util.grib2vars"; + + private List g2VarsList; + + private static Grib2VarsField last = null; + + /** + * Constructor. + * @param tableFileName - full path of the xml table file + */ + public Grib2VarsTable( String tableFileName ) { + + try{ + g2VarsList = readGrib2VarsTable( tableFileName ); + } + catch ( JAXBException exp ){ + g2VarsList = null; + exp.printStackTrace(); + } + + } + + /** + * Reads the contents of the input g2Vars table file + * @param xmlFilename - full path of the xml table name + * @return - a list of g2Varss + * @throws JAXBException + */ + private List readGrib2VarsTable( String xmlFilename ) throws JAXBException{ + + File xmlFile = new File(xmlFilename); + + JAXBContext context = JAXBContext.newInstance( + PACKAGE); + Unmarshaller unmarshaller = context.createUnmarshaller(); + Grib2VarsList g2Varslist = null; + + try { + g2Varslist = (Grib2VarsList)unmarshaller.unmarshal( + new FileReader(xmlFile)); + List listOfItems = g2Varslist.getGrib2Vars(); + return listOfItems; + + } catch (FileNotFoundException e1) { + e1.printStackTrace(); + + } catch (NullPointerException e2) { + e2.printStackTrace(); + } + + return null; + + } + + /** + * Gets the list of the g2Varss + * @return - the list of g2Varss + */ + public List getGrib2VarsList(){ + + return g2VarsList; + + } + + /** + * Search a g2Vars given a field, and search key value. + * + * @param sf + * @param key + * @return Grib2Vars + */ + public Grib2Vars getGrib2Vars(int discipline, int category, int pid, int pdt) { + + if (g2VarsList == null || g2VarsList.isEmpty()) return null; + + for (Grib2Vars g2Vars : g2VarsList) { + if (g2Vars.discipline == discipline && + g2Vars.category == category && + g2Vars.pid == pid && + g2Vars.pdt == pdt ) { + return g2Vars; + } + } + return null; + } + + public Grib2Vars getGrib2Vars4Grib1(int discipline, int category, int pid) { + + if (g2VarsList == null || g2VarsList.isEmpty()) return null; + + for (Grib2Vars g2Vars : g2VarsList) { + if (g2Vars.discipline == discipline && + g2Vars.category == category && + g2Vars.pid == pid ) { + return g2Vars; + } + } + return null; + } + /** + * Search g2Vars list given a field, and search key value. + * + * @param sf + * @param key + * @return Grib2Vars + */ + public List getGrib2Varss(Grib2VarsField sf, Integer key) { + if (g2VarsList == null || g2VarsList.isEmpty()) return null; + + Grib2VarsComparator comparator = new Grib2VarsComparator(sf); + if (last == null || (last != null && last != sf )) { + Collections.sort(g2VarsList, comparator); + last = sf; + } + + List list = new ArrayList(); + + Grib2Vars s = getComparedGrib2Vars(sf, key); + int index; + while ((index = Collections.binarySearch(g2VarsList, s, comparator)) >= 0) { + list.add(g2VarsList.get(index)); + g2VarsList.remove(index); + } + + if (list.size() > 0) { + for (Grib2Vars st : list) { + g2VarsList.add(st); + } + + last = null; + return list; + } + else { + return null; + } + } + + + private Grib2Vars getComparedGrib2Vars(Grib2VarsField sf, Integer key){ + Grib2Vars g2Vars = new Grib2Vars(); + switch (sf) { + case G2VARSID: + g2Vars.setG2Varsid((Integer)key); + break; + } + + return g2Vars; + } + } \ No newline at end of file diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/src/gov/noaa/nws/ncep/edex/util/grib2vars/Grib2VarsTableLookup.java b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/src/gov/noaa/nws/ncep/edex/util/grib2vars/Grib2VarsTableLookup.java index 15a9b47fe5..cb0ac3d252 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/src/gov/noaa/nws/ncep/edex/util/grib2vars/Grib2VarsTableLookup.java +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/src/gov/noaa/nws/ncep/edex/util/grib2vars/Grib2VarsTableLookup.java @@ -1,282 +1,282 @@ -/** - * Grib2varsTableLookup - A Java class to define some known - * both g2varsncep1.tbl and g2varswmo2.tbl. - * - * SOFTWARE HISTORY - * - * Date Ticket# Engineer Description - * ------------ ---------- ----------- -------------------------- - * 10/2010 276 L. Lin Initial creation - * 06/2011 X. Guo Added getVarGnam() - * 07/2011 X. Guo Added getVarGnam4Grib1() - * - * - * - * This code has been developed by the SIB for use in the AWIPS2 system. - * @author L. Lin - * @version 1.0 - */ -package gov.noaa.nws.ncep.edex.util.grib2vars; - -import java.io.File; - -import gov.noaa.nws.ncep.common.dataplugin.ncgrib.exception.GribException; - -import com.raytheon.uf.common.localization.IPathManager; -import com.raytheon.uf.common.localization.LocalizationContext; -import com.raytheon.uf.common.localization.PathManagerFactory; - -public class Grib2VarsTableLookup { - - private static Grib2VarsTable grib2varsTbl = null; - private static String name; - private static String units; - private static Integer scale; - private static String gnam; - private static float missing; - - public Grib2VarsTableLookup() { - } - - public static synchronized String readG2varsTable() throws GribException { - - Grib2VarsTable myTbl = null; - - /* - * Gets all predefined found in the utility directory - */ - IPathManager pathMgr = PathManagerFactory.getPathManager(); - LocalizationContext commonStaticBase = pathMgr.getContext( - LocalizationContext.LocalizationType.COMMON_STATIC, - LocalizationContext.LocalizationLevel.BASE); - - String path = ""; - - try { - path = pathMgr.getFile(commonStaticBase, - "ncgrid" + File.separator + "grib2vars.xml") - .getCanonicalPath(); - - // System.out.println (" grib2 vars table lookup path=" + path); - } catch (Exception e) { - throw new GribException( - "Unable to unmarshal ncep grib2vars.xml file"); - } - - File varsFile = new File(path); - try { - if (varsFile.exists()) { - myTbl = new Grib2VarsTable(path); - setG2varsTable(myTbl); - // System.out.println("Grib2varsTableLookup- read grib2vars.xml file=" - // + path); - } - } catch (Exception e) { - throw new GribException("Unable to read ncep grib2vars file"); - } - return path; - } - - /** - * Given discipline, category, pid, and pdt, find g2vars entry in - * "grib2vars.xml" and set g2varsid, name, units, scale, gnam, and missing - * fields. . - * - * @param discipline - * , category, pid and pdt are integers. - * @return - * @throws GribException - * - */ - public static int getG2varsId(int discipline, int category, int pid, int pdt) - throws GribException { - Grib2Vars g2vars = null; - int g2varsid = -1; - // Wrap decoding in a try block, in case of exception on xml. - try { - // Read in the stationNumber table XML if not exists - if (grib2varsTbl == null) { - readG2varsTable(); - } - - // Search station ID and return whole station record - if (grib2varsTbl != null) { - g2vars = grib2varsTbl.getGrib2Vars(discipline, category, pid, - pdt); - } - - if (g2vars != null) { - g2varsid = g2vars.g2Varsid; - name = g2vars.name; - units = g2vars.units; - gnam = g2vars.gnam; - scale = g2vars.scale; - missing = g2vars.missing; - } - } catch (Exception e) { - // TODO: Use central error logging if this code is kept - throw new GribException( - "Error occurs while finding g2vars entry from g2vars.xml table"); - } - - return g2varsid; - } - - /** - * Given discipline, category, pid, and pdt, find g2vars entry in - * "grib2vars.xml" and set g2varsid, name, units, g2varsscale, gnam, and - * missing fields. . - * - * @param discipline - * , category, pid and pdt are integers. - * @return - * @throws GribException - * - */ - public static int getG2varsScale(int discipline, int category, int pid, - int pdt) throws GribException { - Grib2Vars g2vars = null; - int g2scale = 0; - // Wrap decoding in a try block, in case of exception on xml. - try { - // Read in the stationNumber table XML if not exists - if (grib2varsTbl == null) { - readG2varsTable(); - } - - // Search station ID and return whole station record - if (grib2varsTbl != null) { - g2vars = grib2varsTbl.getGrib2Vars(discipline, category, pid, - pdt); - } - - if (g2vars != null) { - // g2Varsid = g2vars.g2Varsid; - name = g2vars.name; - units = g2vars.units; - gnam = g2vars.gnam; - g2scale = g2vars.scale; - missing = g2vars.missing; - } - } catch (Exception e) { - // TODO: Use central error logging if this code is kept - throw new GribException( - "Error occurs while finding g2vars entry from g2vars.xml table"); - } - - return g2scale; - } - - /** - * @return the grib2varsTbl - */ - public static Grib2VarsTable getG2varsTable() { - return grib2varsTbl; - } - - /** - * @param Grib2VarsTable - * the grib2varsTbl to set - */ - public static void setG2varsTable(Grib2VarsTable grib2varsTbl) { - Grib2VarsTableLookup.grib2varsTbl = grib2varsTbl; - } - - public static String getName() { - return name; - } - - public static void setName(String name) { - Grib2VarsTableLookup.name = name; - } - - public static String getVarGnam( int discipline, int category, int pid, int pdt) throws GribException { - Grib2Vars g2vars = null; - String varName="NONE"; - // Wrap decoding in a try block, in case of exception on xml. - try { - // Read in the stationNumber table XML if not exists - if (grib2varsTbl == null) { - readG2varsTable(); - } - - // Search station ID and return whole station record - if (grib2varsTbl != null) { - g2vars = grib2varsTbl.getGrib2Vars(discipline, category, pid, - pdt); - } - - if (g2vars != null) { - // g2Varsid = g2vars.g2Varsid; - varName = g2vars.gnam; - } - } catch (Exception e) { - // TODO: Use central error logging if this code is kept - throw new GribException( - "Error occurs while finding g2vars entry from g2vars.xml table"); - } - - return varName; - } - - public static String getVarGnam4Grib1( int discipline, int category, int pid) throws GribException { - Grib2Vars g2vars = null; - String varName="NONE"; - // Wrap decoding in a try block, in case of exception on xml. - try { - // Read in the stationNumber table XML if not exists - if (grib2varsTbl == null) { - readG2varsTable(); - } - - // Search station ID and return whole station record - if (grib2varsTbl != null) { - g2vars = grib2varsTbl.getGrib2Vars4Grib1(discipline, category, pid ); - } - - if (g2vars != null) { - // g2Varsid = g2vars.g2Varsid; - varName = g2vars.gnam; - } - } catch (Exception e) { - // TODO: Use central error logging if this code is kept - throw new GribException( - "Error occurs while finding g2vars entry from g2vars.xml table"); - } - - return varName; - } - - public static String getUnits() { - return units; - } - - public static void setUnits(String units) { - Grib2VarsTableLookup.units = units; - } - - public static Integer getScale() { - return scale; - } - - public static void setScale(Integer scale) { - Grib2VarsTableLookup.scale = scale; - } - - public static String getGnam() { - return gnam; - } - - public static void setGnam(String gnam) { - Grib2VarsTableLookup.gnam = gnam; - } - - public static float getMissing() { - return missing; - } - - public static void setMissing(float missing) { - Grib2VarsTableLookup.missing = missing; - } - -} +/** + * Grib2varsTableLookup - A Java class to define some known + * both g2varsncep1.tbl and g2varswmo2.tbl. + * + * SOFTWARE HISTORY + * + * Date Ticket# Engineer Description + * ------------ ---------- ----------- -------------------------- + * 10/2010 276 L. Lin Initial creation + * 06/2011 X. Guo Added getVarGnam() + * 07/2011 X. Guo Added getVarGnam4Grib1() + * + * + * + * This code has been developed by the SIB for use in the AWIPS2 system. + * @author L. Lin + * @version 1.0 + */ +package gov.noaa.nws.ncep.edex.util.grib2vars; + +import java.io.File; + +import gov.noaa.nws.ncep.common.dataplugin.ncgrib.exception.GribException; + +import com.raytheon.uf.common.localization.IPathManager; +import com.raytheon.uf.common.localization.LocalizationContext; +import com.raytheon.uf.common.localization.PathManagerFactory; + +public class Grib2VarsTableLookup { + + private static Grib2VarsTable grib2varsTbl = null; + private static String name; + private static String units; + private static Integer scale; + private static String gnam; + private static float missing; + + public Grib2VarsTableLookup() { + } + + public static synchronized String readG2varsTable() throws GribException { + + Grib2VarsTable myTbl = null; + + /* + * Gets all predefined found in the utility directory + */ + IPathManager pathMgr = PathManagerFactory.getPathManager(); + LocalizationContext commonStaticBase = pathMgr.getContext( + LocalizationContext.LocalizationType.COMMON_STATIC, + LocalizationContext.LocalizationLevel.BASE); + + String path = ""; + + try { + path = pathMgr.getFile(commonStaticBase, + "ncgrid" + File.separator + "grib2vars.xml") + .getCanonicalPath(); + + // System.out.println (" grib2 vars table lookup path=" + path); + } catch (Exception e) { + throw new GribException( + "Unable to unmarshal ncep grib2vars.xml file"); + } + + File varsFile = new File(path); + try { + if (varsFile.exists()) { + myTbl = new Grib2VarsTable(path); + setG2varsTable(myTbl); + // System.out.println("Grib2varsTableLookup- read grib2vars.xml file=" + // + path); + } + } catch (Exception e) { + throw new GribException("Unable to read ncep grib2vars file"); + } + return path; + } + + /** + * Given discipline, category, pid, and pdt, find g2vars entry in + * "grib2vars.xml" and set g2varsid, name, units, scale, gnam, and missing + * fields. . + * + * @param discipline + * , category, pid and pdt are integers. + * @return + * @throws GribException + * + */ + public static int getG2varsId(int discipline, int category, int pid, int pdt) + throws GribException { + Grib2Vars g2vars = null; + int g2varsid = -1; + // Wrap decoding in a try block, in case of exception on xml. + try { + // Read in the stationNumber table XML if not exists + if (grib2varsTbl == null) { + readG2varsTable(); + } + + // Search station ID and return whole station record + if (grib2varsTbl != null) { + g2vars = grib2varsTbl.getGrib2Vars(discipline, category, pid, + pdt); + } + + if (g2vars != null) { + g2varsid = g2vars.g2Varsid; + name = g2vars.name; + units = g2vars.units; + gnam = g2vars.gnam; + scale = g2vars.scale; + missing = g2vars.missing; + } + } catch (Exception e) { + // TODO: Use central error logging if this code is kept + throw new GribException( + "Error occurs while finding g2vars entry from g2vars.xml table"); + } + + return g2varsid; + } + + /** + * Given discipline, category, pid, and pdt, find g2vars entry in + * "grib2vars.xml" and set g2varsid, name, units, g2varsscale, gnam, and + * missing fields. . + * + * @param discipline + * , category, pid and pdt are integers. + * @return + * @throws GribException + * + */ + public static int getG2varsScale(int discipline, int category, int pid, + int pdt) throws GribException { + Grib2Vars g2vars = null; + int g2scale = 0; + // Wrap decoding in a try block, in case of exception on xml. + try { + // Read in the stationNumber table XML if not exists + if (grib2varsTbl == null) { + readG2varsTable(); + } + + // Search station ID and return whole station record + if (grib2varsTbl != null) { + g2vars = grib2varsTbl.getGrib2Vars(discipline, category, pid, + pdt); + } + + if (g2vars != null) { + // g2Varsid = g2vars.g2Varsid; + name = g2vars.name; + units = g2vars.units; + gnam = g2vars.gnam; + g2scale = g2vars.scale; + missing = g2vars.missing; + } + } catch (Exception e) { + // TODO: Use central error logging if this code is kept + throw new GribException( + "Error occurs while finding g2vars entry from g2vars.xml table"); + } + + return g2scale; + } + + /** + * @return the grib2varsTbl + */ + public static Grib2VarsTable getG2varsTable() { + return grib2varsTbl; + } + + /** + * @param Grib2VarsTable + * the grib2varsTbl to set + */ + public static void setG2varsTable(Grib2VarsTable grib2varsTbl) { + Grib2VarsTableLookup.grib2varsTbl = grib2varsTbl; + } + + public static String getName() { + return name; + } + + public static void setName(String name) { + Grib2VarsTableLookup.name = name; + } + + public static String getVarGnam( int discipline, int category, int pid, int pdt) throws GribException { + Grib2Vars g2vars = null; + String varName="NONE"; + // Wrap decoding in a try block, in case of exception on xml. + try { + // Read in the stationNumber table XML if not exists + if (grib2varsTbl == null) { + readG2varsTable(); + } + + // Search station ID and return whole station record + if (grib2varsTbl != null) { + g2vars = grib2varsTbl.getGrib2Vars(discipline, category, pid, + pdt); + } + + if (g2vars != null) { + // g2Varsid = g2vars.g2Varsid; + varName = g2vars.gnam; + } + } catch (Exception e) { + // TODO: Use central error logging if this code is kept + throw new GribException( + "Error occurs while finding g2vars entry from g2vars.xml table"); + } + + return varName; + } + + public static String getVarGnam4Grib1( int discipline, int category, int pid) throws GribException { + Grib2Vars g2vars = null; + String varName="NONE"; + // Wrap decoding in a try block, in case of exception on xml. + try { + // Read in the stationNumber table XML if not exists + if (grib2varsTbl == null) { + readG2varsTable(); + } + + // Search station ID and return whole station record + if (grib2varsTbl != null) { + g2vars = grib2varsTbl.getGrib2Vars4Grib1(discipline, category, pid ); + } + + if (g2vars != null) { + // g2Varsid = g2vars.g2Varsid; + varName = g2vars.gnam; + } + } catch (Exception e) { + // TODO: Use central error logging if this code is kept + throw new GribException( + "Error occurs while finding g2vars entry from g2vars.xml table"); + } + + return varName; + } + + public static String getUnits() { + return units; + } + + public static void setUnits(String units) { + Grib2VarsTableLookup.units = units; + } + + public static Integer getScale() { + return scale; + } + + public static void setScale(Integer scale) { + Grib2VarsTableLookup.scale = scale; + } + + public static String getGnam() { + return gnam; + } + + public static void setGnam(String gnam) { + Grib2VarsTableLookup.gnam = gnam; + } + + public static float getMissing() { + return missing; + } + + public static void setMissing(float missing) { + Grib2VarsTableLookup.missing = missing; + } + +} diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/src/gov/noaa/nws/ncep/edex/util/grib2vars/IGrib2VarsField.java b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/src/gov/noaa/nws/ncep/edex/util/grib2vars/IGrib2VarsField.java index 8f20bfac2e..54803378a7 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/src/gov/noaa/nws/ncep/edex/util/grib2vars/IGrib2VarsField.java +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/src/gov/noaa/nws/ncep/edex/util/grib2vars/IGrib2VarsField.java @@ -1,18 +1,18 @@ -package gov.noaa.nws.ncep.edex.util.grib2vars; - -public interface IGrib2VarsField { - - public static enum Grib2VarsField { - G2VARSID, // g2vars id - DISCIPLINE, // The discipline - CATEGORY, // The category - PID, // The parameter id - PDT, // The product definition template - NAME, // description of this g2vars - UNITS, // units - GNAM, // gnam - SCALE, // scale - MISSING // The missing value - } - -} +package gov.noaa.nws.ncep.edex.util.grib2vars; + +public interface IGrib2VarsField { + + public static enum Grib2VarsField { + G2VARSID, // g2vars id + DISCIPLINE, // The discipline + CATEGORY, // The category + PID, // The parameter id + PDT, // The product definition template + NAME, // description of this g2vars + UNITS, // units + GNAM, // gnam + SCALE, // scale + MISSING // The missing value + } + +} diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/src/gov/noaa/nws/ncep/edex/util/grib2vcrd/Grib2VcrdComparator.java b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/src/gov/noaa/nws/ncep/edex/util/grib2vcrd/Grib2VcrdComparator.java index e81e58c04f..e541ee6b73 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/src/gov/noaa/nws/ncep/edex/util/grib2vcrd/Grib2VcrdComparator.java +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/src/gov/noaa/nws/ncep/edex/util/grib2vcrd/Grib2VcrdComparator.java @@ -1,50 +1,50 @@ -package gov.noaa.nws.ncep.edex.util.grib2vcrd; - -import java.util.Comparator; - -/** - * Comparator for Grib2Vcrd fields. - *
- * 
- * SOFTWARE HISTORY
- * 
- * Date         Ticket#    Engineer    Description
- * ------------ ---------- ----------- --------------------------
- * 10/10		276  		L. Lin	   Initial Creation
- *                       
- * 
- * - * @author llin - * @version 1 - */ - -public class Grib2VcrdComparator implements Comparator, IGrib2VcrdField { - - private Grib2VcrdField field; - - public Grib2VcrdComparator(Grib2VcrdField f) { - this.field = f; - } - - public int compare(Grib2Vcrd o1, Grib2Vcrd o2) { - switch (field) { - case G2VCRDID: - return o1.getG2Vcrdid() - o2.getG2Vcrdid(); - case VCRDID1: - return o1.getVcrdid1() - o2.getVcrdid1(); - case VCRDID2: - return o1.getVcrdid2() - o2.getVcrdid2(); - case NAME: - return o1.getName().compareToIgnoreCase(o2.getName()); - case UNITS: - return o1.getUnits().compareToIgnoreCase(o2.getUnits()); - case GNAM: - return o1.getGnam().compareToIgnoreCase(o2.getGnam()); - case SCALE: - return o1.getScale().compareToIgnoreCase(o2.getScale()); - default: - return 0; - } - - } +package gov.noaa.nws.ncep.edex.util.grib2vcrd; + +import java.util.Comparator; + +/** + * Comparator for Grib2Vcrd fields. + *
+ * 
+ * SOFTWARE HISTORY
+ * 
+ * Date         Ticket#    Engineer    Description
+ * ------------ ---------- ----------- --------------------------
+ * 10/10		276  		L. Lin	   Initial Creation
+ *                       
+ * 
+ * + * @author llin + * @version 1 + */ + +public class Grib2VcrdComparator implements Comparator, IGrib2VcrdField { + + private Grib2VcrdField field; + + public Grib2VcrdComparator(Grib2VcrdField f) { + this.field = f; + } + + public int compare(Grib2Vcrd o1, Grib2Vcrd o2) { + switch (field) { + case G2VCRDID: + return o1.getG2Vcrdid() - o2.getG2Vcrdid(); + case VCRDID1: + return o1.getVcrdid1() - o2.getVcrdid1(); + case VCRDID2: + return o1.getVcrdid2() - o2.getVcrdid2(); + case NAME: + return o1.getName().compareToIgnoreCase(o2.getName()); + case UNITS: + return o1.getUnits().compareToIgnoreCase(o2.getUnits()); + case GNAM: + return o1.getGnam().compareToIgnoreCase(o2.getGnam()); + case SCALE: + return o1.getScale().compareToIgnoreCase(o2.getScale()); + default: + return 0; + } + + } } \ No newline at end of file diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/src/gov/noaa/nws/ncep/edex/util/grib2vcrd/Grib2VcrdTable.java b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/src/gov/noaa/nws/ncep/edex/util/grib2vcrd/Grib2VcrdTable.java index b040812981..eebe6743ab 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/src/gov/noaa/nws/ncep/edex/util/grib2vcrd/Grib2VcrdTable.java +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/src/gov/noaa/nws/ncep/edex/util/grib2vcrd/Grib2VcrdTable.java @@ -1,189 +1,189 @@ -package gov.noaa.nws.ncep.edex.util.grib2vcrd; - -import java.io.File; -import java.io.FileNotFoundException; -import java.io.FileReader; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; - -import javax.xml.bind.JAXBContext; -import javax.xml.bind.JAXBException; -import javax.xml.bind.Unmarshaller; - -/** - * This class reads a g2Vcrd table from an xml file and contains a list of g2Vcrds. - * This class also provide general g2Vcrd search functions given g2Vcrd field, and - * field value. - * - *
- * 
- * SOFTWARE HISTORY
- * 
- * Date         Ticket#    Engineer    Description
- * ------------ ---------- ----------- --------------------------
- * 10/10  		276   	   	L. Lin	   Initial Creation
- * 07/11                    X. Guo     Added getGrib2VcrdByVcrd1()
- *                       
- * 
- * - * @author llin - * @version 1 - */ - -public class Grib2VcrdTable implements IGrib2VcrdField { - - private final String PACKAGE = "gov.noaa.nws.ncep.edex.util.grib2vcrd"; - - private List g2VcrdList; - - private static Grib2VcrdField last = null; - - /** - * Constructor. - * @param tableFileName - full path of the xml table file - */ - public Grib2VcrdTable( String tableFileName ) { - - try{ - g2VcrdList = readGrib2VcrdTable( tableFileName ); - } - catch ( JAXBException exp ){ - g2VcrdList = null; - exp.printStackTrace(); - } - - } - - /** - * Reads the contents of the input g2Vcrd table file - * @param xmlFilename - full path of the xml table name - * @return - a list of g2Vcrds - * @throws JAXBException - */ - private List readGrib2VcrdTable( String xmlFilename ) throws JAXBException{ - - File xmlFile = new File(xmlFilename); - - JAXBContext context = JAXBContext.newInstance( - PACKAGE); - Unmarshaller unmarshaller = context.createUnmarshaller(); - Grib2VcrdList g2Vcrdlist = null; - - try { - g2Vcrdlist = (Grib2VcrdList)unmarshaller.unmarshal( - new FileReader(xmlFile)); - List listOfItems = g2Vcrdlist.getGrib2Vcrd(); - return listOfItems; - - } catch (FileNotFoundException e1) { - e1.printStackTrace(); - - } catch (NullPointerException e2) { - e2.printStackTrace(); - } - - return null; - - } - - /** - * Gets the list of the g2Vcrds - * @return - the list of g2Vcrds - */ - public List getGrib2VcrdList(){ - - return g2VcrdList; - - } - - /** - * Search a g2Vcrd given a field, and search key value. - * - * @param sf - * @param key - * @return Grib2Vcrd - */ - public Grib2Vcrd getGrib2Vcrd(int vcrdid1, int vcrdid2) { - - if (g2VcrdList == null || g2VcrdList.isEmpty()) return null; - - for (Grib2Vcrd g2Vcrd : g2VcrdList) { - if (g2Vcrd.vcrdid1 == vcrdid1 && - g2Vcrd.vcrdid2 == vcrdid2 ) { - return g2Vcrd; - } - } - return null; - } - - /** - * Search a g2Vcrd given a field, and search key value. - * - * @param sf - * @param key - * @return Grib2Vcrd - */ - public Grib2Vcrd getGrib2VcrdByVcrd1 (int vcrdid1 ) { - - if (g2VcrdList == null || g2VcrdList.isEmpty()) return null; - - for (Grib2Vcrd g2Vcrd : g2VcrdList) { - if (g2Vcrd.vcrdid1 == vcrdid1 ) { - return g2Vcrd; - } - } - return null; - } - - /** - * Search g2Vcrd list given a field, and search key value. - * - * @param sf - * @param key - * @return Grib2Vcrd - */ - public List getGrib2Vcrds(Grib2VcrdField sf, Integer key) { - if (g2VcrdList == null || g2VcrdList.isEmpty()) return null; - - Grib2VcrdComparator comparator = new Grib2VcrdComparator(sf); - if (last == null || (last != null && last != sf )) { - Collections.sort(g2VcrdList, comparator); - last = sf; - } - - List list = new ArrayList(); - - Grib2Vcrd s = getComparedGrib2Vcrd(sf, key); - int index; - while ((index = Collections.binarySearch(g2VcrdList, s, comparator)) >= 0) { - list.add(g2VcrdList.get(index)); - g2VcrdList.remove(index); - } - - if (list.size() > 0) { - for (Grib2Vcrd st : list) { - g2VcrdList.add(st); - } - - last = null; - return list; - } - else { - return null; - } - } - - - private Grib2Vcrd getComparedGrib2Vcrd(Grib2VcrdField sf, Integer key){ - Grib2Vcrd g2Vcrd = new Grib2Vcrd(); - switch (sf) { - case G2VCRDID: - g2Vcrd.setG2Vcrdid((Integer)key); - break; - } - - return g2Vcrd; - } - +package gov.noaa.nws.ncep.edex.util.grib2vcrd; + +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileReader; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +import javax.xml.bind.JAXBContext; +import javax.xml.bind.JAXBException; +import javax.xml.bind.Unmarshaller; + +/** + * This class reads a g2Vcrd table from an xml file and contains a list of g2Vcrds. + * This class also provide general g2Vcrd search functions given g2Vcrd field, and + * field value. + * + *
+ * 
+ * SOFTWARE HISTORY
+ * 
+ * Date         Ticket#    Engineer    Description
+ * ------------ ---------- ----------- --------------------------
+ * 10/10  		276   	   	L. Lin	   Initial Creation
+ * 07/11                    X. Guo     Added getGrib2VcrdByVcrd1()
+ *                       
+ * 
+ * + * @author llin + * @version 1 + */ + +public class Grib2VcrdTable implements IGrib2VcrdField { + + private final String PACKAGE = "gov.noaa.nws.ncep.edex.util.grib2vcrd"; + + private List g2VcrdList; + + private static Grib2VcrdField last = null; + + /** + * Constructor. + * @param tableFileName - full path of the xml table file + */ + public Grib2VcrdTable( String tableFileName ) { + + try{ + g2VcrdList = readGrib2VcrdTable( tableFileName ); + } + catch ( JAXBException exp ){ + g2VcrdList = null; + exp.printStackTrace(); + } + + } + + /** + * Reads the contents of the input g2Vcrd table file + * @param xmlFilename - full path of the xml table name + * @return - a list of g2Vcrds + * @throws JAXBException + */ + private List readGrib2VcrdTable( String xmlFilename ) throws JAXBException{ + + File xmlFile = new File(xmlFilename); + + JAXBContext context = JAXBContext.newInstance( + PACKAGE); + Unmarshaller unmarshaller = context.createUnmarshaller(); + Grib2VcrdList g2Vcrdlist = null; + + try { + g2Vcrdlist = (Grib2VcrdList)unmarshaller.unmarshal( + new FileReader(xmlFile)); + List listOfItems = g2Vcrdlist.getGrib2Vcrd(); + return listOfItems; + + } catch (FileNotFoundException e1) { + e1.printStackTrace(); + + } catch (NullPointerException e2) { + e2.printStackTrace(); + } + + return null; + + } + + /** + * Gets the list of the g2Vcrds + * @return - the list of g2Vcrds + */ + public List getGrib2VcrdList(){ + + return g2VcrdList; + + } + + /** + * Search a g2Vcrd given a field, and search key value. + * + * @param sf + * @param key + * @return Grib2Vcrd + */ + public Grib2Vcrd getGrib2Vcrd(int vcrdid1, int vcrdid2) { + + if (g2VcrdList == null || g2VcrdList.isEmpty()) return null; + + for (Grib2Vcrd g2Vcrd : g2VcrdList) { + if (g2Vcrd.vcrdid1 == vcrdid1 && + g2Vcrd.vcrdid2 == vcrdid2 ) { + return g2Vcrd; + } + } + return null; + } + + /** + * Search a g2Vcrd given a field, and search key value. + * + * @param sf + * @param key + * @return Grib2Vcrd + */ + public Grib2Vcrd getGrib2VcrdByVcrd1 (int vcrdid1 ) { + + if (g2VcrdList == null || g2VcrdList.isEmpty()) return null; + + for (Grib2Vcrd g2Vcrd : g2VcrdList) { + if (g2Vcrd.vcrdid1 == vcrdid1 ) { + return g2Vcrd; + } + } + return null; + } + + /** + * Search g2Vcrd list given a field, and search key value. + * + * @param sf + * @param key + * @return Grib2Vcrd + */ + public List getGrib2Vcrds(Grib2VcrdField sf, Integer key) { + if (g2VcrdList == null || g2VcrdList.isEmpty()) return null; + + Grib2VcrdComparator comparator = new Grib2VcrdComparator(sf); + if (last == null || (last != null && last != sf )) { + Collections.sort(g2VcrdList, comparator); + last = sf; + } + + List list = new ArrayList(); + + Grib2Vcrd s = getComparedGrib2Vcrd(sf, key); + int index; + while ((index = Collections.binarySearch(g2VcrdList, s, comparator)) >= 0) { + list.add(g2VcrdList.get(index)); + g2VcrdList.remove(index); + } + + if (list.size() > 0) { + for (Grib2Vcrd st : list) { + g2VcrdList.add(st); + } + + last = null; + return list; + } + else { + return null; + } + } + + + private Grib2Vcrd getComparedGrib2Vcrd(Grib2VcrdField sf, Integer key){ + Grib2Vcrd g2Vcrd = new Grib2Vcrd(); + switch (sf) { + case G2VCRDID: + g2Vcrd.setG2Vcrdid((Integer)key); + break; + } + + return g2Vcrd; + } + } \ No newline at end of file diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/src/gov/noaa/nws/ncep/edex/util/grib2vcrd/Grib2VcrdTableLookup.java b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/src/gov/noaa/nws/ncep/edex/util/grib2vcrd/Grib2VcrdTableLookup.java index 30c293f20f..d7993d15c9 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/src/gov/noaa/nws/ncep/edex/util/grib2vcrd/Grib2VcrdTableLookup.java +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/src/gov/noaa/nws/ncep/edex/util/grib2vcrd/Grib2VcrdTableLookup.java @@ -1,260 +1,260 @@ -/** - * Grib2vcrdTableLookup - A Java class to define some known - * both g2vcrdncep1.tbl and g2vcrdwmo2.tbl. - * - * SOFTWARE HISTORY - * - * Date Ticket# Engineer Description - * ------------ ---------- ----------- -------------------------- - * 10/2010 276 L. Lin Initial creation - * 06/2011 X. Guo Added getGnamByVcrdId(() - * getScaleByVcrdId() - * 07/2011 X. Guo Added getGrib2VcrdByGrib1VcrdId() - * - * - * - * This code has been developed by the SIB for use in the AWIPS2 system. - * @author L. Lin - * @version 1.0 - */ -package gov.noaa.nws.ncep.edex.util.grib2vcrd; - -import java.io.File; - -import gov.noaa.nws.ncep.common.dataplugin.ncgrib.exception.GribException; - -import com.raytheon.uf.common.localization.IPathManager; -import com.raytheon.uf.common.localization.LocalizationContext; -import com.raytheon.uf.common.localization.PathManagerFactory; -import com.raytheon.uf.edex.core.props.PropertiesFactory; - -public class Grib2VcrdTableLookup { - - private static Grib2VcrdTable grib2vcrdTbl=null; - private static String name; - private static String units; - private static String scale; - private static String gnam; - - public static synchronized String readG2vcrdTable () throws GribException{ - - Grib2VcrdTable myTbl = null; - - /* - * Gets all predefined found in the utility directory - */ - IPathManager pathMgr = PathManagerFactory.getPathManager(); - LocalizationContext commonStaticBase = pathMgr.getContext( - LocalizationContext.LocalizationType.COMMON_STATIC, - LocalizationContext.LocalizationLevel.BASE); - - LocalizationContext commonStaticSite = pathMgr.getContext( - LocalizationContext.LocalizationType.COMMON_STATIC, - LocalizationContext.LocalizationLevel.SITE); - - String path = ""; - String sitePath = ""; - - try { - path = pathMgr.getFile( - commonStaticBase, - "ncgrid" + File.separator + "grib2vcrd.xml") - .getCanonicalPath(); - - //System.out.println (" grib2 vcrd table lookup path=" + path); - - sitePath = pathMgr.getFile( - commonStaticSite, - PropertiesFactory.getInstance().getEnvProperties() - .getEnvValue("SITENAME") - + File.separator - + "ncgrid" - + File.separator - + "g2vcrd.xml").getCanonicalPath(); - //System.out.println (" grib2 vcrd table lookup sitepath=" + sitePath); - } catch (Exception e) { - throw new GribException("Unable to unmarshal ncep grib2vcrd.xml file"); - } - - File modelFile = new File(path); - try { - if (modelFile.exists()) { - myTbl = new Grib2VcrdTable(path); - setG2vcrdTable(myTbl); - //System.out.println("Grib2varsTableLookup- read grib2vars.xml file=" + path); - } - } catch (Exception e) { - throw new GribException("Unable to read ncep grib2vcrd file"); - } - return path; - } - - /** - * Given discipline, category, pid, and pdt, find g2vcrd entry in "grib2vcrd.xml" - * and set g2vcrdid, name, units, scale, gnam, and missing fields. - * . - * - * @param discipline, category, pid and pdt are integers. - * @return - * @throws GribException - * - */ - public static int getG2vcrdId(int vcrdid1, int vcrdid2) throws GribException { - Grib2Vcrd g2vcrd=null; - int g2vcrdid = -1; - // Wrap decoding in a try block, in case of exception on xml. - try { - - - // Read in the stationNumber table XML if not exists - if (grib2vcrdTbl == null) { - readG2vcrdTable(); - } - // Search station ID and return whole station record - if (grib2vcrdTbl != null) { - g2vcrd = grib2vcrdTbl.getGrib2Vcrd(vcrdid1, vcrdid2); - } - - if ( g2vcrd != null) { - g2vcrdid = g2vcrd.g2Vcrdid; - name = g2vcrd.name; - units = g2vcrd.units; - gnam = g2vcrd.gnam; - scale = g2vcrd.scale; - } - } - catch (Exception e) { - //TODO: Use central error logging if this code is kept - throw new GribException("Error occurs while finding g2vcrd entry from g2vcrd.xml table"); - } - - return g2vcrdid; - } - - /** - * @return the grib2vcrdTbl - */ - public static Grib2VcrdTable getG2vcrdTable() { - return grib2vcrdTbl; - } - - /** - * @param Grib2VcrdTable - * the grib2vcrdTbl to set - */ - public static void setG2vcrdTable(Grib2VcrdTable grib2vcrdTbl) { - Grib2VcrdTableLookup.grib2vcrdTbl = grib2vcrdTbl; - } - - public static String getName() { - return name; - } - - public static void setName(String name) { - Grib2VcrdTableLookup.name = name; - } - - public static String getGnamByVcrdId ( int vcrdid1, int vcrdid2) throws GribException { - Grib2Vcrd g2vcrd=null; - String gvrdName = "NONE"; - // Wrap decoding in a try block, in case of exception on xml. - try { - - - // Read in the stationNumber table XML if not exists - if (grib2vcrdTbl == null) { - readG2vcrdTable(); - } - // Search station ID and return whole station record - if (grib2vcrdTbl != null) { - g2vcrd = grib2vcrdTbl.getGrib2Vcrd(vcrdid1, vcrdid2); - } - - if ( g2vcrd != null) { - gvrdName = g2vcrd.gnam; - scale = g2vcrd.scale; - } - } - catch (Exception e) { - //TODO: Use central error logging if this code is kept - throw new GribException("Error occurs while finding g2vcrd entry from g2vcrd.xml table"); - } - - return gvrdName; - } - - public static Grib2Vcrd getGrib2VcrdByGrib1VcrdId ( int vcrdid ) throws GribException { - Grib2Vcrd g2vcrd=null; - // Wrap decoding in a try block, in case of exception on xml. - try { - - - // Read in the stationNumber table XML if not exists - if (grib2vcrdTbl == null) { - readG2vcrdTable(); - } - // Search station ID and return whole station record - if (grib2vcrdTbl != null) { - g2vcrd = grib2vcrdTbl.getGrib2VcrdByVcrd1(vcrdid); - } - } - catch (Exception e) { - //TODO: Use central error logging if this code is kept - throw new GribException("Error occurs while finding g2vcrd entry from g2vcrd.xml table"); - } - - return g2vcrd; - } - - public static String getScaleByVcrdId ( int vcrdid1, int vcrdid2) throws GribException { - Grib2Vcrd g2vcrd=null; - // Wrap decoding in a try block, in case of exception on xml. - try { - - - // Read in the stationNumber table XML if not exists - if (grib2vcrdTbl == null) { - readG2vcrdTable(); - } - // Search station ID and return whole station record - if (grib2vcrdTbl != null) { - g2vcrd = grib2vcrdTbl.getGrib2Vcrd(vcrdid1, vcrdid2); - } - - if ( g2vcrd != null) { - scale = g2vcrd.scale; - } - } - catch (Exception e) { - //TODO: Use central error logging if this code is kept - throw new GribException("Error occurs while finding g2vcrd entry from g2vcrd.xml table"); - } - - return scale; - } - - public static String getUnits() { - return units; - } - - public static void setUnits(String units) { - Grib2VcrdTableLookup.units = units; - } - - public static String getScale() { - return scale; - } - - public static void setScale(String scale) { - Grib2VcrdTableLookup.scale = scale; - } - - public static String getGnam() { - return gnam; - } - - public static void setGnam(String gnam) { - Grib2VcrdTableLookup.gnam = gnam; - } - -} +/** + * Grib2vcrdTableLookup - A Java class to define some known + * both g2vcrdncep1.tbl and g2vcrdwmo2.tbl. + * + * SOFTWARE HISTORY + * + * Date Ticket# Engineer Description + * ------------ ---------- ----------- -------------------------- + * 10/2010 276 L. Lin Initial creation + * 06/2011 X. Guo Added getGnamByVcrdId(() + * getScaleByVcrdId() + * 07/2011 X. Guo Added getGrib2VcrdByGrib1VcrdId() + * + * + * + * This code has been developed by the SIB for use in the AWIPS2 system. + * @author L. Lin + * @version 1.0 + */ +package gov.noaa.nws.ncep.edex.util.grib2vcrd; + +import java.io.File; + +import gov.noaa.nws.ncep.common.dataplugin.ncgrib.exception.GribException; + +import com.raytheon.uf.common.localization.IPathManager; +import com.raytheon.uf.common.localization.LocalizationContext; +import com.raytheon.uf.common.localization.PathManagerFactory; +import com.raytheon.uf.edex.core.props.PropertiesFactory; + +public class Grib2VcrdTableLookup { + + private static Grib2VcrdTable grib2vcrdTbl=null; + private static String name; + private static String units; + private static String scale; + private static String gnam; + + public static synchronized String readG2vcrdTable () throws GribException{ + + Grib2VcrdTable myTbl = null; + + /* + * Gets all predefined found in the utility directory + */ + IPathManager pathMgr = PathManagerFactory.getPathManager(); + LocalizationContext commonStaticBase = pathMgr.getContext( + LocalizationContext.LocalizationType.COMMON_STATIC, + LocalizationContext.LocalizationLevel.BASE); + + LocalizationContext commonStaticSite = pathMgr.getContext( + LocalizationContext.LocalizationType.COMMON_STATIC, + LocalizationContext.LocalizationLevel.SITE); + + String path = ""; + String sitePath = ""; + + try { + path = pathMgr.getFile( + commonStaticBase, + "ncgrid" + File.separator + "grib2vcrd.xml") + .getCanonicalPath(); + + //System.out.println (" grib2 vcrd table lookup path=" + path); + + sitePath = pathMgr.getFile( + commonStaticSite, + PropertiesFactory.getInstance().getEnvProperties() + .getEnvValue("SITENAME") + + File.separator + + "ncgrid" + + File.separator + + "g2vcrd.xml").getCanonicalPath(); + //System.out.println (" grib2 vcrd table lookup sitepath=" + sitePath); + } catch (Exception e) { + throw new GribException("Unable to unmarshal ncep grib2vcrd.xml file"); + } + + File modelFile = new File(path); + try { + if (modelFile.exists()) { + myTbl = new Grib2VcrdTable(path); + setG2vcrdTable(myTbl); + //System.out.println("Grib2varsTableLookup- read grib2vars.xml file=" + path); + } + } catch (Exception e) { + throw new GribException("Unable to read ncep grib2vcrd file"); + } + return path; + } + + /** + * Given discipline, category, pid, and pdt, find g2vcrd entry in "grib2vcrd.xml" + * and set g2vcrdid, name, units, scale, gnam, and missing fields. + * . + * + * @param discipline, category, pid and pdt are integers. + * @return + * @throws GribException + * + */ + public static int getG2vcrdId(int vcrdid1, int vcrdid2) throws GribException { + Grib2Vcrd g2vcrd=null; + int g2vcrdid = -1; + // Wrap decoding in a try block, in case of exception on xml. + try { + + + // Read in the stationNumber table XML if not exists + if (grib2vcrdTbl == null) { + readG2vcrdTable(); + } + // Search station ID and return whole station record + if (grib2vcrdTbl != null) { + g2vcrd = grib2vcrdTbl.getGrib2Vcrd(vcrdid1, vcrdid2); + } + + if ( g2vcrd != null) { + g2vcrdid = g2vcrd.g2Vcrdid; + name = g2vcrd.name; + units = g2vcrd.units; + gnam = g2vcrd.gnam; + scale = g2vcrd.scale; + } + } + catch (Exception e) { + //TODO: Use central error logging if this code is kept + throw new GribException("Error occurs while finding g2vcrd entry from g2vcrd.xml table"); + } + + return g2vcrdid; + } + + /** + * @return the grib2vcrdTbl + */ + public static Grib2VcrdTable getG2vcrdTable() { + return grib2vcrdTbl; + } + + /** + * @param Grib2VcrdTable + * the grib2vcrdTbl to set + */ + public static void setG2vcrdTable(Grib2VcrdTable grib2vcrdTbl) { + Grib2VcrdTableLookup.grib2vcrdTbl = grib2vcrdTbl; + } + + public static String getName() { + return name; + } + + public static void setName(String name) { + Grib2VcrdTableLookup.name = name; + } + + public static String getGnamByVcrdId ( int vcrdid1, int vcrdid2) throws GribException { + Grib2Vcrd g2vcrd=null; + String gvrdName = "NONE"; + // Wrap decoding in a try block, in case of exception on xml. + try { + + + // Read in the stationNumber table XML if not exists + if (grib2vcrdTbl == null) { + readG2vcrdTable(); + } + // Search station ID and return whole station record + if (grib2vcrdTbl != null) { + g2vcrd = grib2vcrdTbl.getGrib2Vcrd(vcrdid1, vcrdid2); + } + + if ( g2vcrd != null) { + gvrdName = g2vcrd.gnam; + scale = g2vcrd.scale; + } + } + catch (Exception e) { + //TODO: Use central error logging if this code is kept + throw new GribException("Error occurs while finding g2vcrd entry from g2vcrd.xml table"); + } + + return gvrdName; + } + + public static Grib2Vcrd getGrib2VcrdByGrib1VcrdId ( int vcrdid ) throws GribException { + Grib2Vcrd g2vcrd=null; + // Wrap decoding in a try block, in case of exception on xml. + try { + + + // Read in the stationNumber table XML if not exists + if (grib2vcrdTbl == null) { + readG2vcrdTable(); + } + // Search station ID and return whole station record + if (grib2vcrdTbl != null) { + g2vcrd = grib2vcrdTbl.getGrib2VcrdByVcrd1(vcrdid); + } + } + catch (Exception e) { + //TODO: Use central error logging if this code is kept + throw new GribException("Error occurs while finding g2vcrd entry from g2vcrd.xml table"); + } + + return g2vcrd; + } + + public static String getScaleByVcrdId ( int vcrdid1, int vcrdid2) throws GribException { + Grib2Vcrd g2vcrd=null; + // Wrap decoding in a try block, in case of exception on xml. + try { + + + // Read in the stationNumber table XML if not exists + if (grib2vcrdTbl == null) { + readG2vcrdTable(); + } + // Search station ID and return whole station record + if (grib2vcrdTbl != null) { + g2vcrd = grib2vcrdTbl.getGrib2Vcrd(vcrdid1, vcrdid2); + } + + if ( g2vcrd != null) { + scale = g2vcrd.scale; + } + } + catch (Exception e) { + //TODO: Use central error logging if this code is kept + throw new GribException("Error occurs while finding g2vcrd entry from g2vcrd.xml table"); + } + + return scale; + } + + public static String getUnits() { + return units; + } + + public static void setUnits(String units) { + Grib2VcrdTableLookup.units = units; + } + + public static String getScale() { + return scale; + } + + public static void setScale(String scale) { + Grib2VcrdTableLookup.scale = scale; + } + + public static String getGnam() { + return gnam; + } + + public static void setGnam(String gnam) { + Grib2VcrdTableLookup.gnam = gnam; + } + +} diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/src/gov/noaa/nws/ncep/edex/util/grib2vcrd/IGrib2VcrdField.java b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/src/gov/noaa/nws/ncep/edex/util/grib2vcrd/IGrib2VcrdField.java index be73da436f..26fcb158bf 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/src/gov/noaa/nws/ncep/edex/util/grib2vcrd/IGrib2VcrdField.java +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/src/gov/noaa/nws/ncep/edex/util/grib2vcrd/IGrib2VcrdField.java @@ -1,15 +1,15 @@ -package gov.noaa.nws.ncep.edex.util.grib2vcrd; - -public interface IGrib2VcrdField { - - public static enum Grib2VcrdField { - G2VCRDID, // g2vars id - VCRDID1, // The vertical coordination 1 - VCRDID2, // The vertical coordination 2 - NAME, // description of this g2vars - UNITS, // units - GNAM, // gnam - SCALE, // scale - } - -} +package gov.noaa.nws.ncep.edex.util.grib2vcrd; + +public interface IGrib2VcrdField { + + public static enum Grib2VcrdField { + G2VCRDID, // g2vars id + VCRDID1, // The vertical coordination 1 + VCRDID2, // The vertical coordination 2 + NAME, // description of this g2vars + UNITS, // units + GNAM, // gnam + SCALE, // scale + } + +} diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/Aviation-Grid1.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/Aviation-Grid1.xml index f2ff332fc0..730e78197d 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/Aviation-Grid1.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/Aviation-Grid1.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/Aviation-Grid2.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/Aviation-Grid2.xml index 39d95053df..108a53de8c 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/Aviation-Grid2.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/Aviation-Grid2.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/Aviation-Grid3.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/Aviation-Grid3.xml index 9fbe47920a..c6495c9896 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/Aviation-Grid3.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/Aviation-Grid3.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/ECMWF-Grid1.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/ECMWF-Grid1.xml index 89d417237a..db4d4a5c2c 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/ECMWF-Grid1.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/ECMWF-Grid1.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/ECMWF-Grid10.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/ECMWF-Grid10.xml index f64d85205e..9ffee4353c 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/ECMWF-Grid10.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/ECMWF-Grid10.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/ECMWF-Grid11.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/ECMWF-Grid11.xml index a19b66eae1..10765f610b 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/ECMWF-Grid11.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/ECMWF-Grid11.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/ECMWF-Grid12.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/ECMWF-Grid12.xml index 4b18634754..7697a65ec5 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/ECMWF-Grid12.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/ECMWF-Grid12.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/ECMWF-Grid2.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/ECMWF-Grid2.xml index 3923951a11..5f1548fc7c 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/ECMWF-Grid2.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/ECMWF-Grid2.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/ECMWF-Grid3.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/ECMWF-Grid3.xml index 7abe63bc28..2903565f4c 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/ECMWF-Grid3.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/ECMWF-Grid3.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/ECMWF-Grid4.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/ECMWF-Grid4.xml index c57670c840..f3b42af1a1 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/ECMWF-Grid4.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/ECMWF-Grid4.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/ECMWF-Grid5.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/ECMWF-Grid5.xml index 57fcfaf827..f471d9db33 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/ECMWF-Grid5.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/ECMWF-Grid5.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/ECMWF-Grid6.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/ECMWF-Grid6.xml index 1a06e4d8cc..f039f81e9d 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/ECMWF-Grid6.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/ECMWF-Grid6.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/ECMWF-Grid7.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/ECMWF-Grid7.xml index 939d86033f..0becf592b7 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/ECMWF-Grid7.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/ECMWF-Grid7.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/ECMWF-Grid8.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/ECMWF-Grid8.xml index 6bda7e6344..9801e22670 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/ECMWF-Grid8.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/ECMWF-Grid8.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/ECMWF-Grid9.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/ECMWF-Grid9.xml index 4ddf0033cb..a869ab89af 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/ECMWF-Grid9.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/ECMWF-Grid9.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/HiResAK.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/HiResAK.xml index f4f197dc7c..3930903acb 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/HiResAK.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/HiResAK.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/HiResHI.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/HiResHI.xml index 4a0e9c0888..66f2c113bb 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/HiResHI.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/HiResHI.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/HiResPR.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/HiResPR.xml index 734694e7a7..dd79ce984f 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/HiResPR.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/HiResPR.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/HiResWest.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/HiResWest.xml index e64a95cca4..63e2174c0f 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/HiResWest.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/HiResWest.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/HiresEast.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/HiresEast.xml index 86bb808dd1..4117ffea45 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/HiresEast.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/HiresEast.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/RTMA-Grid197.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/RTMA-Grid197.xml index 58c86f48ec..4c4b0e1a8f 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/RTMA-Grid197.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/RTMA-Grid197.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid1.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid1.xml index 53b78bd6ac..1106c34bb3 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid1.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid1.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid10.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid10.xml index 6b3e78c9bc..219594e981 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid10.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid10.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid101.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid101.xml index a93a4bd3ec..5380885ca1 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid101.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid101.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid104.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid104.xml index baf81530f0..b7ef7ff0c3 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid104.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid104.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid10c.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid10c.xml index b140cfdb3c..1a13df0bc6 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid10c.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid10c.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid11.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid11.xml index c5bb7080b7..c569302f02 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid11.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid11.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid110.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid110.xml index b4f95e5efb..9405c5902d 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid110.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid110.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid11c.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid11c.xml index e2c068845c..eb139145a6 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid11c.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid11c.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid12.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid12.xml index 39dac6d314..4d97d31a39 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid12.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid12.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid126.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid126.xml index 74511c1d0f..8b0f2041a1 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid126.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid126.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid126c.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid126c.xml index 72b6b7871c..7306e952c1 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid126c.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid126c.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid127.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid127.xml index a3a9b3cc2a..e045471862 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid127.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid127.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid127c.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid127c.xml index dd96ba8211..9321e31c7f 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid127c.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid127c.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid128.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid128.xml index 03310ffac9..50a7b23acc 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid128.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid128.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid128c.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid128c.xml index cfd497511b..d2612c2b29 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid128c.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid128c.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid129.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid129.xml index f957915ea6..0a259fd9af 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid129.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid129.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid129c.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid129c.xml index 626e06bafc..b37eb43820 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid129c.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid129c.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid13.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid13.xml index d750b0db03..59e14ac32e 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid13.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid13.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid130.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid130.xml index 285d553ca9..17f76b70fc 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid130.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid130.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid138.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid138.xml index 2d2b88b8e3..4ff0093571 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid138.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid138.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid14.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid14.xml index 909eb7e63b..bac3aac5db 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid14.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid14.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid145.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid145.xml index d293837977..5fe2120e67 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid145.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid145.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid146.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid146.xml index 6ba234dcea..a49ca24e97 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid146.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid146.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid147.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid147.xml index 291eb75c2f..4b812a8f6c 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid147.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid147.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid148.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid148.xml index 31e6d40b86..5f781dc24a 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid148.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid148.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid15.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid15.xml index d02a602c84..294c03f4be 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid15.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid15.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid150.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid150.xml index 6ca4e1af28..5b2b656460 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid150.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid150.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid151.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid151.xml index c94feadb49..c8f25bdb44 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid151.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid151.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid16.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid16.xml index 0cd61689f5..2ad72d561f 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid16.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid16.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid160.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid160.xml index 713012cde3..afc4e6fe80 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid160.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid160.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid161.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid161.xml index 2b41137e63..727c56f81e 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid161.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid161.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid163.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid163.xml index 0432212fde..518f6635ea 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid163.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid163.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid17.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid17.xml index 9773ab010e..0bfa2e96e1 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid17.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid17.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid170.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid170.xml index d07ce68baa..701e31d722 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid170.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid170.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid170c.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid170c.xml index 16761a797e..5cccf210ed 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid170c.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid170c.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid171.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid171.xml index 79e6d35f0a..998e2b7d2f 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid171.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid171.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid172.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid172.xml index caa214c40d..0071a1050e 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid172.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid172.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid173.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid173.xml index bbe75d6e62..a8ccd7dc4b 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid173.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid173.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid173c.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid173c.xml index ef99d3860f..89c10b6997 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid173c.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid173c.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid174.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid174.xml index dff9db595e..6bc649734e 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid174.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid174.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid174c.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid174c.xml index fcac138d34..654068356c 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid174c.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid174c.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid175.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid175.xml index b0a90760e1..7778031cc3 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid175.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid175.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid176.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid176.xml index 91858c87af..ed6f4be3cb 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid176.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid176.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid18.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid18.xml index c08f14fd55..e843601f16 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid18.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid18.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid180.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid180.xml index bb6e7cb954..c0bf7c4d82 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid180.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid180.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid181.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid181.xml index 14483d839b..18f51e6416 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid181.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid181.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid182.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid182.xml index 8a0013334a..4452eecff8 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid182.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid182.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid183.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid183.xml index 6d07eba8f0..2a4b8d6d69 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid183.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid183.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid185.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid185.xml index a6f1cc6eec..12629a3365 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid185.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid185.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid186.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid186.xml index 03dc917f58..5c86473dbf 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid186.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid186.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid195.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid195.xml index c520c25d85..c6401c89dd 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid195.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid195.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid196.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid196.xml index c2bd7a2311..eb9c9335c1 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid196.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid196.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid197.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid197.xml index 4eddaed640..6fc53c8061 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid197.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid197.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid198.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid198.xml index 2fbb46bc3f..cf5d160a6e 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid198.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid198.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid199.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid199.xml index 52e9fbe1c5..0d47d82f25 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid199.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid199.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid2.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid2.xml index 6a8832552f..9c4111f4fb 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid2.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid2.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid201.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid201.xml index 82c1f46eeb..d36d268940 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid201.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid201.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid202.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid202.xml index 73230b5827..a7718ca46a 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid202.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid202.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid203.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid203.xml index 9dddc1b004..293e6c63b8 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid203.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid203.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid204.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid204.xml index 309c5e0855..bb65377895 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid204.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid204.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid205.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid205.xml index 28dd9c5d77..0715dbac6b 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid205.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid205.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid206.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid206.xml index 9c15a57fdf..784405382b 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid206.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid206.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid207.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid207.xml index 2a187da017..5f243cbbdf 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid207.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid207.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid208.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid208.xml index 7c749bc7c3..456c697dd2 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid208.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid208.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid209.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid209.xml index f7faa71d97..ce25faacf2 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid209.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid209.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid210.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid210.xml index b4a5f96271..8d6bc2be1c 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid210.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid210.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid211.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid211.xml index 07aee483b4..b72b88a6dd 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid211.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid211.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid212.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid212.xml index e1d9e5ebb5..0c52c2dd8b 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid212.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid212.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid213.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid213.xml index 9da391cfe8..213be5ca89 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid213.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid213.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid214.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid214.xml index 5f89e13fc6..40ce8ce810 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid214.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid214.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid215.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid215.xml index 3448bece8d..17d81e4935 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid215.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid215.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid216.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid216.xml index a0c50adb81..59ae519f97 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid216.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid216.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid217.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid217.xml index 0e39a70732..acdc4f556f 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid217.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid217.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid218.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid218.xml index 04187460bd..2ed2d27782 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid218.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid218.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid219.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid219.xml index 34194d92c8..ad02e8886e 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid219.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid219.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid220.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid220.xml index 225d2e7f91..62e700fd50 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid220.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid220.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid221.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid221.xml index 3f722029c7..9084126583 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid221.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid221.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid222.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid222.xml index bd76ed9f5d..88d803a4a3 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid222.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid222.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid223.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid223.xml index 681244e8d5..d39d5c5227 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid223.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid223.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid224.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid224.xml index ef170ea6d6..be10580224 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid224.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid224.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid225.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid225.xml index 6a2227476a..12f162f92a 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid225.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid225.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid226.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid226.xml index 7b1e0e1515..90ed196d91 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid226.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid226.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid227.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid227.xml index cd65b1a611..69feb42d43 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid227.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid227.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid228.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid228.xml index 4a1ade36e4..99e5761c43 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid228.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid228.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid228c.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid228c.xml index ee765c70eb..468b353a43 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid228c.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid228c.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid229.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid229.xml index ee30882d0e..839cf1765c 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid229.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid229.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid229c.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid229c.xml index c1a5b8dac4..9078031485 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid229c.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid229c.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid230.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid230.xml index bfbe351c75..4918afe41d 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid230.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid230.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid230c.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid230c.xml index 91ed96e648..5157e0b49c 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid230c.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid230c.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid231.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid231.xml index c7b0c54c06..696d73d2fd 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid231.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid231.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid231c.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid231c.xml index ccb4298994..136e4dc2cb 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid231c.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid231c.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid232.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid232.xml index d5d9219bb5..1e0bc33471 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid232.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid232.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid232c.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid232c.xml index 79b34c4c0f..8a4444b0b3 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid232c.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid232c.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid233.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid233.xml index 97cdb2aabf..939732e719 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid233.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid233.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid233c.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid233c.xml index 89c02f7254..ca9ba4ac38 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid233c.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid233c.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid234.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid234.xml index e5120632be..b32567cacf 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid234.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid234.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid235.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid235.xml index 92391509b7..9822207f8e 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid235.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid235.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid235c.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid235c.xml index f05469bf7d..3797ffeafa 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid235c.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid235c.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid236.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid236.xml index 251257092c..c62a1d7dbd 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid236.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid236.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid237.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid237.xml index c47874d3df..c2964e5438 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid237.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid237.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid238.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid238.xml index e5fbce468a..a2907270c6 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid238.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid238.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid239.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid239.xml index 439883c513..72a1f1b83e 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid239.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid239.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid240.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid240.xml index 2fe4759509..788d073103 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid240.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid240.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid240ALR.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid240ALR.xml index 2cf4014b4a..d0b574008e 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid240ALR.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid240ALR.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid240FWR.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid240FWR.xml index 79f89251bb..57b3ae3849 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid240FWR.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid240FWR.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid240KRF.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid240KRF.xml index 1c5f011274..8903fee0bc 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid240KRF.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid240KRF.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid240MSR.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid240MSR.xml index f8272b6789..5a3a383a71 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid240MSR.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid240MSR.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid240ORN.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid240ORN.xml index 8b001ae2cb..7454134c87 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid240ORN.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid240ORN.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid240PTR.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid240PTR.xml index ac79f1a147..e03020f108 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid240PTR.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid240PTR.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid240RHA.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid240RHA.xml index 22c9b11c4b..fc6403abdd 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid240RHA.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid240RHA.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid240RSA.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid240RSA.xml index ed87a56ca4..640d1bd4cb 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid240RSA.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid240RSA.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid240STR.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid240STR.xml index 86a91e3bfd..cf1f554c30 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid240STR.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid240STR.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid240TAR.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid240TAR.xml index 7c96d93c91..424c8d52c6 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid240TAR.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid240TAR.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid240TIR.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid240TIR.xml index 7b3ffdb7df..658172817b 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid240TIR.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid240TIR.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid240TUA.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid240TUA.xml index 75f16f44aa..c7de95fc07 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid240TUA.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid240TUA.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid241.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid241.xml index d89cb69354..10a5859728 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid241.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid241.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid242.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid242.xml index ebc21427a6..3fabbff6eb 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid242.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid242.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid243.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid243.xml index 7951ec7abc..f8a32619cc 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid243.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid243.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid244.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid244.xml index a6786e4e82..491475cac9 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid244.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid244.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid245.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid245.xml index f4414d30cd..d8aa08981b 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid245.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid245.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid246.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid246.xml index bdde6ae84b..0498faa6a4 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid246.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid246.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid247.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid247.xml index 594acd5d9a..0f2d7ea64c 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid247.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid247.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid248.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid248.xml index 082fbc42ee..7424eef426 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid248.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid248.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid249.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid249.xml index 53df2c92f9..3ab1cb3666 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid249.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid249.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid250.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid250.xml index 906c8af4f3..700526bcb0 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid250.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid250.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid251.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid251.xml index 0b9d230059..682d68d515 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid251.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid251.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid252.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid252.xml index f28aea370d..b8f990fde5 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid252.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid252.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid253.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid253.xml index 375ebf0fd4..69fcd3cf83 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid253.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid253.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid254.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid254.xml index 432a9dcaaa..ecd3cd80be 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid254.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid254.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid29.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid29.xml index 2a1c366d33..e3259b96e1 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid29.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid29.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid3.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid3.xml index ba25f59021..91c51f8468 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid3.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid3.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid30.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid30.xml index a651418b35..1e264de235 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid30.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid30.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid33.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid33.xml index 17f94ee888..ddc537d997 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid33.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid33.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid34.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid34.xml index 745605676e..6989b1c8d1 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid34.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid34.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid37.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid37.xml index 9df87b19c8..cf4d82b219 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid37.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid37.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid38.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid38.xml index 3e2711c508..53e597c4f7 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid38.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid38.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid39.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid39.xml index 42ac7626c5..987868386e 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid39.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid39.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid3c.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid3c.xml index 5c6ea1f907..f5c23c4f93 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid3c.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid3c.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid4.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid4.xml index 5592137a04..a25b3e4483 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid4.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid4.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid40.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid40.xml index 88dc11163e..11586b6c4a 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid40.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid40.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid41.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid41.xml index 8d074bf3ba..6996dc5d9f 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid41.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid41.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid42.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid42.xml index fdff18959c..cf5554b58a 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid42.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid42.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid43.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid43.xml index 056caa1d9a..80419ceabc 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid43.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid43.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid44.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid44.xml index 9fcd8dc9c6..cc20c7396d 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid44.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid44.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid45.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid45.xml index fb105922d2..54db8b6a93 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid45.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid45.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid45c.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid45c.xml index ecfdca1223..d1fecd32a1 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid45c.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid45c.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid5.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid5.xml index f2148a663d..497e073ae6 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid5.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid5.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid6.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid6.xml index 8f8c1c5b27..a075bac54b 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid6.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid6.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid85.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid85.xml index dd11ed9c78..b76a6e0530 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid85.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid85.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid86.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid86.xml index aa4ba9703f..06bab8c018 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid86.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid86.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid87.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid87.xml index 52dcb5ab88..a92248bd80 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid87.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid87.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid88.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid88.xml index 41d75ea19e..5dd087a168 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid88.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid88.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid98.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid98.xml index 850d1aa45f..cadda74556 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid98.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid98.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid98c.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid98c.xml index f147cae649..d2aaf4d111 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid98c.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid98c.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid99.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid99.xml index 8e8abadd0b..588488ba11 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid99.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/grid99.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/ncwf.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/ncwf.xml index e95a174066..9985a9899d 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/ncwf.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/ncwf.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/rcm.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/rcm.xml index 97d866f338..73ddf80a0b 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/rcm.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncgrib/utility/edex_static/base/ncgrib/ncgrids/rcm.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncpafm/gov.noaa.nws.ncep.edex.plugin.ncpafm.ecl b/ncep/gov.noaa.nws.ncep.edex.plugin.ncpafm/gov.noaa.nws.ncep.edex.plugin.ncpafm.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncpafm/src/gov/noaa/nws/ncep/edex/plugin/ncpafm/decoder/package-info.java b/ncep/gov.noaa.nws.ncep.edex.plugin.ncpafm/src/gov/noaa/nws/ncep/edex/plugin/ncpafm/decoder/package-info.java index a93ee98c6c..944968dc41 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncpafm/src/gov/noaa/nws/ncep/edex/plugin/ncpafm/decoder/package-info.java +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncpafm/src/gov/noaa/nws/ncep/edex/plugin/ncpafm/decoder/package-info.java @@ -1,7 +1,7 @@ -/** - * PAFM implementation of the plugin pattern. - * - * Package includes classes to decode the PAFM message and persist the data. - * - */ +/** + * PAFM implementation of the plugin pattern. + * + * Package includes classes to decode the PAFM message and persist the data. + * + */ package gov.noaa.nws.ncep.edex.plugin.ncpafm.decoder; \ No newline at end of file diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncpirep/gov.noaa.nws.ncep.edex.plugin.ncpirep.ecl b/ncep/gov.noaa.nws.ncep.edex.plugin.ncpirep/gov.noaa.nws.ncep.edex.plugin.ncpirep.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncpirep/src/gov/noaa/nws/ncep/edex/plugin/ncpirep/NcPirepDecoder.java b/ncep/gov.noaa.nws.ncep.edex.plugin.ncpirep/src/gov/noaa/nws/ncep/edex/plugin/ncpirep/NcPirepDecoder.java index 0023a89bad..4487a3a081 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncpirep/src/gov/noaa/nws/ncep/edex/plugin/ncpirep/NcPirepDecoder.java +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncpirep/src/gov/noaa/nws/ncep/edex/plugin/ncpirep/NcPirepDecoder.java @@ -1,138 +1,138 @@ /** * This software was modified from Raytheon's airep plugin by * NOAA/NWS/NCEP/NCO to order to output point data in HDF5. - **/ -package gov.noaa.nws.ncep.edex.plugin.ncpirep; - -import java.util.Calendar; + **/ +package gov.noaa.nws.ncep.edex.plugin.ncpirep; + +import java.util.Calendar; import java.util.List; - -import com.raytheon.edex.esb.Headers; -import com.raytheon.edex.exception.DecoderException; -import com.raytheon.edex.plugin.AbstractDecoder; -import com.raytheon.uf.common.dataplugin.PluginDataObject; + +import com.raytheon.edex.esb.Headers; +import com.raytheon.edex.exception.DecoderException; +import com.raytheon.edex.plugin.AbstractDecoder; +import com.raytheon.uf.common.dataplugin.PluginDataObject; import com.raytheon.uf.common.dataplugin.PluginException; import com.raytheon.uf.common.pointdata.spatial.AircraftObsLocation; -import com.raytheon.uf.common.time.DataTime; -import com.raytheon.uf.edex.decodertools.aircraft.AircraftCloudLayer; -import com.raytheon.uf.edex.decodertools.aircraft.AircraftFlightCondition; -import com.raytheon.uf.edex.decodertools.core.BasePoint; -import com.raytheon.uf.edex.decodertools.core.DecoderTools; -import com.raytheon.uf.edex.decodertools.core.IDecoderInput; -import com.raytheon.uf.edex.decodertools.time.TimeTools; -import com.raytheon.uf.edex.wmo.message.WMOHeader; +import com.raytheon.uf.common.time.DataTime; +import com.raytheon.uf.edex.decodertools.aircraft.AircraftCloudLayer; +import com.raytheon.uf.edex.decodertools.aircraft.AircraftFlightCondition; +import com.raytheon.uf.edex.decodertools.core.BasePoint; +import com.raytheon.uf.edex.decodertools.core.DecoderTools; +import com.raytheon.uf.edex.decodertools.core.IDecoderInput; +import com.raytheon.uf.edex.decodertools.time.TimeTools; +import com.raytheon.uf.edex.wmo.message.WMOHeader; import gov.noaa.nws.ncep.common.dataplugin.ncpirep.NcPirepLayerData; import gov.noaa.nws.ncep.common.dataplugin.ncpirep.NcPirepRecord; -import gov.noaa.nws.ncep.edex.plugin.ncpirep.decoder.NcPirepParser; -/** - * Decoder strategy for text PIREP observation data. Most common usage is as - * follows. - * NcPirepDecoder dec = new NcPirepDecoder(); - * dec.setMessage(msgData); - * while(dec.hasNext()) - * { - * PluginDataObject r = dec.decode(); - * // do something with record. - * } - * - * - * - *
- * 
- * SOFTWARE HISTORY
- * 
- * Date         Ticket#    Engineer    Description
- * ------------ ---------- ----------- --------------------------
+import gov.noaa.nws.ncep.edex.plugin.ncpirep.decoder.NcPirepParser;
+/**
+ * Decoder strategy for text PIREP observation data. Most common usage is as
+ * follows. 
+ *   NcPirepDecoder dec = new NcPirepDecoder();
+ *   dec.setMessage(msgData);
+ *   while(dec.hasNext())
+ *   {
+ *      PluginDataObject r = dec.decode();
+ *      // do something with record.
+ *   }
+ * 
+ * 
+ * 
+ * 
+ * 
+ * SOFTWARE HISTORY
+ * 
+ * Date         Ticket#    Engineer    Description
+ * ------------ ---------- ----------- --------------------------
  * 04/28/2011              F.J.Yen     Initial creation from pirep.
  * 20110830     286        qzhou       Fixed report time
- * 09/26/2011   286        qzhou       Changed reportType from int to string
- * 
- * - * @author F. J. Yen - * @version 1.0 - */ -public class NcPirepDecoder extends AbstractDecoder { - // Name of the plugin controlling this decoder. - private final String PLUGIN_NAME; - - /** - * Construct this decoder using supplied plugin name. - * - * @throws DecoderException - */ - public NcPirepDecoder(String pluginName) throws DecoderException { - PLUGIN_NAME = pluginName; - } - - /** - * Get the next decoded data record. - * - * @param input - * the input - * @return One record of decoded data. - * @throws DecoderException - * Thrown if no data is available. - */ - public PluginDataObject[] decode(IDecoderInput input, Headers headers) + * 09/26/2011 286 qzhou Changed reportType from int to string + *
+ * + * @author F. J. Yen + * @version 1.0 + */ +public class NcPirepDecoder extends AbstractDecoder { + // Name of the plugin controlling this decoder. + private final String PLUGIN_NAME; + + /** + * Construct this decoder using supplied plugin name. + * + * @throws DecoderException + */ + public NcPirepDecoder(String pluginName) throws DecoderException { + PLUGIN_NAME = pluginName; + } + + /** + * Get the next decoded data record. + * + * @param input + * the input + * @return One record of decoded data. + * @throws DecoderException + * Thrown if no data is available. + */ + public PluginDataObject[] decode(IDecoderInput input, Headers headers) throws DecoderException { - - PluginDataObject[] reports = null; - - String traceId = ""; - if (headers != null) { - traceId = (String) headers.get("traceId"); - } - try { - logger.debug(traceId + "- NcPirepDecoder.decode()"); + + PluginDataObject[] reports = null; + + String traceId = ""; + if (headers != null) { + traceId = (String) headers.get("traceId"); + } + try { + logger.debug(traceId + "- NcPirepDecoder.decode()"); System.out.println("****"+input.getReport() ); - - NcPirepRecord report = populateRecord(new NcPirepParser(input - .getReport(), traceId), input.getWmoHeader()); - - if (report != null) { - report.setTraceId(traceId); - report.setPluginName(PLUGIN_NAME); - try { - report.constructDataURI(); - } catch (PluginException e) { - fixTrace(e); - logger.error(traceId + "- Unable to construct dataURI", e); - } - reports = new PluginDataObject[] { report }; - } - - } catch (Exception e) { - fixTrace(e); - logger.error(traceId + "- Error in NcPirepDecoder", e); - } finally { - if (reports == null) { - reports = new PluginDataObject[0]; - } - } - return reports; - } - - /** - * Populate a NcPirepRecord with data that was decoded from a single PIREP - * report. - * - * @param parser - * The NcPIREP parser that contains the decoded data. - * @param wmoHeader - * the wmo header - * @return The populated record. This method returns a null reference if - * either the observation time or location data is unavailable. - */ - private NcPirepRecord populateRecord(NcPirepParser parser, WMOHeader wmoHeader) { - - NcPirepRecord record = null; + + NcPirepRecord report = populateRecord(new NcPirepParser(input + .getReport(), traceId), input.getWmoHeader()); + + if (report != null) { + report.setTraceId(traceId); + report.setPluginName(PLUGIN_NAME); + try { + report.constructDataURI(); + } catch (PluginException e) { + fixTrace(e); + logger.error(traceId + "- Unable to construct dataURI", e); + } + reports = new PluginDataObject[] { report }; + } + + } catch (Exception e) { + fixTrace(e); + logger.error(traceId + "- Error in NcPirepDecoder", e); + } finally { + if (reports == null) { + reports = new PluginDataObject[0]; + } + } + return reports; + } + + /** + * Populate a NcPirepRecord with data that was decoded from a single PIREP + * report. + * + * @param parser + * The NcPIREP parser that contains the decoded data. + * @param wmoHeader + * the wmo header + * @return The populated record. This method returns a null reference if + * either the observation time or location data is unavailable. + */ + private NcPirepRecord populateRecord(NcPirepParser parser, WMOHeader wmoHeader) { + + NcPirepRecord record = null; AircraftObsLocation location = null; - - if (parser != null) { - // If there is no observation time or location, don't bother going further. + + if (parser != null) { + // If there is no observation time or location, don't bother going further. - // parser.getObservationTime() get the current day of month. Need to set wmoHeader day. + // parser.getObservationTime() get the current day of month. Need to set wmoHeader day. Calendar oTime = parser.getObservationTime(); if (oTime != null) { // try { @@ -143,125 +143,125 @@ public class NcPirepDecoder extends AbstractDecoder { // catch (ArrayIndexOutOfBoundsException e) { // } // } - - BasePoint p = parser.getLocation(); - - if ((oTime != null) && (p != null)) { - record = new NcPirepRecord(); - location = new AircraftObsLocation(); - - record.setTimeObs(oTime); - record.setRefHour(TimeTools.copyToNearestHour(oTime)); - DataTime dataTime = new DataTime(oTime); - record.setDataTime(dataTime); - - record.setWmoHeader(wmoHeader.getWmoHeader()); - record.setObsText(DecoderTools.normalizeObs(parser - .getReportData(), wmoHeader.getWmoHeader())); - - location.setLatitude(p.getLatitude()); - location.setLongitude(p.getLongitude()); + + BasePoint p = parser.getLocation(); + + if ((oTime != null) && (p != null)) { + record = new NcPirepRecord(); + location = new AircraftObsLocation(); + + record.setTimeObs(oTime); + record.setRefHour(TimeTools.copyToNearestHour(oTime)); + DataTime dataTime = new DataTime(oTime); + record.setDataTime(dataTime); + + record.setWmoHeader(wmoHeader.getWmoHeader()); + record.setObsText(DecoderTools.normalizeObs(parser + .getReportData(), wmoHeader.getWmoHeader())); + + location.setLatitude(p.getLatitude()); + location.setLongitude(p.getLongitude()); location.setLocation(p.getLatitude(), p.getLongitude()); location.setStationId(parser.getReportingStationId()); - - record.setReportData(parser.getReportData()); + + record.setReportData(parser.getReportData()); record.setReportType("PIREP"); //parser.getReportType()); - - location.setFlightLevel(parser.getFlightLevel()); + + location.setFlightLevel(parser.getFlightLevel()); record.setAircraftType(parser.getAircraftType()); - + record.setTemp(parser.getTemperature()); - - record.setWindDirection(parser.getWindDirection()); - record.setWindSpeed(parser.getWindSpeed()); - - record.setLocation(location); - - record.setHorzVisibility(parser.getHorzVisibility()); + + record.setWindDirection(parser.getWindDirection()); + record.setWindSpeed(parser.getWindSpeed()); + + record.setLocation(location); + + record.setHorzVisibility(parser.getHorzVisibility()); record.setSuspectTimeFlag(parser.getSuspectTimeFlag()); - - // Collect the decoded icing flight conditions data - List icing = parser + + // Collect the decoded icing flight conditions data + List icing = parser .getIcingLayers(); - if (icing != null) { + if (icing != null) { for (AircraftFlightCondition layer : icing) { - - NcPirepLayerData iceLayer = NcPirepLayerData.getIceLayerData(layer); - if (iceLayer != null) { - - record.addLayer(iceLayer); - } - } // for - } - // Collect the decoded turbulence flight conditions data + + NcPirepLayerData iceLayer = NcPirepLayerData.getIceLayerData(layer); + if (iceLayer != null) { + + record.addLayer(iceLayer); + } + } // for + } + // Collect the decoded turbulence flight conditions data List turbc = parser.getTurbulenceLayers(); - if (turbc != null) { + if (turbc != null) { for (AircraftFlightCondition layer : turbc) { - NcPirepLayerData turbLayer = NcPirepLayerData + NcPirepLayerData turbLayer = NcPirepLayerData .getTurbLayerData(layer); - - if (turbLayer != null) { - + + if (turbLayer != null) { + record.addLayer(turbLayer); - //record.getAncPirepData(). - } - } // for - } - + //record.getAncPirepData(). + } + } // for + } + List clouds = parser.getCloudLayers(); - if (clouds != null) { + if (clouds != null) { for (AircraftCloudLayer layer : clouds) { - NcPirepLayerData cloudLayer = NcPirepLayerData + NcPirepLayerData cloudLayer = NcPirepLayerData .getCloudLayerData(layer); - - if (cloudLayer != null) { + + if (cloudLayer != null) { record.addLayer(cloudLayer); - - } - } // for - } - - String[] weatherCodes = parser.getWeatherCodes(); - if (weatherCodes != null) { - StringBuilder sb = new StringBuilder(); - for (String code : weatherCodes) { - sb.append(code); - sb.append(" "); - } - record.setWeatherGroup(sb.toString().trim()); - } + + } + } // for + } + + String[] weatherCodes = parser.getWeatherCodes(); + if (weatherCodes != null) { + StringBuilder sb = new StringBuilder(); + for (String code : weatherCodes) { + sb.append(code); + sb.append(" "); + } + record.setWeatherGroup(sb.toString().trim()); + } } - } - } - return record; - } - - /** - * - * @param e - * @return - */ - private Throwable fixTrace(Throwable e) { - StackTraceElement[] trace = e.getStackTrace(); - - StackTraceElement[] newTrace = null; - - int traceIdx = trace.length - 1; - for (; traceIdx >= 0; traceIdx--) { - StackTraceElement element = trace[traceIdx]; - if (element.getClassName().indexOf("com.raytheon") >= 0) { - break; - } - } - if (traceIdx >= 0) { - newTrace = new StackTraceElement[traceIdx + 1]; - for (int j = 0; j < traceIdx + 1; j++) { - newTrace[j] = trace[j]; - } - e.setStackTrace(newTrace); - } - return e; - } + } + } + return record; + } + + /** + * + * @param e + * @return + */ + private Throwable fixTrace(Throwable e) { + StackTraceElement[] trace = e.getStackTrace(); + + StackTraceElement[] newTrace = null; + + int traceIdx = trace.length - 1; + for (; traceIdx >= 0; traceIdx--) { + StackTraceElement element = trace[traceIdx]; + if (element.getClassName().indexOf("com.raytheon") >= 0) { + break; + } + } + if (traceIdx >= 0) { + newTrace = new StackTraceElement[traceIdx + 1]; + for (int j = 0; j < traceIdx + 1; j++) { + newTrace[j] = trace[j]; + } + e.setStackTrace(newTrace); + } + return e; + } public static final void main(String [] args) { @@ -290,5 +290,5 @@ public static final void main(String [] args) { if((data != null) && (data.length > 0)) { System.out.println(data[0]); } - } -} + } +} diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncpirep/src/gov/noaa/nws/ncep/edex/plugin/ncpirep/NcPirepSeparator.java b/ncep/gov.noaa.nws.ncep.edex.plugin.ncpirep/src/gov/noaa/nws/ncep/edex/plugin/ncpirep/NcPirepSeparator.java index 4125d5bada..8f68c9365f 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncpirep/src/gov/noaa/nws/ncep/edex/plugin/ncpirep/NcPirepSeparator.java +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncpirep/src/gov/noaa/nws/ncep/edex/plugin/ncpirep/NcPirepSeparator.java @@ -1,159 +1,159 @@ /** * This software was modified from Raytheon's pirep plugin by * NOAA/NWS/NCEP/NCO to order to output point data in HDF5. - **/ -package gov.noaa.nws.ncep.edex.plugin.ncpirep; - -import java.util.ArrayList; -import java.util.List; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - + **/ +package gov.noaa.nws.ncep.edex.plugin.ncpirep; + +import java.util.ArrayList; +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + import com.raytheon.edex.esb.Headers; -import com.raytheon.edex.plugin.AbstractRecordSeparator; -import com.raytheon.uf.edex.decodertools.core.DecoderInput; -import com.raytheon.uf.edex.decodertools.core.IDecoderInput; -import com.raytheon.uf.edex.wmo.message.WMOHeader; - -/** - * The NcPirepSeparator takes a potential weather message and attempts to - * determine the WMO header and data type of the enclosed data. Normal usage is - * to create an instance and set the message data using the setData method. When - * complete the separator contains the WMO header, the message data with all - * leading data up to and including the WMO header removed. In addition all - * extraneous spaces and carriage control has been removed. The message reports - * are available using hasNext to determine if data is available, and the - * getRecord method to retrieve the actual report data. Note that this separator - * implementation should not be used on mixed text/binary weather messages. - * - *
- * 
- * SOFTWARE HISTORY
- * 
- * Date         Ticket#    Engineer    Description
- * ------------ ---------- ----------- --------------------------
+import com.raytheon.edex.plugin.AbstractRecordSeparator;
+import com.raytheon.uf.edex.decodertools.core.DecoderInput;
+import com.raytheon.uf.edex.decodertools.core.IDecoderInput;
+import com.raytheon.uf.edex.wmo.message.WMOHeader;
+
+/**
+ * The NcPirepSeparator takes a potential weather message and attempts to
+ * determine the WMO header and data type of the enclosed data. Normal usage is
+ * to create an instance and set the message data using the setData method. When
+ * complete the separator contains the WMO header, the message data with all
+ * leading data up to and including the WMO header removed. In addition all
+ * extraneous spaces and carriage control has been removed. The message reports
+ * are available using hasNext to determine if data is available, and the
+ * getRecord method to retrieve the actual report data. Note that this separator
+ * implementation should not be used on mixed text/binary weather messages.
+ * 
+ * 
+ * 
+ * SOFTWARE HISTORY
+ * 
+ * Date         Ticket#    Engineer    Description
+ * ------------ ---------- ----------- --------------------------
  * 04/28/2011              F.J.Yen       Initial creation from pirep.
  * 09/22/2011   286        qzhou       Put new regex pattern to get header time. Do separate message accordingly.
- * 									   Modified doSeparate and added separate()
- * 
- * - * @author jkorman - * @version 1.0 - */ -public class NcPirepSeparator extends AbstractRecordSeparator { - /** The logger */ - private Log logger = LogFactory.getLog(getClass()); - - //private static final String PIREP_HDR = "[\\r\\n]*.*(UA|UUA) +/OV"; + * Modified doSeparate and added separate() + *
+ * + * @author jkorman + * @version 1.0 + */ +public class NcPirepSeparator extends AbstractRecordSeparator { + /** The logger */ + private Log logger = LogFactory.getLog(getClass()); + + //private static final String PIREP_HDR = "[\\r\\n]*.*(UA|UUA) +/OV"; private static final String SPLITMSG = "\\r\\n\\x03"; private static final String PIREP = "[A-Z]{3}[ ](UA|UUA)"; private static final String HEADER_TIME = "[0-9]{6}"; - - private WMOHeader wmoHeader = null; - - private byte[] messageData = null; - - private List reports = new ArrayList();; - - private int currentReport = -1; - - public static NcPirepSeparator separate(byte[] data, Headers headers) { - NcPirepSeparator ncPirepSeparator = new NcPirepSeparator(); - ncPirepSeparator.setData(data, headers); - return ncPirepSeparator; - } - - /** - * Get the next record. This implementation returns the record as a String. - * - * @return The next observation record as a String. - */ - @Override - public IDecoderInput next() { - - IDecoderInput data = null; - if (hasNext()) { - data = new DecoderInput(wmoHeader,reports.get(currentReport++)); - } - return data; - } - - /** - * Is there another record available? - * - * @return Is there another record available? - */ - @Override - public boolean hasNext() { - return ((reports != null) && (reports.size() > 0) && (currentReport < reports - .size())); - } - - /** - * Set the raw message data and invoke the internal message separation - * process. - * - * @param rawMessage - * The raw weather text message. - */ - @Override - public void setData(byte[] rawMessage, Headers headers) { - currentReport = -1; + + private WMOHeader wmoHeader = null; + + private byte[] messageData = null; + + private List reports = new ArrayList();; + + private int currentReport = -1; + + public static NcPirepSeparator separate(byte[] data, Headers headers) { + NcPirepSeparator ncPirepSeparator = new NcPirepSeparator(); + ncPirepSeparator.setData(data, headers); + return ncPirepSeparator; + } + + /** + * Get the next record. This implementation returns the record as a String. + * + * @return The next observation record as a String. + */ + @Override + public IDecoderInput next() { + + IDecoderInput data = null; + if (hasNext()) { + data = new DecoderInput(wmoHeader,reports.get(currentReport++)); + } + return data; + } + + /** + * Is there another record available? + * + * @return Is there another record available? + */ + @Override + public boolean hasNext() { + return ((reports != null) && (reports.size() > 0) && (currentReport < reports + .size())); + } + + /** + * Set the raw message data and invoke the internal message separation + * process. + * + * @param rawMessage + * The raw weather text message. + */ + @Override + public void setData(byte[] rawMessage, Headers headers) { + currentReport = -1; reports = null; - System.out.println("========== Begin =============== "); - //rawMessage = DecoderTools.cleanData(rawMessage); - if (rawMessage != null) { - wmoHeader = new WMOHeader(rawMessage); - if (wmoHeader.isValid()) { -// messageData = DecoderTools.stripWMOHeader(rawMessage, -// WMO_HEADER); + System.out.println("========== Begin =============== "); + //rawMessage = DecoderTools.cleanData(rawMessage); + if (rawMessage != null) { + wmoHeader = new WMOHeader(rawMessage); + if (wmoHeader.isValid()) { +// messageData = DecoderTools.stripWMOHeader(rawMessage, +// WMO_HEADER); // doSeparate(new String(messageData)); - doSeparate(new String(rawMessage)); - } - } - - if ((reports != null) && (reports.size() > 0)) { - currentReport = 0; + doSeparate(new String(rawMessage)); + } + } + + if ((reports != null) && (reports.size() > 0)) { + currentReport = 0; } else { String msg = (wmoHeader != null) ? wmoHeader.getWmoHeader() : ""; - - logger.info("No reports in data in " + msg); - } - } - - /** - * Get the message data. - * - * @return The cleaned message data. - */ - public byte[] getMessage() { - return messageData; - } - - /** - * Get the WMO header associated with the message data. - * - * @return The WMO header. - */ - public WMOHeader getWmoHeader() { - return wmoHeader; - } - - /** - * Separate the candidate message into individual pirep reports based on the - * report header . - * - * @param message - * The message data to separate. - */ + + logger.info("No reports in data in " + msg); + } + } + + /** + * Get the message data. + * + * @return The cleaned message data. + */ + public byte[] getMessage() { + return messageData; + } + + /** + * Get the WMO header associated with the message data. + * + * @return The WMO header. + */ + public WMOHeader getWmoHeader() { + return wmoHeader; + } + + /** + * Separate the candidate message into individual pirep reports based on the + * report header . + * + * @param message + * The message data to separate. + */ private void doSeparate(String message) { reports = new ArrayList(); int start = 0; - int stop = message.length(); + int stop = message.length(); Pattern pattern = Pattern.compile(SPLITMSG); Matcher matcher = pattern.matcher(message); @@ -165,8 +165,8 @@ public class NcPirepSeparator extends AbstractRecordSeparator { separate( subMsg); start = matcher.end(); - } - } + } + } /* * 046 ^M @@ -209,5 +209,5 @@ public class NcPirepSeparator extends AbstractRecordSeparator { String message = "ENA UA /OV PDN288051/TM 2348/FL340/TP B737/TA M56/WV 218035/TB CONT LGHT OCNL MOD/RM CONT CHOP FL350 ZAN ="; //doSeparate(message); - } -} + } +} diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncpirep/src/gov/noaa/nws/ncep/edex/plugin/ncpirep/decoder/NcPirepParser.java b/ncep/gov.noaa.nws.ncep.edex.plugin.ncpirep/src/gov/noaa/nws/ncep/edex/plugin/ncpirep/decoder/NcPirepParser.java index 74cf034429..7dd8d4b839 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncpirep/src/gov/noaa/nws/ncep/edex/plugin/ncpirep/decoder/NcPirepParser.java +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncpirep/src/gov/noaa/nws/ncep/edex/plugin/ncpirep/decoder/NcPirepParser.java @@ -1,19 +1,19 @@ /** * This software was developed and / or modified by Raytheon Company, - * pursuant to Contract DG133W-05-CQ-1067 with the US Government. - * - * U.S. EXPORT CONTROLLED TECHNICAL DATA + * pursuant to Contract DG133W-05-CQ-1067 with the US Government. + * + * U.S. EXPORT CONTROLLED TECHNICAL DATA * This software product contains export-restricted data whose * export/transfer/disclosure is restricted by U.S. law. Dissemination * to non-U.S. persons whether in the United States or abroad requires * an export license or other authorization. * - * Contractor Name: Raytheon Company - * Contractor Address: 6825 Pine Street, Suite 340 - * Mail Stop B8 - * Omaha, NE 68106 - * 402.291.0100 - * + * Contractor Name: Raytheon Company + * Contractor Address: 6825 Pine Street, Suite 340 + * Mail Stop B8 + * Omaha, NE 68106 + * 402.291.0100 + * * See the AWIPS II Master Rights File ("Master Rights File.pdf") for * further licensing information. **/ @@ -44,16 +44,16 @@ import com.raytheon.uf.edex.decodertools.core.LatLonPoint; import com.raytheon.uf.edex.decodertools.time.TimeTools; import com.vividsolutions.jts.geom.Geometry; import com.vividsolutions.jts.geom.Point; - -/** - * This class parses Pirep reports. Some of the parsing is ported from the NCEP - * NWS decoder, and other parts use regular expressions based on information in - * AFMAN 15-124 and FMH No. 12. - * - *
- * SOFTWARE HISTORY
- * Date         PR#         Engineer    Description
- * -----------  ---------- ------------ --------------------------
+
+/**
+ * This class parses Pirep reports. Some of the parsing is ported from the NCEP
+ * NWS decoder, and other parts use regular expressions based on information in
+ * AFMAN 15-124 and FMH No. 12.
+ * 
+ * 
+ * SOFTWARE HISTORY
+ * Date         PR#         Engineer    Description
+ * -----------  ---------- ------------ --------------------------
  * 05/26/2011				F.J.Yen		Initial creation from pirep.  Change
  * 										temperature and windSpeed from Double to
  * 										Float; windDirection from Integer to Float.
@@ -70,33 +70,33 @@ import com.vividsolutions.jts.geom.Point;
  * 10/13/2011   286        qzhou        Remove \r \n \s in the reportData in parse().
  *                                      Handle abnormal location. /OV TBE 265040... Modified decodeLocationData() and parseLatLon()								
  * 10/20/2011   472        qzhou        Added WX_COND_WORDS. Removed SKY_SKC, SKY_CLR and other _COND_WORDS
- * 11/01/2011   286       Q.Zhou        Added month and year to decodetime
- * 
- * - * @author jkorman - * @version Dec. 27, 2007 - */ -public class NcPirepParser { - private static final double ONE_NM_RADIANS = (2.0 * Math.PI) / 21637.5; - - // Allowable future time in milliseconds (15 minutes). + * 11/01/2011 286 Q.Zhou Added month and year to decodetime + *
+ * + * @author jkorman + * @version Dec. 27, 2007 + */ +public class NcPirepParser { + private static final double ONE_NM_RADIANS = (2.0 * Math.PI) / 21637.5; + + // Allowable future time in milliseconds (15 minutes). private static final int ALLOWABLE_TIME = 15; private static final float RMISSD = IDecoderConstantsN.UAIR_FLOAT_MISSING; - private static final int IMISSD = IDecoderConstantsN.UAIR_INTEGER_MISSING; - - private static final String[] RPIDS = { "UUA", "UA" }; - - /** - * Note that there are intentionally spaces after some of the teis. - */ - private static final String[] TEIS = { "/OV ", "/TM", "/FL", "/TP", "/SK ", - "/WX", "/TA", "/WV", "/TB", "/IC", "/RM" }; - - private static final String BLO_HGT = "BLO"; - private static final String ABV_HGT = "ABV"; - private static final String NEG_ENTRY = "NEG"; + private static final int IMISSD = IDecoderConstantsN.UAIR_INTEGER_MISSING; + + private static final String[] RPIDS = { "UUA", "UA" }; + + /** + * Note that there are intentionally spaces after some of the teis. + */ + private static final String[] TEIS = { "/OV ", "/TM", "/FL", "/TP", "/SK ", + "/WX", "/TA", "/WV", "/TB", "/IC", "/RM" }; + + private static final String BLO_HGT = "BLO"; + private static final String ABV_HGT = "ABV"; + private static final String NEG_ENTRY = "NEG"; private static final String NULL_ENTRY = "---"; private static final Map WX_COND_WORDS = new HashMap(); @@ -154,294 +154,294 @@ public class NcPirepParser { WX_COND_WORDS.put("UNKNOWN", "UNKN"); } - - private static final Map DIR_POINTS = new HashMap(); - static { - DIR_POINTS.put("N", 0); - DIR_POINTS.put("NNE", 22); - DIR_POINTS.put("NE", 45); - DIR_POINTS.put("ENE", 67); - DIR_POINTS.put("E", 90); - DIR_POINTS.put("ESE", 112); - DIR_POINTS.put("SE", 135); - DIR_POINTS.put("SSE", 157); - DIR_POINTS.put("S", 180); - DIR_POINTS.put("SSW", 202); - DIR_POINTS.put("SW", 225); - DIR_POINTS.put("WSW", 247); - DIR_POINTS.put("W", 270); - DIR_POINTS.put("WNW", 292); - DIR_POINTS.put("NW", 315); - DIR_POINTS.put("NNW", 337); - } - - private static final String ICE_TURB_PREFIX = "([A-Z]{3,5})(?:((?:-)([A-Z]{3,5})))?"; - - private static final String ABV_BLO = BLO_HGT + "|" + ABV_HGT; - private static final String ICE_TURB_SUFFIX = "(?: )?(((" + ABV_BLO + ")(?: )(\\d{3}))|((\\d{3})(?:(-(\\d{3}))?)))?(?:/)?()"; - - private static final String ICE_REGEX = ICE_TURB_PREFIX + "((?: )(RIME|MXD|CLR))" + ICE_TURB_SUFFIX;//? - - private static final String TRB_REGEX = ICE_TURB_PREFIX + "((?: )(CHOP|CAT))?" + ICE_TURB_SUFFIX; - - - // 3901N 08446W - private static final String LATLON_PTRN = "((([0-8]\\d[0-5]\\d)|(9000))[NS]((0\\d{2}[0-5]\\d)|([1][0-7]\\d[0-5]\\d)|(18000))[EW])"; - - /** The logger */ - private Log logger = LogFactory.getLog(getClass()); - - // Codes used in groupLikeTypes() - // Was the character whitespace? - private static final int NONE = 0; - - // Was character a digit? - private static final int DIGIT = 1; - - // Was character a letter? - private static final int LETTER = 2; - - // Was character non-alphanumeric but not whitespace? - private static final int NONALPHANUMERIC = 3; - - // The last search position when looking for TEIs - private int theSearchPos = -1; - - // Where was the Token found - private int theTokenPos; - - private String reportData = null; - - private String theReportingStationId = null; - - private BasePoint location = null; - - private LatLonPoint interLocation = null; - - private Calendar observationTime = null; - + + private static final Map DIR_POINTS = new HashMap(); + static { + DIR_POINTS.put("N", 0); + DIR_POINTS.put("NNE", 22); + DIR_POINTS.put("NE", 45); + DIR_POINTS.put("ENE", 67); + DIR_POINTS.put("E", 90); + DIR_POINTS.put("ESE", 112); + DIR_POINTS.put("SE", 135); + DIR_POINTS.put("SSE", 157); + DIR_POINTS.put("S", 180); + DIR_POINTS.put("SSW", 202); + DIR_POINTS.put("SW", 225); + DIR_POINTS.put("WSW", 247); + DIR_POINTS.put("W", 270); + DIR_POINTS.put("WNW", 292); + DIR_POINTS.put("NW", 315); + DIR_POINTS.put("NNW", 337); + } + + private static final String ICE_TURB_PREFIX = "([A-Z]{3,5})(?:((?:-)([A-Z]{3,5})))?"; + + private static final String ABV_BLO = BLO_HGT + "|" + ABV_HGT; + private static final String ICE_TURB_SUFFIX = "(?: )?(((" + ABV_BLO + ")(?: )(\\d{3}))|((\\d{3})(?:(-(\\d{3}))?)))?(?:/)?()"; + + private static final String ICE_REGEX = ICE_TURB_PREFIX + "((?: )(RIME|MXD|CLR))" + ICE_TURB_SUFFIX;//? + + private static final String TRB_REGEX = ICE_TURB_PREFIX + "((?: )(CHOP|CAT))?" + ICE_TURB_SUFFIX; + + + // 3901N 08446W + private static final String LATLON_PTRN = "((([0-8]\\d[0-5]\\d)|(9000))[NS]((0\\d{2}[0-5]\\d)|([1][0-7]\\d[0-5]\\d)|(18000))[EW])"; + + /** The logger */ + private Log logger = LogFactory.getLog(getClass()); + + // Codes used in groupLikeTypes() + // Was the character whitespace? + private static final int NONE = 0; + + // Was character a digit? + private static final int DIGIT = 1; + + // Was character a letter? + private static final int LETTER = 2; + + // Was character non-alphanumeric but not whitespace? + private static final int NONALPHANUMERIC = 3; + + // The last search position when looking for TEIs + private int theSearchPos = -1; + + // Where was the Token found + private int theTokenPos; + + private String reportData = null; + + private String theReportingStationId = null; + + private BasePoint location = null; + + private LatLonPoint interLocation = null; + + private Calendar observationTime = null; + private AircraftFlightLevel flightLevel = null; - - private String aircraftType = "UNKN"; - + + private String aircraftType = "UNKN"; + // private Double temperature = null; - private Float temperature = RMISSD; - + private Float temperature = RMISSD; + // private Integer windDirection = null; - private Float windDirection = RMISSD; - + private Float windDirection = RMISSD; + // private Double windSpeed = null; - private Float windSpeed = RMISSD; - - private Integer horzVisibility = IMISSD; - - private List cloudLayers = null; - - private AircraftRemarks theRemarks = null; - - private List theTurbulenceLayers = null; - - private List theIcingLayers = null; - - private String[] theWeatherCodes = null; + private Float windSpeed = RMISSD; + + private Integer horzVisibility = IMISSD; + + private List cloudLayers = null; + + private AircraftRemarks theRemarks = null; + + private List theTurbulenceLayers = null; + + private List theIcingLayers = null; + + private String[] theWeatherCodes = null; private String suspectTimeFlag = null; private String headerTime = ""; - - // these values are only populated if the pirep contained explicit lat/lon; - // theLocation holds the location of the pirep; values in radians -// private double latitude = Double.NaN; -// -// private double longitude = Double.NaN; - - private String traceId; - - /** - * Construct a NcPirepParser from given String data. The report is completely - * parsed and decoded upon success. - * - * @param report - * String data containing the possible PIREP. - * @throws DecodeException - * An error occurred within the parser. - */ - public NcPirepParser(String report, String traceId) { - reportData = report; - this.traceId = traceId; - parse(); - } - - /** - * Construct a NcPirepParser from given byte array data. The report is - * completely parsed and decoded upon success. - * - * @param report - * Byte array data containing the possible PIREP. - * @throws DecodeException - * An error occurred within the parser. - */ - public NcPirepParser(byte[] report, String traceId) { - this(new String(report),traceId); - } - - /** - * @return the reportData - */ - public String getReportData() { - return reportData; - } - - public String getReportType() { - return "PIREP"; + + // these values are only populated if the pirep contained explicit lat/lon; + // theLocation holds the location of the pirep; values in radians +// private double latitude = Double.NaN; +// +// private double longitude = Double.NaN; + + private String traceId; + + /** + * Construct a NcPirepParser from given String data. The report is completely + * parsed and decoded upon success. + * + * @param report + * String data containing the possible PIREP. + * @throws DecodeException + * An error occurred within the parser. + */ + public NcPirepParser(String report, String traceId) { + reportData = report; + this.traceId = traceId; + parse(); } - + + /** + * Construct a NcPirepParser from given byte array data. The report is + * completely parsed and decoded upon success. + * + * @param report + * Byte array data containing the possible PIREP. + * @throws DecodeException + * An error occurred within the parser. + */ + public NcPirepParser(byte[] report, String traceId) { + this(new String(report),traceId); + } + + /** + * @return the reportData + */ + public String getReportData() { + return reportData; + } + + public String getReportType() { + return "PIREP"; + } + public String getSuspectTimeFlag() { return suspectTimeFlag; } - - /** - * Get the station reporting id. - * - * @return Returns the theReportingStationId. - */ - public String getReportingStationId() { - return theReportingStationId; - } - - /** - * Get the reporting aircraft type. - * - * @return The aircraft type. - */ - public String getAircraftType() { - return aircraftType; - } - - /** - * Get the decoded flight level information. - * - * @return The decoded flight level in feet. - */ - public Integer getFlightLevel() { - //Integer retValue = null; - Integer retValue = IDecoderConstantsN.UAIR_INTEGER_MISSING; //-9999; - if (flightLevel != null) { - retValue = flightLevel.getFlightLevel(); - } - return retValue; - } // getFlightLevel() - - /** - * Get the aircraft location or midpoint location. - * - * @return Returns the aircraft location. - */ - public BasePoint getLocation() { - return location; - } - - /** - * Get the PIREP observation time. - * - * @return Returns the observation time. - */ - public Calendar getObservationTime() { - return observationTime; - } - - - /** - * Get the air temperature at altitude. - * - * @return Returns the air temperature. (May return null) - */ -// public Double getTemperature() { - public Float getTemperature() { - return temperature; - } - - /** - * Get the reported wind direction. - * - * @return Returns the wind direction. (May return null) + + /** + * Get the station reporting id. + * + * @return Returns the theReportingStationId. + */ + public String getReportingStationId() { + return theReportingStationId; + } + + /** + * Get the reporting aircraft type. + * + * @return The aircraft type. + */ + public String getAircraftType() { + return aircraftType; + } + + /** + * Get the decoded flight level information. + * + * @return The decoded flight level in feet. + */ + public Integer getFlightLevel() { + //Integer retValue = null; + Integer retValue = IDecoderConstantsN.UAIR_INTEGER_MISSING; //-9999; + if (flightLevel != null) { + retValue = flightLevel.getFlightLevel(); + } + return retValue; + } // getFlightLevel() + + /** + * Get the aircraft location or midpoint location. + * + * @return Returns the aircraft location. + */ + public BasePoint getLocation() { + return location; + } + + /** + * Get the PIREP observation time. + * + * @return Returns the observation time. + */ + public Calendar getObservationTime() { + return observationTime; + } + + + /** + * Get the air temperature at altitude. + * + * @return Returns the air temperature. (May return null) + */ +// public Double getTemperature() { + public Float getTemperature() { + return temperature; + } + + /** + * Get the reported wind direction. + * + * @return Returns the wind direction. (May return null) + */ +// public Integer getWindDirection() { + public Float getWindDirection() { + return windDirection; + } + + /** + * Get the reported wind speed. + * + * @return Returns the wind speed. (May return null) */ -// public Integer getWindDirection() { - public Float getWindDirection() { - return windDirection; - } - - /** - * Get the reported wind speed. - * - * @return Returns the wind speed. (May return null) - */ // public Double getWindSpeed() { - public Float getWindSpeed() { - return windSpeed; - } - - /** - * Get any remarks found in the report. - * - * @return Returns the remarks. (May return null) - */ - public String getRemarks() { - return (theRemarks != null) ? theRemarks.toString() : ""; - } - - /** - * Get the cloud layer information. - * - * @return Returns the decoded cloud layers. (May return null) - */ - public List getCloudLayers() { - return cloudLayers; - } - - /** - * Get the turbulence layer information. - * - * @return Returns the turbulence layers. (May return null) - */ - public List getTurbulenceLayers() { - return theTurbulenceLayers; - } - - /** - * Get the icing layer information. - * - * @return Returns the icing layers. (May return null) - */ - public List getIcingLayers() { - return theIcingLayers; - } - - /** - * Get the flight visibility if decoded. - * - * @return Returns the flight visibility. (May return null) - */ - public Integer getHorzVisibility() { - return horzVisibility; - } - - /** - * Get the decoded weather information. - * - * @return Returns the weather codes. (May return null) - */ - public String[] getWeatherCodes() { - return theWeatherCodes; - } - - /** - * This method parses the pirep based on TEIs and delegates the data for - * each to a different method. This method ported from NCEP decoder. - * "HJO UA /OV AUN-CRO /TM 2351 /FL075 /TP M20P /WX FV30SM HZ FU /WV 15015KT /TB NEG /RM SMTH=" - * @throws DecodeException - * An error occurred within this method. - */ - protected void parse() { - int pirepIndex = 0; + public Float getWindSpeed() { + return windSpeed; + } + + /** + * Get any remarks found in the report. + * + * @return Returns the remarks. (May return null) + */ + public String getRemarks() { + return (theRemarks != null) ? theRemarks.toString() : ""; + } + + /** + * Get the cloud layer information. + * + * @return Returns the decoded cloud layers. (May return null) + */ + public List getCloudLayers() { + return cloudLayers; + } + + /** + * Get the turbulence layer information. + * + * @return Returns the turbulence layers. (May return null) + */ + public List getTurbulenceLayers() { + return theTurbulenceLayers; + } + + /** + * Get the icing layer information. + * + * @return Returns the icing layers. (May return null) + */ + public List getIcingLayers() { + return theIcingLayers; + } + + /** + * Get the flight visibility if decoded. + * + * @return Returns the flight visibility. (May return null) + */ + public Integer getHorzVisibility() { + return horzVisibility; + } + + /** + * Get the decoded weather information. + * + * @return Returns the weather codes. (May return null) + */ + public String[] getWeatherCodes() { + return theWeatherCodes; + } + + /** + * This method parses the pirep based on TEIs and delegates the data for + * each to a different method. This method ported from NCEP decoder. + * "HJO UA /OV AUN-CRO /TM 2351 /FL075 /TP M20P /WX FV30SM HZ FU /WV 15015KT /TB NEG /RM SMTH=" + * @throws DecodeException + * An error occurred within this method. + */ + protected void parse() { + int pirepIndex = 0; int endTimeId = 6; // remove \r \n white space @@ -457,352 +457,352 @@ public class NcPirepParser { String theStationId = reportData.substring(stationStartIndex, stationStartIndex +3); decodeReportingStationId(theStationId); - // Look for a 'UUA' or 'UA' indicator to denote the start of - // the report. - if (!nextString(reportData, ( stationStartIndex + 3 + 1 ), reportData.length(), RPIDS)) { - return; - } - - // if failed to decode reporting station id, this must be Canadian pirep - // TODO convert! - - // Find the first TEI within the report. - if (!nextString(reportData, pirepIndex, reportData.length(), TEIS)) { - return; + // Look for a 'UUA' or 'UA' indicator to denote the start of + // the report. + if (!nextString(reportData, ( stationStartIndex + 3 + 1 ), reportData.length(), RPIDS)) { + return; } - - int pos1 = this.theSearchPos; + + // if failed to decode reporting station id, this must be Canadian pirep + // TODO convert! + + // Find the first TEI within the report. + if (!nextString(reportData, pirepIndex, reportData.length(), TEIS)) { + return; + } + + int pos1 = this.theSearchPos; int tei1 = this.theTokenPos; - - int teiIndex = pos1 + TEIS[tei1].length(); - int pos2, tei2; - + + int teiIndex = pos1 + TEIS[tei1].length(); + int pos2, tei2; + while (teiIndex < reportData.length()) { - - // Find the end of the data for this TEI by finding the next - // TEI within the report. - int endTeiIndex; - boolean lastTei = !nextString(reportData, teiIndex, reportData - .length(), TEIS); - pos2 = this.theSearchPos; + + // Find the end of the data for this TEI by finding the next + // TEI within the report. + int endTeiIndex; + boolean lastTei = !nextString(reportData, teiIndex, reportData + .length(), TEIS); + pos2 = this.theSearchPos; tei2 = this.theTokenPos; - //System.out.println("%%%%%%%%%tei2 "+tei1 +" "+pos1 +" "+teiIndex); - if (lastTei) { - // This is the last TEI within the report, so set the end - // of the data for this TEI equal to the end of the report. - endTeiIndex = reportData.length(); - } else { - endTeiIndex = pos2; - } - - boolean success = false; - switch (tei1) { - case 0: - // Decode and store the "/OV" (i.e. location) data. - success = decodeLocationData(reportData.substring(teiIndex, - endTeiIndex)); - break; - case 1: - // Decode and store the "/TM" (i.e. time) data. - success = decodeTimeData(reportData.substring(teiIndex, - endTeiIndex)); - break; - case 2: - // Decode and store the "/FL" (i.e. flight level) data. - success = decodeFlightLevelData(reportData.substring( - teiIndex, endTeiIndex)); - break; - case 3: + //System.out.println("%%%%%%%%%tei2 "+tei1 +" "+pos1 +" "+teiIndex); + if (lastTei) { + // This is the last TEI within the report, so set the end + // of the data for this TEI equal to the end of the report. + endTeiIndex = reportData.length(); + } else { + endTeiIndex = pos2; + } + + boolean success = false; + switch (tei1) { + case 0: + // Decode and store the "/OV" (i.e. location) data. + success = decodeLocationData(reportData.substring(teiIndex, + endTeiIndex)); + break; + case 1: + // Decode and store the "/TM" (i.e. time) data. + success = decodeTimeData(reportData.substring(teiIndex, + endTeiIndex)); + break; + case 2: + // Decode and store the "/FL" (i.e. flight level) data. + success = decodeFlightLevelData(reportData.substring( + teiIndex, endTeiIndex)); + break; + case 3: // Decode and store the "/TP" (i.e. aircraft type) data. - success = decodeAircraftTypeData(reportData.substring( - teiIndex, endTeiIndex)); - break; - case 4: + success = decodeAircraftTypeData(reportData.substring( + teiIndex, endTeiIndex)); + break; + case 4: // Decode and store the "/SK" (i.e. sky cover) data. success = decodeSkyCoverData(reportData.substring( - teiIndex, endTeiIndex)); - break; - case 5: - // Decode and store the "/WX" (i.e. weather) data. - success = decodeWeatherData(reportData.substring(teiIndex, - endTeiIndex)); - break; - case 6: - // Decode and store the "/TA" (i.e. temperature) data. - success = decodeTemperatureData(reportData.substring( - teiIndex, endTeiIndex)); - break; - case 7: - // Decode and store the "/WV" (i.e. wind) data. - success = decodeWindData(reportData.substring(teiIndex, - endTeiIndex)); - break; - case 8: - // Decode and store the "/TB" (i.e. turbulence) data. - success = decodeTurbulenceData(reportData.substring( - teiIndex, endTeiIndex)); - break; - case 9: - // Decode and store the "/IC" (i.e. icing) data. - success = decodeIcingData(reportData.substring(teiIndex, + teiIndex, endTeiIndex)); + break; + case 5: + // Decode and store the "/WX" (i.e. weather) data. + success = decodeWeatherData(reportData.substring(teiIndex, endTeiIndex)); - break; - case 10: - // Decode and store the "/RM" (i.e. remarks) data. - success = decodeRemarksData(reportData.substring(teiIndex, - endTeiIndex)); - break; - } // switch() - - // discontinue if processing of any data fails - if (!success) { - // TODO: add logging - } - - if (lastTei) { - teiIndex = reportData.length(); - } else { - pos1 = pos2; - tei1 = tei2; - teiIndex = pos1 + TEIS[tei1].length(); - } - } // while() - } // parse() - - /** - * This method gets the reporting station id for a PIREP. The reporting - * station id is the station id which immediately precedes the characters UA - * or UUA. This method ported from NCEP decoder. - * - * @param str - * String preceding UA or UUA - * @return success or failure - */ - protected boolean decodeReportingStationId(String str) { - //String id = str.trim(); - - this.theReportingStationId = str; - return true; - } // decodeReportingStationId() - - /** - * This method decodes and stores the location data from within a PIREP - * report. The location data may be a set of one or two "location points" - * (i.e. a "location point" is a navaid or a navaid/bearing/distance), or it - * may be a latitude/longitude combination such as is found in AIREP - * reports. - * - * @param locData - * All data located in the PIREP report "OV" section. - * @return Decode success or failure status. - * @throws DecodeException - * If a decode error occured. - */ - protected boolean decodeLocationData(String locData) { - boolean decodeStatus = false; - final int maxOVParts = 2; + break; + case 6: + // Decode and store the "/TA" (i.e. temperature) data. + success = decodeTemperatureData(reportData.substring( + teiIndex, endTeiIndex)); + break; + case 7: + // Decode and store the "/WV" (i.e. wind) data. + success = decodeWindData(reportData.substring(teiIndex, + endTeiIndex)); + break; + case 8: + // Decode and store the "/TB" (i.e. turbulence) data. + success = decodeTurbulenceData(reportData.substring( + teiIndex, endTeiIndex)); + break; + case 9: + // Decode and store the "/IC" (i.e. icing) data. + success = decodeIcingData(reportData.substring(teiIndex, + endTeiIndex)); + break; + case 10: + // Decode and store the "/RM" (i.e. remarks) data. + success = decodeRemarksData(reportData.substring(teiIndex, + endTeiIndex)); + break; + } // switch() + + // discontinue if processing of any data fails + if (!success) { + // TODO: add logging + } + + if (lastTei) { + teiIndex = reportData.length(); + } else { + pos1 = pos2; + tei1 = tei2; + teiIndex = pos1 + TEIS[tei1].length(); + } + } // while() + } // parse() + + /** + * This method gets the reporting station id for a PIREP. The reporting + * station id is the station id which immediately precedes the characters UA + * or UUA. This method ported from NCEP decoder. + * + * @param str + * String preceding UA or UUA + * @return success or failure + */ + protected boolean decodeReportingStationId(String str) { + //String id = str.trim(); + + this.theReportingStationId = str; + return true; + } // decodeReportingStationId() + + /** + * This method decodes and stores the location data from within a PIREP + * report. The location data may be a set of one or two "location points" + * (i.e. a "location point" is a navaid or a navaid/bearing/distance), or it + * may be a latitude/longitude combination such as is found in AIREP + * reports. + * + * @param locData + * All data located in the PIREP report "OV" section. + * @return Decode success or failure status. + * @throws DecodeException + * If a decode error occured. + */ + protected boolean decodeLocationData(String locData) { + boolean decodeStatus = false; + final int maxOVParts = 2; // Remove space in locData. handle abormal input. e.g. 9000N 18000E, /OV AEF 200067 String[] split = locData.split(" "); if (split != null && split.length ==2) locData = split[0] + split[1]; - - Pattern p = Pattern.compile(LATLON_PTRN); - Matcher m = p.matcher(locData); - if(m.find()) { - location = parseLatLon(m.group()); - decodeStatus = (location != null); + + Pattern p = Pattern.compile(LATLON_PTRN); + Matcher m = p.matcher(locData); + if(m.find()) { + location = parseLatLon(m.group()); + decodeStatus = (location != null); } - else { - ArrayList ovParts = new ArrayList(); - - StringTokenizer st = new StringTokenizer(locData, "-", false); - while (st.hasMoreTokens()) { - String s = st.nextToken(); - ovParts.add(s.toUpperCase()); - } - // If there are more than 2 parts, this location data is in error BUT - // we will use the first two points and ignore trailing! - if (ovParts.size() == 1) { - decodeStatus = decodeLocation(ovParts.get(0).trim()); - } else if (ovParts.size() >= maxOVParts) { - // If valid, this will leave the first location in theLocation. - if (decodeLocation(ovParts.get(0).trim())) { - // Make sure to save the previous location. decodeLocation - // will trash it. - LatLonPoint firstPoint = interLocation; - // now get the second point. - if (decodeLocation(ovParts.get(1).trim())) { - LatLonPoint secondPoint = interLocation; - - // Now we have two valid points. - // get the midpoint distance from point 1 to point 2. - double dist = firstPoint.distanceTo(secondPoint) / 2; - // and use the bearing between the points to construct the - // midpoint location. - secondPoint = firstPoint.positionOf(firstPoint - .bearingTo(secondPoint), dist); - location = new BasePoint(secondPoint - .getLatitude(LatLonPoint.INDEGREES), secondPoint - .getLongitude(LatLonPoint.INDEGREES)); - decodeStatus = true; - if(ovParts.size() > maxOVParts) { - logger.info(traceId + "- More than 2 locations reported, first 2 used"); - } - } else { - logger.error(traceId + "- Could not decode location " + ovParts.get(1).trim()); - } - } else { - logger.error(traceId + "- Could not decode location " + ovParts.get(0).trim()); - } - } - } - return decodeStatus; - } // decodeLocationData() - - /** - * Decode the individual location points found in an "OV" section. - * - * @param aLocation - * A possible location point. - * @return Was the decode successful (true|false). - */ - private boolean decodeLocation(String aLocation) { - final String navaidPattern = "^[A-Z,0-9]{3,4}$"; - final String bearingDistPattern = "^[A-Z,0-9]{3,4}\\d{6}$"; - - Pattern p = Pattern.compile(navaidPattern); - location = null; - boolean decodeStatus = false; - Matcher m = p.matcher(aLocation); - if (m.find()) { - BasePoint navaidLoc = getNavaidLocation(aLocation); - if (navaidLoc != null) { - location = navaidLoc; - - interLocation = new LatLonPoint(navaidLoc - .getLatitude(), navaidLoc.getLongitude(), - LatLonPoint.INDEGREES); - - decodeStatus = true; - } - } else { - // try bearing and distance. - p = Pattern.compile(bearingDistPattern); - m = p.matcher(aLocation); - if (m.find()) { - String staId = aLocation.substring(0, aLocation.length() - 6); - - BasePoint navaidLoc = getNavaidLocation(staId); - if (navaidLoc != null) { - int len = aLocation.length(); - - String s = aLocation.substring(len - 6, len - 3); - Double bearing = Math.toRadians(parseInteger(s)); - - s = aLocation.substring(len - 3); - Double dist = ONE_NM_RADIANS * parseInteger(s); - - - LatLonPoint point1 = new LatLonPoint(navaidLoc - .getLatitude(), navaidLoc.getLongitude(), - LatLonPoint.INDEGREES); - - LatLonPoint point2 = point1.positionOf(-bearing, dist); - interLocation = point2; - - location = new BasePoint(point2 - .getLatitude(LatLonPoint.INDEGREES), point2 - .getLongitude(LatLonPoint.INDEGREES)); - - decodeStatus = true; - } else { - decodeStatus = false; - } - } else { - } - } - return decodeStatus; - } // decodeLocation() - - /** - * Attempt to convert a string to an integer value. - * - * @param aNumber - * A possible integer value. - * @return The converted number or null if conversion failed. - */ - private static Integer parseInteger(String aNumber) { - Integer retValue = null; - try { - retValue = new Integer(aNumber.trim()); - } - catch (NumberFormatException nfe) { - retValue = null; - } - return retValue; - } // parseInteger() - - /** - * Get the latitude/longitude pair for a given navigation point. - * - * @param aNavaid - * A possible navaid to look up. - * @return The location of the navaid or null if not found. - */ - private BasePoint getNavaidLocation(String navaid) { - BasePoint navaidLocation = null; - - ObStationDao obSta = null; - ObStation stationInfo = null; - if ((navaid != null) && (navaid.length() >= 0)) { - logger.debug(traceId + " - Processing Navaid [" + navaid + "]"); - try { - obSta = new ObStationDao(); + else { + ArrayList ovParts = new ArrayList(); + + StringTokenizer st = new StringTokenizer(locData, "-", false); + while (st.hasMoreTokens()) { + String s = st.nextToken(); + ovParts.add(s.toUpperCase()); + } + // If there are more than 2 parts, this location data is in error BUT + // we will use the first two points and ignore trailing! + if (ovParts.size() == 1) { + decodeStatus = decodeLocation(ovParts.get(0).trim()); + } else if (ovParts.size() >= maxOVParts) { + // If valid, this will leave the first location in theLocation. + if (decodeLocation(ovParts.get(0).trim())) { + // Make sure to save the previous location. decodeLocation + // will trash it. + LatLonPoint firstPoint = interLocation; + // now get the second point. + if (decodeLocation(ovParts.get(1).trim())) { + LatLonPoint secondPoint = interLocation; + + // Now we have two valid points. + // get the midpoint distance from point 1 to point 2. + double dist = firstPoint.distanceTo(secondPoint) / 2; + // and use the bearing between the points to construct the + // midpoint location. + secondPoint = firstPoint.positionOf(firstPoint + .bearingTo(secondPoint), dist); + location = new BasePoint(secondPoint + .getLatitude(LatLonPoint.INDEGREES), secondPoint + .getLongitude(LatLonPoint.INDEGREES)); + decodeStatus = true; + if(ovParts.size() > maxOVParts) { + logger.info(traceId + "- More than 2 locations reported, first 2 used"); + } + } else { + logger.error(traceId + "- Could not decode location " + ovParts.get(1).trim()); + } + } else { + logger.error(traceId + "- Could not decode location " + ovParts.get(0).trim()); + } + } + } + return decodeStatus; + } // decodeLocationData() + + /** + * Decode the individual location points found in an "OV" section. + * + * @param aLocation + * A possible location point. + * @return Was the decode successful (true|false). + */ + private boolean decodeLocation(String aLocation) { + final String navaidPattern = "^[A-Z,0-9]{3,4}$"; + final String bearingDistPattern = "^[A-Z,0-9]{3,4}\\d{6}$"; + + Pattern p = Pattern.compile(navaidPattern); + location = null; + boolean decodeStatus = false; + Matcher m = p.matcher(aLocation); + if (m.find()) { + BasePoint navaidLoc = getNavaidLocation(aLocation); + if (navaidLoc != null) { + location = navaidLoc; + + interLocation = new LatLonPoint(navaidLoc + .getLatitude(), navaidLoc.getLongitude(), + LatLonPoint.INDEGREES); + + decodeStatus = true; + } + } else { + // try bearing and distance. + p = Pattern.compile(bearingDistPattern); + m = p.matcher(aLocation); + if (m.find()) { + String staId = aLocation.substring(0, aLocation.length() - 6); + + BasePoint navaidLoc = getNavaidLocation(staId); + if (navaidLoc != null) { + int len = aLocation.length(); + + String s = aLocation.substring(len - 6, len - 3); + Double bearing = Math.toRadians(parseInteger(s)); + + s = aLocation.substring(len - 3); + Double dist = ONE_NM_RADIANS * parseInteger(s); + + + LatLonPoint point1 = new LatLonPoint(navaidLoc + .getLatitude(), navaidLoc.getLongitude(), + LatLonPoint.INDEGREES); + + LatLonPoint point2 = point1.positionOf(-bearing, dist); + interLocation = point2; + + location = new BasePoint(point2 + .getLatitude(LatLonPoint.INDEGREES), point2 + .getLongitude(LatLonPoint.INDEGREES)); + + decodeStatus = true; + } else { + decodeStatus = false; + } + } else { + } + } + return decodeStatus; + } // decodeLocation() + + /** + * Attempt to convert a string to an integer value. + * + * @param aNumber + * A possible integer value. + * @return The converted number or null if conversion failed. + */ + private static Integer parseInteger(String aNumber) { + Integer retValue = null; + try { + retValue = new Integer(aNumber.trim()); + } + catch (NumberFormatException nfe) { + retValue = null; + } + return retValue; + } // parseInteger() + + /** + * Get the latitude/longitude pair for a given navigation point. + * + * @param aNavaid + * A possible navaid to look up. + * @return The location of the navaid or null if not found. + */ + private BasePoint getNavaidLocation(String navaid) { + BasePoint navaidLocation = null; + + ObStationDao obSta = null; + ObStation stationInfo = null; + if ((navaid != null) && (navaid.length() >= 0)) { + logger.debug(traceId + " - Processing Navaid [" + navaid + "]"); + try { + obSta = new ObStationDao(); if(navaid.length() == 3) { String gid = ObStation.createGID(ObStation.CAT_TYPE_ACFT_PIREP, navaid); - - stationInfo = obSta.queryByGid(gid); - } else if (navaid.length() == 4) { + + stationInfo = obSta.queryByGid(gid); + } else if (navaid.length() == 4) { String gid = ObStation.createGID(ObStation.CAT_TYPE_ICAO, navaid); - stationInfo = obSta.queryByGid(gid); - } - } catch(DataAccessLayerException e){ - logger.error(traceId + " - Unable to retrieve station info",e); - } - } else { - logger.info(traceId + " - Invalid navaid [" + navaid + "]"); - } - - if (stationInfo != null) { - Geometry g = stationInfo.getGeometry(); - if(g instanceof Point) { - Point p = (Point) g; - navaidLocation = new BasePoint(p.getY(),p.getX()); - } - } else { - logger.info(traceId + " - Station id not found [" + navaid + "]"); - } - return navaidLocation; - } // getNavaidLocation() - - /** - * - */ - private static BasePoint parseLatLon(String latlon) { - BasePoint point = null; - - // 012345678901 - // lldds llldds - - Integer lat_dd = parseInteger(latlon.substring(0,2)); + stationInfo = obSta.queryByGid(gid); + } + } catch(DataAccessLayerException e){ + logger.error(traceId + " - Unable to retrieve station info",e); + } + } else { + logger.info(traceId + " - Invalid navaid [" + navaid + "]"); + } + + if (stationInfo != null) { + Geometry g = stationInfo.getGeometry(); + if(g instanceof Point) { + Point p = (Point) g; + navaidLocation = new BasePoint(p.getY(),p.getX()); + } + } else { + logger.info(traceId + " - Station id not found [" + navaid + "]"); + } + return navaidLocation; + } // getNavaidLocation() + + /** + * + */ + private static BasePoint parseLatLon(String latlon) { + BasePoint point = null; + + // 012345678901 + // lldds llldds + + Integer lat_dd = parseInteger(latlon.substring(0,2)); Integer lat_mm = parseInteger(latlon.substring(2,4)); Integer lon_dd = 0; Integer lon_mm = 0; int lastLetterIdx = 0; - if (latlon.split(" ").length ==2) { - lon_dd = parseInteger(latlon.substring(6,9)); + if (latlon.split(" ").length ==2) { + lon_dd = parseInteger(latlon.substring(6,9)); lon_mm = parseInteger(latlon.substring(9,11)); lastLetterIdx = 11; } @@ -810,211 +810,211 @@ public class NcPirepParser { lon_dd = parseInteger(latlon.substring(5,8)); lon_mm = parseInteger(latlon.substring(8,10)); lastLetterIdx = 10; - } - - if((lat_dd != null)&&(lat_mm) != null) { - if((lon_dd != null)&&(lon_mm) != null) { - - Double lat = lat_dd + (lat_mm / 60.0d); - Double lon = lon_dd + (lon_mm / 60.0d); - if(lat_dd.equals(0)&&(lat_mm.equals(0))) { - lat = 0.0; - } else { - switch(latlon.charAt(4)) { - case 'N' : { - break; - } - case 'S' : { - lat = lat * -1; - break; - } - default : { - lat = null; - } - } - } - if(lon_dd.equals(0)&&(lon_mm.equals(0))) { - lon = 0.0; - } else { - switch(latlon.charAt(lastLetterIdx)) { - case 'E' : { - break; - } - case 'W' : { - lon = lon * -1; - break; - } - default : { - lon = null; - } - } - } - if(lat != null && lon != null) { - point = new BasePoint(lat,lon); - } - } - } - return point; - } - - /** - * This method decodes a location point (i.e. a "location point" is either a - * navaid or a navaid/bearing/distance) from within the location data of a - * PIREP report. This method ported from NCEP decoder. - * - * @param fields - * "like-type" fields which contain location data - * @param startIndex - * Index of "like-type" group which contains start of location - * point - * @param aLoc - * latitude and longitude of location - * @return Index of "like-type" group which contains end of location point, - * -1 on failure - * @throws DecodeException - * If a decode error occured. - */ - protected int decodeLocationPoint(String[] fields, int startIndex, - BasePoint aLoc) { - boolean offset = false; - boolean other = false; - boolean bad = false; - int endIndex = -1; - - // LatLonPoint point1Loc = null; - - // The "like-type" group should be a 3-letter or 4-letter navaid - // identifier. - BasePoint navaidLoc = null; - int i = startIndex; - if ((Character.isLetter(fields[i].charAt(0)) && ((fields[i].length() == 3) || (fields[i] - .length() == 4))) - || (Character.isDigit(fields[i].charAt(0)) && (fields[i].length() <= 2))) { - // Setting conditions if the navaid came after the reported - // distance and range. - if (Character.isDigit(fields[i].charAt(0))) { - if ((i + 2) < fields.length) { - i += 2; - endIndex = i; - other = true; - if (fields[i].length() <= 2) { - bad = true; - } - } else { - bad = true; - } - } - - // Locate the entry for this navaid in the PIREP navaids table - if (!bad) { - navaidLoc = getNavaidLocation(fields[i]); - if (navaidLoc == null) { - // LOG.error("Could not find " + fields[i] + " in Pirep - // Navaids table."); - return -1; - } - - // store the first location navaid as the platform station - if (navaidLoc == null) { - // thePlatformStation = platformStation; - } - - // create location for the navaid -// point1Loc = new LatLonPoint(navaidLoc.getLatitude(), -// navaidLoc.getLongitude(), -// LatLonPoint.INDEGREES); - } - } else { - bad = true; - } - - if (bad) { - // throw new DecodeException("Invalid Navaid in Pirep Location: " - // + fields[i]); - } - - // Looking for the bearing and distance offset, if there is one. - int bearingDegrees = -1; - int distanceNm = -1; - if (!other && ((i + 1) < fields.length) - && Character.isDigit(fields[i + 1].charAt(0)) - && (fields[i + 1].length() == 6)) { - endIndex = i + 1; - bearingDegrees = Integer.parseInt(fields[i + 1].substring(0, 3)); - distanceNm = Integer.parseInt(fields[i + 1].substring(3, 6)); - offset = true; - if ((bearingDegrees < 0) || (bearingDegrees > 360) - || (distanceNm < 0)) { - // throw new DecodeException("Invalid bearing / distance: " - // + bearingDegrees + " / " + distanceNm + " data: " - // + fields[i + 1]); - } - } else if (other) { - // getting bearing and distance of aircraft - distanceNm = Integer.parseInt(fields[i - 2]); - bearingDegrees = decodeLocationDirection(fields[i - 1]); - offset = true; - } - - BasePoint loc = null; - if (offset) { - // // convert distance from nautical miles to kilometers - // Length distance = distanceNm; - // // convert bearing from degrees to radians - // AngularMeasure bearing = new AngularMeasure() - // .fromDegree(bearingDegrees); - // - // // Compute the latitude and longitude of the location - // // point by applying the bearing and distance offsets - // // to the navaid latitude and longitude. - // // (assume spherical earth) - // double distanceRad = distance.getKilometers() - // / PhysPar.EARTH_RADIUS_KM; - // loc = LatLonPoint.positionOf(navaidLoc.getLatitude(), navaidLoc - // .getLongitude(), bearing.getRadians(), distanceRad); - // } else { - // // The location point is simply the navaid itself, so the - // // latitude and longitude of the location point are equal - // // to the latitude and longitude of the navaid. - // endIndex = i; - // loc = navaidLoc; - } - aLoc.setLatitude(loc.getLatitude()); - aLoc.setLongitude(loc.getLongitude()); - - return endIndex; - } - - /** - * This method decodes a location direction from a given compass point from - * within the location data of a PIREP report. This method ported from NCEP - * decoder. - * - * @param aField - * A possible location direction to decode. - * @return location direction in degrees, -1 on failure - */ - protected int decodeLocationDirection(String aField) { - int bearingDegrees = -1; - if(DIR_POINTS.containsKey(aField)) { - bearingDegrees = DIR_POINTS.get(aField).intValue(); - } - return bearingDegrees; - } - - /** - * This subroutine decodes and stores the time (i.e. report hour and report - * minutes) from AMDAR, AIREP, PIREP, and RECCO reports. This method ported - * from NCEP decoder. - * - * @param str - * time data - * @return true on success - * @throws DecodeException - * If a decode error occured. - */ + } + + if((lat_dd != null)&&(lat_mm) != null) { + if((lon_dd != null)&&(lon_mm) != null) { + + Double lat = lat_dd + (lat_mm / 60.0d); + Double lon = lon_dd + (lon_mm / 60.0d); + if(lat_dd.equals(0)&&(lat_mm.equals(0))) { + lat = 0.0; + } else { + switch(latlon.charAt(4)) { + case 'N' : { + break; + } + case 'S' : { + lat = lat * -1; + break; + } + default : { + lat = null; + } + } + } + if(lon_dd.equals(0)&&(lon_mm.equals(0))) { + lon = 0.0; + } else { + switch(latlon.charAt(lastLetterIdx)) { + case 'E' : { + break; + } + case 'W' : { + lon = lon * -1; + break; + } + default : { + lon = null; + } + } + } + if(lat != null && lon != null) { + point = new BasePoint(lat,lon); + } + } + } + return point; + } + + /** + * This method decodes a location point (i.e. a "location point" is either a + * navaid or a navaid/bearing/distance) from within the location data of a + * PIREP report. This method ported from NCEP decoder. + * + * @param fields + * "like-type" fields which contain location data + * @param startIndex + * Index of "like-type" group which contains start of location + * point + * @param aLoc + * latitude and longitude of location + * @return Index of "like-type" group which contains end of location point, + * -1 on failure + * @throws DecodeException + * If a decode error occured. + */ + protected int decodeLocationPoint(String[] fields, int startIndex, + BasePoint aLoc) { + boolean offset = false; + boolean other = false; + boolean bad = false; + int endIndex = -1; + + // LatLonPoint point1Loc = null; + + // The "like-type" group should be a 3-letter or 4-letter navaid + // identifier. + BasePoint navaidLoc = null; + int i = startIndex; + if ((Character.isLetter(fields[i].charAt(0)) && ((fields[i].length() == 3) || (fields[i] + .length() == 4))) + || (Character.isDigit(fields[i].charAt(0)) && (fields[i].length() <= 2))) { + // Setting conditions if the navaid came after the reported + // distance and range. + if (Character.isDigit(fields[i].charAt(0))) { + if ((i + 2) < fields.length) { + i += 2; + endIndex = i; + other = true; + if (fields[i].length() <= 2) { + bad = true; + } + } else { + bad = true; + } + } + + // Locate the entry for this navaid in the PIREP navaids table + if (!bad) { + navaidLoc = getNavaidLocation(fields[i]); + if (navaidLoc == null) { + // LOG.error("Could not find " + fields[i] + " in Pirep + // Navaids table."); + return -1; + } + + // store the first location navaid as the platform station + if (navaidLoc == null) { + // thePlatformStation = platformStation; + } + + // create location for the navaid +// point1Loc = new LatLonPoint(navaidLoc.getLatitude(), +// navaidLoc.getLongitude(), +// LatLonPoint.INDEGREES); + } + } else { + bad = true; + } + + if (bad) { + // throw new DecodeException("Invalid Navaid in Pirep Location: " + // + fields[i]); + } + + // Looking for the bearing and distance offset, if there is one. + int bearingDegrees = -1; + int distanceNm = -1; + if (!other && ((i + 1) < fields.length) + && Character.isDigit(fields[i + 1].charAt(0)) + && (fields[i + 1].length() == 6)) { + endIndex = i + 1; + bearingDegrees = Integer.parseInt(fields[i + 1].substring(0, 3)); + distanceNm = Integer.parseInt(fields[i + 1].substring(3, 6)); + offset = true; + if ((bearingDegrees < 0) || (bearingDegrees > 360) + || (distanceNm < 0)) { + // throw new DecodeException("Invalid bearing / distance: " + // + bearingDegrees + " / " + distanceNm + " data: " + // + fields[i + 1]); + } + } else if (other) { + // getting bearing and distance of aircraft + distanceNm = Integer.parseInt(fields[i - 2]); + bearingDegrees = decodeLocationDirection(fields[i - 1]); + offset = true; + } + + BasePoint loc = null; + if (offset) { + // // convert distance from nautical miles to kilometers + // Length distance = distanceNm; + // // convert bearing from degrees to radians + // AngularMeasure bearing = new AngularMeasure() + // .fromDegree(bearingDegrees); + // + // // Compute the latitude and longitude of the location + // // point by applying the bearing and distance offsets + // // to the navaid latitude and longitude. + // // (assume spherical earth) + // double distanceRad = distance.getKilometers() + // / PhysPar.EARTH_RADIUS_KM; + // loc = LatLonPoint.positionOf(navaidLoc.getLatitude(), navaidLoc + // .getLongitude(), bearing.getRadians(), distanceRad); + // } else { + // // The location point is simply the navaid itself, so the + // // latitude and longitude of the location point are equal + // // to the latitude and longitude of the navaid. + // endIndex = i; + // loc = navaidLoc; + } + aLoc.setLatitude(loc.getLatitude()); + aLoc.setLongitude(loc.getLongitude()); + + return endIndex; + } + + /** + * This method decodes a location direction from a given compass point from + * within the location data of a PIREP report. This method ported from NCEP + * decoder. + * + * @param aField + * A possible location direction to decode. + * @return location direction in degrees, -1 on failure + */ + protected int decodeLocationDirection(String aField) { + int bearingDegrees = -1; + if(DIR_POINTS.containsKey(aField)) { + bearingDegrees = DIR_POINTS.get(aField).intValue(); + } + return bearingDegrees; + } + + /** + * This subroutine decodes and stores the time (i.e. report hour and report + * minutes) from AMDAR, AIREP, PIREP, and RECCO reports. This method ported + * from NCEP decoder. + * + * @param str + * time data + * @return true on success + * @throws DecodeException + * If a decode error occured. + */ protected boolean decodeTimeData(String str) { - //get current calendar and set day, hour and minute + //get current calendar and set day, hour and minute str = str.trim(); Calendar oTime = TimeTools.getSystemCalendar(); @@ -1042,28 +1042,28 @@ public class NcPirepParser { issuTime.set(Calendar.MINUTE,minute); issuTime.set(Calendar.SECOND,0); issuTime.set(Calendar.MILLISECOND,0); - + if (str.length() == 4) { hour = Integer.parseInt(str.substring(0, 2)); minute = Integer.parseInt(str.substring(2, 4)); - + observationTime = TimeTools.copy(oTime); observationTime.set(Calendar.YEAR, year); observationTime.set(Calendar.MONTH, month); - observationTime.set(Calendar.DAY_OF_MONTH, day); - observationTime.set(Calendar.HOUR_OF_DAY,hour); - observationTime.set(Calendar.MINUTE,minute); - observationTime.set(Calendar.SECOND,0); - observationTime.set(Calendar.MILLISECOND,0); + observationTime.set(Calendar.DAY_OF_MONTH, day); + observationTime.set(Calendar.HOUR_OF_DAY,hour); + observationTime.set(Calendar.MINUTE,minute); + observationTime.set(Calendar.SECOND,0); + observationTime.set(Calendar.MILLISECOND,0); if (observationTime.getTime() != issuTime.getTime()) observationTime = checkDayInTime (observationTime, issuTime); - //System.out.println("***********time2 "+observationTime.getTime()); - oTime.add(Calendar.MINUTE, ALLOWABLE_TIME); - if(observationTime.compareTo(oTime) > 0) { - observationTime.add(Calendar.DAY_OF_MONTH,-1); - } - + //System.out.println("***********time2 "+observationTime.getTime()); + oTime.add(Calendar.MINUTE, ALLOWABLE_TIME); + if(observationTime.compareTo(oTime) > 0) { + observationTime.add(Calendar.DAY_OF_MONTH,-1); + } + return true; } else if (str.length() == 6) { @@ -1088,8 +1088,8 @@ public class NcPirepParser { return true; } else - return false; - } + return false; + } /* * In 'ENA UA /OV PDN288051/TM 2348/FL340/TP B737/TA M56/WV 218035/TB CONT LGHT OCNL MOD/RM CONT CHOP FL350 ZAN =', 'TM 2348' is the obs time. * Get the day from wmoHeader and add to front of '2348' @@ -1124,218 +1124,218 @@ public class NcPirepParser { return obs; } - - /** - * This method decodes PIREP flight level. - * - * @param str - * Flight Level Data - * @return true on success - */ - protected boolean decodeFlightLevelData(String str) { - String regex = "([0-9]{3})(?:-([0-9]{3}))?"; - Pattern pattern = Pattern.compile(regex); - - // Get a Matcher based on the target string. - Matcher matcher = pattern.matcher(str); - if (matcher.find()) { - Integer fltLevel = decodeHeight(matcher.group(1)); - - if (matcher.group(2) != null) { - Integer upperLevel = decodeHeight(matcher.group(2)); - - fltLevel = (fltLevel + upperLevel) / 2; - } - flightLevel = new AircraftFlightLevel(fltLevel); - } - - // if the flight level has anything non-numeric such as UNK, UNKN, DURC, - // DURD, VFR, etc. - // the flight level will be left null and stored by the decoder as - // unknown - - return true; - } - - /** - * This method decodes a 3-digit string containing a height value in units - * of hundreds-of-feet into a real height value in units of feet. This - * method ported from NCEP decoder. - * - * @param aHeight - * Height data to decode. - * @return The aircraft height information or null if the decode failed. - */ - protected static Integer decodeHeight(String aHeight) { - Integer altHundredsFeet = null; - if (aHeight.length() == 3) { - if(!"UNKN".equals(aHeight)) { - // unknown heights - if ((aHeight.indexOf("UNK") != -1) || (aHeight.indexOf("ABV") != -1) - || (aHeight.indexOf("BLO") != -1)) { - altHundredsFeet = null; - } else { - altHundredsFeet = Integer.parseInt(aHeight) * 100; - } - } - } - return altHundredsFeet; - } - - /** - * This method decodes and stores the aircraft type data from within a PIREP - * report. This method ported from NCEP decoder. - * - * @param aType - * Aircraft type data - * @return Was the aircraft type decoded. (always true) - */ - protected boolean decodeAircraftTypeData(String aType) { - aType = aType.trim(); - - // truncate at 8 characters - if (aType.length() <= 8) { - aircraftType = new String(aType); - } else { - aircraftType = new String(aType.substring(0, 8)); - } - - return true; - } - - /** - * This method decodes and stores the temperature data from within a PIREP - * report. This method ported from NCEP decoder. - * - * @param aTemperature - * A possible temperature to be decoded. - * @return Was the temperature data decoded. - * @throws DecodeException - * If a decode error occured. - */ - protected boolean decodeTemperatureData(String aTemperature) { - // Break up the input string into groups of "like-type" in order - // to facilitate decoding. - String[] fields = groupLikeTypes(aTemperature); - if (fields.length == 0) { - return false; - } - - // Locate, decode, and store the temperature data from within - // the first 3 "like-type" groups. It is identifiable as a - // numeric "like-type" group of at least 1 digit, possibly - // preceded by a "like-type" group containing the sign of - // the temperature. - int numGroups = Math.min(3, fields.length); - for (int i = 0; i < numGroups; i++) { - if ((fields[i].length() >= 1) - && (Character.isDigit(fields[i].charAt(0)))) { + + /** + * This method decodes PIREP flight level. + * + * @param str + * Flight Level Data + * @return true on success + */ + protected boolean decodeFlightLevelData(String str) { + String regex = "([0-9]{3})(?:-([0-9]{3}))?"; + Pattern pattern = Pattern.compile(regex); + + // Get a Matcher based on the target string. + Matcher matcher = pattern.matcher(str); + if (matcher.find()) { + Integer fltLevel = decodeHeight(matcher.group(1)); + + if (matcher.group(2) != null) { + Integer upperLevel = decodeHeight(matcher.group(2)); + + fltLevel = (fltLevel + upperLevel) / 2; + } + flightLevel = new AircraftFlightLevel(fltLevel); + } + + // if the flight level has anything non-numeric such as UNK, UNKN, DURC, + // DURD, VFR, etc. + // the flight level will be left null and stored by the decoder as + // unknown + + return true; + } + + /** + * This method decodes a 3-digit string containing a height value in units + * of hundreds-of-feet into a real height value in units of feet. This + * method ported from NCEP decoder. + * + * @param aHeight + * Height data to decode. + * @return The aircraft height information or null if the decode failed. + */ + protected static Integer decodeHeight(String aHeight) { + Integer altHundredsFeet = null; + if (aHeight.length() == 3) { + if(!"UNKN".equals(aHeight)) { + // unknown heights + if ((aHeight.indexOf("UNK") != -1) || (aHeight.indexOf("ABV") != -1) + || (aHeight.indexOf("BLO") != -1)) { + altHundredsFeet = null; + } else { + altHundredsFeet = Integer.parseInt(aHeight) * 100; + } + } + } + return altHundredsFeet; + } + + /** + * This method decodes and stores the aircraft type data from within a PIREP + * report. This method ported from NCEP decoder. + * + * @param aType + * Aircraft type data + * @return Was the aircraft type decoded. (always true) + */ + protected boolean decodeAircraftTypeData(String aType) { + aType = aType.trim(); + + // truncate at 8 characters + if (aType.length() <= 8) { + aircraftType = new String(aType); + } else { + aircraftType = new String(aType.substring(0, 8)); + } + + return true; + } + + /** + * This method decodes and stores the temperature data from within a PIREP + * report. This method ported from NCEP decoder. + * + * @param aTemperature + * A possible temperature to be decoded. + * @return Was the temperature data decoded. + * @throws DecodeException + * If a decode error occured. + */ + protected boolean decodeTemperatureData(String aTemperature) { + // Break up the input string into groups of "like-type" in order + // to facilitate decoding. + String[] fields = groupLikeTypes(aTemperature); + if (fields.length == 0) { + return false; + } + + // Locate, decode, and store the temperature data from within + // the first 3 "like-type" groups. It is identifiable as a + // numeric "like-type" group of at least 1 digit, possibly + // preceded by a "like-type" group containing the sign of + // the temperature. + int numGroups = Math.min(3, fields.length); + for (int i = 0; i < numGroups; i++) { + if ((fields[i].length() >= 1) + && (Character.isDigit(fields[i].charAt(0)))) { // double temp; - float temp = RMISSD; - if (i == 0) { - // This is the first "like-type" group, so assume + float temp = RMISSD; + if (i == 0) { + // This is the first "like-type" group, so assume // that the sign of the temperature is positive. -// temp = decodeTemperatureData("+", fields[i]; - temp = (float)decodeTemperatureData("+", fields[i]); - } else { - // Assume that the previous "like-type" group - // contains the sign of the temperature. +// temp = decodeTemperatureData("+", fields[i]; + temp = (float)decodeTemperatureData("+", fields[i]); + } else { + // Assume that the previous "like-type" group + // contains the sign of the temperature. // temp = decodeTemperatureData(fields[i - 1], fields[i]); - temp = (float)decodeTemperatureData(fields[i - 1], fields[i]); - } - + temp = (float)decodeTemperatureData(fields[i - 1], fields[i]); + } + //qu if (Double.isNaN(temp)) { // /* 8888888888888888888 */ // temp = RMISSD; // System.out.println(" temp is NaN So set to RMISSD???"); -// /* 888 */ -// return false; -// } - - // Check if temperature was reported in Fahrenheit. - if ((i < (fields.length - 1)) - && ((fields[i + 1].length() == 1) && (fields[i + 1] - .charAt(0) == 'F'))) { - // temperature = new Temperature().fromFahrenheit(temp); +// /* 888 */ +// return false; +// } + + // Check if temperature was reported in Fahrenheit. + if ((i < (fields.length - 1)) + && ((fields[i + 1].length() == 1) && (fields[i + 1] + .charAt(0) == 'F'))) { + // temperature = new Temperature().fromFahrenheit(temp); } else { - temperature = temp; - } - break; - } - } - - return true; - } - - /** - * Helper method to decode temperature in PIREP. This method was ported from - * NCEP decoder. - * - * @param sign - * Sign of the data i.e. {"PS, P, +, MS, M, -}. - * @param temp - * Candidate temperature value. - * @return temperature on success, NaN on failure - * @throws DecodeException - * If a decode error occured. - */ - protected double decodeTemperatureData(String sign, String temp) { - double rmult = Double.NaN; - double rdiv = Double.NaN; - - // validate length - if ((temp.length() < 1) || (temp.length() > 3) || (sign.length() < 1) - || (sign.length() > 2)) { - // throw new DecodeException("Unrecognized temperature data format - // in Pirep: " + sign + temp); - } - - // Determine divisor based on the length of the input temperature - // string. - if (temp.length() == 3) { - rdiv = 10.0; - } else { - rdiv = 1.0; - } - - // Determine the length of the input temperature sign string, - // and then decode the sign of the temperature accordingly. - if (sign.length() == 2) { - if ("PS".equals(sign)) { - rmult = 1.0; - } else if ("MS".equals(sign)) { - rmult = -1.0; - } - } else { - if ("P".equals(sign) || "+".equals(sign)) { - rmult = 1.0; - } else if ("M".equals(sign) || "-".equals(sign)) { - rmult = -1.0; - } - } - if (Double.isNaN(rmult)) { - // throw new DecodeException("Unrecognized temperature sign data - // format in Pirep: " + sign); - } - - double t = (double) Integer.parseInt(temp) * rmult / rdiv; - return t; - } - - /** - * This method decodes the sky cover data. - * - * @param str - * Sky cover data to be decoded. - * @return Was the sky cover correctly decoded? - * @throws DecodeException - * If a decode error occured. - */ - protected boolean decodeSkyCoverData(String sky) { - // Format is NNN(-NNN)bbb(-TOPttt)/NNN(-NNN)bbb, etc. - // NNN is the three-letter contraction for the amount of cloud cover - // bbb is the height of the base of a layer of clouds in hundreds of - // feet + temperature = temp; + } + break; + } + } + + return true; + } + + /** + * Helper method to decode temperature in PIREP. This method was ported from + * NCEP decoder. + * + * @param sign + * Sign of the data i.e. {"PS, P, +, MS, M, -}. + * @param temp + * Candidate temperature value. + * @return temperature on success, NaN on failure + * @throws DecodeException + * If a decode error occured. + */ + protected double decodeTemperatureData(String sign, String temp) { + double rmult = Double.NaN; + double rdiv = Double.NaN; + + // validate length + if ((temp.length() < 1) || (temp.length() > 3) || (sign.length() < 1) + || (sign.length() > 2)) { + // throw new DecodeException("Unrecognized temperature data format + // in Pirep: " + sign + temp); + } + + // Determine divisor based on the length of the input temperature + // string. + if (temp.length() == 3) { + rdiv = 10.0; + } else { + rdiv = 1.0; + } + + // Determine the length of the input temperature sign string, + // and then decode the sign of the temperature accordingly. + if (sign.length() == 2) { + if ("PS".equals(sign)) { + rmult = 1.0; + } else if ("MS".equals(sign)) { + rmult = -1.0; + } + } else { + if ("P".equals(sign) || "+".equals(sign)) { + rmult = 1.0; + } else if ("M".equals(sign) || "-".equals(sign)) { + rmult = -1.0; + } + } + if (Double.isNaN(rmult)) { + // throw new DecodeException("Unrecognized temperature sign data + // format in Pirep: " + sign); + } + + double t = (double) Integer.parseInt(temp) * rmult / rdiv; + return t; + } + + /** + * This method decodes the sky cover data. + * + * @param str + * Sky cover data to be decoded. + * @return Was the sky cover correctly decoded? + * @throws DecodeException + * If a decode error occured. + */ + protected boolean decodeSkyCoverData(String sky) { + // Format is NNN(-NNN)bbb(-TOPttt)/NNN(-NNN)bbb, etc. + // NNN is the three-letter contraction for the amount of cloud cover + // bbb is the height of the base of a layer of clouds in hundreds of + // feet // ttt is the top of the layer in hundreds of feet String[] str2 = sky.split("/"); @@ -1386,7 +1386,7 @@ public class NcPirepParser { AircraftCloudLayer layer = new AircraftCloudLayer(); - //Separate following regex to 2 part to fix all cases + //Separate following regex to 2 part to fix all cases //String regex = "([A-Z]{3}|UNKN?)(?:-([A-Z]{3}))?([0-9]{3}|UNKN?)(?:-TOP([0-9]{3}|UNKN?))?/?"; String regex = "([A-Z]{3}|UNKN?)(?:-([A-Z]{3}))?"; @@ -1434,149 +1434,149 @@ public class NcPirepParser { } if (cloudLayers != null) - cloudLayers.add(layer); - - // TODO alternate sky cover format and separator of cloud cover can be - // other than - - // also other possibilities in afpsky.f - // also TOP can be TPS, and can be second top height - } - return true; - } - - /** - * This method decodes the wind data. - * - * @param str - * Wind data to be decoded. - * @return Was the wind data properly decoded? - * @throws DecodeException - * If a decode error occured. - */ - protected boolean decodeWindData(String str) { - // Format is dddff(f)KT - // ddd is three digit true direction in whole degrees from - // which the wind is blowing - // ff(f) is the wind speed in knots, followed by KT - String regex = "([0-9]{3})([0-9]{2,3})(?:KT)?"; - Pattern pattern = Pattern.compile(regex); - // Get a Matcher based on the target string. - Matcher matcher = pattern.matcher(str); - if (matcher.find()) { + cloudLayers.add(layer); + + // TODO alternate sky cover format and separator of cloud cover can be + // other than - + // also other possibilities in afpsky.f + // also TOP can be TPS, and can be second top height + } + return true; + } + + /** + * This method decodes the wind data. + * + * @param str + * Wind data to be decoded. + * @return Was the wind data properly decoded? + * @throws DecodeException + * If a decode error occured. + */ + protected boolean decodeWindData(String str) { + // Format is dddff(f)KT + // ddd is three digit true direction in whole degrees from + // which the wind is blowing + // ff(f) is the wind speed in knots, followed by KT + String regex = "([0-9]{3})([0-9]{2,3})(?:KT)?"; + Pattern pattern = Pattern.compile(regex); + // Get a Matcher based on the target string. + Matcher matcher = pattern.matcher(str); + if (matcher.find()) { // windDirection = Integer.parseInt(matcher.group(1)); - windDirection = Float.parseFloat(matcher.group(1)); - - int windSpeedKnots = Integer.parseInt(matcher.group(2)); + windDirection = Float.parseFloat(matcher.group(1)); + + int windSpeedKnots = Integer.parseInt(matcher.group(2)); // windSpeed = new Double(windSpeedKnots); // Speed().fromKnots(windSpeedKnots); - windSpeed = new Float(windSpeedKnots); // Speed().fromKnots(windSpeedKnots); - } else { - // throw new DecodeException("Unrecognized wind data format in - // Pirep: " + str); - } - - return true; - } - - /** - * This method decodes the turbulence data. - * - * @param str - * Turbulence data to be decoded. - * @return Was the turbulence properly decoded? - * @throws DecodeException - * If a decode error occured. - */ - protected boolean decodeTurbulenceData(String turbLayers) { - // Format is III(-III)( CAT or CHOP ) (bbb-ttt)/III(-III) etc. - // III is the intensity of the turbulence - // CAT or CHOP is the type of turbulence - // bbb is the height of the base of a layer of clouds in hundreds of - // feet - // ttt is the top of the layer in hundreds of feet -// String regex = "([A-Z]{3,5})(?:((?:-)([A-Z]{3,5})))?((?: )" -// + "(CHOP|CAT))?(?: )?(((ABV|BLO)(?: )(\\d{3}))|((\\d{3})" + windSpeed = new Float(windSpeedKnots); // Speed().fromKnots(windSpeedKnots); + } else { + // throw new DecodeException("Unrecognized wind data format in + // Pirep: " + str); + } + + return true; + } + + /** + * This method decodes the turbulence data. + * + * @param str + * Turbulence data to be decoded. + * @return Was the turbulence properly decoded? + * @throws DecodeException + * If a decode error occured. + */ + protected boolean decodeTurbulenceData(String turbLayers) { + // Format is III(-III)( CAT or CHOP ) (bbb-ttt)/III(-III) etc. + // III is the intensity of the turbulence + // CAT or CHOP is the type of turbulence + // bbb is the height of the base of a layer of clouds in hundreds of + // feet + // ttt is the top of the layer in hundreds of feet +// String regex = "([A-Z]{3,5})(?:((?:-)([A-Z]{3,5})))?((?: )" +// + "(CHOP|CAT))?(?: )?(((ABV|BLO)(?: )(\\d{3}))|((\\d{3})" // + "(?:(-(\\d{3}))?)))?(?:/)?()"; - + // String[] str2 = turbLayers.split("/"); -// for (String str :str2) { -// theTurbulenceLayers = new ArrayList(); -// -// if (str.indexOf(NEG_ENTRY) > 0) { -// AircraftFlightCondition at = new AircraftFlightCondition(); -// -// // NEG should be the only value! Used to indicate forecasted but -// // not observed! -// at.setIntensity1(NEG_ENTRY); -// if (flightLevel != null) { -// at.setBaseHeight(flightLevel.getFlightLevel()); -// theTurbulenceLayers.add(at); -// } -// } else { -// Pattern pattern = Pattern.compile(TRB_REGEX); -// // Get a Matcher based on the target string. -// Matcher matcher = pattern.matcher(str); -// // add each turbulence -// while (matcher.find()) { -// addFlightCondition(matcher, theTurbulenceLayers); -// } +// for (String str :str2) { +// theTurbulenceLayers = new ArrayList(); +// +// if (str.indexOf(NEG_ENTRY) > 0) { +// AircraftFlightCondition at = new AircraftFlightCondition(); +// +// // NEG should be the only value! Used to indicate forecasted but +// // not observed! +// at.setIntensity1(NEG_ENTRY); +// if (flightLevel != null) { +// at.setBaseHeight(flightLevel.getFlightLevel()); +// theTurbulenceLayers.add(at); +// } +// } else { +// Pattern pattern = Pattern.compile(TRB_REGEX); +// // Get a Matcher based on the target string. +// Matcher matcher = pattern.matcher(str); +// // add each turbulence +// while (matcher.find()) { +// addFlightCondition(matcher, theTurbulenceLayers); +// } // } //turbLayers = turbLayers.trim(); - + PirepTools tools = new PirepTools(turbLayers); theTurbulenceLayers = tools.decodeTurbulenceData(); - - if (theTurbulenceLayers.size() == 0) { - theTurbulenceLayers = null; - } - - return true; - } - - /** - * This method decodes the icing data. - * - * @param str - * Icing data to be decoded. - * @return Was the icing data decoded? - * @throws DecodeException - * If a decode error occurred. - */ - protected boolean decodeIcingData(String icing) { - // Format is III(-III) (type) (bbb-ttt)/III(-III) etc. - // III is the intesity of the icing - // type is the type of icing - // bbb is the height of the base of a layer of clouds in hundreds of - // feet - // ttt is the top of the layer in hundreds of feet -// String regex = "([A-Z]{3,5})(?:((?:-)([A-Z]{3,5})))?((?: )" -// + "(RIME|MXD|CLR))(?: )?(((ABV|BLO)(?: )(\\d{3}))|((\\d{3})" -// + "(?:(-(\\d{3}))?)))?(?:/)?()"; + + if (theTurbulenceLayers.size() == 0) { + theTurbulenceLayers = null; + } + + return true; + } + + /** + * This method decodes the icing data. + * + * @param str + * Icing data to be decoded. + * @return Was the icing data decoded? + * @throws DecodeException + * If a decode error occurred. + */ + protected boolean decodeIcingData(String icing) { + // Format is III(-III) (type) (bbb-ttt)/III(-III) etc. + // III is the intesity of the icing + // type is the type of icing + // bbb is the height of the base of a layer of clouds in hundreds of + // feet + // ttt is the top of the layer in hundreds of feet +// String regex = "([A-Z]{3,5})(?:((?:-)([A-Z]{3,5})))?((?: )" +// + "(RIME|MXD|CLR))(?: )?(((ABV|BLO)(?: )(\\d{3}))|((\\d{3})" +// + "(?:(-(\\d{3}))?)))?(?:/)?()"; String[] str2 = icing.split("/"); - for (String str :str2) { - theIcingLayers = new ArrayList(); - - if (str.indexOf(NEG_ENTRY) > 0) { - AircraftFlightCondition at = new AircraftFlightCondition(); - - // NEG should be the only value! Used to indicate forecasted but - // not observed! - at.setIntensity1(NEG_ENTRY); - if (flightLevel != null) { - at.setBaseHeight(flightLevel.getFlightLevel()); - theIcingLayers.add(at); - } - } else { - Pattern pattern = Pattern.compile(ICE_REGEX); + for (String str :str2) { + theIcingLayers = new ArrayList(); + + if (str.indexOf(NEG_ENTRY) > 0) { + AircraftFlightCondition at = new AircraftFlightCondition(); + + // NEG should be the only value! Used to indicate forecasted but + // not observed! + at.setIntensity1(NEG_ENTRY); + if (flightLevel != null) { + at.setBaseHeight(flightLevel.getFlightLevel()); + theIcingLayers.add(at); + } + } else { + Pattern pattern = Pattern.compile(ICE_REGEX); Matcher matcher = pattern.matcher(str); if (matcher.find()) { - matcher = pattern.matcher(str); //need to re-match - while (matcher.find()) { + matcher = pattern.matcher(str); //need to re-match + while (matcher.find()) { addFlightCondition(matcher, theIcingLayers); - } + } } else { Pattern pattern2 = Pattern.compile("([A-Z]{3,5})"); //only intensity @@ -1606,292 +1606,292 @@ public class NcPirepParser { theIcingLayers.add(at); } - } - } - - if (theIcingLayers.size() == 0) { - theIcingLayers = null; - } - } - return true; - } - - /** - * This method decodes the weather data. - * - * @param str - * Weather data to be decoded. - * @return Was the weather information decoded? - */ - protected boolean decodeWeatherData(String str) { - // Format is (FVvvSM )ww( ww)( ww) - // FVvvSM is flight visibility; vv is the value, SM indicates statute - // miles (km otherwise) - // type is the type of icing - // bbb is the height of the base of a layer of clouds in hundreds of - // feet - // ttt is the top of the layer in hundreds of feet - String regex = "^ ?(?:(FV)([0-9]{2})(SM)?)? ?(.*)"; - Pattern pattern = Pattern.compile(regex); - // Get a Matcher based on the target string. - Matcher matcher = pattern.matcher(str); - matcher.find(); - - if (matcher.group(1) != null) { - // parse flight visibility - if (matcher.group(3) != null) { - horzVisibility = Integer.parseInt(matcher.group(2)); - } else { - // theFlightVisibility = new - // Length().fromKilometers(Integer.parseInt(matcher.group(2))); - } - } - - // parse weather codes - regex = "([+|-]?[A-Z]{2,4})([0-9]{3}|UNKN?)?(?:-TOP([0-9]{3}|UNKN?))? ?"; - pattern = Pattern.compile(regex); - matcher = pattern.matcher(matcher.group(4)); - ArrayList codes = new ArrayList(); - while (matcher.find()) { - codes.add(matcher.group(1)); - // the level information is in groups 2 and 3 when provided, - // but the metoc model does not store this data - } - theWeatherCodes = codes.toArray(new String[0]); - - return true; - } - - /** - * This method decodes data in remarks section. - * - * @param str - * Remarks data to be decoded. - * @return Was the remarks data decoded? (Always returns true!) - */ - protected boolean decodeRemarksData(String str) { - theRemarks = new AircraftRemarks(str); - return true; - } - - /** - * Utility method for decoding flight level information for turbulence and - * icing layers. - * - * @param matcher - * A Matcher instance for the specific source data. - * @param layers - * The decoded layer information. - * @throws DecodeException - * If a decode error occured. - */ - protected void addFlightCondition(Matcher matcher, List layers) { - - if(matcher.groupCount() >= 13) { - String s1 = matcher.group(1); - String s2 = matcher.group(3); - - // Some words that may show up in group 1 or 3 that need to be - // thrown away! - s1 = WX_COND_WORDS.get(s1); - if((s1 == null) || (NULL_ENTRY.equals(s1))) { - return; - } - // Need to allow s2 to be null, - if(s2 != null) { - // but not null after lookup! - s2 = WX_COND_WORDS.get(s2); - if((s2 == null) || (NULL_ENTRY.equals(s2))) { - return; - } - } - //****************************************************************** - - AircraftFlightCondition at = new AircraftFlightCondition(); - - // NEG should be the only value! Used to indicate forecasted but - // not observed! - if(NEG_ENTRY.equals(s1)) { - at.setIntensity1(s1); - if(flightLevel != null) { - at.setBaseHeight(flightLevel.getFlightLevel()); - } - } else { - at.setIntensity1(s1); - at.setIntensity2(s2); - - s1 = matcher.group(5); - s1 = WX_COND_WORDS.get(s1); - if((s1 != null) && (!s1.equals(NULL_ENTRY))) { - at.setType(s1); - } - - s1 = matcher.group(8); - s2 = matcher.group(9); - if(BLO_HGT.equals(s1)) { - at.setBaseHeight(IDecoderConstantsN.UAIR_INTEGER_MISSING); - at.setTopHeight(decodeHeight(s2)); - - } else if (ABV_HGT.equals(s1)) { - at.setBaseHeight(decodeHeight(s2)); - at.setTopHeight(IDecoderConstantsN.UAIR_INTEGER_MISSING); - } else { - // Check for one or more levels - s1 = matcher.group(11); - s2 = matcher.group(13); - if(s1 != null) { - at.setBaseHeight(decodeHeight(s1)); - } - if(s2 != null) { - at.setTopHeight(decodeHeight(s2)); - } - if((s1 != null)&&(s2 != null)) { - Integer base = at.getBaseHeight(); - Integer top = at.getTopHeight(); - if(base != IDecoderConstantsN.UAIR_INTEGER_MISSING) { - if(top != IDecoderConstantsN.UAIR_INTEGER_MISSING) { - if(base > top) { - logger.debug(traceId + "- BASE-TOP inversion fixed"); - at.setBaseHeight(top); - at.setTopHeight(base); - } - } - } - } - if((s1 == null)&&(s2 == null)) { - // Use the flight level if heights are not specified. - if(flightLevel != null) { - at.setBaseHeight(flightLevel.getFlightLevel()); - } - } - } } - - layers.add(at); - } - } - - /** - * The nextString method determines the position of the first occurrence of - * any of a list of substrings within the input string. This method provides - * equivalent functionality to the routine ST_NXTS in the ported code. The - * outputs are provided in member variables. - * - * @param str - * Input string - * @param firstPos - * First position to check - * @param lastPos - * Last position to check - * @param subStrings - * List of substrings - * @return success or failure - */ - protected boolean nextString(String str, int firstPos, int lastPos, - String subStrings[]) { - this.theTokenPos = -1; - String tstr = str.substring(0, lastPos); - for (int i = 0; i < subStrings.length; i++) { - if ((this.theSearchPos = tstr.indexOf(subStrings[i], firstPos)) != -1) { - this.theTokenPos = i; - return true; - } - } - - return false; - } - - /** - * This method finds a string in a string array and returns its index. - * - * @param str - * String to find - * @param strs - * Strings to compare - * @return index of matching string or -1 on failure - */ - protected int findString(String str, String[] strs) { - for (int i = 0; i < strs.length; i++) { - if (strs[i].equals(str)) { - return i; - } - } - return -1; - } // findString() - - /** - * This method groups "like-types" of characters to facilitate decoding. - * This method provides equivalent functionality to the UT_BKGP subroutine - * in the ported code. - * - * @param str - * String data to check. - * @return An array of "like type" strings. - */ - protected String[] groupLikeTypes(String str) { - char[] chars = str.toCharArray(); - ArrayList strs = new ArrayList(); - int prevGroup = NONE; - int curGroup = NONE; - String group = new String(); - for (int i = 0; i < chars.length; i++) { - if (Character.isWhitespace(chars[i])) { - curGroup = NONE; - } else if (Character.isDigit(chars[i])) { - curGroup = DIGIT; - } else if (Character.isLetter(chars[i])) { - curGroup = LETTER; - } else { // non-alphanumeric - curGroup = NONALPHANUMERIC; - } - - if (prevGroup != curGroup) { - if (prevGroup != NONE) { - strs.add(group); - group = new String(); - } - } - if (curGroup != NONE) { - group = group.concat(String.valueOf(chars[i])); - } - prevGroup = curGroup; - } - - if (group.length() > 0) { - strs.add(group); - } - - return strs.toArray(new String[0]); - } - - public static final void main(String [] args) { - //test1: latlon format - String [] latlons = { - "0000N 00000W", - "0000S 00000E", - "9000S 00000W", - "9000N 00000W", - "0000N 09000W", - "9000S 09000W", - "9000N 09000W", - - "0000N 09000W", - "4500S 09000W", - "9000N 09000W", - - "9000N 09959W", - "0000N 10000W", - - "4500S 09000W", - "9000N 09000W", - - "90N 18000E", // no match - "9000S 18000E", - "9000N 18000W", - "9000S 18000W", - "90N 179W", - "9000S 17959W", - }; + } + + if (theIcingLayers.size() == 0) { + theIcingLayers = null; + } + } + return true; + } + + /** + * This method decodes the weather data. + * + * @param str + * Weather data to be decoded. + * @return Was the weather information decoded? + */ + protected boolean decodeWeatherData(String str) { + // Format is (FVvvSM )ww( ww)( ww) + // FVvvSM is flight visibility; vv is the value, SM indicates statute + // miles (km otherwise) + // type is the type of icing + // bbb is the height of the base of a layer of clouds in hundreds of + // feet + // ttt is the top of the layer in hundreds of feet + String regex = "^ ?(?:(FV)([0-9]{2})(SM)?)? ?(.*)"; + Pattern pattern = Pattern.compile(regex); + // Get a Matcher based on the target string. + Matcher matcher = pattern.matcher(str); + matcher.find(); + + if (matcher.group(1) != null) { + // parse flight visibility + if (matcher.group(3) != null) { + horzVisibility = Integer.parseInt(matcher.group(2)); + } else { + // theFlightVisibility = new + // Length().fromKilometers(Integer.parseInt(matcher.group(2))); + } + } + + // parse weather codes + regex = "([+|-]?[A-Z]{2,4})([0-9]{3}|UNKN?)?(?:-TOP([0-9]{3}|UNKN?))? ?"; + pattern = Pattern.compile(regex); + matcher = pattern.matcher(matcher.group(4)); + ArrayList codes = new ArrayList(); + while (matcher.find()) { + codes.add(matcher.group(1)); + // the level information is in groups 2 and 3 when provided, + // but the metoc model does not store this data + } + theWeatherCodes = codes.toArray(new String[0]); + + return true; + } + + /** + * This method decodes data in remarks section. + * + * @param str + * Remarks data to be decoded. + * @return Was the remarks data decoded? (Always returns true!) + */ + protected boolean decodeRemarksData(String str) { + theRemarks = new AircraftRemarks(str); + return true; + } + + /** + * Utility method for decoding flight level information for turbulence and + * icing layers. + * + * @param matcher + * A Matcher instance for the specific source data. + * @param layers + * The decoded layer information. + * @throws DecodeException + * If a decode error occured. + */ + protected void addFlightCondition(Matcher matcher, List layers) { + + if(matcher.groupCount() >= 13) { + String s1 = matcher.group(1); + String s2 = matcher.group(3); + + // Some words that may show up in group 1 or 3 that need to be + // thrown away! + s1 = WX_COND_WORDS.get(s1); + if((s1 == null) || (NULL_ENTRY.equals(s1))) { + return; + } + // Need to allow s2 to be null, + if(s2 != null) { + // but not null after lookup! + s2 = WX_COND_WORDS.get(s2); + if((s2 == null) || (NULL_ENTRY.equals(s2))) { + return; + } + } + //****************************************************************** + + AircraftFlightCondition at = new AircraftFlightCondition(); + + // NEG should be the only value! Used to indicate forecasted but + // not observed! + if(NEG_ENTRY.equals(s1)) { + at.setIntensity1(s1); + if(flightLevel != null) { + at.setBaseHeight(flightLevel.getFlightLevel()); + } + } else { + at.setIntensity1(s1); + at.setIntensity2(s2); + + s1 = matcher.group(5); + s1 = WX_COND_WORDS.get(s1); + if((s1 != null) && (!s1.equals(NULL_ENTRY))) { + at.setType(s1); + } + + s1 = matcher.group(8); + s2 = matcher.group(9); + if(BLO_HGT.equals(s1)) { + at.setBaseHeight(IDecoderConstantsN.UAIR_INTEGER_MISSING); + at.setTopHeight(decodeHeight(s2)); + + } else if (ABV_HGT.equals(s1)) { + at.setBaseHeight(decodeHeight(s2)); + at.setTopHeight(IDecoderConstantsN.UAIR_INTEGER_MISSING); + } else { + // Check for one or more levels + s1 = matcher.group(11); + s2 = matcher.group(13); + if(s1 != null) { + at.setBaseHeight(decodeHeight(s1)); + } + if(s2 != null) { + at.setTopHeight(decodeHeight(s2)); + } + if((s1 != null)&&(s2 != null)) { + Integer base = at.getBaseHeight(); + Integer top = at.getTopHeight(); + if(base != IDecoderConstantsN.UAIR_INTEGER_MISSING) { + if(top != IDecoderConstantsN.UAIR_INTEGER_MISSING) { + if(base > top) { + logger.debug(traceId + "- BASE-TOP inversion fixed"); + at.setBaseHeight(top); + at.setTopHeight(base); + } + } + } + } + if((s1 == null)&&(s2 == null)) { + // Use the flight level if heights are not specified. + if(flightLevel != null) { + at.setBaseHeight(flightLevel.getFlightLevel()); + } + } + } + } + + layers.add(at); + } + } + + /** + * The nextString method determines the position of the first occurrence of + * any of a list of substrings within the input string. This method provides + * equivalent functionality to the routine ST_NXTS in the ported code. The + * outputs are provided in member variables. + * + * @param str + * Input string + * @param firstPos + * First position to check + * @param lastPos + * Last position to check + * @param subStrings + * List of substrings + * @return success or failure + */ + protected boolean nextString(String str, int firstPos, int lastPos, + String subStrings[]) { + this.theTokenPos = -1; + String tstr = str.substring(0, lastPos); + for (int i = 0; i < subStrings.length; i++) { + if ((this.theSearchPos = tstr.indexOf(subStrings[i], firstPos)) != -1) { + this.theTokenPos = i; + return true; + } + } + + return false; + } + + /** + * This method finds a string in a string array and returns its index. + * + * @param str + * String to find + * @param strs + * Strings to compare + * @return index of matching string or -1 on failure + */ + protected int findString(String str, String[] strs) { + for (int i = 0; i < strs.length; i++) { + if (strs[i].equals(str)) { + return i; + } + } + return -1; + } // findString() + + /** + * This method groups "like-types" of characters to facilitate decoding. + * This method provides equivalent functionality to the UT_BKGP subroutine + * in the ported code. + * + * @param str + * String data to check. + * @return An array of "like type" strings. + */ + protected String[] groupLikeTypes(String str) { + char[] chars = str.toCharArray(); + ArrayList strs = new ArrayList(); + int prevGroup = NONE; + int curGroup = NONE; + String group = new String(); + for (int i = 0; i < chars.length; i++) { + if (Character.isWhitespace(chars[i])) { + curGroup = NONE; + } else if (Character.isDigit(chars[i])) { + curGroup = DIGIT; + } else if (Character.isLetter(chars[i])) { + curGroup = LETTER; + } else { // non-alphanumeric + curGroup = NONALPHANUMERIC; + } + + if (prevGroup != curGroup) { + if (prevGroup != NONE) { + strs.add(group); + group = new String(); + } + } + if (curGroup != NONE) { + group = group.concat(String.valueOf(chars[i])); + } + prevGroup = curGroup; + } + + if (group.length() > 0) { + strs.add(group); + } + + return strs.toArray(new String[0]); + } + + public static final void main(String [] args) { + //test1: latlon format + String [] latlons = { + "0000N 00000W", + "0000S 00000E", + "9000S 00000W", + "9000N 00000W", + "0000N 09000W", + "9000S 09000W", + "9000N 09000W", + + "0000N 09000W", + "4500S 09000W", + "9000N 09000W", + + "9000N 09959W", + "0000N 10000W", + + "4500S 09000W", + "9000N 09000W", + + "90N 18000E", // no match + "9000S 18000E", + "9000N 18000W", + "9000S 18000W", + "90N 179W", + "9000S 17959W", + }; for (int i=0; i diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncscat/gov.noaa.nws.ncep.edex.plugin.ncscat.ecl b/ncep/gov.noaa.nws.ncep.edex.plugin.ncscat/gov.noaa.nws.ncep.edex.plugin.ncscat.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncscat/src/gov/noaa/nws/ncep/edex/plugin/ncscat/util/package-info.java b/ncep/gov.noaa.nws.ncep.edex.plugin.ncscat/src/gov/noaa/nws/ncep/edex/plugin/ncscat/util/package-info.java index 62235cfcd6..df085bc36d 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncscat/src/gov/noaa/nws/ncep/edex/plugin/ncscat/util/package-info.java +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncscat/src/gov/noaa/nws/ncep/edex/plugin/ncscat/util/package-info.java @@ -1,4 +1,4 @@ -/** -* Contains tools for decoder plug-ins -*/ -package gov.noaa.nws.ncep.edex.plugin.ncscat.util; +/** +* Contains tools for decoder plug-ins +*/ +package gov.noaa.nws.ncep.edex.plugin.ncscat.util; diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncscd/gov.noaa.nws.ncep.edex.plugin.ncscd.ecl b/ncep/gov.noaa.nws.ncep.edex.plugin.ncscd/gov.noaa.nws.ncep.edex.plugin.ncscd.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.nctaf/gov.noaa.nws.ncep.edex.plugin.nctaf.ecl b/ncep/gov.noaa.nws.ncep.edex.plugin.nctaf/gov.noaa.nws.ncep.edex.plugin.nctaf.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.nctaf/res/conf/attributes.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.nctaf/res/conf/attributes.xml index 83e5be2bc4..73ad91cafb 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.nctaf/res/conf/attributes.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.nctaf/res/conf/attributes.xml @@ -1,29 +1,29 @@ - - - ATTRIBUTE_NAMES - - - NCTAF - NCTAF - + + + ATTRIBUTE_NAMES + + + NCTAF + NCTAF + \ No newline at end of file diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.nctaf/res/endpoints/nctaf-ingest.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.nctaf/res/endpoints/nctaf-ingest.xml index 0e6f3b7e72..4367839e01 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.nctaf/res/endpoints/nctaf-ingest.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.nctaf/res/endpoints/nctaf-ingest.xml @@ -1,32 +1,32 @@ - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + @@ -43,25 +43,25 @@ - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.nctaf/res/scripts/tafIndices.sql b/ncep/gov.noaa.nws.ncep.edex.plugin.nctaf/res/scripts/tafIndices.sql index b0f22dec6e..4c6eb6a73e 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.nctaf/res/scripts/tafIndices.sql +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.nctaf/res/scripts/tafIndices.sql @@ -1,19 +1,19 @@ /** * This software was developed and / or modified by Raytheon Company, - * pursuant to Contract DG133W-05-CQ-1067 with the US Government. - * - * U.S. EXPORT CONTROLLED TECHNICAL DATA + * pursuant to Contract DG133W-05-CQ-1067 with the US Government. + * + * U.S. EXPORT CONTROLLED TECHNICAL DATA * This software product contains export-restricted data whose * export/transfer/disclosure is restricted by U.S. law. Dissemination * to non-U.S. persons whether in the United States or abroad requires * an export license or other authorization. * - * Contractor Name: Raytheon Company - * Contractor Address: 6825 Pine Street, Suite 340 - * Mail Stop B8 - * Omaha, NE 68106 - * 402.291.0100 - * + * Contractor Name: Raytheon Company + * Contractor Address: 6825 Pine Street, Suite 340 + * Mail Stop B8 + * Omaha, NE 68106 + * 402.291.0100 + * * See the AWIPS II Master Rights File ("Master Rights File.pdf") for * further licensing information. **/ diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.nctaf/src/gov/noaa/nws/ncep/edex/plugin/nctaf/decoder/NcTafDecoder.java b/ncep/gov.noaa.nws.ncep.edex.plugin.nctaf/src/gov/noaa/nws/ncep/edex/plugin/nctaf/decoder/NcTafDecoder.java index 8d68d8c261..bfb2bc2fdf 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.nctaf/src/gov/noaa/nws/ncep/edex/plugin/nctaf/decoder/NcTafDecoder.java +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.nctaf/src/gov/noaa/nws/ncep/edex/plugin/nctaf/decoder/NcTafDecoder.java @@ -2,29 +2,29 @@ * This software was modified from Raytheon's taf plugin by * NOAA/NWS/NCEP/NCO in order to output point data in HDF5. **/ - -package gov.noaa.nws.ncep.edex.plugin.nctaf.decoder; -import com.raytheon.edex.exception.DecoderException; -import com.raytheon.edex.plugin.AbstractDecoder; +package gov.noaa.nws.ncep.edex.plugin.nctaf.decoder; + +import com.raytheon.edex.exception.DecoderException; +import com.raytheon.edex.plugin.AbstractDecoder; import gov.noaa.nws.ncep.common.dataplugin.nctaf.NcTafRecord; -import gov.noaa.nws.ncep.common.dataplugin.nctaf.NcTafBulletinRecord; -import gov.noaa.nws.ncep.edex.plugin.nctaf.decoder.NcTafParser; -import gov.noaa.nws.ncep.edex.plugin.nctaf.decoder.NcTafParts; -import com.raytheon.uf.common.dataplugin.PluginDataObject; +import gov.noaa.nws.ncep.common.dataplugin.nctaf.NcTafBulletinRecord; +import gov.noaa.nws.ncep.edex.plugin.nctaf.decoder.NcTafParser; +import gov.noaa.nws.ncep.edex.plugin.nctaf.decoder.NcTafParts; +import com.raytheon.uf.common.dataplugin.PluginDataObject; import com.raytheon.uf.common.dataplugin.PluginException; -import com.raytheon.uf.edex.wmo.message.WMOHeader; - -/** - * - * Decoder implementation for nctaf plugin - * - *
- * 
- * SOFTWARE HISTORY
- * 
- * Date       	Ticket#		Engineer	Description
+import com.raytheon.uf.edex.wmo.message.WMOHeader;
+
+/**
+ * 
+ * Decoder implementation for nctaf plugin
+ * 
+ * 
+ * 
+ * SOFTWARE HISTORY
+ * 
+ * Date       	Ticket#		Engineer	Description
  * ------------	----------	-----------	--------------------------
  * 09/09/2011   458		    sgurung	    Initial Creation from Raytheon's taf plugin
  * 09/23/2011   458			sgurung	    Converted to HDF5
@@ -33,29 +33,29 @@ import com.raytheon.uf.edex.wmo.message.WMOHeader;
  * 
  * @author sgurung
  * @version 1.0
- */
-
-public class NcTafDecoder extends AbstractDecoder {
-    // Name of the plugin controlling this decoder.
-    public static final String PLUGIN_NAME = "nctaf";
-
-    private String traceId = "";
-
-    /**
-     * Constructor.
-     * 
-     * @param productType
-     * @throws DecoderException
-     */
-    public NcTafDecoder() {
-
-    }
-
-    public static class NcTafDecoderInput {
-        public WMOHeader wmoHeader;
-
-        public NcTafParts tafParts;
-    }
+ */
+
+public class NcTafDecoder extends AbstractDecoder {
+    // Name of the plugin controlling this decoder.
+    public static final String PLUGIN_NAME = "nctaf";
+
+    private String traceId = "";
+
+    /**
+     * Constructor.
+     * 
+     * @param productType
+     * @throws DecoderException
+     */
+    public NcTafDecoder() {
+
+    }
+
+    public static class NcTafDecoderInput {
+        public WMOHeader wmoHeader;
+
+        public NcTafParts tafParts;
+    }
    
     /**
      * 
@@ -99,6 +99,6 @@ public class NcTafDecoder extends AbstractDecoder {
     	}
 		
 		return pdos; 
-	}    
-   
-}
+	}    
+   
+}
diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.nctext/gov.noaa.nws.ncep.edex.plugin.nctext.ecl b/ncep/gov.noaa.nws.ncep.edex.plugin.nctext/gov.noaa.nws.ncep.edex.plugin.nctext.ecl
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncuair/gov.noaa.nws.ncep.edex.plugin.ncuair.ecl b/ncep/gov.noaa.nws.ncep.edex.plugin.ncuair/gov.noaa.nws.ncep.edex.plugin.ncuair.ecl
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.nonconvsigmet/gov.noaa.nws.ncep.edex.plugin.nonconvsigmet.ecl b/ncep/gov.noaa.nws.ncep.edex.plugin.nonconvsigmet/gov.noaa.nws.ncep.edex.plugin.nonconvsigmet.ecl
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.nonconvsigmet/gov.noaa.nws.ncep.edex.plugin.nonconvsigmet/component-deploy.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.nonconvsigmet/gov.noaa.nws.ncep.edex.plugin.nonconvsigmet/component-deploy.xml
index a71fed23b4..db8e9b5fbb 100644
--- a/ncep/gov.noaa.nws.ncep.edex.plugin.nonconvsigmet/gov.noaa.nws.ncep.edex.plugin.nonconvsigmet/component-deploy.xml
+++ b/ncep/gov.noaa.nws.ncep.edex.plugin.nonconvsigmet/gov.noaa.nws.ncep.edex.plugin.nonconvsigmet/component-deploy.xml
@@ -1,7 +1,7 @@
-
-	
-	
-
-	
-
+
+	
+	
+
+	
+
 
\ No newline at end of file
diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.nonconvsigmet/gov.noaa.nws.ncep.edex.plugin.nonconvsigmet/res/spring/nonconvsigmet-common.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.nonconvsigmet/gov.noaa.nws.ncep.edex.plugin.nonconvsigmet/res/spring/nonconvsigmet-common.xml
index d5927f1699..b47ebc7901 100644
--- a/ncep/gov.noaa.nws.ncep.edex.plugin.nonconvsigmet/gov.noaa.nws.ncep.edex.plugin.nonconvsigmet/res/spring/nonconvsigmet-common.xml
+++ b/ncep/gov.noaa.nws.ncep.edex.plugin.nonconvsigmet/gov.noaa.nws.ncep.edex.plugin.nonconvsigmet/res/spring/nonconvsigmet-common.xml
@@ -1,26 +1,26 @@
-
-
-    
-        
-    
-
-    
-        
-		
-        
-        
-    
-
-    
-        
-        
-    
-    
+
+
+    
+        
+    
+
+    
+        
+		
+        
+        
+    
+
+    
+        
+        
+    
+    
 
\ No newline at end of file
diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.nonconvsigmet/gov.noaa.nws.ncep.edex.plugin.nonconvsigmet/res/spring/nonconvsigmet-ingest.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.nonconvsigmet/gov.noaa.nws.ncep.edex.plugin.nonconvsigmet/res/spring/nonconvsigmet-ingest.xml
index f6ac80cb6a..e9b2d3798a 100644
--- a/ncep/gov.noaa.nws.ncep.edex.plugin.nonconvsigmet/gov.noaa.nws.ncep.edex.plugin.nonconvsigmet/res/spring/nonconvsigmet-ingest.xml
+++ b/ncep/gov.noaa.nws.ncep.edex.plugin.nonconvsigmet/gov.noaa.nws.ncep.edex.plugin.nonconvsigmet/res/spring/nonconvsigmet-ingest.xml
@@ -1,73 +1,73 @@
-
-       
-    
-        
-    
-    
-    
-
-    
-		
-		
-	
-
-    
-		
-  	 
-    
-    
-        
-        
-        
-        
-            
-            
-                nonconvsigmet
-            
-            
-                
-		            
-    		        
-        		        
-           		    	
-                	       	
-                    	   		
-                       			
-	                   		
-    	               	 	
-        	               		java.lang.Throwable
-            	           		
-                	   		
-               			
-	            	
-           		
-           	 	
-               		java.lang.Throwable
-              		
-           		
-       		
-        
-	
+
+       
+    
+        
+    
+    
+    
+
+    
+		
+		
+	
+
+    
+		
+  	 
+    
+    
+        
+        
+        
+        
+            
+            
+                nonconvsigmet
+            
+            
+                
+		            
+    		        
+        		        
+           		    	
+                	       	
+                    	   		
+                       			
+	                   		
+    	               	 	
+        	               		java.lang.Throwable
+            	           		
+                	   		
+               			
+	            	
+           		
+           	 	
+               		java.lang.Throwable
+              		
+           		
+       		
+        
+	
 
\ No newline at end of file
diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.nonconvsigmet/gov.noaa.nws.ncep.edex.plugin.nonconvsigmet/src/gov/noaa/nws/ncep/edex/plugin/nonconvsigmet/decoder/NonConvSigmetDecoder.java b/ncep/gov.noaa.nws.ncep.edex.plugin.nonconvsigmet/gov.noaa.nws.ncep.edex.plugin.nonconvsigmet/src/gov/noaa/nws/ncep/edex/plugin/nonconvsigmet/decoder/NonConvSigmetDecoder.java
index d19198d409..3003ac8bca 100644
--- a/ncep/gov.noaa.nws.ncep.edex.plugin.nonconvsigmet/gov.noaa.nws.ncep.edex.plugin.nonconvsigmet/src/gov/noaa/nws/ncep/edex/plugin/nonconvsigmet/decoder/NonConvSigmetDecoder.java
+++ b/ncep/gov.noaa.nws.ncep.edex.plugin.nonconvsigmet/gov.noaa.nws.ncep.edex.plugin.nonconvsigmet/src/gov/noaa/nws/ncep/edex/plugin/nonconvsigmet/decoder/NonConvSigmetDecoder.java
@@ -1,108 +1,108 @@
-/**
- * 
- * Non-Convective Sigmet Decoder
- * 
- * This java class decodes NONCONVSIGMET (non-convective sigmet) raw data. 
- * HISTORY
- *
- * Date     	Author		Description
- * ------------	----------	-----------	--------------------------
- * 06/2009		Uma Josyula		Initial creation	
- * 
- * This code has been developed by the SIB for use in the AWIPS2 system.
- */
-
-package gov.noaa.nws.ncep.edex.plugin.nonconvsigmet.decoder;
-
-import gov.noaa.nws.ncep.common.dataplugin.nonconvsigmet.NonConvSigmetRecord;
-import gov.noaa.nws.ncep.edex.plugin.nonconvsigmet.util.NonConvSigmetParser;
-import gov.noaa.nws.ncep.edex.util.UtilN;
-
-import java.util.Scanner;
-
-import com.raytheon.edex.esb.Headers;
-import com.raytheon.edex.exception.DecoderException;
-import com.raytheon.edex.plugin.AbstractDecoder;
-import com.raytheon.uf.common.dataplugin.PluginDataObject;
-import com.raytheon.uf.common.dataplugin.PluginException;
-import com.raytheon.uf.edex.decodertools.core.IDecoderConstants;
-
-public class NonConvSigmetDecoder extends AbstractDecoder {
-
-    private final String pluginName;
-
-    /**
-     * Constructor
-     * 
-     * @throws DecoderException
-     */
-    public NonConvSigmetDecoder(String name) throws DecoderException {
-        pluginName = name;
-    }
-
-    public PluginDataObject[] decode(byte[] data, Headers headers)
-            throws DecoderException {
-
-        String traceId = "";
-        if (headers != null) {
-            traceId = (String) headers.get("traceId");
-        }
-
-        String etx = IDecoderConstants.ETX;
-        String theBulletin = null;
-        byte[] messageData = null;
-        NonConvSigmetRecord currentRecord = null;
-        NonConvSigmetSeparator sep = NonConvSigmetSeparator.separate(data,
-                headers);
-        messageData = sep.next();
-        String theMessage = new String(messageData);
-
-        /*
-         * May have multiple duplicate bulletins, only get the first bulletin
-         * and eliminate the remaining bulletins after the first bulletin.
-         */
-        Scanner cc = new Scanner(theMessage).useDelimiter(etx);
-        if (cc.hasNext()) {
-            theBulletin = cc.next();
-        } else {
-            theBulletin = theMessage;
-        }
-        /*
-         * Decode by calling the NonconvSigmetParser method processRecord
-         */
-        currentRecord = NonConvSigmetParser.processRecord(theBulletin, headers);
-        if (currentRecord != null) {
-            currentRecord.setReportType(pluginName);
-            /*
-             * Replace special characters to a blank so that it may be readable
-             */
-            currentRecord.setBullMessage(UtilN
-                    .removeLeadingWhiteSpaces((theBulletin.substring(5))
-                            .replace('\036', ' ').replace('\r', ' ')
-                            .replace('\003', ' ').replace('\000', ' ')
-                            .replace('\001', ' ')));
-            /*
-             * Check the NonConvsigmet record object. If not, throws exception.
-             */
-            currentRecord.setTraceId(traceId);
-            currentRecord.setPluginName(pluginName);
-            try {
-                currentRecord.constructDataURI();
-
-            } catch (PluginException e) {
-                logger.error(traceId + "- Unable to construct dataURI", e);
-                currentRecord = null;
-            }
-        }
-        /*
-         * Return the NonConvsigmetRecord record object.
-         */
-        if (currentRecord == null) {
-            return new PluginDataObject[0];
-        } else {
-            return new PluginDataObject[] { currentRecord };
-        }
-
-    }
-
+/**
+ * 
+ * Non-Convective Sigmet Decoder
+ * 
+ * This java class decodes NONCONVSIGMET (non-convective sigmet) raw data. 
+ * HISTORY
+ *
+ * Date     	Author		Description
+ * ------------	----------	-----------	--------------------------
+ * 06/2009		Uma Josyula		Initial creation	
+ * 
+ * This code has been developed by the SIB for use in the AWIPS2 system.
+ */
+
+package gov.noaa.nws.ncep.edex.plugin.nonconvsigmet.decoder;
+
+import gov.noaa.nws.ncep.common.dataplugin.nonconvsigmet.NonConvSigmetRecord;
+import gov.noaa.nws.ncep.edex.plugin.nonconvsigmet.util.NonConvSigmetParser;
+import gov.noaa.nws.ncep.edex.util.UtilN;
+
+import java.util.Scanner;
+
+import com.raytheon.edex.esb.Headers;
+import com.raytheon.edex.exception.DecoderException;
+import com.raytheon.edex.plugin.AbstractDecoder;
+import com.raytheon.uf.common.dataplugin.PluginDataObject;
+import com.raytheon.uf.common.dataplugin.PluginException;
+import com.raytheon.uf.edex.decodertools.core.IDecoderConstants;
+
+public class NonConvSigmetDecoder extends AbstractDecoder {
+
+    private final String pluginName;
+
+    /**
+     * Constructor
+     * 
+     * @throws DecoderException
+     */
+    public NonConvSigmetDecoder(String name) throws DecoderException {
+        pluginName = name;
+    }
+
+    public PluginDataObject[] decode(byte[] data, Headers headers)
+            throws DecoderException {
+
+        String traceId = "";
+        if (headers != null) {
+            traceId = (String) headers.get("traceId");
+        }
+
+        String etx = IDecoderConstants.ETX;
+        String theBulletin = null;
+        byte[] messageData = null;
+        NonConvSigmetRecord currentRecord = null;
+        NonConvSigmetSeparator sep = NonConvSigmetSeparator.separate(data,
+                headers);
+        messageData = sep.next();
+        String theMessage = new String(messageData);
+
+        /*
+         * May have multiple duplicate bulletins, only get the first bulletin
+         * and eliminate the remaining bulletins after the first bulletin.
+         */
+        Scanner cc = new Scanner(theMessage).useDelimiter(etx);
+        if (cc.hasNext()) {
+            theBulletin = cc.next();
+        } else {
+            theBulletin = theMessage;
+        }
+        /*
+         * Decode by calling the NonconvSigmetParser method processRecord
+         */
+        currentRecord = NonConvSigmetParser.processRecord(theBulletin, headers);
+        if (currentRecord != null) {
+            currentRecord.setReportType(pluginName);
+            /*
+             * Replace special characters to a blank so that it may be readable
+             */
+            currentRecord.setBullMessage(UtilN
+                    .removeLeadingWhiteSpaces((theBulletin.substring(5))
+                            .replace('\036', ' ').replace('\r', ' ')
+                            .replace('\003', ' ').replace('\000', ' ')
+                            .replace('\001', ' ')));
+            /*
+             * Check the NonConvsigmet record object. If not, throws exception.
+             */
+            currentRecord.setTraceId(traceId);
+            currentRecord.setPluginName(pluginName);
+            try {
+                currentRecord.constructDataURI();
+
+            } catch (PluginException e) {
+                logger.error(traceId + "- Unable to construct dataURI", e);
+                currentRecord = null;
+            }
+        }
+        /*
+         * Return the NonConvsigmetRecord record object.
+         */
+        if (currentRecord == null) {
+            return new PluginDataObject[0];
+        } else {
+            return new PluginDataObject[] { currentRecord };
+        }
+
+    }
+
 }
\ No newline at end of file
diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.nonconvsigmet/gov.noaa.nws.ncep.edex.plugin.nonconvsigmet/src/gov/noaa/nws/ncep/edex/plugin/nonconvsigmet/decoder/NonConvSigmetSeparator.java b/ncep/gov.noaa.nws.ncep.edex.plugin.nonconvsigmet/gov.noaa.nws.ncep.edex.plugin.nonconvsigmet/src/gov/noaa/nws/ncep/edex/plugin/nonconvsigmet/decoder/NonConvSigmetSeparator.java
index 83f579ee48..f97498b404 100644
--- a/ncep/gov.noaa.nws.ncep.edex.plugin.nonconvsigmet/gov.noaa.nws.ncep.edex.plugin.nonconvsigmet/src/gov/noaa/nws/ncep/edex/plugin/nonconvsigmet/decoder/NonConvSigmetSeparator.java
+++ b/ncep/gov.noaa.nws.ncep.edex.plugin.nonconvsigmet/gov.noaa.nws.ncep.edex.plugin.nonconvsigmet/src/gov/noaa/nws/ncep/edex/plugin/nonconvsigmet/decoder/NonConvSigmetSeparator.java
@@ -1,147 +1,147 @@
-/**
- * NonConvsigmetSeparator
- *
- * This class sets the raw data to an Arraylist, records, of
- * String based on a uniquely identified separator.
- *
- * 
- * Uma Josyula                               06/2009         Creation
- * 
- * - * This code has been developed by the SIB for use in the AWIPS system. - */ - -package gov.noaa.nws.ncep.edex.plugin.nonconvsigmet.decoder; - -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; -import java.util.NoSuchElementException; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - -import com.raytheon.edex.esb.Headers; -import com.raytheon.edex.plugin.AbstractRecordSeparator; -import com.raytheon.edex.util.Util; - -public class NonConvSigmetSeparator extends AbstractRecordSeparator { - private final Log logger = LogFactory.getLog(getClass()); - - /** Regex used for separate the bulletins */ - private static final String BULLSEPARATOR = "([0-9]{3})( )*\\x0d\\x0d\\x0a([A-Z]{4}[0-9]{2}) ([A-Z]{4}) ([0-9]{6})( [A-Z]{3})?\\x0d\\x0d\\x0a"; - - /** Regex matcher */ - private Matcher matcher; - - /** Pattern object for regex search */ - private Pattern pattern; - - /** List of records contained in file */ - private List records; - - private Iterator iterator = null; - - /** - * Constructor. - * - */ - public NonConvSigmetSeparator() { - records = new ArrayList(); - } - - public static NonConvSigmetSeparator separate(byte[] data, Headers headers) { - NonConvSigmetSeparator ds = new NonConvSigmetSeparator(); - ds.setData(data, headers); - return ds; - } - - /* - * (non-Javadoc) - * - * @see com.raytheon.edex.plugin.AbstractRecordSeparator#setData(byte[], - * com.raytheon.edex.esb.Headers) - */ - public void setData(byte[] data, Headers headers) { - doSeparate(new String(data)); - iterator = records.iterator(); - } - - /* - * (non-Javadoc) - * - * @see com.raytheon.edex.plugin.IRecordSeparator#hasNext() - */ - public boolean hasNext() { - if (iterator == null) { - return false; - } else { - return iterator.hasNext(); - } - } - - /** - * Get record - */ - public byte[] next() { - try { - String temp = iterator.next(); - if (Util.isEmptyString(temp)) { - return (byte[]) null; - } else { - return temp.getBytes(); - } - } catch (NoSuchElementException e) { - return (byte[]) null; - } - } - - /** - * @param message - * separate bulletins - */ - private void doSeparate(String message) { - /* Regex used for separate the bulletins */ - - try { - pattern = Pattern.compile(BULLSEPARATOR); - matcher = pattern.matcher(message); - - /* - * Set number of bulletins to records only if the bulletin separator - * is not the same. At the point, only separators are stored in - * "records" - */ - while (matcher.find()) { - if (!records.contains(matcher.group())) { - records.add(matcher.group()); - } - } - - /* - * Append the raw data file to the records. - */ - for (int i = 0; i < records.size(); i++) { - if (i < records.size() - 1) { - records.set( - i, - "\n" - + message.substring( - message.indexOf(records.get(i)), - message.indexOf(records.get(i + 1)))); - } else { - records.set( - i, - "\n" - + message.substring(message.indexOf(records - .get(i)))); - } - } - } catch (Exception e) { - logger.warn("No valid records found!", e); - } - return; - } +/** + * NonConvsigmetSeparator + * + * This class sets the raw data to an Arraylist, records, of + * String based on a uniquely identified separator. + * + *
+ * Uma Josyula                               06/2009         Creation
+ * 
+ * + * This code has been developed by the SIB for use in the AWIPS system. + */ + +package gov.noaa.nws.ncep.edex.plugin.nonconvsigmet.decoder; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; +import java.util.NoSuchElementException; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import com.raytheon.edex.esb.Headers; +import com.raytheon.edex.plugin.AbstractRecordSeparator; +import com.raytheon.edex.util.Util; + +public class NonConvSigmetSeparator extends AbstractRecordSeparator { + private final Log logger = LogFactory.getLog(getClass()); + + /** Regex used for separate the bulletins */ + private static final String BULLSEPARATOR = "([0-9]{3})( )*\\x0d\\x0d\\x0a([A-Z]{4}[0-9]{2}) ([A-Z]{4}) ([0-9]{6})( [A-Z]{3})?\\x0d\\x0d\\x0a"; + + /** Regex matcher */ + private Matcher matcher; + + /** Pattern object for regex search */ + private Pattern pattern; + + /** List of records contained in file */ + private List records; + + private Iterator iterator = null; + + /** + * Constructor. + * + */ + public NonConvSigmetSeparator() { + records = new ArrayList(); + } + + public static NonConvSigmetSeparator separate(byte[] data, Headers headers) { + NonConvSigmetSeparator ds = new NonConvSigmetSeparator(); + ds.setData(data, headers); + return ds; + } + + /* + * (non-Javadoc) + * + * @see com.raytheon.edex.plugin.AbstractRecordSeparator#setData(byte[], + * com.raytheon.edex.esb.Headers) + */ + public void setData(byte[] data, Headers headers) { + doSeparate(new String(data)); + iterator = records.iterator(); + } + + /* + * (non-Javadoc) + * + * @see com.raytheon.edex.plugin.IRecordSeparator#hasNext() + */ + public boolean hasNext() { + if (iterator == null) { + return false; + } else { + return iterator.hasNext(); + } + } + + /** + * Get record + */ + public byte[] next() { + try { + String temp = iterator.next(); + if (Util.isEmptyString(temp)) { + return (byte[]) null; + } else { + return temp.getBytes(); + } + } catch (NoSuchElementException e) { + return (byte[]) null; + } + } + + /** + * @param message + * separate bulletins + */ + private void doSeparate(String message) { + /* Regex used for separate the bulletins */ + + try { + pattern = Pattern.compile(BULLSEPARATOR); + matcher = pattern.matcher(message); + + /* + * Set number of bulletins to records only if the bulletin separator + * is not the same. At the point, only separators are stored in + * "records" + */ + while (matcher.find()) { + if (!records.contains(matcher.group())) { + records.add(matcher.group()); + } + } + + /* + * Append the raw data file to the records. + */ + for (int i = 0; i < records.size(); i++) { + if (i < records.size() - 1) { + records.set( + i, + "\n" + + message.substring( + message.indexOf(records.get(i)), + message.indexOf(records.get(i + 1)))); + } else { + records.set( + i, + "\n" + + message.substring(message.indexOf(records + .get(i)))); + } + } + } catch (Exception e) { + logger.warn("No valid records found!", e); + } + return; + } } \ No newline at end of file diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.nonconvsigmet/gov.noaa.nws.ncep.edex.plugin.nonconvsigmet/src/gov/noaa/nws/ncep/edex/plugin/nonconvsigmet/decoder/package-info.java b/ncep/gov.noaa.nws.ncep.edex.plugin.nonconvsigmet/gov.noaa.nws.ncep.edex.plugin.nonconvsigmet/src/gov/noaa/nws/ncep/edex/plugin/nonconvsigmet/decoder/package-info.java index 5913d39c3b..505c4ab822 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.nonconvsigmet/gov.noaa.nws.ncep.edex.plugin.nonconvsigmet/src/gov/noaa/nws/ncep/edex/plugin/nonconvsigmet/decoder/package-info.java +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.nonconvsigmet/gov.noaa.nws.ncep.edex.plugin.nonconvsigmet/src/gov/noaa/nws/ncep/edex/plugin/nonconvsigmet/decoder/package-info.java @@ -1,4 +1,4 @@ -/** -* Contains decoder.java for decoder plug-ins -*/ -package gov.noaa.nws.ncep.edex.plugin.nonconvsigmet.decoder;; +/** +* Contains decoder.java for decoder plug-ins +*/ +package gov.noaa.nws.ncep.edex.plugin.nonconvsigmet.decoder;; diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.nonconvsigmet/gov.noaa.nws.ncep.edex.plugin.nonconvsigmet/src/gov/noaa/nws/ncep/edex/plugin/nonconvsigmet/util/NonConvSigmetParser.java b/ncep/gov.noaa.nws.ncep.edex.plugin.nonconvsigmet/gov.noaa.nws.ncep.edex.plugin.nonconvsigmet/src/gov/noaa/nws/ncep/edex/plugin/nonconvsigmet/util/NonConvSigmetParser.java index 5b4b74731e..bff1495944 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.nonconvsigmet/gov.noaa.nws.ncep.edex.plugin.nonconvsigmet/src/gov/noaa/nws/ncep/edex/plugin/nonconvsigmet/util/NonConvSigmetParser.java +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.nonconvsigmet/gov.noaa.nws.ncep.edex.plugin.nonconvsigmet/src/gov/noaa/nws/ncep/edex/plugin/nonconvsigmet/util/NonConvSigmetParser.java @@ -1,409 +1,409 @@ -/* - * NonConvsigmet DecoderUtil - * - * This java class intends to serve as a decoder utility for NonConvsigmet. - * - * HISTORY - * - * Date Author Description - * ------------ ---------- ----------- -------------------------- - * 06/2009 Uma Josyula Initial creation - * 07/2011 F. J. Yen Fix for RTN TTR 9973--ConvSigment Decoder Ignoring - * time range (NonConvsigmet, too). Set the rangeEnd - * time to the endTime - * - * This code has been developed by the SIB for use in the AWIPS2 system. - */ - -package gov.noaa.nws.ncep.edex.plugin.nonconvsigmet.util; - -import gov.noaa.nws.ncep.common.dataplugin.nonconvsigmet.NonConvSigmetLocation; -import gov.noaa.nws.ncep.common.dataplugin.nonconvsigmet.NonConvSigmetRecord; -import gov.noaa.nws.ncep.edex.tools.decoder.LatLonLocTbl; -import gov.noaa.nws.ncep.edex.util.UtilN; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Calendar; -import java.util.Date; -import java.util.Scanner; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -import com.raytheon.edex.esb.Headers; -import com.raytheon.uf.common.time.DataTime; -import com.raytheon.uf.common.time.TimeRange; -import com.raytheon.uf.edex.decodertools.core.LatLonPoint; -import com.raytheon.uf.edex.decodertools.time.TimeTools; - -public class NonConvSigmetParser { - - /** - * Constructor - */ - public NonConvSigmetParser() { - } - - /** - * Parse the WMO line and store WMO header, OfficeID, issue time, - * designatorBBB,... - * - * @param wmoline - * The bulletin message - * - * @return a NonConvsigmetRecord - */ - public static NonConvSigmetRecord processWMO(String wmoline, Headers headers) { - - NonConvSigmetRecord currentRecord = null; - // Regular expression for WMO/ICAO, station ID, and issue date (and - // maybe designator BBB) - final String WMO_EXP = "([A-Z]{4}[0-9]{2}) ([A-Z]{4}) ([0-9]{6})( ([A-Z]{3}))?"; - - // Pattern used for extracting WMO header,issue office and issue date - // and designatorBBB - final Pattern wmoPattern = Pattern.compile(WMO_EXP); - Matcher theMatcher = wmoPattern.matcher(wmoline); - - if (theMatcher.find()) { - currentRecord = new NonConvSigmetRecord(); - - currentRecord.setWmoHeader(theMatcher.group(1)); - currentRecord.setIssueOffice(theMatcher.group(2)); - currentRecord.setDesignatorBBB(theMatcher.group(5)); - - // Decode the issue time. - Calendar issueTime = TimeTools.findDataTime(theMatcher.group(3), - headers); - currentRecord.setIssueTime(issueTime); - - /* 999999999999999999999999999999 - DataTime dataTime = new DataTime(issueTime); - currentRecord.setDataTime(dataTime); - 999 */ - } - return currentRecord; - } - - /** - * Obtains start time and end time and forecast Region from input report - * - * @param theBullMsg - * The bulletin message which contains start time and end time. - * - * @param NonConvSigmetRecord - * - * @return a NonConvsigmetRecord - */ - - public static NonConvSigmetRecord processStartEndTime(String theBullMsg, - NonConvSigmetRecord nconvRecord, Headers headers) { - final String STARTTIME_EXP = "([A-Z]{4}) WS ([0-9]{6})( [A-Z]{3})?"; - final String ENDTIME_EXP = "VALID UNTIL ([0-9]{6})"; - - final Pattern starttimePattern = Pattern.compile(STARTTIME_EXP); - final Pattern endtimePattern = Pattern.compile(ENDTIME_EXP); - - Calendar stTime = null; - Calendar endTime = null; - /* - * Default equal to one hour if there is no valid time in report - */ - - NonConvSigmetRecord currentRecord = nconvRecord; - - // Calculate the startTime - Matcher theMatcher = starttimePattern.matcher(theBullMsg); - if (theMatcher.find()) { - currentRecord.setForecastRegion(theMatcher.group(1)); - stTime = TimeTools.findDataTime(theMatcher.group(2), headers); - } - if (stTime == null) { - currentRecord.setStartTime(currentRecord.getIssueTime()); - } else { - currentRecord.setStartTime(stTime); - } - - // Calculate the endTime - theMatcher = endtimePattern.matcher(theBullMsg); - - if (theMatcher.find()) { - endTime = TimeTools.findDataTime(theMatcher.group(1), headers); - } - if (endTime == null) { - endTime = currentRecord.getIssueTime(); - currentRecord.setEndTime(endTime); - } else { - currentRecord.setEndTime(endTime); - } - - /* 9999999999999999999999999999999 */ - DataTime dataTime = new DataTime(stTime, new TimeRange (stTime.getTime(), - endTime.getTimeInMillis() - stTime.getTimeInMillis()) ); - currentRecord.setDataTime(dataTime); - /* 999 */ - return currentRecord; - } - - /** - * Obtains SigmetId from input report - * - * @param theBullMsg - * The bulletin message. - * - * @param NonConvSigmetRecord - * - * @return a NonConvsigmetRecord - */ - public static NonConvSigmetRecord processSigmetId(String theBullMsg, - NonConvSigmetRecord nconvRecord) { - final String SIGMETID_EXP = "SIGMET ([A-Z]{2,} [0-9]{1})"; - final Pattern sigPattern = Pattern.compile(SIGMETID_EXP); - NonConvSigmetRecord currentRecord = nconvRecord; - // Parse sigmetId - Matcher theMatcher = sigPattern.matcher(theBullMsg); - if (theMatcher.find()) { - currentRecord.setSigmetId(theMatcher.group(1)); - } - - return currentRecord; - } - - /** - * Parse the phenomena... Hazard Type,Hazard Intensity,Hazard Cause,Hazard - * Condition,FlightLevel1,FlightLevel2,SigmetId,AWIPSId,CorAmdTest,StateList - * - * @param theBullMsg - * from bulletin message - * - * @param a - * NonConvsigmetRecord - * - * @return a NonConvsigmetRecord - */ - public static NonConvSigmetRecord processPhenomena(String theBullMsg, - NonConvSigmetRecord nconvRecord) { - - final String FL_EXP1 = "BTN (FL)?([0-9]{3}) AND (FL)?([0-9]{3})"; - - final String FL_EXP2 = "BLW (FL)?([0-9]{3})"; - - final String HAZARDTYPE_EXP = " (TURB|ICGICIP|ICE) "; - - final String HAZARDINTS_EXP = "(OCNL [A-Z0-9]{2,})(BLW (FL)?([0-9]{3}).|BTN|TURB|ICGICIP|ICE|ICGIC|VA|DU)?"; - - final String HAZARDCAUS_EXP = "OCNL ([\\w| ])*(.|DUE TO)?([\\w| ]*). CONDS"; - - final String HAZARDCOND_EXP = "(CONDS [\\w| ]*)(\\x0d\\x0d\\x0a)?([\\w| ]*)([0-9]{4})Z"; - - final String STATELIST_EXP = "(([A-Z]{2})( [A-Z]{2})*)\\x0d\\x0d\\x0a"; - - final String AWIPSID_EXP = "([A-Z]{2}[0-9]{1}[A-Z]{1})( )*\\x0d\\x0d\\x0a"; - - final String CORREMARK_EXP = "(COR|AMD|TEST)"; - - final Pattern flPattern1 = Pattern.compile(FL_EXP1); - - final Pattern flPattern2 = Pattern.compile(FL_EXP2); - - final Pattern hzTypePattern = Pattern.compile(HAZARDTYPE_EXP); - - final Pattern hzIntsPattern = Pattern.compile(HAZARDINTS_EXP); - - final Pattern hzCausPattern = Pattern.compile(HAZARDCAUS_EXP); - - final Pattern hzCondPattern = Pattern.compile(HAZARDCOND_EXP); - - final Pattern stPattern = Pattern.compile(STATELIST_EXP); - - final Pattern awipsPattern = Pattern.compile(AWIPSID_EXP); - - final Pattern corRemarkPattern = Pattern.compile(CORREMARK_EXP); - - NonConvSigmetRecord currentRecord = nconvRecord; - - Matcher theMatcher = flPattern1.matcher(theBullMsg); - - if (theMatcher.find()) { - currentRecord - .setFlightLevel2(Integer.parseInt(theMatcher.group(4))); - currentRecord - .setFlightLevel1(Integer.parseInt(theMatcher.group(2))); - } else { - theMatcher = flPattern2.matcher(theBullMsg); - if (theMatcher.find()) { - currentRecord.setFlightLevel1(Integer.parseInt(theMatcher - .group(2))); - } - } - theMatcher = hzCausPattern.matcher(theBullMsg); - if (theMatcher.find()) { - currentRecord.setHazardCause(theMatcher.group(3)); - } - theMatcher = hzCondPattern.matcher(theBullMsg); - if (theMatcher.find()) { - currentRecord.setHazardCondition(theMatcher.group(0)); - } - theMatcher = hzIntsPattern.matcher(theBullMsg); - if (theMatcher.find()) { - currentRecord.setHazardIntensity(theMatcher.group(1)); - } - theMatcher = hzTypePattern.matcher(theBullMsg); - if (theMatcher.find()) { - if ("TURB".equals(theMatcher.group(1))) { - currentRecord.setHazardType("TURBULENCE"); - } else { - currentRecord.setHazardType(theMatcher.group(1)); - } - } - theMatcher = stPattern.matcher(theBullMsg); - if (theMatcher.find()) { - currentRecord.setStateList(theMatcher.group(1)); - } - theMatcher = awipsPattern.matcher(theBullMsg); - if (theMatcher.find()) { - currentRecord.setAwipsId(theMatcher.group(1)); - } - theMatcher = corRemarkPattern.matcher(theBullMsg); - if (theMatcher.find()) { - currentRecord.setCorrectionRemarks(theMatcher.group(0)); - } - - return currentRecord; - - } - - /** - * Parse the location lines... Add location table to the section table if - * any - * - * @param theBullMsg - * from bulletin message - * - * @param recordTable - * The record Table - * - * @return true if finds a location line - */ - public static Boolean processLocation(String theBullMsg, - NonConvSigmetRecord recordTable) { - - Boolean hasLocationLine = true; - String locationDelimiter = "-| TO "; - ArrayList terminationList = new ArrayList(); - terminationList.addAll(Arrays.asList(new String[] { "OCNL", "SEV" })); - Scanner sclocations = new Scanner(theBullMsg).useDelimiter("FROM"); - - /* - * throws away the first section which is not the "FROM" location - */ - LatLonPoint point; - String locationRecord = sclocations.next(); - - if (sclocations.hasNext()) { - locationRecord = sclocations.next(); - - Scanner scLocationLine = new Scanner(locationRecord) - .useDelimiter("\\x0d\\x0d\\x0a"); - String lines = " "; - String curLine = null; - ArrayList locationList = new ArrayList(); - locationList.clear(); - Boolean notBreak = true; - - while (scLocationLine.hasNext() && notBreak) { - curLine = scLocationLine.next();// Get next location line - Scanner scLocationToken = new Scanner(curLine); - if (scLocationToken.hasNext()) { - // Check the first token from each line - String firstToken = scLocationToken.next(); - if (terminationList.contains(firstToken)) { - notBreak = false;// terminate - break; - } - } - lines = lines.concat(" ").concat(curLine); - } - - // Clean up the leading space - lines = UtilN.removeLeadingWhiteSpaces(lines); - // Parse the location lines by a "-" or "TO" - Scanner scLocation = new Scanner(lines) - .useDelimiter(locationDelimiter); - locationList.clear(); - // Get all locations - while (scLocation.hasNext()) { - locationList.add(scLocation.next()); - } - - // set locations to data base - if (locationList.size() > 1) { - Integer idxLocation = 0; - for (String location : locationList) { - NonConvSigmetLocation currentLocation = new NonConvSigmetLocation(); - currentLocation.setLocationLine(lines); - currentLocation.setLocation(location); - point = LatLonLocTbl.getLatLonPoint(location, "vors"); - currentLocation.setIndex(idxLocation + 1); - idxLocation++; - currentLocation.setLatitude(point - .getLatitude(LatLonPoint.INDEGREES)); - currentLocation.setLongitude(point - .getLongitude(LatLonPoint.INDEGREES)); - recordTable.addNonConvSigmetLocation(currentLocation); - } - } else { - hasLocationLine = false; - } - - } else { - hasLocationLine = false; - } - - return hasLocationLine; - } - - /** - * process regular section of a non-convective sigmet report - * - * @return a NonConvsigmetRecord table - */ - public static NonConvSigmetRecord processRecord(String theBullMsg, - Headers headers) { - final String CANCELSIGMET_EXP = "(CANCEL SIGMET|TEST)"; - final Pattern cancelSigPattern = Pattern.compile(CANCELSIGMET_EXP); - Matcher theMatcher = cancelSigPattern.matcher(theBullMsg); - // Decode the WMO Header - NonConvSigmetRecord currentRecord = NonConvSigmetParser.processWMO( - theBullMsg, headers); - // Decode the sigmetId - currentRecord = NonConvSigmetParser.processSigmetId(theBullMsg, - currentRecord); - // Decode the Start Time,End Time,ForecastRegion - currentRecord = NonConvSigmetParser.processStartEndTime(theBullMsg, - currentRecord, headers); - // Decode the phenomena description - currentRecord = NonConvSigmetParser.processPhenomena(theBullMsg, - currentRecord); - // Replace the special characters - currentRecord - .setBullMessage(theBullMsg.replace('\r', ' ') - .replace('\003', ' ').replace('\000', ' ') - .replace('\001', ' ')); - - if (theMatcher.find()) { - if ("UNKNOWN".equals(currentRecord.getHazardType())) { - if ("TEST".equals(theMatcher.group(0))) { - currentRecord.setHazardType("TEST"); - } else { - currentRecord.setHazardType("CANCEL"); - } - } - } else { - // Decode the locations - NonConvSigmetParser.processLocation(theBullMsg, currentRecord); - } - return currentRecord; - } - +/* + * NonConvsigmet DecoderUtil + * + * This java class intends to serve as a decoder utility for NonConvsigmet. + * + * HISTORY + * + * Date Author Description + * ------------ ---------- ----------- -------------------------- + * 06/2009 Uma Josyula Initial creation + * 07/2011 F. J. Yen Fix for RTN TTR 9973--ConvSigment Decoder Ignoring + * time range (NonConvsigmet, too). Set the rangeEnd + * time to the endTime + * + * This code has been developed by the SIB for use in the AWIPS2 system. + */ + +package gov.noaa.nws.ncep.edex.plugin.nonconvsigmet.util; + +import gov.noaa.nws.ncep.common.dataplugin.nonconvsigmet.NonConvSigmetLocation; +import gov.noaa.nws.ncep.common.dataplugin.nonconvsigmet.NonConvSigmetRecord; +import gov.noaa.nws.ncep.edex.tools.decoder.LatLonLocTbl; +import gov.noaa.nws.ncep.edex.util.UtilN; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Calendar; +import java.util.Date; +import java.util.Scanner; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import com.raytheon.edex.esb.Headers; +import com.raytheon.uf.common.time.DataTime; +import com.raytheon.uf.common.time.TimeRange; +import com.raytheon.uf.edex.decodertools.core.LatLonPoint; +import com.raytheon.uf.edex.decodertools.time.TimeTools; + +public class NonConvSigmetParser { + + /** + * Constructor + */ + public NonConvSigmetParser() { + } + + /** + * Parse the WMO line and store WMO header, OfficeID, issue time, + * designatorBBB,... + * + * @param wmoline + * The bulletin message + * + * @return a NonConvsigmetRecord + */ + public static NonConvSigmetRecord processWMO(String wmoline, Headers headers) { + + NonConvSigmetRecord currentRecord = null; + // Regular expression for WMO/ICAO, station ID, and issue date (and + // maybe designator BBB) + final String WMO_EXP = "([A-Z]{4}[0-9]{2}) ([A-Z]{4}) ([0-9]{6})( ([A-Z]{3}))?"; + + // Pattern used for extracting WMO header,issue office and issue date + // and designatorBBB + final Pattern wmoPattern = Pattern.compile(WMO_EXP); + Matcher theMatcher = wmoPattern.matcher(wmoline); + + if (theMatcher.find()) { + currentRecord = new NonConvSigmetRecord(); + + currentRecord.setWmoHeader(theMatcher.group(1)); + currentRecord.setIssueOffice(theMatcher.group(2)); + currentRecord.setDesignatorBBB(theMatcher.group(5)); + + // Decode the issue time. + Calendar issueTime = TimeTools.findDataTime(theMatcher.group(3), + headers); + currentRecord.setIssueTime(issueTime); + + /* 999999999999999999999999999999 + DataTime dataTime = new DataTime(issueTime); + currentRecord.setDataTime(dataTime); + 999 */ + } + return currentRecord; + } + + /** + * Obtains start time and end time and forecast Region from input report + * + * @param theBullMsg + * The bulletin message which contains start time and end time. + * + * @param NonConvSigmetRecord + * + * @return a NonConvsigmetRecord + */ + + public static NonConvSigmetRecord processStartEndTime(String theBullMsg, + NonConvSigmetRecord nconvRecord, Headers headers) { + final String STARTTIME_EXP = "([A-Z]{4}) WS ([0-9]{6})( [A-Z]{3})?"; + final String ENDTIME_EXP = "VALID UNTIL ([0-9]{6})"; + + final Pattern starttimePattern = Pattern.compile(STARTTIME_EXP); + final Pattern endtimePattern = Pattern.compile(ENDTIME_EXP); + + Calendar stTime = null; + Calendar endTime = null; + /* + * Default equal to one hour if there is no valid time in report + */ + + NonConvSigmetRecord currentRecord = nconvRecord; + + // Calculate the startTime + Matcher theMatcher = starttimePattern.matcher(theBullMsg); + if (theMatcher.find()) { + currentRecord.setForecastRegion(theMatcher.group(1)); + stTime = TimeTools.findDataTime(theMatcher.group(2), headers); + } + if (stTime == null) { + currentRecord.setStartTime(currentRecord.getIssueTime()); + } else { + currentRecord.setStartTime(stTime); + } + + // Calculate the endTime + theMatcher = endtimePattern.matcher(theBullMsg); + + if (theMatcher.find()) { + endTime = TimeTools.findDataTime(theMatcher.group(1), headers); + } + if (endTime == null) { + endTime = currentRecord.getIssueTime(); + currentRecord.setEndTime(endTime); + } else { + currentRecord.setEndTime(endTime); + } + + /* 9999999999999999999999999999999 */ + DataTime dataTime = new DataTime(stTime, new TimeRange (stTime.getTime(), + endTime.getTimeInMillis() - stTime.getTimeInMillis()) ); + currentRecord.setDataTime(dataTime); + /* 999 */ + return currentRecord; + } + + /** + * Obtains SigmetId from input report + * + * @param theBullMsg + * The bulletin message. + * + * @param NonConvSigmetRecord + * + * @return a NonConvsigmetRecord + */ + public static NonConvSigmetRecord processSigmetId(String theBullMsg, + NonConvSigmetRecord nconvRecord) { + final String SIGMETID_EXP = "SIGMET ([A-Z]{2,} [0-9]{1})"; + final Pattern sigPattern = Pattern.compile(SIGMETID_EXP); + NonConvSigmetRecord currentRecord = nconvRecord; + // Parse sigmetId + Matcher theMatcher = sigPattern.matcher(theBullMsg); + if (theMatcher.find()) { + currentRecord.setSigmetId(theMatcher.group(1)); + } + + return currentRecord; + } + + /** + * Parse the phenomena... Hazard Type,Hazard Intensity,Hazard Cause,Hazard + * Condition,FlightLevel1,FlightLevel2,SigmetId,AWIPSId,CorAmdTest,StateList + * + * @param theBullMsg + * from bulletin message + * + * @param a + * NonConvsigmetRecord + * + * @return a NonConvsigmetRecord + */ + public static NonConvSigmetRecord processPhenomena(String theBullMsg, + NonConvSigmetRecord nconvRecord) { + + final String FL_EXP1 = "BTN (FL)?([0-9]{3}) AND (FL)?([0-9]{3})"; + + final String FL_EXP2 = "BLW (FL)?([0-9]{3})"; + + final String HAZARDTYPE_EXP = " (TURB|ICGICIP|ICE) "; + + final String HAZARDINTS_EXP = "(OCNL [A-Z0-9]{2,})(BLW (FL)?([0-9]{3}).|BTN|TURB|ICGICIP|ICE|ICGIC|VA|DU)?"; + + final String HAZARDCAUS_EXP = "OCNL ([\\w| ])*(.|DUE TO)?([\\w| ]*). CONDS"; + + final String HAZARDCOND_EXP = "(CONDS [\\w| ]*)(\\x0d\\x0d\\x0a)?([\\w| ]*)([0-9]{4})Z"; + + final String STATELIST_EXP = "(([A-Z]{2})( [A-Z]{2})*)\\x0d\\x0d\\x0a"; + + final String AWIPSID_EXP = "([A-Z]{2}[0-9]{1}[A-Z]{1})( )*\\x0d\\x0d\\x0a"; + + final String CORREMARK_EXP = "(COR|AMD|TEST)"; + + final Pattern flPattern1 = Pattern.compile(FL_EXP1); + + final Pattern flPattern2 = Pattern.compile(FL_EXP2); + + final Pattern hzTypePattern = Pattern.compile(HAZARDTYPE_EXP); + + final Pattern hzIntsPattern = Pattern.compile(HAZARDINTS_EXP); + + final Pattern hzCausPattern = Pattern.compile(HAZARDCAUS_EXP); + + final Pattern hzCondPattern = Pattern.compile(HAZARDCOND_EXP); + + final Pattern stPattern = Pattern.compile(STATELIST_EXP); + + final Pattern awipsPattern = Pattern.compile(AWIPSID_EXP); + + final Pattern corRemarkPattern = Pattern.compile(CORREMARK_EXP); + + NonConvSigmetRecord currentRecord = nconvRecord; + + Matcher theMatcher = flPattern1.matcher(theBullMsg); + + if (theMatcher.find()) { + currentRecord + .setFlightLevel2(Integer.parseInt(theMatcher.group(4))); + currentRecord + .setFlightLevel1(Integer.parseInt(theMatcher.group(2))); + } else { + theMatcher = flPattern2.matcher(theBullMsg); + if (theMatcher.find()) { + currentRecord.setFlightLevel1(Integer.parseInt(theMatcher + .group(2))); + } + } + theMatcher = hzCausPattern.matcher(theBullMsg); + if (theMatcher.find()) { + currentRecord.setHazardCause(theMatcher.group(3)); + } + theMatcher = hzCondPattern.matcher(theBullMsg); + if (theMatcher.find()) { + currentRecord.setHazardCondition(theMatcher.group(0)); + } + theMatcher = hzIntsPattern.matcher(theBullMsg); + if (theMatcher.find()) { + currentRecord.setHazardIntensity(theMatcher.group(1)); + } + theMatcher = hzTypePattern.matcher(theBullMsg); + if (theMatcher.find()) { + if ("TURB".equals(theMatcher.group(1))) { + currentRecord.setHazardType("TURBULENCE"); + } else { + currentRecord.setHazardType(theMatcher.group(1)); + } + } + theMatcher = stPattern.matcher(theBullMsg); + if (theMatcher.find()) { + currentRecord.setStateList(theMatcher.group(1)); + } + theMatcher = awipsPattern.matcher(theBullMsg); + if (theMatcher.find()) { + currentRecord.setAwipsId(theMatcher.group(1)); + } + theMatcher = corRemarkPattern.matcher(theBullMsg); + if (theMatcher.find()) { + currentRecord.setCorrectionRemarks(theMatcher.group(0)); + } + + return currentRecord; + + } + + /** + * Parse the location lines... Add location table to the section table if + * any + * + * @param theBullMsg + * from bulletin message + * + * @param recordTable + * The record Table + * + * @return true if finds a location line + */ + public static Boolean processLocation(String theBullMsg, + NonConvSigmetRecord recordTable) { + + Boolean hasLocationLine = true; + String locationDelimiter = "-| TO "; + ArrayList terminationList = new ArrayList(); + terminationList.addAll(Arrays.asList(new String[] { "OCNL", "SEV" })); + Scanner sclocations = new Scanner(theBullMsg).useDelimiter("FROM"); + + /* + * throws away the first section which is not the "FROM" location + */ + LatLonPoint point; + String locationRecord = sclocations.next(); + + if (sclocations.hasNext()) { + locationRecord = sclocations.next(); + + Scanner scLocationLine = new Scanner(locationRecord) + .useDelimiter("\\x0d\\x0d\\x0a"); + String lines = " "; + String curLine = null; + ArrayList locationList = new ArrayList(); + locationList.clear(); + Boolean notBreak = true; + + while (scLocationLine.hasNext() && notBreak) { + curLine = scLocationLine.next();// Get next location line + Scanner scLocationToken = new Scanner(curLine); + if (scLocationToken.hasNext()) { + // Check the first token from each line + String firstToken = scLocationToken.next(); + if (terminationList.contains(firstToken)) { + notBreak = false;// terminate + break; + } + } + lines = lines.concat(" ").concat(curLine); + } + + // Clean up the leading space + lines = UtilN.removeLeadingWhiteSpaces(lines); + // Parse the location lines by a "-" or "TO" + Scanner scLocation = new Scanner(lines) + .useDelimiter(locationDelimiter); + locationList.clear(); + // Get all locations + while (scLocation.hasNext()) { + locationList.add(scLocation.next()); + } + + // set locations to data base + if (locationList.size() > 1) { + Integer idxLocation = 0; + for (String location : locationList) { + NonConvSigmetLocation currentLocation = new NonConvSigmetLocation(); + currentLocation.setLocationLine(lines); + currentLocation.setLocation(location); + point = LatLonLocTbl.getLatLonPoint(location, "vors"); + currentLocation.setIndex(idxLocation + 1); + idxLocation++; + currentLocation.setLatitude(point + .getLatitude(LatLonPoint.INDEGREES)); + currentLocation.setLongitude(point + .getLongitude(LatLonPoint.INDEGREES)); + recordTable.addNonConvSigmetLocation(currentLocation); + } + } else { + hasLocationLine = false; + } + + } else { + hasLocationLine = false; + } + + return hasLocationLine; + } + + /** + * process regular section of a non-convective sigmet report + * + * @return a NonConvsigmetRecord table + */ + public static NonConvSigmetRecord processRecord(String theBullMsg, + Headers headers) { + final String CANCELSIGMET_EXP = "(CANCEL SIGMET|TEST)"; + final Pattern cancelSigPattern = Pattern.compile(CANCELSIGMET_EXP); + Matcher theMatcher = cancelSigPattern.matcher(theBullMsg); + // Decode the WMO Header + NonConvSigmetRecord currentRecord = NonConvSigmetParser.processWMO( + theBullMsg, headers); + // Decode the sigmetId + currentRecord = NonConvSigmetParser.processSigmetId(theBullMsg, + currentRecord); + // Decode the Start Time,End Time,ForecastRegion + currentRecord = NonConvSigmetParser.processStartEndTime(theBullMsg, + currentRecord, headers); + // Decode the phenomena description + currentRecord = NonConvSigmetParser.processPhenomena(theBullMsg, + currentRecord); + // Replace the special characters + currentRecord + .setBullMessage(theBullMsg.replace('\r', ' ') + .replace('\003', ' ').replace('\000', ' ') + .replace('\001', ' ')); + + if (theMatcher.find()) { + if ("UNKNOWN".equals(currentRecord.getHazardType())) { + if ("TEST".equals(theMatcher.group(0))) { + currentRecord.setHazardType("TEST"); + } else { + currentRecord.setHazardType("CANCEL"); + } + } + } else { + // Decode the locations + NonConvSigmetParser.processLocation(theBullMsg, currentRecord); + } + return currentRecord; + } + } \ No newline at end of file diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.nonconvsigmet/gov.noaa.nws.ncep.edex.plugin.nonconvsigmet/src/gov/noaa/nws/ncep/edex/plugin/nonconvsigmet/util/package-info.java b/ncep/gov.noaa.nws.ncep.edex.plugin.nonconvsigmet/gov.noaa.nws.ncep.edex.plugin.nonconvsigmet/src/gov/noaa/nws/ncep/edex/plugin/nonconvsigmet/util/package-info.java index 09e93d1a71..a0947a6f6d 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.nonconvsigmet/gov.noaa.nws.ncep.edex.plugin.nonconvsigmet/src/gov/noaa/nws/ncep/edex/plugin/nonconvsigmet/util/package-info.java +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.nonconvsigmet/gov.noaa.nws.ncep.edex.plugin.nonconvsigmet/src/gov/noaa/nws/ncep/edex/plugin/nonconvsigmet/util/package-info.java @@ -1,4 +1,4 @@ -/** -* Contains tools for decoder plug-ins -*/ -package gov.noaa.nws.ncep.edex.plugin.nonconvsigmet.util; +/** +* Contains tools for decoder plug-ins +*/ +package gov.noaa.nws.ncep.edex.plugin.nonconvsigmet.util; diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.nonconvsigmet/res/spring/nonconvsigmet-common.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.nonconvsigmet/res/spring/nonconvsigmet-common.xml index d5927f1699..b47ebc7901 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.nonconvsigmet/res/spring/nonconvsigmet-common.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.nonconvsigmet/res/spring/nonconvsigmet-common.xml @@ -1,26 +1,26 @@ - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.nonconvsigmet/res/spring/nonconvsigmet-ingest.xml b/ncep/gov.noaa.nws.ncep.edex.plugin.nonconvsigmet/res/spring/nonconvsigmet-ingest.xml index f6ac80cb6a..e9b2d3798a 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.nonconvsigmet/res/spring/nonconvsigmet-ingest.xml +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.nonconvsigmet/res/spring/nonconvsigmet-ingest.xml @@ -1,73 +1,73 @@ - - - - - - - - - - - - - - - - - - - - - - - - - nonconvsigmet - - - - - - - - - - - - - java.lang.Throwable - - - - - - - java.lang.Throwable - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + nonconvsigmet + + + + + + + + + + + + + java.lang.Throwable + + + + + + + java.lang.Throwable + + + + + \ No newline at end of file diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.nonconvsigmet/src/gov/noaa/nws/ncep/edex/plugin/nonconvsigmet/decoder/NonConvSigmetDecoder.java b/ncep/gov.noaa.nws.ncep.edex.plugin.nonconvsigmet/src/gov/noaa/nws/ncep/edex/plugin/nonconvsigmet/decoder/NonConvSigmetDecoder.java index 689b177f00..e47ebce5d2 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.nonconvsigmet/src/gov/noaa/nws/ncep/edex/plugin/nonconvsigmet/decoder/NonConvSigmetDecoder.java +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.nonconvsigmet/src/gov/noaa/nws/ncep/edex/plugin/nonconvsigmet/decoder/NonConvSigmetDecoder.java @@ -1,111 +1,111 @@ -/** - * - * Non-Convective Sigmet Decoder - * - * This java class decodes NONCONVSIGMET (non-convective sigmet) raw data. - * HISTORY - * - * Date Author Description - * ------------ ---------- ----------- -------------------------- - * 06/2009 Uma Josyula Initial creation - * - * This code has been developed by the SIB for use in the AWIPS2 system. - */ - -package gov.noaa.nws.ncep.edex.plugin.nonconvsigmet.decoder; - -import gov.noaa.nws.ncep.common.dataplugin.nonconvsigmet.NonConvSigmetRecord; -import gov.noaa.nws.ncep.edex.plugin.nonconvsigmet.util.NonConvSigmetParser; -import gov.noaa.nws.ncep.edex.util.UtilN; - -import java.util.Scanner; - -import com.raytheon.edex.esb.Headers; -import com.raytheon.edex.exception.DecoderException; -import com.raytheon.edex.plugin.AbstractDecoder; -import com.raytheon.uf.common.dataplugin.PluginDataObject; -import com.raytheon.uf.common.dataplugin.PluginException; -import com.raytheon.uf.edex.decodertools.core.IDecoderConstants; - -public class NonConvSigmetDecoder extends AbstractDecoder { - - private final String pluginName; - - /** - * Constructor - * - * @throws DecoderException - */ - public NonConvSigmetDecoder(String name) throws DecoderException { - pluginName = name; - } - - public PluginDataObject[] decode(byte[] data, Headers headers) - throws DecoderException { - - PluginDataObject [] recs = null; - NonConvSigmetRecord currentRecord = null; - String traceId = ""; - if (headers != null) { - traceId = (String) headers.get("traceId"); - } - if((data != null) && (data.length > 0)) { - String etx = IDecoderConstants.ETX; - String theBulletin = null; - byte[] messageData = null; - NonConvSigmetSeparator sep = NonConvSigmetSeparator.separate(data, - headers); - messageData = sep.next(); - String theMessage = new String(messageData); - - /* - * May have multiple duplicate bulletins, only get the first bulletin - * and eliminate the remaining bulletins after the first bulletin. - */ - Scanner cc = new Scanner(theMessage).useDelimiter(etx); - if (cc.hasNext()) { - theBulletin = cc.next(); - } else { - theBulletin = theMessage; - } - /* - * Decode by calling the NonconvSigmetParser method processRecord - */ - currentRecord = NonConvSigmetParser.processRecord(theBulletin, headers); - if (currentRecord != null) { - currentRecord.setReportType(pluginName); - /* - * Replace special characters to a blank so that it may be readable - */ - currentRecord.setBullMessage(UtilN - .removeLeadingWhiteSpaces((theBulletin.substring(5)) - .replace('\036', ' ').replace('\r', ' ') - .replace('\003', ' ').replace('\000', ' ') - .replace('\001', ' '))); - /* - * Check the NonConvsigmet record object. If not, throws exception. - */ - currentRecord.setTraceId(traceId); - currentRecord.setPluginName(pluginName); - try { - currentRecord.constructDataURI(); - - } catch (PluginException e) { - logger.error(traceId + "- Unable to construct dataURI", e); - currentRecord = null; - } - } - } - - /* - * Return the NonConvsigmetRecord record object. - */ - if (currentRecord == null) { - recs = new PluginDataObject[0]; - } else { - recs = new PluginDataObject[] { currentRecord }; - } - return recs; - } - +/** + * + * Non-Convective Sigmet Decoder + * + * This java class decodes NONCONVSIGMET (non-convective sigmet) raw data. + * HISTORY + * + * Date Author Description + * ------------ ---------- ----------- -------------------------- + * 06/2009 Uma Josyula Initial creation + * + * This code has been developed by the SIB for use in the AWIPS2 system. + */ + +package gov.noaa.nws.ncep.edex.plugin.nonconvsigmet.decoder; + +import gov.noaa.nws.ncep.common.dataplugin.nonconvsigmet.NonConvSigmetRecord; +import gov.noaa.nws.ncep.edex.plugin.nonconvsigmet.util.NonConvSigmetParser; +import gov.noaa.nws.ncep.edex.util.UtilN; + +import java.util.Scanner; + +import com.raytheon.edex.esb.Headers; +import com.raytheon.edex.exception.DecoderException; +import com.raytheon.edex.plugin.AbstractDecoder; +import com.raytheon.uf.common.dataplugin.PluginDataObject; +import com.raytheon.uf.common.dataplugin.PluginException; +import com.raytheon.uf.edex.decodertools.core.IDecoderConstants; + +public class NonConvSigmetDecoder extends AbstractDecoder { + + private final String pluginName; + + /** + * Constructor + * + * @throws DecoderException + */ + public NonConvSigmetDecoder(String name) throws DecoderException { + pluginName = name; + } + + public PluginDataObject[] decode(byte[] data, Headers headers) + throws DecoderException { + + PluginDataObject [] recs = null; + NonConvSigmetRecord currentRecord = null; + String traceId = ""; + if (headers != null) { + traceId = (String) headers.get("traceId"); + } + if((data != null) && (data.length > 0)) { + String etx = IDecoderConstants.ETX; + String theBulletin = null; + byte[] messageData = null; + NonConvSigmetSeparator sep = NonConvSigmetSeparator.separate(data, + headers); + messageData = sep.next(); + String theMessage = new String(messageData); + + /* + * May have multiple duplicate bulletins, only get the first bulletin + * and eliminate the remaining bulletins after the first bulletin. + */ + Scanner cc = new Scanner(theMessage).useDelimiter(etx); + if (cc.hasNext()) { + theBulletin = cc.next(); + } else { + theBulletin = theMessage; + } + /* + * Decode by calling the NonconvSigmetParser method processRecord + */ + currentRecord = NonConvSigmetParser.processRecord(theBulletin, headers); + if (currentRecord != null) { + currentRecord.setReportType(pluginName); + /* + * Replace special characters to a blank so that it may be readable + */ + currentRecord.setBullMessage(UtilN + .removeLeadingWhiteSpaces((theBulletin.substring(5)) + .replace('\036', ' ').replace('\r', ' ') + .replace('\003', ' ').replace('\000', ' ') + .replace('\001', ' '))); + /* + * Check the NonConvsigmet record object. If not, throws exception. + */ + currentRecord.setTraceId(traceId); + currentRecord.setPluginName(pluginName); + try { + currentRecord.constructDataURI(); + + } catch (PluginException e) { + logger.error(traceId + "- Unable to construct dataURI", e); + currentRecord = null; + } + } + } + + /* + * Return the NonConvsigmetRecord record object. + */ + if (currentRecord == null) { + recs = new PluginDataObject[0]; + } else { + recs = new PluginDataObject[] { currentRecord }; + } + return recs; + } + } \ No newline at end of file diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.nonconvsigmet/src/gov/noaa/nws/ncep/edex/plugin/nonconvsigmet/decoder/NonConvSigmetSeparator.java b/ncep/gov.noaa.nws.ncep.edex.plugin.nonconvsigmet/src/gov/noaa/nws/ncep/edex/plugin/nonconvsigmet/decoder/NonConvSigmetSeparator.java index d91836dc4f..a25c682b04 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.nonconvsigmet/src/gov/noaa/nws/ncep/edex/plugin/nonconvsigmet/decoder/NonConvSigmetSeparator.java +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.nonconvsigmet/src/gov/noaa/nws/ncep/edex/plugin/nonconvsigmet/decoder/NonConvSigmetSeparator.java @@ -1,137 +1,137 @@ -/** - * NonConvsigmetSeparator - * - * This class sets the raw data to an Arraylist, records, of - * String based on a uniquely identified separator. - * - *
- * Uma Josyula                               06/2009         Creation
- * 
- * - * This code has been developed by the SIB for use in the AWIPS system. - */ - -package gov.noaa.nws.ncep.edex.plugin.nonconvsigmet.decoder; - -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; -import java.util.NoSuchElementException; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - -import com.raytheon.edex.esb.Headers; -import com.raytheon.edex.plugin.AbstractRecordSeparator; -import com.raytheon.edex.util.Util; -import com.raytheon.uf.edex.wmo.message.WMOHeader; - -public class NonConvSigmetSeparator extends AbstractRecordSeparator { - private final Log logger = LogFactory.getLog(getClass()); - - /** Regex used for separate the bulletins */ - private static final String BULLSEPARATOR = "([0-9]{3})( )*\\x0d\\x0d\\x0a([A-Z]{4}[0-9]{2}) ([A-Z]{4}) ([0-9]{6})( [A-Z]{3})?\\x0d\\x0d\\x0a"; - - /** Regex matcher */ - private Matcher matcher; - - /** Pattern object for regex search */ - private Pattern pattern; - - /** List of records contained in file */ - private List records; - - private Iterator iterator = null; - - /** - * Constructor. - * - */ - public NonConvSigmetSeparator() { - records = new ArrayList(); - } - - public static NonConvSigmetSeparator separate(byte[] data, Headers headers) { - NonConvSigmetSeparator ds = new NonConvSigmetSeparator(); - ds.setData(data, headers); - return ds; - } - - /* - * (non-Javadoc) - * - * @see com.raytheon.edex.plugin.AbstractRecordSeparator#setData(byte[], - * com.raytheon.edex.esb.Headers) - */ - public void setData(byte[] data, Headers headers) { - try { - doSeparate(new String(data)); - } catch (Exception e) { - logger.warn("No valid records found!", e); - } finally { - iterator = records.iterator(); - } - } - - /* - * (non-Javadoc) - * - * @see com.raytheon.edex.plugin.IRecordSeparator#hasNext() - */ - public boolean hasNext() { - if (iterator == null) { - return false; - } else { - return iterator.hasNext(); - } - } - - /** - * Get record - */ - public byte[] next() { - try { - String temp = iterator.next(); - if (Util.isEmptyString(temp)) { - return new byte [0]; - } else { - return temp.getBytes(); - } - } catch (NoSuchElementException e) { - return (byte[]) null; - } - } - - /** - * @param message - * separate bulletins - */ - private void doSeparate(String message) { - /* Regex used for separate the bulletins */ - - String data = message; - - WMOHeader h1 = new WMOHeader(data.getBytes()); - boolean done = false; - while (!done) { - if((h1 != null)&&(h1.isValid())) { - String body = data.substring(h1.getMessageDataStart()); - WMOHeader h2 = new WMOHeader(body.getBytes()); - if((h2 != null)&&(h2.isValid())) { - int endPos = h2.getWmoHeaderStart(); - records.add(h1.getWmoHeader() + "\n" + body.substring(0,endPos)); - data = body.substring(endPos); - h1 = new WMOHeader(data.getBytes()); - } else { - records.add(data); - done = true; - } - } else { - records.add(data); - done = true; - } - } - } +/** + * NonConvsigmetSeparator + * + * This class sets the raw data to an Arraylist, records, of + * String based on a uniquely identified separator. + * + *
+ * Uma Josyula                               06/2009         Creation
+ * 
+ * + * This code has been developed by the SIB for use in the AWIPS system. + */ + +package gov.noaa.nws.ncep.edex.plugin.nonconvsigmet.decoder; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; +import java.util.NoSuchElementException; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import com.raytheon.edex.esb.Headers; +import com.raytheon.edex.plugin.AbstractRecordSeparator; +import com.raytheon.edex.util.Util; +import com.raytheon.uf.edex.wmo.message.WMOHeader; + +public class NonConvSigmetSeparator extends AbstractRecordSeparator { + private final Log logger = LogFactory.getLog(getClass()); + + /** Regex used for separate the bulletins */ + private static final String BULLSEPARATOR = "([0-9]{3})( )*\\x0d\\x0d\\x0a([A-Z]{4}[0-9]{2}) ([A-Z]{4}) ([0-9]{6})( [A-Z]{3})?\\x0d\\x0d\\x0a"; + + /** Regex matcher */ + private Matcher matcher; + + /** Pattern object for regex search */ + private Pattern pattern; + + /** List of records contained in file */ + private List records; + + private Iterator iterator = null; + + /** + * Constructor. + * + */ + public NonConvSigmetSeparator() { + records = new ArrayList(); + } + + public static NonConvSigmetSeparator separate(byte[] data, Headers headers) { + NonConvSigmetSeparator ds = new NonConvSigmetSeparator(); + ds.setData(data, headers); + return ds; + } + + /* + * (non-Javadoc) + * + * @see com.raytheon.edex.plugin.AbstractRecordSeparator#setData(byte[], + * com.raytheon.edex.esb.Headers) + */ + public void setData(byte[] data, Headers headers) { + try { + doSeparate(new String(data)); + } catch (Exception e) { + logger.warn("No valid records found!", e); + } finally { + iterator = records.iterator(); + } + } + + /* + * (non-Javadoc) + * + * @see com.raytheon.edex.plugin.IRecordSeparator#hasNext() + */ + public boolean hasNext() { + if (iterator == null) { + return false; + } else { + return iterator.hasNext(); + } + } + + /** + * Get record + */ + public byte[] next() { + try { + String temp = iterator.next(); + if (Util.isEmptyString(temp)) { + return new byte [0]; + } else { + return temp.getBytes(); + } + } catch (NoSuchElementException e) { + return (byte[]) null; + } + } + + /** + * @param message + * separate bulletins + */ + private void doSeparate(String message) { + /* Regex used for separate the bulletins */ + + String data = message; + + WMOHeader h1 = new WMOHeader(data.getBytes()); + boolean done = false; + while (!done) { + if((h1 != null)&&(h1.isValid())) { + String body = data.substring(h1.getMessageDataStart()); + WMOHeader h2 = new WMOHeader(body.getBytes()); + if((h2 != null)&&(h2.isValid())) { + int endPos = h2.getWmoHeaderStart(); + records.add(h1.getWmoHeader() + "\n" + body.substring(0,endPos)); + data = body.substring(endPos); + h1 = new WMOHeader(data.getBytes()); + } else { + records.add(data); + done = true; + } + } else { + records.add(data); + done = true; + } + } + } } \ No newline at end of file diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.nonconvsigmet/src/gov/noaa/nws/ncep/edex/plugin/nonconvsigmet/decoder/package-info.java b/ncep/gov.noaa.nws.ncep.edex.plugin.nonconvsigmet/src/gov/noaa/nws/ncep/edex/plugin/nonconvsigmet/decoder/package-info.java index 5913d39c3b..505c4ab822 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.nonconvsigmet/src/gov/noaa/nws/ncep/edex/plugin/nonconvsigmet/decoder/package-info.java +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.nonconvsigmet/src/gov/noaa/nws/ncep/edex/plugin/nonconvsigmet/decoder/package-info.java @@ -1,4 +1,4 @@ -/** -* Contains decoder.java for decoder plug-ins -*/ -package gov.noaa.nws.ncep.edex.plugin.nonconvsigmet.decoder;; +/** +* Contains decoder.java for decoder plug-ins +*/ +package gov.noaa.nws.ncep.edex.plugin.nonconvsigmet.decoder;; diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.nonconvsigmet/src/gov/noaa/nws/ncep/edex/plugin/nonconvsigmet/util/NonConvSigmetParser.java b/ncep/gov.noaa.nws.ncep.edex.plugin.nonconvsigmet/src/gov/noaa/nws/ncep/edex/plugin/nonconvsigmet/util/NonConvSigmetParser.java index 1ff5b0523b..28d4c7b6f1 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.nonconvsigmet/src/gov/noaa/nws/ncep/edex/plugin/nonconvsigmet/util/NonConvSigmetParser.java +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.nonconvsigmet/src/gov/noaa/nws/ncep/edex/plugin/nonconvsigmet/util/NonConvSigmetParser.java @@ -1,397 +1,397 @@ -/* - * NonConvsigmet DecoderUtil - * - * This java class intends to serve as a decoder utility for NonConvsigmet. - * - * HISTORY - * - * Date Author Description - * ------------ ---------- ----------- -------------------------- - * 06/2009 Uma Josyula Initial creation - * - * This code has been developed by the SIB for use in the AWIPS2 system. - */ - -package gov.noaa.nws.ncep.edex.plugin.nonconvsigmet.util; - -import gov.noaa.nws.ncep.common.dataplugin.nonconvsigmet.NonConvSigmetLocation; -import gov.noaa.nws.ncep.common.dataplugin.nonconvsigmet.NonConvSigmetRecord; -import gov.noaa.nws.ncep.edex.tools.decoder.LatLonLocTbl; -import gov.noaa.nws.ncep.edex.util.UtilN; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Calendar; -import java.util.Scanner; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -import com.raytheon.edex.esb.Headers; -import com.raytheon.uf.common.time.DataTime; -import com.raytheon.uf.edex.decodertools.core.LatLonPoint; -import com.raytheon.uf.edex.decodertools.time.TimeTools; - -public class NonConvSigmetParser { - - /** - * Constructor - */ - public NonConvSigmetParser() { - } - - /** - * Parse the WMO line and store WMO header, OfficeID, issue time, - * designatorBBB,... - * - * @param wmoline - * The bulletin message - * - * @return a NonConvsigmetRecord - */ - public static NonConvSigmetRecord processWMO(String wmoline, Headers headers) { - - NonConvSigmetRecord currentRecord = null; - // Regular expression for WMO/ICAO, station ID, and issue date (and - // maybe designator BBB) - final String WMO_EXP = "([A-Z]{4}[0-9]{2}) ([A-Z]{4}) ([0-9]{6})( ([A-Z]{3}))?"; - - // Pattern used for extracting WMO header,issue office and issue date - // and designatorBBB - final Pattern wmoPattern = Pattern.compile(WMO_EXP); - Matcher theMatcher = wmoPattern.matcher(wmoline); - - if (theMatcher.find()) { - currentRecord = new NonConvSigmetRecord(); - - currentRecord.setWmoHeader(theMatcher.group(1)); - currentRecord.setIssueOffice(theMatcher.group(2)); - currentRecord.setDesignatorBBB(theMatcher.group(5)); - - // Decode the issue time. - Calendar issueTime = TimeTools.findDataTime(theMatcher.group(3), - headers); - currentRecord.setIssueTime(issueTime); - - DataTime dataTime = new DataTime(issueTime); - currentRecord.setDataTime(dataTime); - } - return currentRecord; - } - - /** - * Obtains start time and end time and forecast Region from input report - * - * @param theBullMsg - * The bulletin message which contains start time and end time. - * - * @param NonConvSigmetRecord - * - * @return a NonConvsigmetRecord - */ - - public static NonConvSigmetRecord processStartEndTime(String theBullMsg, - NonConvSigmetRecord nconvRecord, Headers headers) { - final String STARTTIME_EXP = "([A-Z]{4}) WS ([0-9]{6})( [A-Z]{3})?"; - final String ENDTIME_EXP = "VALID UNTIL ([0-9]{6})"; - - final Pattern starttimePattern = Pattern.compile(STARTTIME_EXP); - final Pattern endtimePattern = Pattern.compile(ENDTIME_EXP); - - Calendar stTime = null; - Calendar endTime = null; - /* - * Default equal to one hour if there is no valid time in report - */ - - NonConvSigmetRecord currentRecord = nconvRecord; - - // Calculate the startTime - Matcher theMatcher = starttimePattern.matcher(theBullMsg); - if (theMatcher.find()) { - currentRecord.setForecastRegion(theMatcher.group(1)); - stTime = TimeTools.findDataTime(theMatcher.group(2), headers); - } - if (stTime == null) { - currentRecord.setStartTime(currentRecord.getIssueTime()); - } else { - currentRecord.setStartTime(stTime); - } - - // Calculate the endTime - theMatcher = endtimePattern.matcher(theBullMsg); - - if (theMatcher.find()) { - endTime = TimeTools.findDataTime(theMatcher.group(1), headers); - } - if (endTime == null) { - endTime = currentRecord.getIssueTime(); - currentRecord.setEndTime(endTime); - } else { - currentRecord.setEndTime(endTime); - } - - return currentRecord; - } - - /** - * Obtains SigmetId from input report - * - * @param theBullMsg - * The bulletin message. - * - * @param NonConvSigmetRecord - * - * @return a NonConvsigmetRecord - */ - public static NonConvSigmetRecord processSigmetId(String theBullMsg, - NonConvSigmetRecord nconvRecord) { - final String SIGMETID_EXP = "SIGMET ([A-Z]{2,} [0-9]{1})"; - final Pattern sigPattern = Pattern.compile(SIGMETID_EXP); - NonConvSigmetRecord currentRecord = nconvRecord; - // Parse sigmetId - Matcher theMatcher = sigPattern.matcher(theBullMsg); - if (theMatcher.find()) { - currentRecord.setSigmetId(theMatcher.group(1)); - } - - return currentRecord; - } - - /** - * Parse the phenomena... Hazard Type,Hazard Intensity,Hazard Cause,Hazard - * Condition,FlightLevel1,FlightLevel2,SigmetId,AWIPSId,CorAmdTest,StateList - * - * @param theBullMsg - * from bulletin message - * - * @param a - * NonConvsigmetRecord - * - * @return a NonConvsigmetRecord - */ - public static NonConvSigmetRecord processPhenomena(String theBullMsg, - NonConvSigmetRecord nconvRecord) { - - final String FL_EXP1 = "BTN (FL)?([0-9]{3}) AND (FL)?([0-9]{3})"; - - final String FL_EXP2 = "BLW (FL)?([0-9]{3})"; - - final String HAZARDTYPE_EXP = " (TURB|ICGICIP|ICE) "; - - final String HAZARDINTS_EXP = "(OCNL [A-Z0-9]{2,})(BLW (FL)?([0-9]{3}).|BTN|TURB|ICGICIP|ICE|ICGIC|VA|DU)?"; - - final String HAZARDCAUS_EXP = "OCNL ([\\w| ])*(.|DUE TO)?([\\w| ]*). CONDS"; - - final String HAZARDCOND_EXP = "(CONDS [\\w| ]*)(\\x0d\\x0d\\x0a)?([\\w| ]*)([0-9]{4})Z"; - - final String STATELIST_EXP = "(([A-Z]{2})( [A-Z]{2})*)[\\r\\n]+"; - - final String AWIPSID_EXP = "([A-Z]{2}[0-9]{1}[A-Z]{1})( )*[\\r\\n]+"; - - final String CORREMARK_EXP = "(COR|AMD|TEST)"; - - final Pattern flPattern1 = Pattern.compile(FL_EXP1); - - final Pattern flPattern2 = Pattern.compile(FL_EXP2); - - final Pattern hzTypePattern = Pattern.compile(HAZARDTYPE_EXP); - - final Pattern hzIntsPattern = Pattern.compile(HAZARDINTS_EXP); - - final Pattern hzCausPattern = Pattern.compile(HAZARDCAUS_EXP); - - final Pattern hzCondPattern = Pattern.compile(HAZARDCOND_EXP); - - final Pattern stPattern = Pattern.compile(STATELIST_EXP); - - final Pattern awipsPattern = Pattern.compile(AWIPSID_EXP); - - final Pattern corRemarkPattern = Pattern.compile(CORREMARK_EXP); - - NonConvSigmetRecord currentRecord = nconvRecord; - - Matcher theMatcher = flPattern1.matcher(theBullMsg); - - if (theMatcher.find()) { - currentRecord - .setFlightLevel2(Integer.parseInt(theMatcher.group(4))); - currentRecord - .setFlightLevel1(Integer.parseInt(theMatcher.group(2))); - } else { - theMatcher = flPattern2.matcher(theBullMsg); - if (theMatcher.find()) { - currentRecord.setFlightLevel1(Integer.parseInt(theMatcher - .group(2))); - } - } - theMatcher = hzCausPattern.matcher(theBullMsg); - if (theMatcher.find()) { - currentRecord.setHazardCause(theMatcher.group(3)); - } - theMatcher = hzCondPattern.matcher(theBullMsg); - if (theMatcher.find()) { - currentRecord.setHazardCondition(theMatcher.group(0)); - } - theMatcher = hzIntsPattern.matcher(theBullMsg); - if (theMatcher.find()) { - currentRecord.setHazardIntensity(theMatcher.group(1)); - } - theMatcher = hzTypePattern.matcher(theBullMsg); - if (theMatcher.find()) { - if ("TURB".equals(theMatcher.group(1))) { - currentRecord.setHazardType("TURBULENCE"); - } else { - currentRecord.setHazardType(theMatcher.group(1)); - } - } - theMatcher = stPattern.matcher(theBullMsg); - if (theMatcher.find()) { - currentRecord.setStateList(theMatcher.group(1)); - } - theMatcher = awipsPattern.matcher(theBullMsg); - if (theMatcher.find()) { - currentRecord.setAwipsId(theMatcher.group(1)); - } - theMatcher = corRemarkPattern.matcher(theBullMsg); - if (theMatcher.find()) { - currentRecord.setCorrectionRemarks(theMatcher.group(0)); - } - - return currentRecord; - - } - - /** - * Parse the location lines... Add location table to the section table if - * any - * - * @param theBullMsg - * from bulletin message - * - * @param recordTable - * The record Table - * - * @return true if finds a location line - */ - public static Boolean processLocation(String theBullMsg, - NonConvSigmetRecord recordTable) { - - Boolean hasLocationLine = true; - String locationDelimiter = "-| TO "; - ArrayList terminationList = new ArrayList(); - terminationList.addAll(Arrays.asList(new String[] { "OCNL", "SEV" })); - Scanner sclocations = new Scanner(theBullMsg).useDelimiter("FROM"); - - /* - * throws away the first section which is not the "FROM" location - */ - LatLonPoint point; - String locationRecord = sclocations.next(); - - if (sclocations.hasNext()) { - locationRecord = sclocations.next(); - - Scanner scLocationLine = new Scanner(locationRecord) - .useDelimiter("[\\r\\n]+"); - String lines = " "; - String curLine = null; - ArrayList locationList = new ArrayList(); - locationList.clear(); - Boolean notBreak = true; - - while (scLocationLine.hasNext() && notBreak) { - curLine = scLocationLine.next();// Get next location line - Scanner scLocationToken = new Scanner(curLine); - if (scLocationToken.hasNext()) { - // Check the first token from each line - String firstToken = scLocationToken.next(); - if (terminationList.contains(firstToken)) { - notBreak = false;// terminate - break; - } - } - lines = lines.concat(" ").concat(curLine); - } - - // Clean up the leading space - lines = UtilN.removeLeadingWhiteSpaces(lines); - // Parse the location lines by a "-" or "TO" - Scanner scLocation = new Scanner(lines) - .useDelimiter(locationDelimiter); - locationList.clear(); - // Get all locations - while (scLocation.hasNext()) { - locationList.add(scLocation.next()); - } - - // set locations to data base - if (locationList.size() > 1) { - Integer idxLocation = 0; - for (String location : locationList) { - NonConvSigmetLocation currentLocation = new NonConvSigmetLocation(); - currentLocation.setLocationLine(lines); - currentLocation.setLocation(location); - point = LatLonLocTbl.getLatLonPoint(location, "vors"); - currentLocation.setIndex(idxLocation + 1); - idxLocation++; - currentLocation.setLatitude(point - .getLatitude(LatLonPoint.INDEGREES)); - currentLocation.setLongitude(point - .getLongitude(LatLonPoint.INDEGREES)); - recordTable.addNonConvSigmetLocation(currentLocation); - } - } else { - hasLocationLine = false; - } - - } else { - hasLocationLine = false; - } - - return hasLocationLine; - } - - /** - * process regular section of a non-convective sigmet report - * - * @return a NonConvsigmetRecord table - */ - public static NonConvSigmetRecord processRecord(String theBullMsg, - Headers headers) { - final String CANCELSIGMET_EXP = "(CANCEL SIGMET|TEST)"; - final Pattern cancelSigPattern = Pattern.compile(CANCELSIGMET_EXP); - Matcher theMatcher = cancelSigPattern.matcher(theBullMsg); - // Decode the WMO Header - NonConvSigmetRecord currentRecord = NonConvSigmetParser.processWMO( - theBullMsg, headers); - // Decode the sigmetId - currentRecord = NonConvSigmetParser.processSigmetId(theBullMsg, - currentRecord); - // Decode the Start Time,End Time,ForecastRegion - currentRecord = NonConvSigmetParser.processStartEndTime(theBullMsg, - currentRecord, headers); - // Decode the phenomena description - currentRecord = NonConvSigmetParser.processPhenomena(theBullMsg, - currentRecord); - // Replace the special characters - currentRecord - .setBullMessage(theBullMsg.replace('\r', ' ') - .replace('\003', ' ').replace('\000', ' ') - .replace('\001', ' ')); - - if (theMatcher.find()) { - if ("UNKNOWN".equals(currentRecord.getHazardType())) { - if ("TEST".equals(theMatcher.group(0))) { - currentRecord.setHazardType("TEST"); - } else { - currentRecord.setHazardType("CANCEL"); - } - } - } else { - // Decode the locations - NonConvSigmetParser.processLocation(theBullMsg, currentRecord); - } - return currentRecord; - } - +/* + * NonConvsigmet DecoderUtil + * + * This java class intends to serve as a decoder utility for NonConvsigmet. + * + * HISTORY + * + * Date Author Description + * ------------ ---------- ----------- -------------------------- + * 06/2009 Uma Josyula Initial creation + * + * This code has been developed by the SIB for use in the AWIPS2 system. + */ + +package gov.noaa.nws.ncep.edex.plugin.nonconvsigmet.util; + +import gov.noaa.nws.ncep.common.dataplugin.nonconvsigmet.NonConvSigmetLocation; +import gov.noaa.nws.ncep.common.dataplugin.nonconvsigmet.NonConvSigmetRecord; +import gov.noaa.nws.ncep.edex.tools.decoder.LatLonLocTbl; +import gov.noaa.nws.ncep.edex.util.UtilN; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Calendar; +import java.util.Scanner; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import com.raytheon.edex.esb.Headers; +import com.raytheon.uf.common.time.DataTime; +import com.raytheon.uf.edex.decodertools.core.LatLonPoint; +import com.raytheon.uf.edex.decodertools.time.TimeTools; + +public class NonConvSigmetParser { + + /** + * Constructor + */ + public NonConvSigmetParser() { + } + + /** + * Parse the WMO line and store WMO header, OfficeID, issue time, + * designatorBBB,... + * + * @param wmoline + * The bulletin message + * + * @return a NonConvsigmetRecord + */ + public static NonConvSigmetRecord processWMO(String wmoline, Headers headers) { + + NonConvSigmetRecord currentRecord = null; + // Regular expression for WMO/ICAO, station ID, and issue date (and + // maybe designator BBB) + final String WMO_EXP = "([A-Z]{4}[0-9]{2}) ([A-Z]{4}) ([0-9]{6})( ([A-Z]{3}))?"; + + // Pattern used for extracting WMO header,issue office and issue date + // and designatorBBB + final Pattern wmoPattern = Pattern.compile(WMO_EXP); + Matcher theMatcher = wmoPattern.matcher(wmoline); + + if (theMatcher.find()) { + currentRecord = new NonConvSigmetRecord(); + + currentRecord.setWmoHeader(theMatcher.group(1)); + currentRecord.setIssueOffice(theMatcher.group(2)); + currentRecord.setDesignatorBBB(theMatcher.group(5)); + + // Decode the issue time. + Calendar issueTime = TimeTools.findDataTime(theMatcher.group(3), + headers); + currentRecord.setIssueTime(issueTime); + + DataTime dataTime = new DataTime(issueTime); + currentRecord.setDataTime(dataTime); + } + return currentRecord; + } + + /** + * Obtains start time and end time and forecast Region from input report + * + * @param theBullMsg + * The bulletin message which contains start time and end time. + * + * @param NonConvSigmetRecord + * + * @return a NonConvsigmetRecord + */ + + public static NonConvSigmetRecord processStartEndTime(String theBullMsg, + NonConvSigmetRecord nconvRecord, Headers headers) { + final String STARTTIME_EXP = "([A-Z]{4}) WS ([0-9]{6})( [A-Z]{3})?"; + final String ENDTIME_EXP = "VALID UNTIL ([0-9]{6})"; + + final Pattern starttimePattern = Pattern.compile(STARTTIME_EXP); + final Pattern endtimePattern = Pattern.compile(ENDTIME_EXP); + + Calendar stTime = null; + Calendar endTime = null; + /* + * Default equal to one hour if there is no valid time in report + */ + + NonConvSigmetRecord currentRecord = nconvRecord; + + // Calculate the startTime + Matcher theMatcher = starttimePattern.matcher(theBullMsg); + if (theMatcher.find()) { + currentRecord.setForecastRegion(theMatcher.group(1)); + stTime = TimeTools.findDataTime(theMatcher.group(2), headers); + } + if (stTime == null) { + currentRecord.setStartTime(currentRecord.getIssueTime()); + } else { + currentRecord.setStartTime(stTime); + } + + // Calculate the endTime + theMatcher = endtimePattern.matcher(theBullMsg); + + if (theMatcher.find()) { + endTime = TimeTools.findDataTime(theMatcher.group(1), headers); + } + if (endTime == null) { + endTime = currentRecord.getIssueTime(); + currentRecord.setEndTime(endTime); + } else { + currentRecord.setEndTime(endTime); + } + + return currentRecord; + } + + /** + * Obtains SigmetId from input report + * + * @param theBullMsg + * The bulletin message. + * + * @param NonConvSigmetRecord + * + * @return a NonConvsigmetRecord + */ + public static NonConvSigmetRecord processSigmetId(String theBullMsg, + NonConvSigmetRecord nconvRecord) { + final String SIGMETID_EXP = "SIGMET ([A-Z]{2,} [0-9]{1})"; + final Pattern sigPattern = Pattern.compile(SIGMETID_EXP); + NonConvSigmetRecord currentRecord = nconvRecord; + // Parse sigmetId + Matcher theMatcher = sigPattern.matcher(theBullMsg); + if (theMatcher.find()) { + currentRecord.setSigmetId(theMatcher.group(1)); + } + + return currentRecord; + } + + /** + * Parse the phenomena... Hazard Type,Hazard Intensity,Hazard Cause,Hazard + * Condition,FlightLevel1,FlightLevel2,SigmetId,AWIPSId,CorAmdTest,StateList + * + * @param theBullMsg + * from bulletin message + * + * @param a + * NonConvsigmetRecord + * + * @return a NonConvsigmetRecord + */ + public static NonConvSigmetRecord processPhenomena(String theBullMsg, + NonConvSigmetRecord nconvRecord) { + + final String FL_EXP1 = "BTN (FL)?([0-9]{3}) AND (FL)?([0-9]{3})"; + + final String FL_EXP2 = "BLW (FL)?([0-9]{3})"; + + final String HAZARDTYPE_EXP = " (TURB|ICGICIP|ICE) "; + + final String HAZARDINTS_EXP = "(OCNL [A-Z0-9]{2,})(BLW (FL)?([0-9]{3}).|BTN|TURB|ICGICIP|ICE|ICGIC|VA|DU)?"; + + final String HAZARDCAUS_EXP = "OCNL ([\\w| ])*(.|DUE TO)?([\\w| ]*). CONDS"; + + final String HAZARDCOND_EXP = "(CONDS [\\w| ]*)(\\x0d\\x0d\\x0a)?([\\w| ]*)([0-9]{4})Z"; + + final String STATELIST_EXP = "(([A-Z]{2})( [A-Z]{2})*)[\\r\\n]+"; + + final String AWIPSID_EXP = "([A-Z]{2}[0-9]{1}[A-Z]{1})( )*[\\r\\n]+"; + + final String CORREMARK_EXP = "(COR|AMD|TEST)"; + + final Pattern flPattern1 = Pattern.compile(FL_EXP1); + + final Pattern flPattern2 = Pattern.compile(FL_EXP2); + + final Pattern hzTypePattern = Pattern.compile(HAZARDTYPE_EXP); + + final Pattern hzIntsPattern = Pattern.compile(HAZARDINTS_EXP); + + final Pattern hzCausPattern = Pattern.compile(HAZARDCAUS_EXP); + + final Pattern hzCondPattern = Pattern.compile(HAZARDCOND_EXP); + + final Pattern stPattern = Pattern.compile(STATELIST_EXP); + + final Pattern awipsPattern = Pattern.compile(AWIPSID_EXP); + + final Pattern corRemarkPattern = Pattern.compile(CORREMARK_EXP); + + NonConvSigmetRecord currentRecord = nconvRecord; + + Matcher theMatcher = flPattern1.matcher(theBullMsg); + + if (theMatcher.find()) { + currentRecord + .setFlightLevel2(Integer.parseInt(theMatcher.group(4))); + currentRecord + .setFlightLevel1(Integer.parseInt(theMatcher.group(2))); + } else { + theMatcher = flPattern2.matcher(theBullMsg); + if (theMatcher.find()) { + currentRecord.setFlightLevel1(Integer.parseInt(theMatcher + .group(2))); + } + } + theMatcher = hzCausPattern.matcher(theBullMsg); + if (theMatcher.find()) { + currentRecord.setHazardCause(theMatcher.group(3)); + } + theMatcher = hzCondPattern.matcher(theBullMsg); + if (theMatcher.find()) { + currentRecord.setHazardCondition(theMatcher.group(0)); + } + theMatcher = hzIntsPattern.matcher(theBullMsg); + if (theMatcher.find()) { + currentRecord.setHazardIntensity(theMatcher.group(1)); + } + theMatcher = hzTypePattern.matcher(theBullMsg); + if (theMatcher.find()) { + if ("TURB".equals(theMatcher.group(1))) { + currentRecord.setHazardType("TURBULENCE"); + } else { + currentRecord.setHazardType(theMatcher.group(1)); + } + } + theMatcher = stPattern.matcher(theBullMsg); + if (theMatcher.find()) { + currentRecord.setStateList(theMatcher.group(1)); + } + theMatcher = awipsPattern.matcher(theBullMsg); + if (theMatcher.find()) { + currentRecord.setAwipsId(theMatcher.group(1)); + } + theMatcher = corRemarkPattern.matcher(theBullMsg); + if (theMatcher.find()) { + currentRecord.setCorrectionRemarks(theMatcher.group(0)); + } + + return currentRecord; + + } + + /** + * Parse the location lines... Add location table to the section table if + * any + * + * @param theBullMsg + * from bulletin message + * + * @param recordTable + * The record Table + * + * @return true if finds a location line + */ + public static Boolean processLocation(String theBullMsg, + NonConvSigmetRecord recordTable) { + + Boolean hasLocationLine = true; + String locationDelimiter = "-| TO "; + ArrayList terminationList = new ArrayList(); + terminationList.addAll(Arrays.asList(new String[] { "OCNL", "SEV" })); + Scanner sclocations = new Scanner(theBullMsg).useDelimiter("FROM"); + + /* + * throws away the first section which is not the "FROM" location + */ + LatLonPoint point; + String locationRecord = sclocations.next(); + + if (sclocations.hasNext()) { + locationRecord = sclocations.next(); + + Scanner scLocationLine = new Scanner(locationRecord) + .useDelimiter("[\\r\\n]+"); + String lines = " "; + String curLine = null; + ArrayList locationList = new ArrayList(); + locationList.clear(); + Boolean notBreak = true; + + while (scLocationLine.hasNext() && notBreak) { + curLine = scLocationLine.next();// Get next location line + Scanner scLocationToken = new Scanner(curLine); + if (scLocationToken.hasNext()) { + // Check the first token from each line + String firstToken = scLocationToken.next(); + if (terminationList.contains(firstToken)) { + notBreak = false;// terminate + break; + } + } + lines = lines.concat(" ").concat(curLine); + } + + // Clean up the leading space + lines = UtilN.removeLeadingWhiteSpaces(lines); + // Parse the location lines by a "-" or "TO" + Scanner scLocation = new Scanner(lines) + .useDelimiter(locationDelimiter); + locationList.clear(); + // Get all locations + while (scLocation.hasNext()) { + locationList.add(scLocation.next()); + } + + // set locations to data base + if (locationList.size() > 1) { + Integer idxLocation = 0; + for (String location : locationList) { + NonConvSigmetLocation currentLocation = new NonConvSigmetLocation(); + currentLocation.setLocationLine(lines); + currentLocation.setLocation(location); + point = LatLonLocTbl.getLatLonPoint(location, "vors"); + currentLocation.setIndex(idxLocation + 1); + idxLocation++; + currentLocation.setLatitude(point + .getLatitude(LatLonPoint.INDEGREES)); + currentLocation.setLongitude(point + .getLongitude(LatLonPoint.INDEGREES)); + recordTable.addNonConvSigmetLocation(currentLocation); + } + } else { + hasLocationLine = false; + } + + } else { + hasLocationLine = false; + } + + return hasLocationLine; + } + + /** + * process regular section of a non-convective sigmet report + * + * @return a NonConvsigmetRecord table + */ + public static NonConvSigmetRecord processRecord(String theBullMsg, + Headers headers) { + final String CANCELSIGMET_EXP = "(CANCEL SIGMET|TEST)"; + final Pattern cancelSigPattern = Pattern.compile(CANCELSIGMET_EXP); + Matcher theMatcher = cancelSigPattern.matcher(theBullMsg); + // Decode the WMO Header + NonConvSigmetRecord currentRecord = NonConvSigmetParser.processWMO( + theBullMsg, headers); + // Decode the sigmetId + currentRecord = NonConvSigmetParser.processSigmetId(theBullMsg, + currentRecord); + // Decode the Start Time,End Time,ForecastRegion + currentRecord = NonConvSigmetParser.processStartEndTime(theBullMsg, + currentRecord, headers); + // Decode the phenomena description + currentRecord = NonConvSigmetParser.processPhenomena(theBullMsg, + currentRecord); + // Replace the special characters + currentRecord + .setBullMessage(theBullMsg.replace('\r', ' ') + .replace('\003', ' ').replace('\000', ' ') + .replace('\001', ' ')); + + if (theMatcher.find()) { + if ("UNKNOWN".equals(currentRecord.getHazardType())) { + if ("TEST".equals(theMatcher.group(0))) { + currentRecord.setHazardType("TEST"); + } else { + currentRecord.setHazardType("CANCEL"); + } + } + } else { + // Decode the locations + NonConvSigmetParser.processLocation(theBullMsg, currentRecord); + } + return currentRecord; + } + } \ No newline at end of file diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.nonconvsigmet/src/gov/noaa/nws/ncep/edex/plugin/nonconvsigmet/util/package-info.java b/ncep/gov.noaa.nws.ncep.edex.plugin.nonconvsigmet/src/gov/noaa/nws/ncep/edex/plugin/nonconvsigmet/util/package-info.java index 09e93d1a71..a0947a6f6d 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.nonconvsigmet/src/gov/noaa/nws/ncep/edex/plugin/nonconvsigmet/util/package-info.java +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.nonconvsigmet/src/gov/noaa/nws/ncep/edex/plugin/nonconvsigmet/util/package-info.java @@ -1,4 +1,4 @@ -/** -* Contains tools for decoder plug-ins -*/ -package gov.noaa.nws.ncep.edex.plugin.nonconvsigmet.util; +/** +* Contains tools for decoder plug-ins +*/ +package gov.noaa.nws.ncep.edex.plugin.nonconvsigmet.util; diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.sgwh/gov.noaa.nws.ncep.edex.plugin.sgwh.ecl b/ncep/gov.noaa.nws.ncep.edex.plugin.sgwh/gov.noaa.nws.ncep.edex.plugin.sgwh.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.sgwhv/gov.noaa.nws.ncep.edex.plugin.sgwhv.ecl b/ncep/gov.noaa.nws.ncep.edex.plugin.sgwhv/gov.noaa.nws.ncep.edex.plugin.sgwhv.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.sgwhv/src/gov/noaa/nws/ncep/edex/plugin/sgwhv/decoder/SgwhvDecoder.java b/ncep/gov.noaa.nws.ncep.edex.plugin.sgwhv/src/gov/noaa/nws/ncep/edex/plugin/sgwhv/decoder/SgwhvDecoder.java index 882ebe8612..c0ff6edb1e 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.sgwhv/src/gov/noaa/nws/ncep/edex/plugin/sgwhv/decoder/SgwhvDecoder.java +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.sgwhv/src/gov/noaa/nws/ncep/edex/plugin/sgwhv/decoder/SgwhvDecoder.java @@ -1,100 +1,100 @@ -/** - * SgwhvDecoder - * - * This java class decodes SGWHV (Significant Wave Height from Various satellites) BUFR data - * from NAVOCEANO including Env and Jason 2. - * - **
- * SOFTWARE HISTORY
- * 
- * Date         Ticket#     Engineer    Description
- * -------		-------		--------	-----------
- * 08/23/11					Chin J Chen   Initial coding from BufrSgwhvDecoder
- * 
- * - * @author Chin J. Chen - * @version 1.0 - */ - -package gov.noaa.nws.ncep.edex.plugin.sgwhv.decoder; - -import gov.noaa.nws.ncep.common.dataplugin.sgwhv.SgwhvRecord; -import gov.noaa.nws.ncep.edex.plugin.sgwhv.util.SgwhvParser; - -import java.util.ArrayList; -import java.util.List; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - -import com.raytheon.edex.exception.DecoderException; -import com.raytheon.edex.plugin.AbstractDecoder; -import com.raytheon.edex.plugin.IBinaryDecoder; -import com.raytheon.uf.common.dataplugin.PluginDataObject; -import com.raytheon.uf.common.dataplugin.PluginException; - -public class SgwhvDecoder extends AbstractDecoder implements IBinaryDecoder { - private static String pluginName; - - private Log logger = LogFactory.getLog(getClass()); - - /** - * Empty constructor required by DecoderFactory. - * - * @throws DecoderException - */ - public SgwhvDecoder(String name) throws DecoderException { - pluginName = name; - } - - /** - * Decode the next SGWHV BUFR record. - * - * @return One record of decoded data. - * @throws DecoderException - * Thrown if no data is available. - */ - public PluginDataObject[] decode(byte[] bufrData) throws DecoderException { - SgwhvRecord sgwhvRec; - SgwhvSeparator sep = new SgwhvSeparator(); - - try { - if (bufrData != null) { - sep.setData(bufrData, null); - } else { - logger.info("No data to decode while creating SgwhvSeparator"); - } - } catch (Exception e) { - // need to catch any number of exceptions. Report them here - // instead of letting them kill the PluginDataProxy. - if (sep != null) { - logger.error("Error in " + sep.getWmoHeader().getWmoHeader()); - } - logger.error("Exception while creating SgwhvSeparator", e); - } - - /* - * Process BUFR SGWHV and add to the database. - */ - List pdoList = new ArrayList(); - int subsetNum = 0; - while (sep.hasNext()) { - subsetNum++; - sgwhvRec = SgwhvParser.processSgwhv(sep, subsetNum); - if (sgwhvRec != null) { - try { - sgwhvRec.setPluginName(pluginName); - sgwhvRec.constructDataURI(); - sgwhvRec.setReportType("SGWHV"); - } catch (PluginException e) { - logger.error("Error constructing dataURI", e); - } - } - if (!pdoList.contains(sgwhvRec)) { - pdoList.add(sgwhvRec); - } - } - logger.info("Processed " + subsetNum + " subsets"); - return pdoList.toArray(new PluginDataObject[pdoList.size()]); - } -} +/** + * SgwhvDecoder + * + * This java class decodes SGWHV (Significant Wave Height from Various satellites) BUFR data + * from NAVOCEANO including Env and Jason 2. + * + **
+ * SOFTWARE HISTORY
+ * 
+ * Date         Ticket#     Engineer    Description
+ * -------		-------		--------	-----------
+ * 08/23/11					Chin J Chen   Initial coding from BufrSgwhvDecoder
+ * 
+ * + * @author Chin J. Chen + * @version 1.0 + */ + +package gov.noaa.nws.ncep.edex.plugin.sgwhv.decoder; + +import gov.noaa.nws.ncep.common.dataplugin.sgwhv.SgwhvRecord; +import gov.noaa.nws.ncep.edex.plugin.sgwhv.util.SgwhvParser; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import com.raytheon.edex.exception.DecoderException; +import com.raytheon.edex.plugin.AbstractDecoder; +import com.raytheon.edex.plugin.IBinaryDecoder; +import com.raytheon.uf.common.dataplugin.PluginDataObject; +import com.raytheon.uf.common.dataplugin.PluginException; + +public class SgwhvDecoder extends AbstractDecoder implements IBinaryDecoder { + private static String pluginName; + + private Log logger = LogFactory.getLog(getClass()); + + /** + * Empty constructor required by DecoderFactory. + * + * @throws DecoderException + */ + public SgwhvDecoder(String name) throws DecoderException { + pluginName = name; + } + + /** + * Decode the next SGWHV BUFR record. + * + * @return One record of decoded data. + * @throws DecoderException + * Thrown if no data is available. + */ + public PluginDataObject[] decode(byte[] bufrData) throws DecoderException { + SgwhvRecord sgwhvRec; + SgwhvSeparator sep = new SgwhvSeparator(); + + try { + if (bufrData != null) { + sep.setData(bufrData, null); + } else { + logger.info("No data to decode while creating SgwhvSeparator"); + } + } catch (Exception e) { + // need to catch any number of exceptions. Report them here + // instead of letting them kill the PluginDataProxy. + if (sep != null) { + logger.error("Error in " + sep.getWmoHeader().getWmoHeader()); + } + logger.error("Exception while creating SgwhvSeparator", e); + } + + /* + * Process BUFR SGWHV and add to the database. + */ + List pdoList = new ArrayList(); + int subsetNum = 0; + while (sep.hasNext()) { + subsetNum++; + sgwhvRec = SgwhvParser.processSgwhv(sep, subsetNum); + if (sgwhvRec != null) { + try { + sgwhvRec.setPluginName(pluginName); + sgwhvRec.constructDataURI(); + sgwhvRec.setReportType("SGWHV"); + } catch (PluginException e) { + logger.error("Error constructing dataURI", e); + } + } + if (!pdoList.contains(sgwhvRec)) { + pdoList.add(sgwhvRec); + } + } + logger.info("Processed " + subsetNum + " subsets"); + return pdoList.toArray(new PluginDataObject[pdoList.size()]); + } +} diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.sgwhv/src/gov/noaa/nws/ncep/edex/plugin/sgwhv/decoder/SgwhvSeparator.java b/ncep/gov.noaa.nws.ncep.edex.plugin.sgwhv/src/gov/noaa/nws/ncep/edex/plugin/sgwhv/decoder/SgwhvSeparator.java index 8f35791d65..ed1a6aeeca 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.sgwhv/src/gov/noaa/nws/ncep/edex/plugin/sgwhv/decoder/SgwhvSeparator.java +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.sgwhv/src/gov/noaa/nws/ncep/edex/plugin/sgwhv/decoder/SgwhvSeparator.java @@ -1,165 +1,165 @@ -/** - * This class sets the BUFR Sgwhv section 4 data in an array for parsing. - * - *
- * 
- * SOFTWARE HISTORY
- * 
- * Date         Ticket#     Engineer    Description
- * -------		-------		--------	-----------
- * 08/23/11					Chin J Chen	Initial coding from BufrSgwhvSeparator
- * 
- * - * @author Chin J. Chen - * @version 1.0 - */ - -package gov.noaa.nws.ncep.edex.plugin.sgwhv.decoder; - -import gov.noaa.nws.ncep.edex.plugin.sgwhv.util.SgwhvDescriptorDelegate; - -import java.util.ArrayList; -import java.util.List; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - -import com.raytheon.edex.esb.Headers; -import com.raytheon.edex.plugin.AbstractRecordSeparator; -import com.raytheon.uf.edex.decodertools.bufr.BUFRDataDocument; -import com.raytheon.uf.edex.decodertools.bufr.BUFRDocument; -import com.raytheon.uf.edex.decodertools.bufr.BUFRFile; -import com.raytheon.uf.edex.decodertools.bufr.descriptors.IDescriptorFactorySelector; -import com.raytheon.uf.edex.decodertools.bufr.packets.BUFRSublistPacket; -import com.raytheon.uf.edex.decodertools.bufr.packets.IBUFRDataPacket; -import com.raytheon.uf.edex.wmo.message.WMOHeader; - -public class SgwhvSeparator extends AbstractRecordSeparator implements - IDescriptorFactorySelector { - - private Log logger = LogFactory.getLog(getClass()); - - private WMOHeader wmoHeader = null; - - // Raw message data - private byte[] messageData = null; - - // List of BUFR documents created from the physical message - private List records = null; - - // Pointer to the current BUFR document to be processed. - private int currentRecord = -1; - - /* - * - * (non-Javadoc) - * - * @see java.util.Iterator#next() - */ - public Object next() { - BUFRDataDocument data = null; - if (hasNext()) { - data = records.get(currentRecord); - currentRecord++; - } - return data; - } - - /** - * Is there another record available? - * - * @return Is there another record available? - */ - @Override - public boolean hasNext() { - boolean hasMore = (records != null); - hasMore = hasMore && (records.size() > 0); - hasMore = hasMore && (currentRecord < records.size()); - return hasMore; - } - - /** - * Set the raw BUFR data and invoke the internal message separation process. - * - * @param bufrData - * The Sgwhv BUFR data. - */ - @Override - public void setData(byte[] bufrData, Headers headers) { - currentRecord = -1; - try { - if (bufrData != null) { - wmoHeader = new WMOHeader(bufrData); - int start = 0; - int len = bufrData.length - start; - messageData = new byte[len]; - System.arraycopy(bufrData, start, messageData, 0, len); - decodeBUFRData(); - } - } finally { - if ((records != null) && (records.size() > 0)) { - currentRecord = 0; - } - } - } - - /** - * Get the WMO header associated with the message data. - * - * @return The WMO header. - */ - public WMOHeader getWmoHeader() { - return wmoHeader; - } - - /** - * Decode the entire physical file that was used to create this separator. - */ - @SuppressWarnings("unchecked") - private void decodeBUFRData() { - BUFRFile bfile = new BUFRFile(messageData, - new SgwhvDescriptorDelegate(this)); - records = new ArrayList(); - int bulletinNumber = 1; - - /* - * Create an arrayList which stores all the binary records of the - * Sgwhv data. - * - * bulletin: a block of SgwhvSgwhv data, including Sections 0 to 5, - * which starts with WMO header and an indicator key word "BUFR". A BUFR - * file may contain multiple bulletins. sgwhvData: Section 4 - * SGWHV data (BUFRDataDocument) in one bulletin which may contain - * multiple Bufrs records. record: one SGWHV record which contains - * multiple parameters, e.g., TMPK, RELH, etc. - */ - for (BUFRDocument bulletin : bfile) { - logger.debug("Executing bulletin " + bulletinNumber); - BUFRDataDocument bufrsgwhvData = bulletin.execute(); - List idps = bufrsgwhvData.getList(); - logger.debug("Number of records = " + idps.size() + " in bulletin " - + bulletinNumber); - bulletinNumber++; - for (IBUFRDataPacket record : idps) { - if (record != null) { - if (record instanceof BUFRSublistPacket) { - List idps2 = (List) record - .getValue(); - BUFRDataDocument dd = new BUFRDataDocument(idps2); - records.add(dd); - } - } - } - } - } - - /** - * Get the selector value associated with this separator. - * - * @return The selector associated with this separator. - */ - @Override - public String getSelector() { - return null; - } +/** + * This class sets the BUFR Sgwhv section 4 data in an array for parsing. + * + *
+ * 
+ * SOFTWARE HISTORY
+ * 
+ * Date         Ticket#     Engineer    Description
+ * -------		-------		--------	-----------
+ * 08/23/11					Chin J Chen	Initial coding from BufrSgwhvSeparator
+ * 
+ * + * @author Chin J. Chen + * @version 1.0 + */ + +package gov.noaa.nws.ncep.edex.plugin.sgwhv.decoder; + +import gov.noaa.nws.ncep.edex.plugin.sgwhv.util.SgwhvDescriptorDelegate; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import com.raytheon.edex.esb.Headers; +import com.raytheon.edex.plugin.AbstractRecordSeparator; +import com.raytheon.uf.edex.decodertools.bufr.BUFRDataDocument; +import com.raytheon.uf.edex.decodertools.bufr.BUFRDocument; +import com.raytheon.uf.edex.decodertools.bufr.BUFRFile; +import com.raytheon.uf.edex.decodertools.bufr.descriptors.IDescriptorFactorySelector; +import com.raytheon.uf.edex.decodertools.bufr.packets.BUFRSublistPacket; +import com.raytheon.uf.edex.decodertools.bufr.packets.IBUFRDataPacket; +import com.raytheon.uf.edex.wmo.message.WMOHeader; + +public class SgwhvSeparator extends AbstractRecordSeparator implements + IDescriptorFactorySelector { + + private Log logger = LogFactory.getLog(getClass()); + + private WMOHeader wmoHeader = null; + + // Raw message data + private byte[] messageData = null; + + // List of BUFR documents created from the physical message + private List records = null; + + // Pointer to the current BUFR document to be processed. + private int currentRecord = -1; + + /* + * + * (non-Javadoc) + * + * @see java.util.Iterator#next() + */ + public Object next() { + BUFRDataDocument data = null; + if (hasNext()) { + data = records.get(currentRecord); + currentRecord++; + } + return data; + } + + /** + * Is there another record available? + * + * @return Is there another record available? + */ + @Override + public boolean hasNext() { + boolean hasMore = (records != null); + hasMore = hasMore && (records.size() > 0); + hasMore = hasMore && (currentRecord < records.size()); + return hasMore; + } + + /** + * Set the raw BUFR data and invoke the internal message separation process. + * + * @param bufrData + * The Sgwhv BUFR data. + */ + @Override + public void setData(byte[] bufrData, Headers headers) { + currentRecord = -1; + try { + if (bufrData != null) { + wmoHeader = new WMOHeader(bufrData); + int start = 0; + int len = bufrData.length - start; + messageData = new byte[len]; + System.arraycopy(bufrData, start, messageData, 0, len); + decodeBUFRData(); + } + } finally { + if ((records != null) && (records.size() > 0)) { + currentRecord = 0; + } + } + } + + /** + * Get the WMO header associated with the message data. + * + * @return The WMO header. + */ + public WMOHeader getWmoHeader() { + return wmoHeader; + } + + /** + * Decode the entire physical file that was used to create this separator. + */ + @SuppressWarnings("unchecked") + private void decodeBUFRData() { + BUFRFile bfile = new BUFRFile(messageData, + new SgwhvDescriptorDelegate(this)); + records = new ArrayList(); + int bulletinNumber = 1; + + /* + * Create an arrayList which stores all the binary records of the + * Sgwhv data. + * + * bulletin: a block of SgwhvSgwhv data, including Sections 0 to 5, + * which starts with WMO header and an indicator key word "BUFR". A BUFR + * file may contain multiple bulletins. sgwhvData: Section 4 + * SGWHV data (BUFRDataDocument) in one bulletin which may contain + * multiple Bufrs records. record: one SGWHV record which contains + * multiple parameters, e.g., TMPK, RELH, etc. + */ + for (BUFRDocument bulletin : bfile) { + logger.debug("Executing bulletin " + bulletinNumber); + BUFRDataDocument bufrsgwhvData = bulletin.execute(); + List idps = bufrsgwhvData.getList(); + logger.debug("Number of records = " + idps.size() + " in bulletin " + + bulletinNumber); + bulletinNumber++; + for (IBUFRDataPacket record : idps) { + if (record != null) { + if (record instanceof BUFRSublistPacket) { + List idps2 = (List) record + .getValue(); + BUFRDataDocument dd = new BUFRDataDocument(idps2); + records.add(dd); + } + } + } + } + } + + /** + * Get the selector value associated with this separator. + * + * @return The selector associated with this separator. + */ + @Override + public String getSelector() { + return null; + } } \ No newline at end of file diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.sgwhv/src/gov/noaa/nws/ncep/edex/plugin/sgwhv/util/SgwhvDescriptorDelegate.java b/ncep/gov.noaa.nws.ncep.edex.plugin.sgwhv/src/gov/noaa/nws/ncep/edex/plugin/sgwhv/util/SgwhvDescriptorDelegate.java index a5f0e0c911..fd3dce36f6 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.sgwhv/src/gov/noaa/nws/ncep/edex/plugin/sgwhv/util/SgwhvDescriptorDelegate.java +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.sgwhv/src/gov/noaa/nws/ncep/edex/plugin/sgwhv/util/SgwhvDescriptorDelegate.java @@ -1,42 +1,42 @@ -/** - * - * SgwhvDescriptorDelegate - * - *
- * 
- * SOFTWARE HISTORY
- * 
- * Date         Ticket#     Engineer    Description
- * -------		-------		--------	-----------
- * 08/23/11					Chin J Chen	Initial coding from BufrSgwhvDescriptorDelegate
- * 
- * - * @author Chin J. Chen - * @version 1.0 - */ -package gov.noaa.nws.ncep.edex.plugin.sgwhv.util; - -import com.raytheon.uf.edex.decodertools.bufr.descriptors.DescriptorFactory; -import com.raytheon.uf.edex.decodertools.bufr.descriptors.IDescriptorFactoryDelegate; -import com.raytheon.uf.edex.decodertools.bufr.descriptors.IDescriptorFactorySelector; - -public class SgwhvDescriptorDelegate implements IDescriptorFactoryDelegate { - - private DescriptorFactory factory = new DescriptorFactory(); - IDescriptorFactorySelector factorySelector = null; - - public SgwhvDescriptorDelegate(IDescriptorFactorySelector selector) { - factorySelector = selector; - } - - @Override - public DescriptorFactory getInstance() { - return factory; - } - - @Override - public void setDescriptorFactorySelector(IDescriptorFactorySelector selector) { - factorySelector = selector; - } - -} +/** + * + * SgwhvDescriptorDelegate + * + *
+ * 
+ * SOFTWARE HISTORY
+ * 
+ * Date         Ticket#     Engineer    Description
+ * -------		-------		--------	-----------
+ * 08/23/11					Chin J Chen	Initial coding from BufrSgwhvDescriptorDelegate
+ * 
+ * + * @author Chin J. Chen + * @version 1.0 + */ +package gov.noaa.nws.ncep.edex.plugin.sgwhv.util; + +import com.raytheon.uf.edex.decodertools.bufr.descriptors.DescriptorFactory; +import com.raytheon.uf.edex.decodertools.bufr.descriptors.IDescriptorFactoryDelegate; +import com.raytheon.uf.edex.decodertools.bufr.descriptors.IDescriptorFactorySelector; + +public class SgwhvDescriptorDelegate implements IDescriptorFactoryDelegate { + + private DescriptorFactory factory = new DescriptorFactory(); + IDescriptorFactorySelector factorySelector = null; + + public SgwhvDescriptorDelegate(IDescriptorFactorySelector selector) { + factorySelector = selector; + } + + @Override + public DescriptorFactory getInstance() { + return factory; + } + + @Override + public void setDescriptorFactorySelector(IDescriptorFactorySelector selector) { + factorySelector = selector; + } + +} diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ssha/gov.noaa.nws.ncep.edex.plugin.ssha.ecl b/ncep/gov.noaa.nws.ncep.edex.plugin.ssha/gov.noaa.nws.ncep.edex.plugin.ssha.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ssha/src/gov/noaa/nws/ncep/edex/plugin/ssha/decoder/SshaDecoder.java b/ncep/gov.noaa.nws.ncep.edex.plugin.ssha/src/gov/noaa/nws/ncep/edex/plugin/ssha/decoder/SshaDecoder.java index 818469c7d5..cd1fc904d2 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ssha/src/gov/noaa/nws/ncep/edex/plugin/ssha/decoder/SshaDecoder.java +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ssha/src/gov/noaa/nws/ncep/edex/plugin/ssha/decoder/SshaDecoder.java @@ -1,99 +1,99 @@ -/** - * BufrSshaDecoder - * - * This java class decodes SSHA (Sea Surface Height Anomaly) BUFR data. - * - **
- * SOFTWARE HISTORY
- * 
- * Date         Ticket#     Engineer    Description
- * -------		-------		--------	-----------
- * 09/11					Chin J Chen   Initial coding from BufrSshaDecoder
- * 
- * - * @author Chin J. Chen - * @version 1.0 - */ - -package gov.noaa.nws.ncep.edex.plugin.ssha.decoder; - -import gov.noaa.nws.ncep.common.dataplugin.ssha.SshaRecord; -import gov.noaa.nws.ncep.edex.plugin.ssha.util.SshaParser; - -import java.util.ArrayList; -import java.util.List; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - -import com.raytheon.edex.exception.DecoderException; -import com.raytheon.edex.plugin.AbstractDecoder; -import com.raytheon.edex.plugin.IBinaryDecoder; -import com.raytheon.uf.common.dataplugin.PluginDataObject; -import com.raytheon.uf.common.dataplugin.PluginException; - -public class SshaDecoder extends AbstractDecoder implements IBinaryDecoder { - private static String pluginName; - - private Log logger = LogFactory.getLog(getClass()); - - /** - * Empty constructor required by DecoderFactory. - * - * @throws DecoderException - */ - public SshaDecoder(String name) throws DecoderException { - pluginName = name; - } - - /** - * Decode the next SSHA BUFR record. - * - * @return One record of decoded data. - * @throws DecoderException - * Thrown if no data is available. - */ - public PluginDataObject[] decode(byte[] bufrData) throws DecoderException { - SshaRecord sshaRec; - SshaSeparator sep = new SshaSeparator(); - - try { - if (bufrData != null) { - sep.setData(bufrData, null); - } else { - logger.info("No data to decode while creating SshaSeparator"); - } - } catch (Exception e) { - // need to catch any number of exceptions. Report them here - // instead of letting them kill the PluginDataProxy. - if (sep != null) { - logger.error("Error in " + sep); - } - logger.error("Exception while creating SshaSeparator", e); - } - - /* - * Process BufrSsha raw data and add to the database. - */ - List pdoList = new ArrayList(); - int subsetNum = 0; - while (sep.hasNext()) { - subsetNum++; - sshaRec = SshaParser.processSsha(sep, subsetNum); - if (sshaRec != null) { - try { - sshaRec.setPluginName(pluginName); - sshaRec.constructDataURI(); - sshaRec.setReportType("BUFRSSHA"); - } catch (PluginException e) { - logger.error("Error constructing dataURI", e); - } - } - if (!pdoList.contains(sshaRec)) { - pdoList.add(sshaRec); - } - } - logger.info("Processed " + subsetNum + " subsets"); - return pdoList.toArray(new PluginDataObject[pdoList.size()]); - } -} +/** + * BufrSshaDecoder + * + * This java class decodes SSHA (Sea Surface Height Anomaly) BUFR data. + * + **
+ * SOFTWARE HISTORY
+ * 
+ * Date         Ticket#     Engineer    Description
+ * -------		-------		--------	-----------
+ * 09/11					Chin J Chen   Initial coding from BufrSshaDecoder
+ * 
+ * + * @author Chin J. Chen + * @version 1.0 + */ + +package gov.noaa.nws.ncep.edex.plugin.ssha.decoder; + +import gov.noaa.nws.ncep.common.dataplugin.ssha.SshaRecord; +import gov.noaa.nws.ncep.edex.plugin.ssha.util.SshaParser; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import com.raytheon.edex.exception.DecoderException; +import com.raytheon.edex.plugin.AbstractDecoder; +import com.raytheon.edex.plugin.IBinaryDecoder; +import com.raytheon.uf.common.dataplugin.PluginDataObject; +import com.raytheon.uf.common.dataplugin.PluginException; + +public class SshaDecoder extends AbstractDecoder implements IBinaryDecoder { + private static String pluginName; + + private Log logger = LogFactory.getLog(getClass()); + + /** + * Empty constructor required by DecoderFactory. + * + * @throws DecoderException + */ + public SshaDecoder(String name) throws DecoderException { + pluginName = name; + } + + /** + * Decode the next SSHA BUFR record. + * + * @return One record of decoded data. + * @throws DecoderException + * Thrown if no data is available. + */ + public PluginDataObject[] decode(byte[] bufrData) throws DecoderException { + SshaRecord sshaRec; + SshaSeparator sep = new SshaSeparator(); + + try { + if (bufrData != null) { + sep.setData(bufrData, null); + } else { + logger.info("No data to decode while creating SshaSeparator"); + } + } catch (Exception e) { + // need to catch any number of exceptions. Report them here + // instead of letting them kill the PluginDataProxy. + if (sep != null) { + logger.error("Error in " + sep); + } + logger.error("Exception while creating SshaSeparator", e); + } + + /* + * Process BufrSsha raw data and add to the database. + */ + List pdoList = new ArrayList(); + int subsetNum = 0; + while (sep.hasNext()) { + subsetNum++; + sshaRec = SshaParser.processSsha(sep, subsetNum); + if (sshaRec != null) { + try { + sshaRec.setPluginName(pluginName); + sshaRec.constructDataURI(); + sshaRec.setReportType("BUFRSSHA"); + } catch (PluginException e) { + logger.error("Error constructing dataURI", e); + } + } + if (!pdoList.contains(sshaRec)) { + pdoList.add(sshaRec); + } + } + logger.info("Processed " + subsetNum + " subsets"); + return pdoList.toArray(new PluginDataObject[pdoList.size()]); + } +} diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ssha/src/gov/noaa/nws/ncep/edex/plugin/ssha/decoder/SshaSeparator.java b/ncep/gov.noaa.nws.ncep.edex.plugin.ssha/src/gov/noaa/nws/ncep/edex/plugin/ssha/decoder/SshaSeparator.java index 0a35f55f2f..8599496a0d 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ssha/src/gov/noaa/nws/ncep/edex/plugin/ssha/decoder/SshaSeparator.java +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ssha/src/gov/noaa/nws/ncep/edex/plugin/ssha/decoder/SshaSeparator.java @@ -1,154 +1,154 @@ -/** - * This class sets the BUFR Ssha section 4 data in an array for parsing. - * - *
- * 
- * SOFTWARE HISTORY
- * 
- * Date         Ticket#     Engineer    Description
- * -------		-------		--------	-----------
- * 09/11					Chin J Chen	Initial coding from BufrSshaSeparator
- * 
- * - * @author Chin J. Chen - * @version 1.0 - */ - -package gov.noaa.nws.ncep.edex.plugin.ssha.decoder; - -import gov.noaa.nws.ncep.edex.plugin.ssha.util.SshaDescriptorDelegate; - -import java.util.ArrayList; -import java.util.List; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - -import com.raytheon.edex.esb.Headers; -import com.raytheon.edex.plugin.AbstractRecordSeparator; -import com.raytheon.uf.edex.decodertools.bufr.BUFRDataDocument; -import com.raytheon.uf.edex.decodertools.bufr.BUFRDocument; -import com.raytheon.uf.edex.decodertools.bufr.BUFRFile; -import com.raytheon.uf.edex.decodertools.bufr.descriptors.IDescriptorFactorySelector; -import com.raytheon.uf.edex.decodertools.bufr.packets.BUFRSublistPacket; -import com.raytheon.uf.edex.decodertools.bufr.packets.IBUFRDataPacket; - -public class SshaSeparator extends AbstractRecordSeparator implements - IDescriptorFactorySelector { - - private Log logger = LogFactory.getLog(getClass()); - - // Raw message data - private byte[] messageData = null; - - // List of BUFR documents created from the physical message - private List records = null; - - // Pointer to the current BUFR document to be processed. - private int currentRecord = -1; - - /* - * - * (non-Javadoc) - * - * @see java.util.Iterator#next() - */ - public Object next() { - BUFRDataDocument data = null; - if (hasNext()) { - data = records.get(currentRecord); - currentRecord++; - } - return data; - } - - /** - * Is there another record available? - * - * @return Is there another record available? - */ - @Override - public boolean hasNext() { - boolean hasMore = (records != null); - hasMore = hasMore && (records.size() > 0); - hasMore = hasMore && (currentRecord < records.size()); - return hasMore; - } - - /** - * Set the raw BUFR data and invoke the internal message separation process. - * - * @param bufrData - * The BufrSsha BUFR data. - */ - @Override - public void setData(byte[] bufrData, Headers headers) { - currentRecord = -1; - try { - if (bufrData != null) { - ; - int start = 0; - int len = bufrData.length - start; - messageData = new byte[len]; - System.arraycopy(bufrData, start, messageData, 0, len); - decodeBUFRData(); - } - } finally { - if ((records != null) && (records.size() > 0)) { - currentRecord = 0; - } - } - } - - /** - * Decode the entire physical file that was used to create this separator. - */ - @SuppressWarnings("unchecked") - private void decodeBUFRData() { - BUFRFile bfile = new BUFRFile(messageData, - new SshaDescriptorDelegate(this)); - records = new ArrayList(); - int bulletinNumber = 1; - - /* - * Create an arrayList which stores all the binary records of the - * BufrSsha data. - * - * bulletin: a block of BufrSsha data, including Sections 0 to 5, which - * starts with WMO header and an indicator key word "BUFR". A BUFR file - * may contain multiple bulletins. bufrsshaData: Section 4 BufrSsha data - * (BUFRDataDocument) in one bulletin which may contain multiple Bufr - * records. record: one BufrSsha record which contains multiple - * parameters, e.g., MSSH, TMBRST, SSHA. etc. - */ - for (BUFRDocument bulletin : bfile) { - logger.debug("Executing bulletin " + bulletinNumber); - BUFRDataDocument bufrsshaData = bulletin.execute(); - List idps = bufrsshaData.getList(); - logger.debug("Number of records = " + idps.size() + " in bulletin " - + bulletinNumber); - bulletinNumber++; - for (IBUFRDataPacket record : idps) { - if (record != null) { - if (record instanceof BUFRSublistPacket) { - List idps2 = (List) record - .getValue(); - BUFRDataDocument dd = new BUFRDataDocument(idps2); - records.add(dd); - } - } - } - } - } - - /** - * Get the selector value associated with this separator. - * - * @return The selector associated with this separator. - */ - @Override - public String getSelector() { - String retValue = "SSHA"; - return retValue; - } +/** + * This class sets the BUFR Ssha section 4 data in an array for parsing. + * + *
+ * 
+ * SOFTWARE HISTORY
+ * 
+ * Date         Ticket#     Engineer    Description
+ * -------		-------		--------	-----------
+ * 09/11					Chin J Chen	Initial coding from BufrSshaSeparator
+ * 
+ * + * @author Chin J. Chen + * @version 1.0 + */ + +package gov.noaa.nws.ncep.edex.plugin.ssha.decoder; + +import gov.noaa.nws.ncep.edex.plugin.ssha.util.SshaDescriptorDelegate; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import com.raytheon.edex.esb.Headers; +import com.raytheon.edex.plugin.AbstractRecordSeparator; +import com.raytheon.uf.edex.decodertools.bufr.BUFRDataDocument; +import com.raytheon.uf.edex.decodertools.bufr.BUFRDocument; +import com.raytheon.uf.edex.decodertools.bufr.BUFRFile; +import com.raytheon.uf.edex.decodertools.bufr.descriptors.IDescriptorFactorySelector; +import com.raytheon.uf.edex.decodertools.bufr.packets.BUFRSublistPacket; +import com.raytheon.uf.edex.decodertools.bufr.packets.IBUFRDataPacket; + +public class SshaSeparator extends AbstractRecordSeparator implements + IDescriptorFactorySelector { + + private Log logger = LogFactory.getLog(getClass()); + + // Raw message data + private byte[] messageData = null; + + // List of BUFR documents created from the physical message + private List records = null; + + // Pointer to the current BUFR document to be processed. + private int currentRecord = -1; + + /* + * + * (non-Javadoc) + * + * @see java.util.Iterator#next() + */ + public Object next() { + BUFRDataDocument data = null; + if (hasNext()) { + data = records.get(currentRecord); + currentRecord++; + } + return data; + } + + /** + * Is there another record available? + * + * @return Is there another record available? + */ + @Override + public boolean hasNext() { + boolean hasMore = (records != null); + hasMore = hasMore && (records.size() > 0); + hasMore = hasMore && (currentRecord < records.size()); + return hasMore; + } + + /** + * Set the raw BUFR data and invoke the internal message separation process. + * + * @param bufrData + * The BufrSsha BUFR data. + */ + @Override + public void setData(byte[] bufrData, Headers headers) { + currentRecord = -1; + try { + if (bufrData != null) { + ; + int start = 0; + int len = bufrData.length - start; + messageData = new byte[len]; + System.arraycopy(bufrData, start, messageData, 0, len); + decodeBUFRData(); + } + } finally { + if ((records != null) && (records.size() > 0)) { + currentRecord = 0; + } + } + } + + /** + * Decode the entire physical file that was used to create this separator. + */ + @SuppressWarnings("unchecked") + private void decodeBUFRData() { + BUFRFile bfile = new BUFRFile(messageData, + new SshaDescriptorDelegate(this)); + records = new ArrayList(); + int bulletinNumber = 1; + + /* + * Create an arrayList which stores all the binary records of the + * BufrSsha data. + * + * bulletin: a block of BufrSsha data, including Sections 0 to 5, which + * starts with WMO header and an indicator key word "BUFR". A BUFR file + * may contain multiple bulletins. bufrsshaData: Section 4 BufrSsha data + * (BUFRDataDocument) in one bulletin which may contain multiple Bufr + * records. record: one BufrSsha record which contains multiple + * parameters, e.g., MSSH, TMBRST, SSHA. etc. + */ + for (BUFRDocument bulletin : bfile) { + logger.debug("Executing bulletin " + bulletinNumber); + BUFRDataDocument bufrsshaData = bulletin.execute(); + List idps = bufrsshaData.getList(); + logger.debug("Number of records = " + idps.size() + " in bulletin " + + bulletinNumber); + bulletinNumber++; + for (IBUFRDataPacket record : idps) { + if (record != null) { + if (record instanceof BUFRSublistPacket) { + List idps2 = (List) record + .getValue(); + BUFRDataDocument dd = new BUFRDataDocument(idps2); + records.add(dd); + } + } + } + } + } + + /** + * Get the selector value associated with this separator. + * + * @return The selector associated with this separator. + */ + @Override + public String getSelector() { + String retValue = "SSHA"; + return retValue; + } } \ No newline at end of file diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ssha/src/gov/noaa/nws/ncep/edex/plugin/ssha/decoder/package-info.java b/ncep/gov.noaa.nws.ncep.edex.plugin.ssha/src/gov/noaa/nws/ncep/edex/plugin/ssha/decoder/package-info.java index 924278a562..84ced98d3c 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ssha/src/gov/noaa/nws/ncep/edex/plugin/ssha/decoder/package-info.java +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ssha/src/gov/noaa/nws/ncep/edex/plugin/ssha/decoder/package-info.java @@ -1,7 +1,7 @@ -/** - * SSHA implementation of the plugin pattern. - * - * Package includes classes to decode the SSHA message and persist the data. - * - */ +/** + * SSHA implementation of the plugin pattern. + * + * Package includes classes to decode the SSHA message and persist the data. + * + */ package gov.noaa.nws.ncep.edex.plugin.ssha.decoder; \ No newline at end of file diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ssha/src/gov/noaa/nws/ncep/edex/plugin/ssha/util/SshaDescriptorDelegate.java b/ncep/gov.noaa.nws.ncep.edex.plugin.ssha/src/gov/noaa/nws/ncep/edex/plugin/ssha/util/SshaDescriptorDelegate.java index f9d4cd8c78..3a15a543c7 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ssha/src/gov/noaa/nws/ncep/edex/plugin/ssha/util/SshaDescriptorDelegate.java +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ssha/src/gov/noaa/nws/ncep/edex/plugin/ssha/util/SshaDescriptorDelegate.java @@ -1,87 +1,87 @@ -/** - * - * SshaDescriptorDelegate - * - *
- * 
- * SOFTWARE HISTORY
- * 
- * Date         Ticket#     Engineer    Description
- * -------		-------		--------	-----------
- * 08/23/11					Chin J Chen	Initial coding from BufrSshaDescriptorDelegate
- * 
- * - * @author Chin J. Chen - * @version 1.0 - */ -package gov.noaa.nws.ncep.edex.plugin.ssha.util; - -import java.util.HashMap; -import java.util.Map; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - -import com.raytheon.uf.edex.decodertools.bufr.descriptors.DescriptorFactory; -import com.raytheon.uf.edex.decodertools.bufr.descriptors.IDescriptorFactoryDelegate; -import com.raytheon.uf.edex.decodertools.bufr.descriptors.IDescriptorFactorySelector; - -public class SshaDescriptorDelegate implements IDescriptorFactoryDelegate { - - private static Log logger = LogFactory.getLog(SshaDescriptorDelegate.class); - IDescriptorFactorySelector factorySelector = null; - - private static Map factories; - static { - factories = new HashMap(); - factories.put("SSHA", createFactory("SSHABufrTable_B", "SSHABufrTable_D")); - } - - public SshaDescriptorDelegate(IDescriptorFactorySelector selector) { - factorySelector = selector; - } - - @Override - public DescriptorFactory getInstance() { - DescriptorFactory factory = null; // defaultFactory; - - String selector = null; - if (factorySelector != null) { - selector = factorySelector.getSelector(); - } - logger.debug ("Getting DescriptorFactory for type " + selector); - - factory = factories.get(selector); - if (factory == null) { - factory = new DescriptorFactory(); - } - return factory; - } - - @Override - public void setDescriptorFactorySelector(IDescriptorFactorySelector selector) { - factorySelector = selector; - } - - /** - * - * @param resourceClassReference - * Class reference table resources will be loaded from. - * @param tableB - * Name of BUFR table B. - * @param tableD - * Name of BUFR table D. - * @return - */ - private static final DescriptorFactory createFactory(String tableB, - String tableD) { - DescriptorFactory factory = null; - logger.debug ("Creating table " + tableB + " " + tableD); - factory = new DescriptorFactory(SshaDescriptorDelegate.class, tableB, - tableD); - logger.debug ("Table created = [" + (factory != null) + "]"); - return factory; - } - - -} +/** + * + * SshaDescriptorDelegate + * + *
+ * 
+ * SOFTWARE HISTORY
+ * 
+ * Date         Ticket#     Engineer    Description
+ * -------		-------		--------	-----------
+ * 08/23/11					Chin J Chen	Initial coding from BufrSshaDescriptorDelegate
+ * 
+ * + * @author Chin J. Chen + * @version 1.0 + */ +package gov.noaa.nws.ncep.edex.plugin.ssha.util; + +import java.util.HashMap; +import java.util.Map; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import com.raytheon.uf.edex.decodertools.bufr.descriptors.DescriptorFactory; +import com.raytheon.uf.edex.decodertools.bufr.descriptors.IDescriptorFactoryDelegate; +import com.raytheon.uf.edex.decodertools.bufr.descriptors.IDescriptorFactorySelector; + +public class SshaDescriptorDelegate implements IDescriptorFactoryDelegate { + + private static Log logger = LogFactory.getLog(SshaDescriptorDelegate.class); + IDescriptorFactorySelector factorySelector = null; + + private static Map factories; + static { + factories = new HashMap(); + factories.put("SSHA", createFactory("SSHABufrTable_B", "SSHABufrTable_D")); + } + + public SshaDescriptorDelegate(IDescriptorFactorySelector selector) { + factorySelector = selector; + } + + @Override + public DescriptorFactory getInstance() { + DescriptorFactory factory = null; // defaultFactory; + + String selector = null; + if (factorySelector != null) { + selector = factorySelector.getSelector(); + } + logger.debug ("Getting DescriptorFactory for type " + selector); + + factory = factories.get(selector); + if (factory == null) { + factory = new DescriptorFactory(); + } + return factory; + } + + @Override + public void setDescriptorFactorySelector(IDescriptorFactorySelector selector) { + factorySelector = selector; + } + + /** + * + * @param resourceClassReference + * Class reference table resources will be loaded from. + * @param tableB + * Name of BUFR table B. + * @param tableD + * Name of BUFR table D. + * @return + */ + private static final DescriptorFactory createFactory(String tableB, + String tableD) { + DescriptorFactory factory = null; + logger.debug ("Creating table " + tableB + " " + tableD); + factory = new DescriptorFactory(SshaDescriptorDelegate.class, tableB, + tableD); + logger.debug ("Table created = [" + (factory != null) + "]"); + return factory; + } + + +} diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.stormtrack/gov.noaa.nws.ncep.edex.plugin.stormtrack.ecl b/ncep/gov.noaa.nws.ncep.edex.plugin.stormtrack/gov.noaa.nws.ncep.edex.plugin.stormtrack.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.stormtrack/src/gov/noaa/nws/ncep/edex/plugin/stormtrack/decoder/package-info.java b/ncep/gov.noaa.nws.ncep.edex.plugin.stormtrack/src/gov/noaa/nws/ncep/edex/plugin/stormtrack/decoder/package-info.java index 6b5a489ea7..73994f1ba4 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.stormtrack/src/gov/noaa/nws/ncep/edex/plugin/stormtrack/decoder/package-info.java +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.stormtrack/src/gov/noaa/nws/ncep/edex/plugin/stormtrack/decoder/package-info.java @@ -1,7 +1,7 @@ -/** - * SGWH implementation of the plugin pattern. - * - * Package includes classes to decode the StormTrack message and persist the data. - * - */ +/** + * SGWH implementation of the plugin pattern. + * + * Package includes classes to decode the StormTrack message and persist the data. + * + */ package gov.noaa.nws.ncep.edex.plugin.stormtrack.decoder; \ No newline at end of file diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.tcm/gov.noaa.nws.ncep.edex.plugin.tcm.ecl b/ncep/gov.noaa.nws.ncep.edex.plugin.tcm/gov.noaa.nws.ncep.edex.plugin.tcm.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.wcp/gov.noaa.nws.ncep.edex.plugin.wcp.ecl b/ncep/gov.noaa.nws.ncep.edex.plugin.wcp/gov.noaa.nws.ncep.edex.plugin.wcp.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.wcp/src/gov/noaa/nws/ncep/edex/plugin/wcp/decoder/package-info.java b/ncep/gov.noaa.nws.ncep.edex.plugin.wcp/src/gov/noaa/nws/ncep/edex/plugin/wcp/decoder/package-info.java index f52fb89e82..f3fea73665 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.wcp/src/gov/noaa/nws/ncep/edex/plugin/wcp/decoder/package-info.java +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.wcp/src/gov/noaa/nws/ncep/edex/plugin/wcp/decoder/package-info.java @@ -1,7 +1,7 @@ -/** - * WCP implementation of the plugin pattern. - * - * Package includes classes to decode the WCP message and persist the data. - * - */ +/** + * WCP implementation of the plugin pattern. + * + * Package includes classes to decode the WCP message and persist the data. + * + */ package gov.noaa.nws.ncep.edex.plugin.wcp.decoder; \ No newline at end of file diff --git a/ncep/gov.noaa.nws.ncep.edex.purgeutil/gov.noaa.nws.ncep.edex.purgeutil.ecl b/ncep/gov.noaa.nws.ncep.edex.purgeutil/gov.noaa.nws.ncep.edex.purgeutil.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/ncep/gov.noaa.nws.ncep.edex.uengine/gov.noaa.nws.ncep.edex.uengine.ecl b/ncep/gov.noaa.nws.ncep.edex.uengine/gov.noaa.nws.ncep.edex.uengine.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/ncep/gov.noaa.nws.ncep.gempak.parameterConversionLibrary/gov.noaa.nws.ncep.gempak.parameterConversionLibrary.ecl b/ncep/gov.noaa.nws.ncep.gempak.parameterConversionLibrary/gov.noaa.nws.ncep.gempak.parameterConversionLibrary.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/ncep/gov.noaa.nws.ncep.gempak.parameters/gov.noaa.nws.ncep.gempak.parameters.ecl b/ncep/gov.noaa.nws.ncep.gempak.parameters/gov.noaa.nws.ncep.gempak.parameters.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/ncep/gov.noaa.nws.ncep.metParameters/gov.noaa.nws.ncep.metParameters.ecl b/ncep/gov.noaa.nws.ncep.metParameters/gov.noaa.nws.ncep.metParameters.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/ncep/gov.noaa.nws.ncep.ui.nctextui/gov.noaa.nws.ncep.ui.nctextui.ecl b/ncep/gov.noaa.nws.ncep.ui.nctextui/gov.noaa.nws.ncep.ui.nctextui.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/ncep/gov.noaa.nws.ncep.ui.nsharp.linux32/gov.noaa.nws.ncep.ui.nsharp.linux32.ecl b/ncep/gov.noaa.nws.ncep.ui.nsharp.linux32/gov.noaa.nws.ncep.ui.nsharp.linux32.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/ncep/gov.noaa.nws.ncep.ui.nsharp.linux64/gov.noaa.nws.ncep.ui.nsharp.linux64.ecl b/ncep/gov.noaa.nws.ncep.ui.nsharp.linux64/gov.noaa.nws.ncep.ui.nsharp.linux64.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/ncep/gov.noaa.nws.ncep.ui.nsharp.win32/gov.noaa.nws.ncep.ui.nsharp.win32.ecl b/ncep/gov.noaa.nws.ncep.ui.nsharp.win32/gov.noaa.nws.ncep.ui.nsharp.win32.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/ncep/gov.noaa.nws.ncep.ui.nsharp/BigNsharp/backup_nlist.txt b/ncep/gov.noaa.nws.ncep.ui.nsharp/BigNsharp/backup_nlist.txt index 909eabf147..b3d8a9d144 100755 --- a/ncep/gov.noaa.nws.ncep.ui.nsharp/BigNsharp/backup_nlist.txt +++ b/ncep/gov.noaa.nws.ncep.ui.nsharp/BigNsharp/backup_nlist.txt @@ -1,938 +1,938 @@ - DATE / RAOB REPORT MUMR MUCAPE 500TEMP 7-5LR 0-6SHR 0-9SHR 0-3SHR SHIP MODEL SRH -95052300.DDC 6.00 15.3 4181 -9.6 7.5 19.4 26.8 23.4 2.0 3.00 325 -91051100.MAF 6.00 14.9 4692 -10.8 8.8 13.2 18.1 14.2 2.0 2.70 -37 -97061700.OUN 5.50 18.8 5751 -9.5 7.4 23.6 45.9 14.5 4.1 3.50 116 -99012200.LZK 5.00 12.3 2240 -17.3 7.6 26.3 32.1 23.0 2.2 3.00 294 -96061200.DDC 5.00 13.7 2820 -8.3 7.6 20.3 15.8 12.9 1.1 2.50 142 -92072600.DDC 5.00 17.4 4794 -4.6 6.8 17.4 14.6 18.2 1.0 0.80 176 -91052900.HON 5.00 15.2 3668 -12.3 8.0 40.7 36.0 25.0 5.1 3.50 269 -90070800.BIS 5.00 16.6 3717 -9.8 7.7 29.8 42.2 12.5 3.1 2.40 202 -57070300.RAP 5.00 15.8 4359 -6.7 7.7 22.9 39.3 13.9 1.8 3.40 130 -99060100.DDC 4.75 15.9 4387 -11.3 8.0 27.7 38.0 15.3 4.0 3.50 209 -99072600.LBF 4.50 16.4 4375 -6.7 7.9 12.9 16.1 9.5 1.1 2.60 60 -99050400.OUN 4.50 15.6 5195 -14.9 8.4 21.3 22.0 16.5 4.9 4.70 343 -99030600.LZK 4.50 11.7 1922 -18.5 8.2 22.8 39.2 21.4 1.8 2.10 360 -98052200.SGF 4.50 17.1 4642 -9.9 7.8 22.4 23.1 13.8 3.1 2.30 232 -98040800.ILX 4.50 10.2 1354 -19.7 7.2 21.2 25.1 20.1 0.9 2.60 180 -96102100.OUN 4.50 12.7 2995 -12.9 7.5 20.3 28.4 15.6 1.7 3.00 71 -96081100.LBF 4.50 13.3 2360 -8.4 6.2 26.1 22.0 26.5 1.0 2.60 326 -96062700.TFX 4.50 13.9 3835 -10.9 8.3 37.1 44.3 21.8 4.1 1.60 297 -96051000.TOP 4.50 15.6 3884 -11.1 8.8 18.3 22.3 22.1 2.4 3.30 234 -96050500.IAD 4.50 12.1 1906 -15.2 7.2 25.0 25.5 15.9 1.4 1.90 36 -96030700.JAN 4.50 14.0 2362 -12.5 6.8 34.9 36.9 16.8 2.2 0.60 196 -95060900.MAF 4.50 17.8 5653 -8.1 8.1 18.7 33.5 12.8 2.8 2.90 83 -95060500.MAF 4.50 14.9 4358 -8.6 7.6 23.2 32.0 16.0 2.2 2.90 181 -95051900.BMX 4.50 16.5 3340 -9.9 6.6 20.6 25.5 16.9 1.7 -999.00 247 -95051700.DDC 4.50 15.6 4878 -10.8 8.5 26.6 40.7 8.9 4.2 2.60 43 -94060800.LBF 4.50 13.0 3400 -9.5 7.8 18.7 18.4 8.1 1.4 2.40 109 -94042600.SEP 4.50 16.3 4409 -11.5 7.4 26.7 26.2 21.2 3.7 3.30 138 -94040300.OUN 4.50 10.1 2075 -17.0 7.6 31.2 39.3 18.7 1.9 2.10 163 -93101800.SEP 4.50 15.7 3958 -10.6 7.0 31.7 30.5 23.2 3.3 2.20 441 -93101300.SEP 4.50 14.2 3151 -13.1 8.0 22.3 31.8 15.0 2.4 2.90 307 -93092200.TOP 4.50 16.8 3665 -8.1 6.5 33.9 37.9 21.3 1.6 -999.00 460 -93092200.OVN 4.50 15.4 3685 -11.1 8.1 23.0 33.2 23.5 3.7 -999.00 216 -93072400.BIS 4.50 15.3 3597 -9.8 5.8 21.0 33.2 14.9 1.5 2.30 263 -93062700.OVN 4.50 15.0 3720 -10.0 6.3 22.3 28.9 9.4 1.8 3.10 140 -93060800.OUN 4.50 17.0 4917 -9.1 7.1 30.6 26.7 9.7 3.8 2.60 195 -93050100.DDC 4.50 11.1 3206 -16.5 8.0 24.0 29.9 15.4 2.6 3.70 194 -92073000.TOP 4.50 16.6 4074 -10.0 7.5 22.5 22.1 11.8 2.6 2.40 164 -92073000.OVN 4.50 16.6 4366 -11.4 7.4 22.3 23.7 13.9 3.1 3.20 216 -92062900.SEP 4.50 17.4 3761 -9.6 7.8 21.8 15.6 13.7 2.4 2.80 248 -92062800.DDC 4.50 13.8 2750 -11.3 7.8 20.6 41.3 15.2 1.6 2.90 315 -92062800.AMA 4.50 16.0 3950 -10.3 7.9 22.8 26.5 16.9 2.7 3.20 149 -91081400.GTF 4.50 11.5 2524 -13.2 8.5 25.8 28.9 15.3 1.9 2.00 213 -91072100.HON 4.50 20.1 5826 -6.1 6.8 22.8 33.9 14.3 2.5 1.90 180 -91042912.BRO 4.50 19.5 4180 -9.8 7.7 23.1 24.2 13.7 3.2 -999.00 254 -91032800.FNT 4.50 11.3 1681 -17.3 7.6 47.0 45.4 26.8 2.7 2.90 431 -90051600.OUN 4.50 16.7 4398 -9.0 7.6 25.5 44.9 23.2 2.9 3.60 180 -89080400.INL 4.50 17.4 3953 -11.5 8.3 18.6 29.2 7.3 2.8 1.00 36 -89070300.SEP 4.50 18.5 5261 -7.6 8.4 22.6 5.0 12.9 3.2 2.90 222 -89062700.GSO 4.50 17.6 4349 -7.3 6.3 14.2 6.4 7.8 1.1 0.90 52 -89060700.SEP 4.50 15.6 3272 -7.9 7.0 24.8 47.4 9.0 1.6 2.40 130 -89060400.MAF 4.50 14.0 3901 -10.0 8.5 20.6 33.6 6.6 2.2 2.20 58 -03062300.OAX 4.50 18.7 6203 -9.3 8.6 13.6 22.9 12.3 2.9 4.20 237 -03040400.OUN 4.50 11.9 2640 -15.1 7.3 24.0 23.9 13.4 1.9 2.30 187 -02091900.OUN 4.50 15.7 4268 -6.1 6.7 20.8 23.4 17.8 1.3 3.00 308 -02062400.ABR 4.50 17.2 5093 -10.5 8.2 26.3 30.9 16.9 4.5 3.50 187 -02060500.RNK 4.50 17.9 5399 -9.7 6.9 5.0 7.3 8.7 0.7 3.20 54 -02051200.TOP 4.50 15.8 4489 -11.9 8.1 26.0 26.5 13.7 4.1 3.30 224 -02051100.MAF 4.50 14.5 4658 -9.3 8.4 23.1 40.3 14.8 2.8 2.20 132 -01072100.GGW 4.50 13.5 3114 -10.7 7.7 28.3 30.5 15.8 2.2 2.80 354 -01071800.ABR 4.50 17.5 5177 -9.9 8.4 19.5 28.2 9.6 3.3 3.90 136 -01062100.DDC 4.50 15.2 4428 -10.7 7.8 19.0 25.2 13.4 2.4 3.20 400 -01061400.DDC 4.50 15.7 5244 -8.9 8.0 28.1 28.2 19.8 3.7 2.50 384 -01052500.JAN 4.50 13.5 3446 -15.1 7.5 21.8 31.4 17.4 2.6 2.70 240 -01051800.AMA 4.50 13.9 4695 -10.5 8.6 13.2 22.8 16.1 1.8 2.10 86 -01050700.SHV 4.50 15.7 2774 -12.5 6.5 15.7 22.1 9.0 1.3 1.70 110 -01050700.LZK 4.50 14.7 3512 -12.9 5.9 18.7 26.3 7.3 1.7 3.40 77 -01041500.DDC 4.50 13.1 3892 -18.3 9.0 43.1 54.7 24.4 8.2 2.50 233 -01040400.SGF 4.50 12.8 3277 -15.1 8.3 22.4 28.9 17.2 2.7 3.10 310 -04081000.DNR 4.25 12.9 3415 -9.1 8.0 15.0 15.4 16.2 1.1 3.20 270 -04071318.ILX 4.25 22.1 6811 -10.9 7.9 18.7 21.9 15.5 5.5 2.60 131 -04071300.LBF 4.25 19.5 7183 -7.3 8.6 14.7 20.5 10.3 2.9 3.70 68 -04071200.GGW 4.25 11.0 2390 -13.7 8.6 22.3 32.0 17.1 1.6 1.90 99 -04062200.AMA 4.25 13.8 3828 -8.9 8.0 26.2 40.5 17.8 2.2 2.30 141 -04053000.OUN 4.25 16.8 4526 -7.5 7.8 24.4 40.4 15.8 2.5 -999.00 224 -04052200.AMA 4.25 13.7 4265 -8.7 7.9 21.5 23.9 13.6 2.0 2.10 176 -04040400.MAF 4.25 12.0 2746 -14.7 7.0 19.5 31.1 14.4 1.5 2.70 262 -03051000.MHX 4.25 17.1 4373 -10.5 7.3 22.7 23.2 14.1 3.0 2.10 146 -03050518.BNA 4.25 16.1 2705 -12.9 7.1 37.0 37.2 18.3 3.4 -999.00 239 -03050500.SGF 4.25 15.7 5169 -13.5 7.6 38.4 50.7 30.0 7.3 2.90 348 -03040600.FWD 4.25 12.4 2487 -14.3 7.3 31.5 51.8 17.1 2.3 2.90 341 -01070300.LBF 4.25 16.7 5584 -8.7 8.5 18.0 24.7 14.2 2.8 4.20 154 -98063000.TOP 4.00 21.8 6490 -5.3 7.2 24.4 32.6 18.1 3.0 1.70 230 -98050800.FFC 4.00 17.3 4120 -12.3 7.7 31.0 51.6 17.1 4.7 2.20 172 -97082200.LBF 4.00 15.7 3974 -9.7 7.4 26.4 37.5 17.4 2.7 3.30 321 -96052300.LBF 4.00 13.5 2801 -11.1 8.0 27.8 43.7 18.5 2.1 2.90 303 -95102700.SGF 4.00 12.5 1922 -13.8 6.9 21.9 29.4 25.7 1.1 1.60 266 -95072600.DDC 4.00 18.3 5696 -10.1 8.8 21.3 19.2 17.1 4.5 3.30 238 -95072500.FTD 4.00 15.4 2897 -10.0 9.2 19.1 19.8 12.8 1.8 -999.00 168 -95051600.JAN 4.00 17.9 4861 -10.9 7.8 14.9 18.5 8.6 2.5 2.50 -35 -95050600.FTD 4.00 15.1 2036 -11.1 7.1 21.2 37.5 20.8 1.2 0.60 304 -93072300.HON 4.00 15.7 3720 -8.1 6.0 19.1 22.5 15.4 1.2 1.50 130 -93071600.RAP 4.00 14.1 3230 -7.5 7.7 25.0 35.8 18.6 1.5 3.20 97 -91041300.SEP 4.00 16.9 5008 -10.6 6.8 21.8 27.4 12.2 3.0 3.40 137 -90090200.RAP 4.00 11.3 1733 -7.4 7.5 23.6 32.7 14.1 0.6 2.10 181 -90070100.DAY 4.00 16.6 3541 -9.4 7.1 19.9 24.5 8.6 1.8 1.80 154 -90060900.TOP 4.00 18.5 5571 -10.1 7.3 22.6 16.4 14.8 3.9 2.70 252 -90051900.AMA 4.00 11.5 2732 -9.3 7.7 26.1 30.4 18.5 1.3 0.90 301 -90051500.AMA 4.00 14.8 4543 -9.9 8.2 24.7 33.8 19.2 3.0 2.60 473 -89071800.LBF 4.00 15.4 3622 -9.4 8.1 38.9 37.6 22.9 3.7 2.90 361 -89062700.DDC 4.00 14.3 2840 -8.4 7.6 19.4 19.2 12.7 1.1 2.20 167 -89061100.AMA 4.00 15.8 3666 -8.7 7.6 11.0 19.2 11.1 1.0 -999.00 87 -04071318.DVN 4.00 20.8 6090 -11.1 8.4 25.9 22.3 22.5 6.9 2.80 191 -03050300.BMX 4.00 15.2 4593 -15.7 7.9 32.4 30.5 8.1 6.4 2.90 72 -02061300.DDC 4.00 19.5 6234 -6.9 7.6 19.8 32.7 17.2 2.9 3.70 126 -98062000.OUN 3.50 19.0 6048 -7.1 7.8 15.4 11.2 13.7 2.2 3.90 209 -98052500.OUN 3.50 18.0 5688 -10.7 8.1 21.9 28.7 9.9 4.4 4.20 172 -98052100.TOP 3.50 17.2 4700 -12.5 8.4 10.5 23.7 9.8 2.0 3.80 100 -97062100.LBF 3.50 17.3 6058 -9.3 8.8 23.1 25.1 13.9 4.5 3.70 129 -96062000.OAX 3.50 16.3 4081 -9.8 8.6 19.0 24.4 18.9 2.4 -999.00 271 -90061900.BIS 3.50 11.1 1968 -13.5 8.2 28.4 38.0 17.4 1.6 2.90 257 -90060900.IAD 3.50 17.2 3994 -10.9 7.1 23.7 20.0 18.3 2.9 0.80 203 -90040600.SEP 3.50 12.4 3764 -14.9 7.8 25.2 36.8 15.4 3.1 2.60 305 -90031400.OUN 3.50 14.6 3950 -16.1 7.2 20.2 49.4 12.3 3.1 2.80 170 -89070300.STC 3.50 15.6 3556 -8.2 7.0 15.8 21.4 8.5 1.1 1.40 128 -02081200.DDC 3.50 14.6 3415 -8.7 8.0 15.7 27.7 10.7 1.2 3.10 157 -01061500.FWD 3.50 17.3 4260 -9.7 7.9 15.1 9.7 11.1 1.9 2.20 74 -01041000.SGF 3.50 13.0 3476 -14.5 7.9 21.6 30.3 12.5 2.5 2.60 141 -91060500.DDC 3.25 16.9 4631 -7.9 6.5 15.3 15.4 11.0 1.4 3.50 74 -99060200.FWD 3.00 17.3 4928 -11.5 8.8 15.0 30.3 15.3 2.9 4.50 171 -98062900.TOP 3.00 22.0 6870 -7.7 7.0 20.6 27.3 19.3 3.8 2.40 335 -98062500.BIS 3.00 15.5 4591 -13.3 8.1 15.9 15.4 15.5 2.8 3.00 89 -98062500.ABR 3.00 21.0 4446 -13.7 8.8 17.4 28.7 11.2 4.4 3.70 42 -98061400.OAX 3.00 13.3 2830 -10.5 7.7 24.4 45.4 15.3 1.7 3.40 219 -98052400.DDC 3.00 11.6 2630 -12.9 6.7 22.0 27.7 9.8 1.3 2.30 101 -97061000.FWD 3.00 15.6 2699 -9.9 7.0 18.7 24.1 10.9 1.2 1.30 98 -97052600.OUN 3.00 17.2 5143 -7.7 5.9 30.4 32.4 15.0 2.8 2.60 148 -96070800.LBF 3.00 15.3 3341 -6.4 7.0 30.0 41.5 20.6 1.6 2.20 390 -96062012.LBF 3.00 15.0 3262 -8.6 7.9 18.5 25.0 16.9 1.7 -999.00 195 -96061400.UNR 3.00 13.1 3614 -11.0 8.4 18.0 14.8 12.4 1.8 2.00 63 -96052700.OUN 3.00 15.2 3034 -9.4 6.9 29.8 33.6 22.5 2.0 2.00 330 -96042000.ILX 3.00 12.9 2394 -14.6 7.1 27.0 39.5 16.4 2.0 -999.00 249 -96033100.SHV 3.00 12.7 2841 -17.1 7.6 27.4 35.5 20.1 2.9 3.10 163 -95082700.GGW 3.00 11.7 2973 -12.6 8.3 26.8 41.0 13.6 2.2 1.70 162 -95082300.INL 3.00 15.4 2824 -11.6 8.0 30.9 26.5 25.4 2.8 2.10 695 -95072400.DDC 3.00 15.9 3645 -9.9 8.2 18.2 32.6 11.8 1.9 3.60 31 -95071500.LBF 3.00 14.4 3052 -7.0 6.5 15.9 24.7 13.9 0.7 2.10 159 -95062300.LBF 3.00 12.9 2776 -11.1 7.9 21.0 19.8 15.3 1.5 2.80 221 -95043000.FTD 3.00 15.0 4416 -13.3 8.1 21.9 31.7 15.6 3.5 3.40 166 -95021400.PBI 3.00 16.5 2393 -11.0 5.9 27.1 33.4 13.8 1.6 0.60 117 -94060600.DDC 3.00 14.8 4698 -8.8 8.7 15.6 18.6 13.1 1.9 2.10 248 -94052600.FNT 3.00 10.8 2240 -16.3 6.1 17.8 25.8 12.8 1.0 2.40 113 -94032800.CKL 3.00 15.3 2066 -9.6 6.3 38.6 36.3 30.5 1.7 0.60 429 -93091900.DDC 3.00 12.4 1941 -10.4 7.2 29.5 46.6 16.8 1.2 2.80 233 -93091900.AMA 3.00 12.4 1912 -9.0 7.7 32.7 35.4 16.5 1.2 2.40 264 -93082300.DDC 3.00 13.3 2608 -7.8 7.7 19.5 27.0 13.1 0.9 2.00 83 -93070900.OVN 3.00 19.7 5546 -6.8 6.9 29.4 24.3 16.9 3.4 0.60 345 -93070200.DDC 3.00 17.1 4895 -5.2 7.2 16.4 21.4 13.3 1.2 2.80 237 -93060600.HAT 3.00 16.0 4948 -13.5 8.3 15.5 17.2 12.6 3.1 3.90 70 -93050600.MAF 3.00 13.9 3784 -9.6 7.2 27.0 25.4 18.6 2.2 2.50 149 -92070500.OVN 3.00 17.3 5051 -9.3 7.4 21.8 33.3 16.1 3.0 3.50 243 -92062700.MAF 3.00 13.9 3224 -8.2 7.7 23.7 38.8 13.0 1.5 2.50 253 -92032600.TBW 3.00 12.6 1934 -14.0 6.5 31.1 37.0 18.6 1.6 1.10 196 -91052700.DDC 3.00 17.0 5256 -10.5 8.4 21.7 29.3 13.3 3.8 2.90 81 -91040912.1M1 3.00 14.2 3345 -15.2 8.0 19.7 20.8 11.5 2.6 -999.00 134 -91032700.TOP 3.00 12.7 2491 -12.3 6.8 27.7 31.7 21.6 1.6 2.50 282 -90052700.OUN 3.00 17.5 4621 -8.8 7.6 23.8 25.1 20.4 2.9 4.00 255 -90051500.OUN 3.00 16.8 4798 -10.7 7.8 19.8 29.7 12.5 3.0 4.20 186 -89060700.AMA 3.00 15.4 4752 -9.5 8.5 30.5 55.6 21.7 4.1 2.40 303 -89060500.OUN 3.00 12.5 1640 -11.6 7.0 15.7 23.9 8.8 0.6 0.70 53 -04081000.DDC 3.00 14.6 3147 -9.7 7.7 21.0 22.0 13.0 1.6 3.00 222 -04070200.AMA 3.00 16.9 5137 -8.1 7.4 14.0 16.6 18.0 1.7 3.00 80 -04052300.OAX 3.00 14.7 4320 -12.3 7.6 32.9 29.4 20.0 4.4 3.00 289 -04051700.DDC 3.00 10.0 2200 -11.9 8.4 31.7 30.2 20.5 1.6 1.50 390 -04042200.OUN 3.00 12.2 2363 -13.5 7.0 24.3 33.8 16.9 1.5 2.70 385 -04041900.OAX 3.00 11.9 3136 -15.1 8.2 33.8 44.9 20.5 3.6 1.90 394 -03062800.DDC 3.00 11.4 2329 -9.3 6.7 16.9 26.8 10.8 0.6 2.20 138 -03062400.LBF 3.00 18.6 6189 -8.7 8.1 30.8 31.6 21.7 5.7 4.80 381 -03050420.SGF 3.00 15.8 4524 -11.9 7.1 35.4 47.9 25.2 4.8 3.20 480 -03042100.SHV 3.00 15.5 2947 -13.5 7.5 24.0 38.0 14.3 2.5 0.90 110 -01090900.FWD 3.00 19.0 4304 -8.9 8.2 14.1 12.0 7.7 1.9 2.70 97 -01053000.AMA 3.00 16.4 5827 -9.7 8.2 26.1 29.7 25.0 4.5 2.80 268 -01051900.LZK 3.00 16.6 4269 -12.5 8.1 18.5 25.8 9.9 3.0 2.70 98 -00080600.OAX 3.00 19.0 5525 -7.1 7.5 15.0 22.8 9.4 1.9 3.10 56 -00062900.MAF 3.00 14.8 3565 -6.3 6.3 10.5 16.7 9.6 0.5 1.80 29 -00050400.FWD 3.00 13.2 2690 -14.3 6.3 21.9 28.5 19.0 1.6 3.00 327 -99081800.LBF 2.75 18.3 5554 -8.9 7.8 23.7 25.1 10.7 3.8 3.40 143 -99070100.MAF 2.75 14.3 3989 -2.5 7.5 14.9 13.7 10.5 0.4 2.00 146 -99061900.DDC 2.75 13.9 4137 -11.3 7.3 22.5 28.8 13.4 2.4 2.40 346 -99061200.AMA 2.75 14.7 4400 -10.3 7.7 26.2 36.6 18.8 3.1 2.40 210 -99060300.AMA 2.75 15.6 5087 -10.3 8.7 18.6 49.2 15.5 3.0 2.50 289 -98061400.OUN 2.75 20.5 6689 -6.5 7.7 32.8 42.7 17.9 5.1 4.00 262 -98052500.DDC 2.75 12.5 2643 -12.1 7.2 27.5 32.0 13.7 1.8 2.70 180 -98040900.BMX 2.75 15.8 3341 -13.9 7.9 40.1 51.5 25.9 5.3 2.00 296 -97061600.DDC 2.75 13.5 3187 -10.9 7.7 23.3 39.3 11.9 1.9 2.70 26 -97061200.TOP 2.75 12.6 1552 -11.7 7.1 23.5 30.2 11.6 0.9 0.90 141 -97052700.SGF 2.75 16.3 4440 -9.9 7.0 22.6 25.0 16.3 2.6 2.60 276 -97052700.OUN 2.75 18.0 5907 -8.7 6.4 17.5 23.9 17.6 2.4 3.70 271 -97042100.SGF 2.75 9.4 1773 -16.5 7.4 25.4 23.9 23.3 1.2 2.00 405 -97041100.MAF 2.75 11.9 4076 -15.0 8.2 23.7 30.7 20.8 3.2 2.10 260 -97032900.BNA 2.75 11.3 1569 -15.6 7.4 25.2 15.3 18.1 1.2 3.00 389 -97012500.SIL 2.75 13.0 2563 -16.5 7.5 18.3 25.8 18.3 1.7 2.80 145 -96092100.FTD 2.75 16.4 2870 -9.4 6.5 26.4 32.6 15.7 1.7 -999.00 136 -96083000.DEN 2.75 11.7 2478 -9.1 7.8 26.2 28.9 17.6 1.2 2.30 86 -96080100.DEN 2.75 13.5 3920 -7.8 8.5 22.6 26.3 15.0 1.8 2.10 276 -96072400.DDC 2.75 14.3 3068 -11.1 8.6 27.6 36.6 16.8 2.6 2.70 203 -96062500.AMA 2.75 13.9 3684 -9.4 8.5 22.9 28.2 7.0 2.1 1.90 123 -96061400.LBF 2.75 12.4 2384 -8.6 6.5 15.4 25.0 12.0 0.6 2.20 102 -96061300.FFC 2.75 13.7 2726 -9.1 5.7 12.9 13.1 12.9 0.6 1.00 152 -96061200.AMA 2.75 11.9 3029 -8.8 8.0 24.3 30.2 18.3 1.4 1.90 373 -96060300.SGF 2.75 11.7 2739 -15.9 7.1 26.4 35.9 14.8 2.2 2.10 90 -96060200.JAN 2.75 16.1 1789 -7.5 5.5 12.7 20.3 11.3 0.3 0.60 168 -96060100.ABR 2.75 12.6 2276 -13.4 6.2 22.4 27.2 24.6 1.2 2.20 370 -96053000.MAF 2.75 14.9 3675 -7.0 7.7 35.1 40.6 19.0 2.3 2.50 321 -96052600.MAF 2.75 14.1 3464 -6.2 7.7 28.7 42.1 22.5 1.5 2.90 240 -96052500.AMA 2.75 13.5 3927 -11.3 9.1 20.3 5.0 16.4 2.5 1.90 101 -96051800.OAX 2.75 15.3 4523 -11.1 8.8 16.0 21.2 12.9 2.5 -999.00 68 -96051700.UNR 2.75 14.8 4365 -8.1 8.0 25.5 28.7 15.0 2.4 2.50 219 -96042200.TOP 2.75 10.9 1522 -16.6 7.3 45.6 54.3 14.6 2.1 2.30 145 -96042200.OUN 2.75 12.7 2100 -10.9 5.9 38.3 48.8 18.5 1.5 2.30 500 -96031600.FFC 2.75 9.6 890 -19.2 7.8 28.8 55.2 20.5 0.8 2.20 353 -95081800.BIS 2.75 18.4 5584 -7.0 7.7 10.6 17.3 10.6 1.3 3.30 142 -95072400.AMA 2.75 13.3 2225 -7.8 8.5 21.6 25.1 13.1 1.0 2.90 124 -95071500.GRB 2.75 19.0 5409 -8.5 8.1 12.1 9.0 8.0 1.9 3.00 69 -95071200.OKX 2.75 13.9 2900 -15.6 6.9 12.7 13.6 8.1 1.2 2.40 48 -95070300.DDC 2.75 14.2 2905 -9.6 6.8 18.2 21.4 12.3 1.1 2.30 111 -95070300.AMA 2.75 14.7 3838 -11.5 8.8 22.8 29.0 8.2 2.9 2.50 115 -95062800.LBF 2.75 12.4 2880 -10.1 7.7 22.0 19.7 13.9 1.4 2.50 208 -95062100.OKX 2.75 17.1 3918 -9.8 7.1 18.4 25.8 11.4 2.0 1.00 18 -95060300.AMA 2.75 12.4 3024 -9.6 8.2 22.4 37.2 15.7 1.5 2.00 346 -95052200.LBF 2.75 10.4 2027 -14.9 7.4 28.3 33.3 18.7 1.5 2.10 221 -95051400.UMN 2.75 16.5 5245 -10.3 6.9 28.0 26.2 22.3 3.9 3.20 211 -95042000.FTD 2.75 14.6 2621 -13.3 7.7 31.2 59.2 25.8 3.2 -999.00 242 -95040900.TOP 2.75 10.7 2836 -17.5 9.2 21.4 31.9 16.5 2.4 1.90 120 -94070700.HON 2.75 16.5 2845 -8.8 7.2 20.5 18.6 10.2 1.4 0.60 159 -94070200.OAX 2.75 18.5 5257 -10.1 8.0 26.5 25.4 15.5 4.7 3.20 416 -94070100.STC 2.75 14.1 3635 -11.4 7.2 27.2 25.1 19.0 2.6 2.70 399 -94062600.JAN 2.75 16.1 2842 -9.5 6.4 24.0 32.8 12.4 1.5 0.90 130 -94062500.HON 2.75 11.8 1904 -10.8 6.4 27.8 33.5 15.4 1.0 2.20 211 -94061800.AMA 2.75 11.9 2676 -7.0 8.2 11.0 11.3 10.7 0.5 1.60 171 -94061200.TOP 2.75 13.9 2239 -9.5 6.6 23.9 24.4 15.8 1.1 0.90 117 -94061200.AMA 2.75 14.7 4015 -8.0 7.8 26.7 19.9 18.4 2.2 2.70 302 -94061100.AMA 2.75 12.3 2164 -8.3 7.3 19.5 20.3 16.6 0.7 2.80 229 -94060600.TOP 2.75 16.5 3953 -9.3 8.1 16.1 27.7 15.4 1.8 2.50 394 -94060500.HON 2.75 14.2 3749 -11.6 8.5 21.4 19.2 12.0 2.5 2.40 202 -94053000.SEP 2.75 17.5 5032 -10.6 8.2 27.0 23.8 16.1 4.7 3.90 291 -94052500.OUN 2.75 15.0 3912 -11.5 7.4 22.0 36.2 13.2 2.5 3.00 122 -94041100.UMN 2.75 12.6 2036 -16.5 7.6 46.3 45.4 19.9 2.8 -999.00 125 -94012700.GGG 2.75 12.7 1841 -15.9 6.8 31.0 32.3 17.5 1.8 0.70 288 -93102000.DRT 2.75 15.5 3433 -8.9 6.4 25.4 34.0 13.4 1.8 1.60 35 -93101900.GGG 2.75 15.7 3105 -9.8 6.9 23.5 33.9 10.3 1.8 0.70 105 -93101300.CRP 2.75 17.3 4367 -8.6 6.3 20.2 29.8 14.8 1.9 1.50 227 -93090400.IAD 2.75 15.6 2779 -5.9 5.7 15.2 15.6 12.4 0.5 0.60 149 -93070700.DDC 2.75 17.0 5334 -6.0 7.2 27.9 28.2 16.5 2.5 3.10 154 -93070700.AMA 2.75 17.0 5327 -4.7 7.8 21.3 20.0 11.4 1.6 3.80 127 -93070500.DDC 2.75 17.1 4186 -5.4 6.7 30.6 34.9 16.6 1.8 1.20 146 -93062400.LBF 2.75 16.0 3944 -8.6 8.1 21.9 33.8 18.1 2.2 2.80 178 -93062400.DEN 2.75 11.7 3442 -9.6 8.8 32.0 42.3 15.8 2.5 1.80 211 -93061900.AMA 2.75 12.8 2140 -7.8 7.0 22.7 23.3 14.4 0.8 1.90 146 -93051600.DDC 2.75 12.8 3614 -9.8 6.6 19.4 23.7 12.6 1.3 2.50 161 -93050600.AMA 2.75 13.2 4478 -13.6 8.6 34.6 38.4 16.6 5.5 2.00 340 -93050100.AMA 2.75 11.6 4085 -14.5 8.1 25.7 15.8 15.3 3.2 1.90 234 -93042900.MAF 2.75 11.7 2435 -10.9 7.1 29.3 37.4 20.8 1.5 2.20 551 -93042800.MAF 2.75 10.4 1494 -10.6 6.9 19.6 25.8 12.9 0.5 1.80 150 -93042500.UMN 2.75 11.4 2317 -14.6 6.9 25.2 33.1 18.2 1.5 2.40 198 -93042000.GGG 2.75 12.4 2342 -13.3 8.0 26.7 28.4 17.5 1.9 2.70 156 -93040200.WAL 2.75 10.9 1625 -18.5 7.3 30.7 48.4 26.8 1.7 2.40 200 -93033100.UMN 2.75 11.1 2598 -16.5 6.4 29.7 28.9 19.7 2.1 2.10 117 -93033100.1M1 2.75 11.9 2471 -15.1 7.2 30.2 27.1 17.8 2.2 2.80 54 -92101600.SEP 2.75 14.6 3654 -12.1 7.7 16.4 22.7 12.6 1.8 2.90 227 -92073000.LBF 2.75 15.0 3544 -10.3 7.9 25.7 33.8 22.0 2.5 3.00 335 -92062700.AMA 2.75 14.1 3165 -10.0 7.7 16.6 29.9 12.4 1.3 2.90 191 -92061900.DDC 2.75 12.8 2598 -8.3 7.9 25.1 40.5 15.7 1.2 2.70 114 -92061900.BIS 2.75 11.0 1791 -14.4 6.9 27.4 24.4 13.0 1.2 2.50 106 -92061300.AMA 2.75 14.7 2821 -8.8 7.2 19.1 36.4 12.0 1.1 2.70 165 -92061200.MAF 2.75 13.8 2387 -8.2 7.4 26.7 34.6 13.3 1.2 2.00 178 -92060500.AMA 2.75 13.4 2870 -9.4 7.5 17.5 25.9 12.2 1.1 2.60 249 -92030600.1M1 2.75 11.5 2572 -21.1 7.2 22.5 26.7 17.3 2.3 2.30 194 -92021500.UMN 2.75 10.2 1724 -16.9 6.4 33.2 28.2 24.2 1.4 2.20 289 -91072200.HON 2.75 19.3 4474 -6.8 7.2 17.3 24.1 11.1 1.7 -999.00 198 -91070500.GGW 2.75 11.4 2277 -9.9 7.0 17.5 23.9 6.7 0.7 2.20 144 -91070500.BIS 2.75 13.3 2851 -9.3 6.4 21.4 26.6 19.3 1.1 2.40 206 -91062000.HON 2.75 13.9 2691 -10.5 7.0 22.1 20.0 16.1 1.4 1.20 282 -91061900.LBF 2.75 13.0 3592 -12.0 8.6 15.2 20.9 13.5 1.7 2.60 219 -91061500.GRB 2.75 17.6 3430 -8.7 6.7 13.9 17.0 21.7 1.1 0.60 161 -91061500.BIS 2.75 13.0 2343 -11.9 6.6 22.5 25.2 13.2 1.2 2.60 152 -91060500.OVN 2.75 14.6 2813 -10.1 6.5 17.1 19.6 8.4 1.0 3.10 177 -91053000.RAP 2.75 16.8 4287 -10.2 6.8 18.2 19.0 13.0 2.1 2.00 159 -91053000.OVN 2.75 10.9 2814 -15.7 8.1 14.5 28.4 14.3 1.3 2.70 31 -91052500.AMA 2.75 13.7 3416 -10.5 7.0 17.4 13.8 17.0 1.3 2.50 124 -91051800.UMN 2.75 15.1 3444 -11.0 7.4 11.9 21.0 9.4 1.1 1.20 59 -91051700.UMN 2.75 15.9 3299 -10.6 7.6 16.1 11.8 14.4 1.5 1.90 174 -91051200.RAP 2.75 14.1 4430 -11.0 7.9 23.5 33.5 26.6 2.9 2.50 437 -91051100.AMA 2.75 15.6 5629 -10.7 9.0 16.5 21.5 14.5 3.2 2.50 314 -91042800.GGG 2.75 18.9 4554 -10.5 7.2 29.5 19.6 15.4 4.4 2.20 140 -91042700.OUN 2.75 16.6 4248 -11.5 7.0 23.6 26.4 20.6 3.0 3.70 376 -91042700.GGG 2.75 18.9 5164 -10.7 8.2 18.9 27.6 12.4 3.7 2.70 209 -91041300.OUN 2.75 14.1 4063 -13.7 8.0 22.0 25.1 17.1 3.1 2.90 205 -91040300.OUN 2.75 10.1 1560 -19.8 7.3 22.6 41.7 15.1 1.2 1.50 275 -91032700.DDC 2.75 12.4 3132 -14.2 8.2 40.7 44.0 18.9 4.2 2.10 160 -91032200.UMN 2.75 11.5 2599 -15.3 7.0 33.0 35.3 18.8 2.4 2.50 371 -90090600.STC 2.75 19.5 4798 -6.8 6.2 21.0 17.1 14.7 1.9 1.00 294 -90082800.SSM 2.75 18.2 4669 -8.5 6.2 31.6 29.9 20.5 3.2 1.10 335 -90081100.LBF 2.75 14.8 3971 -9.0 7.5 25.6 21.5 14.3 2.3 2.90 282 -90070700.BIS 2.75 14.9 3274 -7.5 6.9 19.0 25.7 12.9 1.1 2.20 316 -90070300.BIS 2.75 21.3 6982 -6.3 8.2 23.0 29.6 14.9 4.0 4.60 172 -90061900.LBF 2.75 19.2 7070 -6.1 8.4 30.2 38.1 18.5 4.8 1.30 266 -90060200.STC 2.75 13.4 2697 -13.3 8.5 18.6 17.2 10.4 1.7 2.60 132 -90060200.LBF 2.75 13.6 3719 -10.8 7.9 15.6 29.4 16.4 1.5 2.80 89 -90053100.GGG 2.75 19.3 4700 -5.7 6.1 27.2 25.7 21.5 1.9 2.50 317 -90052000.OUN 2.75 15.3 4565 -10.8 7.1 13.7 14.7 12.1 1.7 3.90 94 -90051900.LBF 2.75 12.1 3954 -13.9 8.6 25.1 24.6 16.2 3.2 2.70 398 -90051700.GGG 2.75 17.5 3234 -8.3 7.2 24.7 35.1 17.6 1.9 0.60 304 -90050100.AHN 2.75 14.9 4557 -12.6 7.7 14.7 9.3 19.7 2.2 2.70 92 -90042800.GGG 2.75 12.9 2263 -14.9 6.6 14.1 25.3 12.8 0.9 3.70 84 -90041700.OUN 2.75 13.6 3717 -15.0 8.3 11.5 20.5 17.2 1.6 4.70 152 -90031400.PIA 2.75 12.4 2115 -14.4 6.9 18.1 24.1 15.3 1.1 3.70 206 -90021600.JAN 2.75 15.2 2047 -10.9 6.6 20.9 34.6 18.9 1.1 -999.00 124 -89090400.LBF 2.75 17.3 4400 -8.6 8.3 29.6 38.8 8.6 3.7 3.30 223 -89082900.STC 2.75 14.6 1959 -10.0 6.8 26.3 44.7 18.0 1.2 1.10 147 -89082200.STC 2.75 16.2 3346 -11.1 6.9 20.6 30.6 11.9 1.9 1.20 173 -89082200.OMA 2.75 17.9 3959 -8.3 7.0 22.2 45.4 15.0 2.1 0.90 138 -89082200.HON 2.75 15.6 4160 -9.4 6.9 22.9 28.9 14.8 2.2 3.30 107 -89081600.AMA 2.75 12.8 2669 -7.1 6.9 17.0 24.9 10.5 0.6 2.50 158 -89062600.RAP 2.75 11.5 2246 -13.8 7.8 31.3 30.4 20.0 2.0 2.60 301 -89061300.AMA 2.75 14.4 3611 -10.8 8.1 15.8 22.1 9.9 1.6 3.00 79 -89060300.TOP 2.75 13.7 2586 -12.6 7.0 19.5 39.7 12.4 1.4 2.00 118 -89060300.MAF 2.75 11.9 2291 -8.4 7.6 19.3 32.2 13.3 0.8 2.20 147 -89060200.MAF 2.75 14.1 2971 -10.4 7.9 24.5 27.4 8.5 1.9 2.80 104 -58042200.FWH 2.75 13.3 3338 -16.1 7.8 37.0 49.4 25.5 4.7 2.40 276 -04070500.DDC 2.75 14.3 3819 -10.3 8.3 18.6 30.5 14.4 2.0 2.50 161 -04060300.FWD 2.75 16.9 4767 -11.1 8.7 19.1 24.1 14.1 3.4 -999.00 157 -04051300.OUN 2.75 16.8 5740 -11.5 8.2 15.2 20.9 12.4 3.1 3.60 131 -04051100.DNR 2.75 10.6 3995 -12.9 9.2 28.3 16.6 18.2 3.2 1.50 379 -04050600.WAL 2.75 9.3 1861 -21.3 7.2 20.2 28.3 21.3 1.2 1.40 239 -04040500.CRP 2.75 14.9 2478 -12.1 6.7 22.4 20.6 7.0 1.5 0.60 184 -04032800.OUN 2.75 12.6 2904 -15.9 7.8 23.3 31.1 16.4 2.4 2.80 315 -04032718.DDC 2.75 13.2 4133 -17.3 8.0 24.6 26.6 14.4 4.2 2.30 143 -03100600.AMA 2.75 12.2 2542 -10.3 6.4 24.1 30.2 12.9 1.1 2.50 50 -03091100.MAF 2.75 13.3 2808 -6.5 6.8 10.3 9.0 7.4 0.4 1.40 80 -03091000.DDC 2.75 14.8 3620 -7.7 7.5 12.1 15.8 11.3 0.9 3.00 233 -03061400.AMA 2.75 12.3 3153 -13.3 8.3 21.7 24.7 13.7 2.1 2.10 35 -03060500.AMA 2.75 11.9 2647 -11.9 7.6 23.0 28.5 13.1 1.5 2.10 167 -03051700.SHV 2.75 16.3 3995 -10.9 7.4 23.2 13.9 19.6 2.8 2.70 242 -03051600.AMA 2.75 14.1 3706 -10.3 8.9 42.9 37.7 34.9 4.7 -999.00 632 -03051400.SHV 2.75 16.7 3920 -9.5 7.2 27.2 37.0 19.3 2.8 0.80 389 -03051000.OUN 2.75 16.8 5328 -11.1 8.3 27.5 34.8 16.8 5.1 3.60 182 -03050700.FWD 2.75 17.8 5303 -9.7 7.1 30.4 36.2 8.4 4.5 3.50 126 -03050618.SGF 2.75 15.6 5492 -14.7 7.7 32.0 40.6 17.8 7.1 2.80 313 -03050100.TOP 2.75 13.1 3776 -14.1 7.8 17.2 19.6 13.9 2.1 2.70 117 -03042900.SGF 2.75 13.1 3399 -16.7 8.5 5.0 19.6 4.8 0.7 2.80 53 -03042600.BMX 2.75 14.2 3921 -13.3 6.2 35.8 33.5 26.6 3.8 2.70 89 -03042500.LZK 2.75 13.8 3423 -15.7 7.6 20.9 31.0 20.0 2.7 3.30 212 -03031300.SHV 2.75 13.5 2901 -15.3 7.1 17.1 24.1 11.0 1.6 2.00 162 -02081200.LBF 2.75 13.3 3735 -9.9 8.7 13.1 11.8 10.5 1.3 2.10 222 -02072700.TOP 2.75 19.3 6406 -5.3 6.9 18.2 19.3 9.1 1.9 2.60 131 -02072000.TOP 2.75 17.5 4986 -7.5 7.3 10.0 12.7 8.5 1.1 2.70 197 -02062500.ABR 2.75 15.1 4208 -7.1 6.8 19.1 19.3 11.1 1.3 3.10 20 -02062400.BIS 2.75 16.0 3559 -9.7 6.8 28.0 24.8 25.2 2.4 2.40 298 -02061300.AMA 2.75 13.7 3027 -8.5 8.4 29.6 33.0 18.7 2.0 2.50 65 -02060500.AMA 2.75 13.2 2947 -11.5 7.6 32.1 45.0 17.9 2.5 2.70 309 -02052400.AMA 2.75 13.8 4729 -13.3 8.3 28.8 21.8 18.5 4.7 2.30 258 -02051800.DRT 2.75 16.0 5077 -10.5 8.1 8.8 6.3 5.2 1.4 2.60 15 -01112418.BMX 2.75 15.1 2902 -11.3 6.1 26.9 31.9 22.2 1.9 0.80 328 -01072500.GGW 2.75 11.5 1714 -11.3 6.9 26.7 32.1 18.2 0.9 2.20 350 -01071900.BIS 2.75 17.8 5738 -9.9 8.6 21.8 28.8 14.1 4.3 2.90 183 -01071900.ABR 2.75 17.5 5356 -10.5 8.8 18.1 22.7 3.4 3.6 2.70 35 -01071800.INL 2.75 17.0 4580 -12.9 7.8 11.9 12.8 11.8 2.1 0.80 154 -01070100.RAP 2.75 14.3 3235 -10.7 7.7 30.8 40.7 12.9 2.7 2.60 114 -01061900.MPX 2.75 15.6 5114 -11.9 9.2 33.1 31.9 19.0 6.6 3.40 154 -01061700.TOP 2.75 15.7 4594 -13.7 8.5 22.1 26.6 15.7 4.2 3.40 214 -01061700.LMN 2.75 14.1 4093 -10.7 8.0 19.4 26.9 9.3 2.2 3.50 195 -01061400.OAX 2.75 17.2 4956 -11.3 9.0 20.4 25.5 18.5 4.0 3.80 153 -01061000.ABR 2.75 13.8 3452 -12.1 7.8 24.6 32.3 16.6 2.5 3.60 158 -01060800.DNR 2.75 13.9 3440 -8.7 7.2 25.3 21.9 7.4 1.7 3.10 -26 -01060600.AMA 2.75 14.9 4665 -8.9 7.2 15.8 15.6 11.9 1.6 2.30 191 -01052500.FFC 2.75 11.7 2338 -14.5 6.4 18.1 21.4 19.6 1.0 2.50 240 -01050620.LMN 2.75 15.4 4496 -16.1 7.3 11.5 20.9 7.3 2.1 3.10 60 -01042100.OAX 2.75 12.4 3283 -15.3 7.7 28.1 32.7 23.5 3.0 2.40 282 -01040400.LZK 2.75 15.2 4223 -15.1 8.5 18.1 24.8 11.9 3.4 3.10 105 -00121618.BMX 2.75 13.2 2219 -14.1 6.7 32.9 45.8 25.0 2.1 0.90 266 -00072700.OAX 2.75 18.5 5048 -9.7 8.0 21.8 23.2 16.7 3.6 2.60 215 -00072500.LBF 2.75 17.1 5901 -8.9 8.5 24.5 29.4 22.2 4.2 2.90 162 -00072100.LBF 2.75 15.3 3073 -11.3 7.8 26.5 39.4 16.9 2.5 2.00 223 -00071700.MHX 2.75 15.1 2929 -12.3 7.2 18.2 29.9 7.9 1.6 2.30 81 -00071000.LBF 2.75 18.1 5871 -5.5 7.8 14.3 19.9 10.7 1.5 3.50 146 -00071000.GGW 2.75 15.6 2962 -10.9 7.0 18.4 13.5 23.2 1.5 2.60 248 -00062000.LBF 2.75 14.9 4028 -8.5 6.8 18.8 23.9 11.9 1.5 3.00 96 -00061400.AMA 2.75 16.5 5758 -4.9 7.6 23.8 32.0 19.9 1.9 2.50 244 -00061200.BIS 2.75 11.3 2000 -13.1 7.5 22.0 28.0 10.2 1.1 2.50 306 -00052700.OUN 2.75 18.3 5870 -10.1 8.4 21.5 32.8 12.8 4.4 4.00 117 -00051300.DTX 2.75 16.9 4524 -8.5 7.7 24.1 18.5 20.2 2.8 2.40 328 -00022500.AMA 2.75 10.3 3614 -18.5 8.5 26.8 48.5 13.1 3.6 1.70 107 -98071100.DDC 2.50 18.9 4096 -4.3 6.2 12.7 15.2 16.0 0.6 0.60 230 -96072200.LBF 2.50 18.4 4756 -6.5 7.2 20.0 29.4 19.0 1.8 2.10 94 -96071900.GRB 2.50 20.7 4525 -7.5 6.4 26.3 26.2 20.0 2.7 0.70 162 -96062100.DEN 2.50 15.2 5603 -8.1 9.6 27.5 33.4 8.8 4.2 2.20 155 -96061200.LBF 2.50 12.2 2268 -9.9 7.5 16.7 22.2 12.7 0.8 2.40 122 -96060300.AMA 2.50 11.0 2356 -10.5 6.9 27.6 31.6 18.0 1.2 2.00 256 -96060100.DDC 2.50 13.3 2888 -10.9 8.3 13.3 19.3 13.9 1.0 2.50 111 -96051800.MPX 2.50 16.3 4406 -8.9 8.2 13.0 23.4 20.7 1.6 3.40 259 -96042200.FTD 2.50 12.0 1872 -12.6 8.2 27.1 34.0 18.3 1.4 -999.00 298 -96030700.TLH 2.50 15.4 2429 -10.4 6.0 20.9 23.7 20.7 1.1 0.60 320 -95081212.MPX 2.50 19.1 3357 -6.3 7.2 33.4 36.8 23.0 1.4 -999.00 147 -95061600.TFX 2.50 13.0 3142 -12.0 8.4 27.7 35.6 23.8 2.6 2.30 277 -95060700.DEN 2.50 12.3 3126 -10.8 9.2 37.2 35.9 20.7 3.2 2.00 284 -95052912.MAF 2.50 13.0 1618 -11.3 7.5 26.6 22.0 13.7 1.1 -999.00 179 -95051900.GSO 2.50 13.4 1758 -11.8 7.9 25.3 27.1 23.6 1.3 -999.00 83 -95051600.MAF 2.50 13.6 3261 -7.8 8.4 21.7 28.8 10.3 1.4 1.80 134 -95050900.TOP 2.50 10.0 1495 -19.3 6.9 19.3 22.8 21.2 0.9 1.20 126 -95050800.LCH 2.50 17.9 2493 -9.9 7.1 16.7 31.1 10.2 1.2 0.60 120 -95050800.FTD 2.50 16.5 2700 -10.4 7.7 30.8 30.8 24.5 2.5 0.80 407 -94062600.TOP 2.50 16.4 4265 -8.6 8.4 25.2 45.9 21.6 2.9 2.90 418 -94032800.AHN 2.50 14.4 2627 -10.5 6.2 34.5 24.7 30.4 1.9 0.70 518 -93070300.TOP 2.50 18.5 4019 -7.2 7.1 15.8 16.4 15.2 1.4 0.70 202 -93070200.HON 2.50 14.6 2619 -11.3 7.0 28.3 40.3 12.6 1.9 0.80 143 -93061400.TOP 2.50 16.5 4195 -8.5 7.7 12.5 17.8 10.7 1.3 2.80 65 -93033000.DRT 2.50 12.7 2680 -13.4 8.2 39.6 44.0 26.0 3.3 2.80 411 -92070200.DEN 2.50 11.7 2313 -11.2 8.0 27.6 29.9 20.0 1.5 2.50 362 -92041600.AMA 2.50 11.1 3350 -13.4 7.6 16.0 17.8 12.0 1.4 1.70 127 -92030400.SEP 2.50 12.7 2676 -15.3 7.7 20.1 27.2 9.2 1.8 2.30 133 -91080200.CAR 2.50 12.3 1891 -13.7 6.3 19.6 33.3 11.9 0.9 1.50 223 -91071800.STC 2.50 18.2 4876 -8.7 7.3 18.7 20.1 21.9 2.4 2.50 104 -91053100.DEN 2.50 12.0 3551 -12.1 9.5 27.3 45.8 10.7 3.0 1.90 149 -91052700.LBF 2.50 11.9 2669 -13.4 7.9 13.9 32.3 13.0 1.1 2.10 35 -91051200.AMA 2.50 14.3 4521 -10.8 8.5 12.4 14.9 16.7 1.7 2.30 208 -91050800.MAF 2.50 11.2 3415 -14.8 8.4 31.1 36.7 25.4 3.4 1.60 280 -91042100.AYS 2.50 11.8 2563 -16.9 7.4 13.4 30.0 10.3 1.1 1.70 76 -91041900.SEP 2.50 17.6 5996 -13.2 7.4 13.5 44.8 13.0 3.2 3.10 24 -90083100.CHS 2.50 16.0 2477 -8.5 6.5 17.0 17.7 8.3 0.9 0.60 67 -90070200.GSO 2.50 14.8 3964 -10.0 7.2 26.0 16.3 10.7 2.5 2.20 100 -90062200.ALB 2.50 12.6 1833 -14.1 6.7 32.5 29.1 20.6 1.6 1.60 203 -90061500.DDC 2.50 16.0 4667 -6.5 7.9 28.4 30.1 15.7 2.5 2.70 305 -90060700.DEN 2.50 10.9 2850 -8.2 9.0 26.3 23.9 19.6 1.4 1.50 170 -90060300.PAH 2.50 17.8 3663 -7.6 7.0 24.0 25.9 29.8 1.9 0.60 367 -04102400.JAN 2.50 15.8 1938 -6.9 5.3 30.8 27.8 19.3 0.8 0.60 328 -04091500.LBF 2.50 12.8 1474 -10.7 8.0 31.4 39.8 20.5 1.3 -999.00 91 -04080700.ABR 2.50 13.1 2792 -9.3 6.7 21.0 25.9 12.1 1.1 2.50 240 -04040400.EPZ 2.50 12.1 4482 -17.9 8.2 29.1 25.4 11.6 5.2 2.10 203 -04032718.OUN 2.50 12.6 2825 -14.9 7.3 21.1 32.3 11.5 1.9 2.10 199 -03062200.RAP 2.50 10.6 3380 -13.7 8.0 27.5 42.2 18.7 2.5 1.50 189 -03051500.SHV 2.50 16.8 4260 -9.9 6.8 33.7 42.9 16.3 3.7 0.80 246 -02072500.ABR 2.50 15.0 4004 -11.5 7.9 28.7 28.6 13.8 3.5 3.00 207 -02051700.AMA 2.50 13.8 5036 -12.7 8.7 21.9 26.5 17.4 3.8 2.20 216 -01101000.DDC 2.50 12.9 3299 -9.7 6.4 18.8 18.3 16.4 1.1 2.50 275 -01082400.AMA 2.50 15.4 4318 -6.7 7.4 24.0 28.1 21.0 1.8 2.80 158 -01070500.LBF 2.50 14.5 3571 -7.7 7.7 26.0 27.0 17.1 1.8 2.90 313 -01070400.RAP 2.50 14.5 3145 -11.1 8.3 25.2 26.1 12.9 2.4 2.60 144 -01052620.LMN 2.50 14.1 4355 -13.5 6.4 27.3 33.2 20.2 3.3 2.90 233 -01052500.BMX 2.50 11.9 2388 -14.9 6.7 29.2 27.4 23.5 1.9 2.70 436 -01050400.MAF 2.50 13.7 3866 -11.3 7.2 12.8 33.8 11.4 1.2 2.70 101 -01050100.OAX 2.50 10.4 2265 -16.9 7.7 17.4 17.0 19.2 1.2 2.20 226 -01042200.DDC 2.50 13.3 3749 -12.1 7.3 33.4 45.3 24.2 3.3 2.70 510 -01041700.MAF 2.50 13.9 4552 -12.1 7.5 16.2 30.6 8.0 2.1 2.20 100 -00091100.MPX 2.50 16.6 4560 -10.3 7.0 21.6 23.2 18.4 2.7 3.20 271 -00080500.BIS 2.50 17.0 4830 -8.7 6.9 17.2 22.9 4.0 1.9 3.30 86 -00070600.LBF 2.50 18.2 5506 -7.1 8.3 25.3 35.5 11.8 3.4 3.50 155 -00070200.ABR 2.50 17.8 5952 -10.3 8.4 12.2 23.4 8.1 2.5 3.90 147 -00062400.OAX 2.50 17.5 4783 -8.7 7.2 18.7 28.2 14.9 2.2 2.30 195 -00061000.RAP 2.50 13.2 3610 -8.1 7.8 14.3 21.1 11.9 1.0 2.10 70 -00052300.MHX 2.50 15.1 3613 -13.5 6.5 15.3 26.5 10.5 1.7 2.40 79 -00051200.DVN 2.50 15.6 4865 -8.1 7.4 24.8 24.9 19.3 2.6 3.40 225 -00050100.FWD 2.50 14.3 3593 -13.1 7.2 17.3 18.5 19.0 1.9 1.70 401 -00032700.SGF 2.50 9.8 1766 -18.3 7.5 34.3 43.9 21.4 1.9 2.20 350 -00021400.LZK 2.50 10.7 2091 -20.3 6.4 21.1 24.5 22.2 1.4 2.10 245 -00061300.OAX 2.25 17.7 5453 -11.5 8.5 15.8 19.3 12.9 3.4 4.00 206 -99053100.TOP 2.00 13.1 2215 -10.9 6.8 18.6 12.2 14.7 0.9 1.40 189 -99050400.DRT 2.00 17.4 5609 -10.1 7.5 40.5 38.9 21.2 6.8 4.56 342 -98063000.BUF 2.00 14.5 2615 -10.5 6.1 23.6 28.2 8.5 1.3 1.70 86 -98062500.APX 2.00 15.8 3453 -11.3 7.3 28.9 35.4 21.9 2.9 3.30 348 -98033100.FWD 2.00 13.3 2607 -14.3 7.2 29.6 57.5 17.6 2.4 2.90 93 -90091400.STC 2.00 13.1 2104 -10.9 7.4 27.8 39.0 23.2 1.4 -999.00 564 -90072600.TBW 2.00 18.4 4330 -6.3 5.7 5.0 8.5 6.3 0.3 0.60 7 -90061400.PIA 2.00 18.1 3571 -7.0 7.0 16.5 23.4 9.5 1.2 0.60 134 -90060900.PIT 2.00 16.7 4095 -9.5 6.7 18.1 13.6 18.8 1.8 1.00 236 -89103000.OUN 2.00 12.5 2163 -14.7 6.6 18.0 18.1 13.1 1.1 1.60 195 -89082100.LBF 2.00 14.8 3307 -9.1 7.1 28.0 44.7 8.0 2.0 3.00 83 -89071100.HON 2.00 15.7 3126 -7.0 6.9 14.6 18.6 12.3 0.8 1.20 151 -89052800.ELP 2.00 11.2 2569 -6.8 8.0 11.3 17.1 14.9 0.4 1.40 232 -04091200.GRB 2.00 12.3 2256 -14.9 7.2 14.7 24.8 11.6 1.0 0.90 64 -04082400.BIS 2.00 13.4 2596 -11.1 7.6 21.3 22.3 16.4 1.4 2.20 208 -04072300.TOP 2.00 16.0 3276 -7.7 6.4 15.8 19.6 11.4 0.9 0.70 158 -04062400.GRB 2.00 10.4 1604 -16.9 6.3 25.3 36.9 16.4 1.0 2.40 128 -04052200.DDC 2.00 13.5 3809 -9.7 8.1 21.0 27.0 20.3 1.9 2.20 297 -04043000.JAN 2.00 13.6 1469 -12.7 6.5 27.4 22.8 18.1 1.0 0.60 184 -03051900.TBW 2.00 17.1 3797 -10.9 6.8 5.9 5.0 4.0 0.6 1.00 -4 -02062600.MPX 2.00 19.6 5230 -9.7 7.1 18.6 21.8 9.2 3.0 3.20 120 -02061300.DVN 2.00 17.3 3501 -11.9 7.4 26.3 38.7 10.0 3.2 1.10 100 -02052800.LZK 2.00 15.1 3284 -12.3 6.5 5.0 12.3 2.6 0.4 0.60 13 -01101000.OUN 2.00 15.6 3485 -12.9 7.9 24.4 28.2 23.9 3.1 2.50 447 -01090800.TOP 2.00 17.8 4174 -11.3 8.1 26.2 26.7 24.5 4.0 1.70 274 -01090800.OUN 2.00 17.6 4351 -8.7 7.8 26.1 21.2 21.8 3.1 2.30 151 -01082400.DDC 2.00 16.4 4283 -7.5 7.7 14.7 16.3 11.9 1.3 3.10 77 -01082300.TOP 2.00 16.7 4361 -9.7 7.6 9.9 23.0 13.6 1.2 2.30 192 -01072000.RAP 2.00 15.1 4486 -8.7 8.4 15.4 26.3 10.9 1.7 2.40 71 -01071300.GGW 2.00 14.5 3042 -10.1 8.1 16.5 34.2 7.9 1.4 3.50 19 -01063000.FWD 2.00 16.8 4122 -9.7 6.9 11.2 19.2 9.2 1.2 1.60 133 -01062100.DNR 2.00 10.8 2544 -11.5 7.5 21.4 23.2 20.5 1.2 2.10 192 -01053100.LCH 2.00 17.4 3988 -8.3 7.0 8.3 13.9 0.8 0.8 2.40 8 -01053100.FWD 2.00 15.8 4571 -12.3 8.7 12.4 20.6 13.7 2.2 3.90 106 -01053000.DDC 2.00 15.2 2892 -12.1 8.0 23.2 25.5 14.8 2.3 1.80 388 -01052700.DDC 2.00 11.3 2853 -12.1 6.7 30.6 37.1 19.3 1.8 1.80 184 -01051200.OUN 2.00 13.2 3098 -13.9 7.1 10.0 10.8 8.7 0.9 2.10 132 -01050702.LZK 2.00 14.2 2759 -12.9 5.9 18.7 26.3 7.3 1.3 2.00 77 -01050700.SGF 2.00 14.5 4025 -13.7 6.1 8.8 17.0 10.5 1.0 3.10 202 -01050600.FWD 2.00 15.4 3092 -12.7 6.8 32.7 34.4 19.4 3.0 2.10 170 -01042200.MAF 2.00 13.7 4543 -12.3 8.4 27.4 36.2 12.3 4.0 2.20 164 -01042200.AMA 2.00 14.1 6059 -15.3 9.2 35.7 38.3 16.6 9.7 3.30 320 -00072300.LBF 2.00 13.2 2926 -11.5 7.1 25.2 27.3 13.6 1.8 2.80 91 -00071500.BIS 2.00 16.5 5132 -9.5 8.1 27.6 34.1 14.6 4.1 2.70 152 -00071100.GGW 2.00 14.2 3230 -11.3 6.9 30.1 48.1 16.9 2.5 3.00 88 -00061500.JAX 2.00 17.9 4801 -8.7 6.4 6.2 13.3 3.6 0.7 1.10 55 -00061300.LBF 2.00 13.9 4790 -9.9 8.3 16.6 18.6 9.9 2.1 2.00 159 -00061200.AMA 2.00 16.8 5720 -10.3 8.3 16.1 28.7 15.7 3.0 2.70 88 -00032800.JAX 2.00 12.5 2135 -14.5 6.3 29.1 24.7 25.7 1.6 0.90 268 -00031600.LMN 2.00 9.5 1478 -17.3 7.1 22.1 10.9 12.9 0.9 2.20 164 -00030300.FWD 2.00 12.3 2589 -14.3 6.2 33.4 29.1 20.2 2.1 2.70 239 -98062500.FFC 1.75 17.0 3224 -8.9 7.3 5.0 9.9 5.6 0.4 0.60 54 -97100900.OUN 1.75 16.5 3628 -7.5 6.0 20.0 29.9 16.6 1.2 0.80 205 -94071700.HAT 1.75 16.5 2831 -6.0 5.7 5.9 5.0 4.4 0.2 0.60 33 -94071700.1M1 1.75 17.7 3194 -6.4 5.8 12.5 11.3 19.1 0.6 0.60 164 -94070100.1M1 1.75 18.6 4791 -8.1 6.1 20.0 18.5 12.6 2.0 1.00 343 -94062600.PBI 1.75 17.7 4199 -9.1 6.6 5.0 6.6 5.2 0.5 1.80 10 -92051500.1M1 1.75 13.3 2877 -11.3 6.4 11.4 16.3 7.9 0.7 1.50 54 -91060600.RAP 1.75 13.1 2001 -11.5 7.1 13.2 19.7 11.9 0.6 1.40 170 -91060600.JAN 1.75 16.3 3344 -9.1 6.8 9.5 9.6 3.1 0.7 0.60 12 -91053100.AHN 1.75 16.3 3505 -6.9 5.9 5.0 5.0 3.2 0.3 0.60 15 -91051700.GGG 1.75 18.4 5081 -10.4 7.5 7.9 11.2 10.5 1.3 0.90 157 -91051300.HON 1.75 14.7 3615 -9.5 7.2 14.2 22.7 13.0 1.2 2.80 97 -91051300.BIS 1.75 13.8 1867 -11.5 6.8 26.9 19.8 15.8 1.2 0.70 -79 -91032700.DAY 1.75 10.7 1281 -13.1 6.3 23.7 30.6 24.3 0.8 -999.00 149 -90091100.AHN 1.75 15.1 2857 -8.6 5.9 7.9 7.6 6.3 0.4 0.60 80 -90090200.MAF 1.75 14.9 3597 -6.2 6.8 17.2 18.3 7.5 0.9 2.50 58 -90082600.HON 1.75 17.9 5206 -11.5 9.1 14.7 28.6 9.9 3.2 -999.00 156 -90082600.BIS 1.75 13.7 3187 -13.2 8.6 22.2 23.1 13.2 2.5 2.50 190 -90082400.OVN 1.75 18.7 4768 -7.4 6.8 7.4 14.7 9.4 0.8 0.70 100 -90082100.AMA 1.75 14.6 2833 -5.7 6.6 11.7 11.3 10.6 0.4 1.20 75 -90081500.DDC 1.75 15.1 3012 -6.6 5.6 9.0 15.8 9.9 0.3 0.60 59 -90081000.AHN 1.75 14.9 2234 -9.4 6.2 13.3 26.7 6.4 0.6 0.80 33 -90080200.LCH 1.75 18.4 3223 -7.3 6.4 6.5 5.0 3.1 0.4 0.60 14 -90073100.GGG 1.75 16.1 3254 -7.5 6.4 7.9 5.4 1.2 0.5 0.60 3 -90072700.AMA 1.75 14.3 3104 -5.8 7.3 7.7 7.9 11.1 0.3 2.20 117 -90072600.OUN 1.75 16.6 3546 -6.8 6.2 10.8 14.7 11.1 0.6 0.70 206 -90072100.ABQ 1.75 10.9 1327 -5.9 8.3 7.9 14.5 9.8 0.1 1.30 145 -90071800.LBF 1.75 12.3 3138 -7.7 8.2 17.7 16.6 10.0 1.0 1.60 115 -90071700.FNT 1.75 11.9 1393 -12.5 6.5 15.5 25.3 13.2 0.5 0.60 176 -90071400.ABQ 1.75 10.4 1587 -9.4 8.7 18.9 32.6 4.4 0.6 1.20 70 -90071300.CRP 1.75 13.3 1658 -6.5 6.5 12.8 9.3 14.6 0.3 0.60 121 -90071100.CKL 1.75 15.4 2544 -8.1 6.4 5.1 5.0 2.1 0.2 0.60 9 -90070900.GRB 1.75 16.9 2962 -6.5 6.5 18.2 22.7 12.1 0.9 0.60 82 -90070500.LCH 1.75 17.6 3315 -8.5 6.6 15.3 5.0 11.6 1.1 0.60 58 -90061800.PIA 1.75 19.5 4567 -8.1 7.4 17.0 25.7 14.1 2.1 1.00 94 -90061300.STC 1.75 16.2 2789 -10.4 7.2 36.6 42.0 14.2 2.8 0.70 139 -90061100.CHS 1.75 17.7 4050 -8.1 6.6 8.1 19.1 6.4 0.7 0.60 102 -90061000.OUN 1.75 15.1 3242 -8.5 7.8 10.1 5.0 10.9 0.7 2.50 21 -90061000.IAD 1.75 14.9 2818 -9.2 6.5 16.4 19.3 18.0 0.9 0.60 175 -90052800.SIL 1.75 18.0 3916 -10.0 6.8 19.3 10.6 10.4 2.1 2.80 48 -90052300.HON 1.75 10.9 1984 -14.0 7.2 22.3 33.6 15.0 1.1 2.90 107 -90052100.UMN 1.75 14.8 3661 -13.1 7.6 15.4 23.7 15.3 1.9 4.30 181 -90052100.HAT 1.75 15.8 2891 -9.7 5.6 13.8 19.5 12.4 0.8 0.60 182 -90051900.SEP 1.75 17.0 3250 -9.1 6.6 20.9 27.2 15.6 1.6 2.20 385 -90051600.IAD 1.75 13.4 2004 -14.0 7.0 16.7 27.7 12.7 1.0 -999.00 102 -90051200.SEP 1.75 13.6 2282 -9.2 6.9 34.8 47.4 14.5 1.6 -999.00 133 -90050600.OUN 1.75 7.6 881 -20.1 7.2 18.3 48.8 5.8 0.4 2.30 30 -90042900.AYS 1.75 13.0 2333 -12.2 6.2 30.6 23.2 19.1 1.6 2.60 243 -90042600.DRT 1.75 14.6 3699 -13.8 8.1 25.7 33.2 11.1 3.5 4.60 101 -90042200.OUN 1.75 11.1 2748 -13.3 6.6 12.2 14.9 7.3 0.7 2.90 48 -90040200.BRO 1.75 16.2 3494 -9.3 7.1 25.7 37.2 15.2 2.2 2.60 65 -90031300.OUN 1.75 12.7 3211 -13.6 7.8 24.2 18.1 19.4 2.4 3.40 286 -90031000.AMA 1.75 11.1 2468 -16.0 8.6 13.1 18.2 9.9 1.1 2.10 106 -90022800.MAF 1.75 9.7 607 -16.2 6.6 16.4 23.8 5.1 0.2 1.90 55 -89090800.DEN 1.75 10.1 1350 -6.8 8.3 24.1 24.0 15.4 0.4 2.00 366 -89090200.1M1 1.75 18.3 3691 -4.8 6.1 16.2 14.1 8.2 0.7 0.60 64 -89083100.DDC 1.75 16.5 2952 -5.7 6.6 13.6 22.5 13.3 0.6 0.80 346 -89083000.OUN 1.75 17.3 3864 -5.6 6.0 13.1 24.2 11.8 0.7 0.60 112 -89082900.TOP 1.75 19.8 4794 -6.3 6.6 15.4 21.1 13.2 1.4 0.60 156 -89082800.UMN 1.75 17.3 3603 -6.1 6.5 7.8 5.6 2.6 0.4 0.60 28 -89082700.OMA 1.75 17.8 3452 -6.6 6.1 19.5 33.1 15.2 1.1 0.60 142 -89082500.RAP 1.75 10.6 1899 -7.1 7.6 7.7 7.6 2.7 0.2 1.00 55 -89081300.TBW 1.75 16.4 2617 -8.6 6.0 18.1 18.2 10.1 0.9 0.60 65 -89080600.UMN 1.75 19.0 5227 -6.9 7.0 11.7 11.3 8.8 1.3 0.80 99 -89073000.JAN 1.75 18.0 3940 -7.7 6.7 5.0 5.0 2.1 0.4 0.60 9 -89072900.HON 1.75 14.0 2092 -5.9 6.0 12.0 17.9 6.4 0.3 0.80 105 -89071500.LBF 1.75 14.3 2675 -6.9 6.1 6.1 8.4 5.5 0.2 0.60 27 -89071300.OUN 1.75 19.0 4127 -5.4 6.9 13.8 19.1 13.0 0.9 -999.00 196 -89071300.DDC 1.75 15.1 3239 -4.9 6.9 5.1 7.2 7.9 0.2 1.20 81 -89070800.PIT 1.75 15.4 2732 -9.1 6.8 17.5 15.7 12.8 1.0 1.50 81 -89062800.BUF 1.75 15.2 2385 -8.2 5.3 20.1 22.3 9.8 0.7 0.60 82 -89062700.PIA 1.75 15.7 2460 -7.9 6.6 13.2 12.4 5.3 0.6 0.70 87 -89062600.IAD 1.75 16.2 3138 -8.6 6.1 14.3 23.0 12.1 0.9 0.70 108 -89062200.AHN 1.75 15.5 1517 -7.6 5.8 12.6 15.8 14.9 0.3 0.60 112 -89061900.BNA 1.75 13.9 1714 -10.2 6.3 9.7 7.8 6.8 0.3 0.60 86 -89061400.GGG 1.75 17.2 3674 -11.0 6.9 15.4 23.3 4.3 1.7 -999.00 61 -89060600.JAN 1.75 16.3 3336 -11.3 6.7 20.8 25.3 10.4 1.9 0.80 103 -89060600.GSO 1.75 14.8 2078 -9.1 5.9 8.1 6.7 10.0 0.3 0.60 93 -89060100.TOP 1.75 15.8 2588 -10.9 7.9 10.6 26.9 7.9 0.8 -999.00 90 -04092500.AMA 1.75 11.2 2465 -11.9 6.9 15.1 24.9 12.0 0.8 2.00 38 -04092300.AMA 1.75 12.8 1887 -10.1 6.7 23.5 21.8 19.6 0.9 1.30 374 -04082600.BIS 1.75 12.5 3083 -13.1 7.1 16.6 18.9 13.9 1.4 2.40 101 -04081900.ILX 1.75 15.1 3685 -9.1 5.9 19.9 28.2 19.7 1.4 1.30 371 -04071200.TOP 1.75 17.7 3644 -7.3 6.8 13.6 9.1 11.9 1.0 0.60 204 -04051600.EPZ 1.75 10.4 2888 -11.5 8.7 12.2 7.0 4.1 0.8 1.60 93 -04051000.LBF 1.75 11.6 4026 -13.9 9.0 13.9 17.5 3.0 1.8 1.60 38 -04042900.DRT 1.75 12.4 1834 -12.9 6.4 20.0 31.6 16.1 0.9 1.30 217 -04040700.FWD 1.75 10.4 835 -16.3 6.7 28.3 27.2 11.8 0.6 1.00 87 -04032100.MAF 1.75 10.2 2042 -12.9 7.9 9.6 21.3 5.5 0.5 1.50 39 -04032100.FFC 1.75 7.9 942 -17.3 7.5 12.0 13.4 11.3 0.3 1.10 154 -04030100.TOP 1.75 6.3 487 -28.7 8.7 32.0 35.0 20.1 0.6 1.60 171 -03092100.DDC 1.75 10.2 1784 -10.9 7.3 20.1 23.8 21.8 0.7 2.00 257 -03091100.DDC 1.75 14.8 3112 -7.5 6.9 22.3 30.8 15.7 1.2 2.20 259 -03091000.MAF 1.75 12.9 3038 -7.3 7.4 8.3 12.7 8.6 0.4 2.10 79 -03090500.DRA 1.75 11.3 1966 -8.3 8.1 5.0 9.2 5.0 0.2 1.20 33 -03062500.MAF 1.75 16.5 4621 -6.7 7.7 8.7 16.8 11.9 0.8 2.10 45 -03062100.MAF 1.75 10.7 1489 -7.7 7.0 14.5 29.4 6.5 0.3 1.90 74 -03061700.RAP 1.75 10.1 1501 -11.1 7.1 5.7 17.5 2.9 0.2 1.90 92 -03061700.FFC 1.75 16.3 2826 -8.5 6.2 7.0 13.0 5.5 0.4 0.60 32 -03061500.LBF 1.75 10.7 1717 -11.3 6.3 10.6 12.0 6.6 0.3 1.70 51 -03061500.FWD 1.75 14.3 2433 -11.3 6.9 12.1 5.0 5.3 0.7 1.70 32 -03061300.LBF 1.75 12.0 2759 -11.3 7.2 15.4 16.3 13.0 0.9 2.60 179 -03061100.OUN 1.75 14.5 3045 -9.3 7.2 17.8 13.1 12.1 1.2 2.00 135 -03060400.LCH 1.75 19.7 4988 -6.7 5.8 13.3 17.2 7.3 1.1 0.60 44 -03050700.BMX 1.75 17.4 4489 -10.5 7.0 26.5 28.4 12.2 3.5 2.10 101 -03050200.FFC 1.75 13.7 3289 -13.5 6.5 9.8 9.5 7.5 0.9 0.90 55 -03043000.BNA 1.75 12.9 3348 -15.3 7.2 5.0 5.5 4.1 0.5 1.30 30 -03042900.MAF 1.75 9.9 2371 -13.5 8.4 23.4 21.0 15.5 1.4 1.40 165 -03042900.AMA 1.75 9.6 2549 -14.5 8.3 25.3 33.7 16.5 1.7 1.60 237 -03032600.SHV 1.75 11.3 1723 -18.3 8.5 17.7 18.0 8.0 1.2 1.40 108 -03032600.LZK 1.75 11.3 2073 -18.5 6.7 14.3 15.4 9.5 0.9 2.20 67 -03031500.BMX 1.75 10.9 1555 -19.1 7.4 8.5 21.2 12.3 0.5 1.30 94 -02082300.LBF 1.75 17.8 6193 -10.1 8.0 12.9 28.1 3.8 2.6 3.10 10 -02072800.DDC 1.75 12.9 2480 -5.3 7.4 10.6 11.1 10.7 0.3 1.40 155 -02072518.TBW 1.75 18.9 4523 -8.5 6.7 7.8 6.3 2.0 0.9 0.60 7 -02070200.AMA 1.75 12.2 2393 -6.5 7.3 18.4 11.3 20.8 0.6 1.60 353 -02062600.DTX 1.75 14.5 3079 -8.9 6.1 5.0 7.2 1.4 0.3 0.70 -1 -02061200.TOP 1.75 19.6 5029 -8.9 7.6 21.1 24.7 15.6 3.2 0.70 224 -02060700.MPX 1.75 9.2 1952 -15.1 7.7 22.8 25.3 16.2 1.1 1.50 758 -02060402.CHS 1.75 13.7 2637 -10.1 7.6 9.7 10.8 11.7 0.6 0.80 33 -02052900.TOP 1.75 12.8 2661 -13.7 6.8 5.0 10.7 7.3 0.4 1.30 48 -02052800.MAF 1.75 12.7 3115 -11.1 8.0 20.6 24.7 16.4 1.7 2.10 103 -02052800.LBF 1.75 11.3 3387 -15.1 9.0 18.8 30.1 11.6 2.2 1.90 184 -01062000.DTX 1.75 14.9 3813 -12.5 6.9 8.4 17.6 15.0 0.9 2.80 -45 -01061800.TBW 1.75 15.9 3469 -9.7 5.9 5.0 6.6 1.5 0.4 0.80 23 -00090400.LBF 1.75 11.2 2441 -9.5 7.8 21.4 24.1 18.5 1.0 1.50 309 -00080800.OAX 1.75 18.7 4679 -8.1 7.8 16.4 25.1 10.8 2.1 3.00 185 -00080200.GGW 1.75 10.8 2057 -8.9 8.0 24.6 35.3 15.0 0.9 1.80 148 -00073100.JAX 1.75 17.6 3581 -8.9 6.0 6.6 5.5 4.7 0.5 0.60 27 -00072900.GSO 1.75 14.3 1962 -9.7 6.2 6.2 16.1 6.5 0.2 0.60 43 -00072700.LBF 1.75 18.1 5166 -8.9 8.7 17.5 26.1 12.2 2.9 2.20 351 -00072600.MPX 1.75 15.3 3240 -13.1 7.6 21.4 12.4 10.1 2.4 3.00 139 -00072600.MFL 1.75 18.3 4079 -8.5 6.6 5.2 5.6 2.4 0.5 0.60 18 -00072500.ABR 1.75 15.6 4195 -12.3 8.9 15.3 19.8 10.9 2.5 3.10 113 -00072200.LBF 1.75 12.8 3031 -11.5 7.6 27.5 23.7 14.5 2.1 2.60 247 -00072100.FFC 1.75 14.3 2149 -6.9 6.4 9.2 10.4 9.1 0.3 0.60 63 -00071800.AMA 1.75 14.4 3660 -4.7 6.9 9.1 7.7 5.9 0.4 1.50 79 -00071500.IAD 1.75 13.9 2186 -12.3 6.8 17.8 17.7 9.3 1.0 2.00 118 -00071300.ABR 1.75 13.6 2305 -8.7 6.7 29.3 44.3 21.7 1.2 2.00 278 -00070600.GGW 1.75 11.7 2743 -14.1 8.5 29.6 40.4 13.0 2.6 1.90 165 -00062400.LBF 1.75 14.8 4723 -9.7 8.6 17.4 29.6 9.8 2.3 2.00 126 -00062400.DDC 1.75 14.8 3499 -7.3 7.7 23.2 30.2 12.0 1.5 2.70 237 -00062200.DDC 1.75 14.3 3602 -8.7 7.0 15.4 23.4 16.2 1.1 2.90 157 -00061100.AMA 1.75 14.0 3932 -7.9 7.8 14.8 19.1 9.4 1.1 2.10 128 -00060300.ABQ 1.75 9.4 1267 -8.7 8.2 10.3 17.5 7.6 0.2 1.40 70 -00052900.GSO 1.75 14.3 1730 -11.1 6.2 28.7 35.1 17.6 1.1 1.20 139 -00051900.FWD 1.75 16.2 3610 -10.9 7.4 25.2 32.9 6.7 2.7 0.64 75 -00051200.TOP 1.75 16.7 5329 -7.3 6.5 25.1 29.2 21.0 2.4 3.70 216 -00033000.SHV 1.75 15.4 3548 -15.9 7.6 31.6 50.3 23.8 4.8 2.80 323 -94070100.GSO 1.50 13.8 2296 -10.3 5.4 8.1 14.3 6.6 0.3 0.60 40 -90082200.OUN 1.50 16.6 3350 -5.5 6.1 5.0 5.7 3.1 0.2 0.60 -7 -90082200.AHN 1.50 16.5 3247 -6.8 6.5 8.7 15.8 6.0 0.5 0.60 48 -90071000.DEN 1.50 13.5 3504 -8.2 8.0 25.4 20.1 16.7 1.8 2.50 41 -90041100.AHN 1.50 11.5 1096 -14.0 6.4 25.4 25.8 19.0 0.6 1.60 343 -90040200.GSO 1.50 8.7 984 -17.4 6.8 29.7 37.4 19.9 0.7 2.00 210 -89060200.AHN 1.50 13.2 1996 -7.3 6.1 5.0 5.0 3.2 0.1 -999.00 18 -03091800.INL 1.50 13.7 1863 -13.5 7.5 24.7 29.2 15.3 1.4 -999.00 384 -03031700.MHX 1.50 12.1 1241 -13.1 5.4 19.1 32.8 11.5 0.5 0.70 37 -02072500.LCH 1.50 20.2 5453 -7.3 5.9 8.5 11.3 5.5 0.9 0.60 66 -01062600.RNK 1.50 11.1 1653 -11.9 5.7 13.7 30.3 8.3 0.4 2.10 88 -01062600.GSO 1.50 11.9 929 -11.7 6.0 17.8 25.6 10.4 0.3 0.60 106 -00090200.SLC 1.50 9.1 1641 -14.7 8.4 16.1 24.8 20.1 0.7 1.70 101 -00051800.GSO 1.50 11.9 1767 -13.7 6.5 16.4 31.1 7.6 0.7 1.60 124 -94062500.GSO 1.25 15.9 2334 -5.4 5.6 9.9 5.2 12.9 0.3 0.60 103 -90041400.OUN 1.25 10.8 1408 -18.2 7.9 23.5 33.0 17.5 1.2 2.20 146 -04100400.AMA 1.25 10.5 1672 -13.5 7.6 23.5 31.9 10.7 1.0 2.40 28 -04032700.RAP 1.25 8.5 2052 -15.5 8.0 19.0 17.5 12.6 0.9 1.50 161 -03090800.PHX 1.25 12.1 2268 -6.7 6.7 10.7 16.8 8.2 0.3 1.20 90 -03090800.FGZ 1.25 8.3 663 -8.3 7.7 15.0 17.0 11.2 0.1 1.20 130 -03040500.ILN 1.25 10.4 1856 -15.7 6.5 20.8 25.6 17.7 0.9 2.20 233 -00072000.LZK 1.25 16.4 3973 -6.7 6.8 12.6 12.7 8.3 0.8 1.10 102 -00071100.DDC 1.25 16.4 4707 -4.1 6.8 5.0 8.7 6.0 0.2 2.60 136 -00030400.BMX 1.25 11.4 1311 -14.9 5.7 42.9 54.3 21.1 1.2 1.40 205 -99061200.ILN 1.00 14.7 3299 -8.3 5.8 5.0 5.0 8.2 0.3 1.10 32 -98052200.BNA 1.00 17.3 3709 -10.7 6.4 9.2 7.9 10.4 0.9 0.90 83 -97081800.FFC 1.00 18.4 3564 -6.1 6.1 5.0 5.0 4.4 0.3 0.60 37 -97081700.PIT 1.00 21.1 3951 -7.9 6.9 12.7 23.0 15.4 1.3 0.60 224 -97081700.DVN 1.00 22.3 5790 -8.3 7.5 14.3 11.8 12.3 2.6 1.00 137 -93092500.OUN 1.00 16.1 2895 -6.7 6.2 24.5 27.2 16.0 1.1 0.60 264 -91060500.CKL 1.00 16.9 3345 -7.5 6.3 5.0 5.0 9.2 0.3 0.60 52 -91060500.AHN 1.00 15.3 3036 -8.1 6.7 5.7 13.0 11.6 0.3 0.60 72 -90101800.GGG 1.00 14.2 1596 -10.6 6.4 20.0 27.9 12.5 0.7 0.60 114 -90100800.GGG 1.00 16.8 2689 -6.0 5.8 14.2 17.2 8.9 0.5 0.60 70 -90092900.MAF 1.00 12.2 1606 -8.0 6.0 15.0 28.7 11.3 0.3 0.80 35 -90083000.GSO 1.00 16.4 3552 -9.3 6.0 20.1 18.2 14.1 1.5 0.60 37 -90082300.HTS 1.00 15.2 707 -7.7 6.2 7.0 8.5 3.6 0.1 0.60 -4 -90082100.OUN 1.00 19.2 5290 -6.7 6.9 8.3 5.0 6.2 0.9 0.60 38 -90081900.AMA 1.00 13.6 2596 -7.9 7.0 5.1 5.1 3.8 0.2 0.80 45 -90080200.MAF 1.00 14.4 1702 -6.2 6.1 9.7 12.2 2.8 0.2 0.60 27 -90072600.GGW 1.00 10.2 1514 -10.6 7.0 15.6 16.6 7.9 0.4 1.80 55 -90072500.DDC 1.00 11.9 1703 -8.0 6.8 14.0 17.5 10.1 0.3 1.40 208 -90072200.TBW 1.00 17.8 3345 -5.7 6.0 5.0 7.8 3.6 0.2 0.60 34 -90072000.DEN 1.00 11.7 1698 -7.2 7.4 16.1 20.8 14.0 0.4 2.10 182 -90071800.AMA 1.00 11.4 1482 -6.5 6.7 14.8 26.1 8.4 0.2 1.10 98 -90071100.GSO 1.00 15.2 3487 -6.6 5.9 5.0 9.1 7.5 0.2 0.60 38 -90070900.GSO 1.00 17.6 4051 -5.3 5.6 10.2 10.5 6.1 0.5 0.80 73 -90062400.OUN 1.00 11.9 1572 -10.0 7.9 21.6 25.2 14.1 0.7 -999.00 80 -90062300.HTS 1.00 14.5 1346 -8.5 5.8 27.1 36.9 19.1 0.6 0.60 231 -90061000.GSO 1.00 15.3 2409 -8.8 6.1 9.7 14.5 11.1 0.4 0.60 145 -90050400.CKL 1.00 14.0 1534 -10.6 6.4 20.1 25.8 10.8 0.7 0.60 141 -89082700.DDC 1.00 16.9 4549 -7.4 7.6 11.3 24.3 1.4 1.1 2.10 11 -89082000.UMN 1.00 17.3 3524 -6.0 6.2 20.6 14.9 13.6 1.1 0.80 350 -89080600.OUN 1.00 16.3 3439 -5.4 6.8 10.2 12.1 9.7 0.5 0.80 101 -89073100.GTF 1.00 9.5 1858 -9.3 8.9 10.8 21.7 10.3 0.4 1.20 106 -89072800.DAY 1.00 16.4 2617 -7.8 5.7 13.5 11.3 7.5 0.6 0.60 83 -89072400.VCT 1.00 14.8 2953 -9.6 6.2 7.7 13.3 9.5 0.5 0.60 120 -89071200.TOP 1.00 16.6 3182 -8.1 7.6 12.6 8.2 13.2 0.9 1.60 157 -89070600.OUN 1.00 12.9 1373 -6.0 6.2 6.0 12.2 11.3 0.1 0.60 64 -89062900.AMA 1.00 12.6 2035 -8.2 8.6 14.8 26.0 13.0 0.6 2.30 165 -89062800.HTS 1.00 17.6 3659 -8.0 5.8 15.4 21.4 7.4 1.1 0.60 62 -89061900.CKL 1.00 16.7 3363 -9.6 6.4 14.5 12.2 12.2 1.1 0.60 103 -89061600.TBW 1.00 16.4 3463 -7.6 5.7 10.2 6.4 5.9 0.6 0.60 36 -89061400.JAN 1.00 16.0 3274 -11.5 7.1 11.3 8.2 9.4 1.1 1.00 57 -89061200.JAN 1.00 17.7 3616 -9.1 6.5 15.3 5.8 7.5 1.3 0.60 84 -89060500.1M1 1.00 15.8 2380 -8.2 6.0 14.7 13.0 10.3 0.6 0.60 19 -04082800.OUN 1.00 16.0 4225 -7.1 7.4 5.0 5.0 7.0 0.4 1.50 101 -04081700.TUS 1.00 13.1 2027 -8.9 7.1 13.2 13.3 8.8 0.5 1.00 96 -04080900.TOP 1.00 14.3 2676 -11.5 7.4 11.9 15.6 5.9 0.9 0.90 82 -04051200.AMA 1.00 9.7 1922 -11.5 8.0 15.0 8.4 19.1 0.6 1.60 282 -04051000.FFC 1.00 11.4 2006 -11.1 5.4 5.0 11.0 4.0 0.2 1.90 -15 -04032100.FWD 1.00 13.1 2648 -15.5 8.2 12.9 20.8 4.9 1.3 2.80 29 -04031500.DRT 1.00 11.6 1498 -15.5 7.0 16.8 24.5 6.6 0.7 1.40 123 -03090900.TUS 1.00 11.5 2363 -8.3 7.3 7.9 11.8 2.8 0.3 1.10 12 -03060900.RNK 1.00 15.0 2965 -9.1 6.2 24.1 29.2 18.9 1.4 1.20 134 -03060200.DDC 1.00 11.1 1960 -9.5 7.9 17.5 20.6 11.9 0.6 2.00 222 -03052700.ABQ 1.00 7.1 732 -9.9 8.5 14.7 20.6 3.1 0.1 0.60 12 -03052600.TFX 1.00 8.3 994 -10.9 8.0 16.0 15.9 9.1 0.3 1.30 59 -03051800.XMR 1.00 16.0 3602 -9.5 7.0 8.6 10.7 5.6 0.7 0.90 -7 -03051800.TBW 1.00 16.1 3839 -8.7 6.5 5.7 11.9 6.2 0.4 1.10 3 -03051200.JAX 1.00 15.9 3060 -7.9 6.9 13.2 20.0 10.1 0.8 -999.00 48 -03051100.MHX 1.00 16.0 3585 -9.3 7.3 16.2 15.0 11.9 1.4 0.90 104 -03050100.FFC 1.00 11.1 1429 -13.5 6.6 6.9 6.4 1.0 0.2 1.60 5 -03042800.MFL 1.00 16.7 2707 -10.7 6.4 11.7 25.5 12.3 0.8 0.60 83 -03042400.SHV 1.00 13.1 1455 -12.9 7.2 26.1 36.8 15.2 1.0 0.60 278 -03041800.DNR 1.00 5.3 1063 -18.1 8.6 11.0 43.9 5.9 0.2 0.60 41 -03040500.LZK 1.00 10.7 1751 -14.9 6.6 27.4 33.1 12.6 1.2 2.30 65 -03032100.DTX 1.00 8.7 1602 -21.3 6.6 13.3 27.1 7.7 0.6 1.10 80 -03032000.ILX 1.00 8.0 713 -21.9 6.9 5.0 11.4 5.4 0.1 1.40 -26 -03031500.TBW 1.00 15.9 3398 -13.7 7.0 18.6 27.3 3.9 2.2 0.90 32 -02080400.SGF 1.00 17.7 4328 -5.5 6.5 5.0 7.6 3.8 0.3 1.50 -11 -02080300.BMX 1.00 18.4 5098 -6.5 5.8 9.6 10.8 11.5 0.8 1.40 33 -02072900.AMA 1.00 13.6 3610 -6.5 7.8 12.5 12.2 13.6 0.7 2.00 164 -02072700.RAP 1.00 9.4 1688 -9.3 7.5 21.0 28.6 14.5 0.5 1.30 139 -02072600.TOP 1.00 15.6 3390 -5.9 7.5 16.9 16.9 11.9 0.9 2.20 168 -02072000.JAN 1.00 17.6 3501 -6.7 6.1 6.1 7.9 5.7 0.3 0.60 58 -02070300.LBF 1.00 14.1 3158 -5.9 7.5 14.0 6.2 11.5 0.6 1.20 158 -02070200.FFC 1.00 16.3 4268 -9.7 6.6 7.8 5.0 7.3 0.8 0.60 46 -02060700.ABR 1.00 9.0 2252 -14.7 8.1 12.4 18.1 8.2 0.7 1.20 118 -02060400.CHS 1.00 15.2 3170 -10.1 7.6 9.7 10.8 11.7 0.8 0.60 33 -02052700.AMA 1.00 9.7 2332 -11.1 7.2 14.5 11.8 13.0 0.6 1.40 198 -02051800.CRP 1.00 20.3 5902 -10.5 7.4 22.6 23.2 10.7 4.8 1.60 86 -01062600.LBF 1.00 12.7 3931 -8.1 8.1 9.3 8.1 8.1 0.7 1.50 119 -01062100.ABR 1.00 8.1 1118 -19.3 7.0 5.0 12.4 3.6 0.1 1.30 14 -01061900.JAX 1.00 17.2 2345 -9.5 6.1 5.0 8.3 5.0 0.3 0.60 13 -00080700.TOP 1.00 17.3 4476 -7.5 7.2 17.8 22.9 11.7 1.7 1.80 72 -00072900.ILN 1.00 14.3 2735 -11.5 6.7 13.4 21.0 8.0 0.9 0.60 68 -00072900.CHS 1.00 19.1 2462 -7.5 5.6 9.3 13.2 3.3 0.4 0.60 4 -00072800.TOP 1.00 15.3 3666 -10.3 7.6 22.0 26.4 9.1 2.2 2.60 115 -00072800.LBF 1.00 17.1 5581 -7.7 8.1 25.0 21.1 9.6 3.4 3.10 187 -00072700.JAN 1.00 12.5 2066 -10.7 6.4 8.0 8.4 4.2 0.3 1.00 -50 -00072300.OTX 1.00 9.0 2088 -12.3 8.2 17.2 21.1 7.8 0.7 1.20 43 -00071900.GYX 1.00 11.4 997 -13.3 6.0 27.0 36.1 18.8 0.6 1.00 107 -00071700.TOP 1.00 19.7 3927 -8.7 7.9 8.9 14.1 14.5 1.1 2.40 198 -00071500.SHV 1.00 17.2 4004 -5.9 6.0 5.0 8.6 6.2 0.3 0.60 46 -00071400.GRB 1.00 12.0 1743 -12.3 6.9 21.5 42.9 13.4 0.9 1.70 195 -00071200.DDC 1.00 14.4 2910 -5.5 7.2 11.3 11.7 10.8 0.4 1.40 196 -00070700.RAP 1.00 14.2 4065 -7.7 8.6 29.4 33.3 10.8 2.6 2.10 111 -00070400.DDC 1.00 18.1 5003 -7.1 7.6 9.7 19.2 11.4 1.1 2.40 114 -00070300.OAX 1.00 18.5 4633 -6.3 6.9 10.6 19.6 9.9 0.9 1.90 133 -00070300.DDC 1.00 17.2 4482 -5.9 7.5 13.6 22.7 11.7 1.0 2.40 66 -00070200.RAP 1.00 15.6 5621 -9.7 8.7 21.5 22.7 15.9 3.6 2.20 263 -00070200.DDC 1.00 16.8 3390 -5.7 6.6 14.2 21.9 5.5 0.7 1.30 38 -00063000.PIT 1.00 9.9 1086 -15.9 5.5 22.0 37.9 8.1 0.5 1.80 77 -00062600.TOP 1.00 17.8 4052 -8.9 7.6 5.0 23.9 2.4 0.6 2.30 26 -00062600.DDC 1.00 18.4 2618 -6.1 6.7 15.8 16.9 14.3 0.7 1.60 51 -00062300.MHX 1.00 18.6 4167 -8.7 6.1 6.0 6.1 9.7 0.6 0.60 89 -00062100.TBW 1.00 17.1 3180 -8.5 6.4 12.2 19.0 8.9 0.8 0.60 49 -00060200.TOP 1.00 16.1 3517 -9.3 6.9 10.4 16.3 4.9 0.9 0.80 39 -00060200.DVN 1.00 16.4 3451 -9.3 7.3 14.1 11.0 14.2 1.2 0.60 175 -00060100.ILX 1.00 16.1 3208 -9.1 7.0 17.9 15.6 20.7 1.3 1.80 163 -00053000.LBF 1.00 10.4 2258 -9.7 9.2 27.2 31.9 16.9 1.3 1.10 294 -00051400.TLH 1.00 18.3 3542 -9.9 6.9 5.0 5.0 5.4 0.5 1.00 -4 -98062500.DDC 0.88 11.9 2667 -7.3 8.7 25.1 34.7 12.4 1.2 1.40 224 -97010900.SIL 0.88 13.1 909 -13.6 6.7 31.9 37.0 33.7 1.0 -999.00 226 -90091900.OUN 0.88 18.0 3878 -6.7 6.2 11.9 20.5 12.1 0.8 0.60 119 -90073000.AMA 0.88 12.2 943 -7.5 6.3 12.7 18.1 8.4 0.2 0.60 14 -90071000.PIT 0.88 16.6 3362 -6.7 6.3 19.7 14.7 14.3 1.1 0.60 124 -89082900.GGG 0.88 18.5 3979 -4.6 6.0 5.0 5.0 1.6 0.2 0.60 3 -89082600.AHN 0.88 17.1 3463 -5.6 5.8 11.3 8.6 4.0 0.5 0.60 41 -89082500.AHN 0.88 16.9 3533 -5.1 6.1 5.0 8.1 2.7 0.2 0.60 5 -89072700.AHN 0.88 17.5 3996 -6.9 6.5 5.0 6.8 7.1 0.4 0.60 66 -89062700.DEN 0.88 8.6 931 -11.1 7.6 14.3 14.3 10.8 0.2 1.80 122 -89062600.UMN 0.88 16.2 3812 -6.9 6.3 5.0 10.8 2.0 0.3 0.60 -14 -89061200.AMA 0.88 13.2 3301 -11.7 8.7 12.9 25.2 9.2 1.3 2.30 167 -04100400.GSO 0.88 13.2 1385 -14.9 6.5 15.2 26.8 10.4 0.6 1.40 101 -04092000.OAK 0.88 7.3 242 -17.9 5.5 27.4 30.4 6.5 0.1 0.70 56 -04091900.LCH 0.88 15.9 2433 -6.9 5.8 5.0 15.6 7.7 0.2 0.60 6 -04082700.ABR 0.88 10.2 1433 -15.1 6.7 14.4 40.5 5.3 0.5 3.00 28 -04081800.PHX 0.88 10.5 1709 -9.1 7.3 5.0 9.2 6.0 0.1 0.80 15 -04040900.AMA 0.88 8.2 1515 -16.7 7.0 17.9 23.0 14.7 0.6 1.60 139 -03102600.CRP 0.88 17.9 3226 -9.9 6.3 15.2 34.5 9.8 1.2 0.60 17 -03062000.GGW 0.88 9.2 1032 -9.7 8.1 9.8 17.1 8.3 0.2 1.30 76 -03061600.TOP 0.88 12.4 1944 -11.9 6.4 5.0 5.0 5.8 0.2 1.00 3 -03060600.ABR 0.88 8.1 888 -19.9 6.8 17.3 14.2 9.2 0.4 1.50 47 -03060300.JAX 0.88 16.1 3513 -10.1 7.6 11.1 10.3 11.4 1.1 0.60 111 -03050400.BIS 0.88 8.2 1467 -18.7 7.4 15.4 16.1 8.8 0.6 1.60 86 -03031400.TLH 0.88 11.6 2141 -13.1 6.3 10.5 9.0 5.7 0.5 1.10 39 -02052900.OAX 0.88 13.0 2575 -13.3 7.1 7.5 7.0 10.0 0.5 2.60 127 -01062600.CRP 0.88 16.6 3837 -8.5 6.4 5.0 8.9 7.1 0.4 0.60 53 -01062200.DVN 0.88 10.3 1285 -18.1 6.5 10.8 11.8 8.7 0.4 1.00 66 -00090300.OAX 0.88 12.6 3099 -10.1 8.7 16.9 21.6 9.5 1.3 1.40 126 -00080700.DTX 0.88 19.4 4231 -7.3 6.0 16.6 31.6 10.6 1.4 0.60 78 -00080500.LZK 0.88 16.1 3872 -6.3 5.6 9.4 14.6 7.3 0.5 0.80 6 -00080400.BNA 0.88 16.3 3453 -9.9 6.8 10.9 16.0 9.1 0.9 0.60 83 -00080300.PIT 0.88 14.9 2780 -9.7 6.2 15.5 29.2 9.1 0.9 0.60 81 -00080200.DVN 0.88 16.6 4183 -9.7 6.6 11.2 16.4 13.3 1.1 1.10 169 -00072800.BMX 0.88 13.2 2147 -9.5 6.2 8.0 11.4 6.0 0.3 0.70 35 -00070600.DDC 0.88 12.3 2581 -7.5 8.5 9.4 10.0 10.7 0.4 1.80 97 -00061800.RAP 0.88 7.4 1396 -18.9 7.1 14.0 34.9 7.4 0.4 1.40 270 -00061100.DDC 0.88 14.3 3471 -7.9 6.9 11.0 20.2 14.0 0.7 2.40 53 -00021800.JAN 0.88 12.5 1866 -14.9 6.7 27.5 38.9 16.2 1.5 0.70 270 -90052100.SIL 0.85 16.6 3505 -10.6 6.7 8.4 13.0 10.9 0.8 0.60 70 -91051700.JAN 0.80 15.5 2683 -8.9 6.5 5.0 7.8 0.6 0.3 0.60 2 -03052100.TBW 0.80 15.8 2941 -9.5 6.2 5.0 5.4 7.1 0.3 0.60 27 -98081000.SHV 0.75 16.8 3464 -6.5 5.9 5.0 5.0 4.2 0.3 0.60 42 -98062500.JAN 0.75 19.0 3507 -6.1 6.0 5.0 8.6 7.1 0.3 0.70 -1 -97082200.ILN 0.75 9.6 520 -16.3 5.8 17.5 30.9 3.9 0.2 0.70 50 -97081800.SLC 0.75 8.3 931 -10.3 8.5 16.1 22.9 13.6 0.2 1.40 203 -97081700.TBW 0.75 18.5 3152 -7.3 6.2 5.0 5.0 1.8 0.3 0.60 8 -97062400.MAF 0.75 14.1 3277 -9.9 8.9 11.5 8.6 13.0 1.1 1.60 108 -97061700.BMX 0.75 18.2 3829 -6.9 5.9 12.4 13.0 6.9 0.8 0.60 48 -94070200.LCH 0.75 17.0 2754 -6.8 6.4 10.7 11.0 12.4 0.5 0.60 84 -94062400.HTS 0.75 16.5 2715 -5.5 5.3 8.5 15.0 4.7 0.3 0.60 39 -94062400.GGG 0.75 18.0 3599 -5.5 6.3 11.0 14.2 8.2 0.6 0.60 98 -91060600.CKL 0.75 16.3 2864 -8.6 6.4 8.9 11.4 6.2 0.5 0.60 21 -91051700.TBW 0.75 16.1 3306 -7.5 5.4 5.0 5.0 3.8 0.2 0.60 -5 -90101700.MAF 0.75 12.3 2870 -12.5 8.0 14.9 16.2 7.7 1.2 2.30 78 -90083000.ACY 0.75 15.2 2413 -9.3 5.8 13.9 22.7 9.0 0.6 0.60 62 -90082500.OVN 0.75 17.2 3413 -7.1 6.4 12.0 21.9 10.0 0.7 0.70 181 -90082500.OUN 0.75 15.7 2800 -6.4 6.6 5.0 11.9 5.3 0.2 0.60 63 -90082300.GGG 0.75 16.2 3016 -5.9 6.0 5.0 5.5 5.3 0.2 0.60 35 -90082200.BNA 0.75 15.5 2573 -6.1 6.1 9.1 12.7 8.7 0.3 0.60 -10 -90082000.PIA 0.75 19.3 4350 -6.5 6.2 12.0 9.9 9.4 0.9 0.60 67 -90081900.DEN 0.75 11.7 1982 -7.8 7.6 10.2 22.1 6.4 0.3 1.70 25 -90081700.CHS 0.75 19.5 3889 -6.9 5.7 14.2 20.9 11.2 1.0 0.60 100 -90081400.MAF 0.75 13.7 1599 -7.1 6.2 5.0 16.6 2.3 0.1 0.60 35 -90081400.ALB 0.75 14.6 1251 -7.6 5.7 31.1 21.6 20.7 0.6 0.60 261 -90080400.STC 0.75 13.1 2229 -12.5 7.3 5.3 20.0 8.7 0.3 1.40 45 -90073100.JAN 0.75 14.6 2834 -7.3 6.1 5.1 5.0 0.7 0.2 0.60 -3 -90072800.TOP 0.75 16.5 3218 -7.8 6.7 8.8 11.3 9.8 0.6 0.90 282 -90072700.DDC 0.75 14.7 3550 -7.0 7.6 7.6 7.2 6.0 0.5 2.20 84 -90072200.PAH 0.75 16.9 2541 -5.6 5.7 13.3 15.3 11.4 0.4 0.60 80 -90072200.CHS 0.75 18.4 3537 -7.5 6.2 8.3 10.2 7.1 0.6 0.60 88 -90070800.TBW 0.75 20.0 5452 -8.1 6.5 7.8 15.4 5.9 1.0 0.60 11 -90070300.SIL 0.75 18.4 3250 -5.7 5.8 11.8 14.5 7.5 0.5 0.60 79 -90061000.AHN 0.75 14.8 2847 -8.2 5.9 8.6 9.9 5.6 0.4 0.60 50 -90060700.TBW 0.75 17.0 3686 -8.6 6.0 5.0 7.3 4.1 0.4 1.80 8 -90060400.PIT 0.75 9.5 390 -12.5 5.6 26.0 37.7 14.6 0.2 0.60 57 -90052500.MAF 0.75 13.1 3262 -7.2 7.9 22.0 30.6 12.4 1.2 2.10 97 -90042400.1M1 0.75 12.8 2374 -12.6 6.7 14.0 8.3 6.6 0.8 1.50 56 -90042200.SEP 0.75 13.3 2775 -11.7 6.5 10.2 20.8 8.1 0.7 2.10 98 -90042100.OUN 0.75 12.4 1915 -14.1 6.5 25.3 31.9 13.1 1.2 2.30 138 -90033100.TBW 0.75 14.8 2515 -10.0 5.6 14.0 15.0 12.0 0.7 0.60 135 -89102800.OUN 0.75 12.0 1679 -12.7 6.8 10.1 27.1 8.3 0.4 1.00 115 -89081900.HON 0.75 13.1 984 -7.6 7.1 14.0 17.9 12.1 0.2 -999.00 244 -89081200.GRB 0.75 11.3 1782 -14.8 6.7 5.0 9.5 3.9 0.2 0.60 39 -89073100.TOP 0.75 14.5 2685 -6.4 6.7 9.8 13.0 12.0 0.4 0.60 117 -89073000.PAH 0.75 17.9 3630 -7.0 6.4 11.4 9.0 7.4 0.8 0.60 58 -89072900.SIL 0.75 18.8 4031 -6.8 6.3 5.0 5.0 3.9 0.4 0.60 37 -89071100.DDC 0.75 11.9 1858 -8.1 7.6 8.5 14.0 12.4 0.3 2.10 249 -89070800.AHN 0.75 16.8 2876 -6.5 5.8 5.0 5.0 4.3 0.2 0.60 33 -89062700.PIT 0.75 16.0 2924 -9.1 6.8 8.1 5.0 7.9 0.5 0.60 69 -89062300.OUN 0.75 16.0 3217 -7.1 5.9 12.8 14.9 6.9 0.6 0.60 113 -89062300.GRB 0.75 14.6 1729 -8.4 6.2 10.7 10.8 10.0 0.3 -999.00 139 -89062200.CKL 0.75 16.1 2986 -10.1 6.7 10.0 8.5 6.8 0.7 0.60 76 -89061600.ACY 0.75 16.5 2243 -7.6 5.9 18.8 19.1 19.5 0.7 0.60 217 -89061500.AHN 0.75 14.7 1717 -7.5 5.5 10.0 9.8 11.8 0.2 0.60 91 -89061300.CKL 0.75 16.1 2677 -8.6 6.1 15.9 7.3 11.5 0.8 0.60 102 -89060700.AHN 0.75 14.2 2402 -13.0 6.6 12.3 18.6 2.7 0.8 0.60 37 -89060400.PAH 0.75 16.4 3173 -9.7 5.8 14.2 14.7 15.5 0.9 0.60 90 -89052800.CKL 0.75 15.4 2098 -8.1 6.2 11.8 13.5 8.0 0.4 0.60 43 -04100400.CHS 0.75 15.3 1850 -10.7 6.0 22.1 32.7 13.4 0.9 0.60 81 -04092800.DNR 0.75 7.9 698 -13.9 7.1 17.7 21.0 12.4 0.2 1.00 112 -04082800.PIT 0.75 18.3 3258 -6.1 5.6 7.8 6.8 10.4 0.4 0.60 106 -04082800.JAN 0.75 18.0 3714 -7.5 6.4 5.0 5.0 1.0 0.4 0.60 12 -04081900.OTX 0.75 9.8 1929 -11.3 7.4 9.9 15.1 6.2 0.4 1.50 43 -04081900.DDC 0.75 11.7 2146 -6.3 6.2 5.0 11.0 10.2 0.1 0.70 15 -04081700.PHX 0.75 12.6 2729 -7.9 7.1 8.0 6.2 6.2 0.3 1.30 60 -04052300.BUF 0.75 13.8 1807 -10.6 5.8 22.4 24.0 18.8 0.8 0.60 239 -04051700.FFC 0.75 12.2 2077 -12.1 6.4 5.0 11.6 2.9 0.2 0.80 0 -04030500.LZK 0.75 12.4 745 -10.1 5.8 39.6 53.2 27.8 0.5 0.60 468 -03111300.BUF 0.75 8.1 418 -20.5 6.7 46.9 65.5 18.0 0.5 1.50 335 -03091000.JAN 0.75 15.0 1929 -9.5 6.0 10.8 22.1 8.1 0.4 0.60 83 -03090900.MAF 0.75 12.1 2389 -7.9 7.0 18.1 17.8 12.1 0.7 2.20 222 -03090900.GJT 0.75 6.8 996 -12.3 9.1 17.7 28.1 8.5 0.3 0.70 199 -03062200.IAD 0.75 10.5 1215 -17.1 5.8 15.1 9.7 9.3 0.4 1.10 79 -03062100.RAP 0.75 11.9 2338 -10.3 7.2 8.1 14.4 15.0 0.4 2.40 137 -03062000.BOI 0.75 7.0 491 -12.5 8.2 23.3 18.1 17.9 0.2 1.00 141 -03061900.TFX 0.75 8.6 1802 -9.3 8.2 10.8 13.4 13.1 0.3 1.00 178 -03061500.SHV 0.75 16.2 2511 -9.9 6.3 21.1 32.8 13.5 1.2 0.60 91 -03061222.XMR 0.75 17.1 2144 -7.9 6.1 5.0 6.1 5.2 0.2 0.60 65 -03061000.JAX 0.75 16.0 2482 -8.7 6.7 11.3 22.4 10.8 0.6 0.60 13 -03060700.MFL 0.75 18.2 3041 -6.7 5.6 5.0 9.3 0.9 0.2 0.60 5 -03052400.PIT 0.75 10.0 707 -16.7 6.5 26.5 23.6 12.1 0.5 1.00 65 -03050200.BMX 0.75 12.4 2216 -12.9 6.6 6.7 7.6 4.6 0.4 0.70 9 -03050100.DNR 0.75 6.7 1011 -20.1 8.0 33.5 27.3 12.5 0.8 1.20 108 -03042300.DNR 0.75 6.7 1183 -16.1 7.9 19.1 35.2 12.2 0.4 1.20 265 -03040922.XMR 0.75 15.5 2568 -10.3 5.6 31.0 38.3 12.7 1.6 0.60 34 -03032000.SGF 0.75 7.6 909 -22.1 6.7 10.5 8.6 18.2 0.2 1.40 205 -03031500.OTX 0.75 6.3 801 -26.3 7.5 24.9 28.7 18.3 0.6 1.50 240 -02072000.LZK 0.75 21.6 6551 -8.5 6.9 10.2 6.8 8.7 1.9 0.90 145 -02062500.LBF 0.75 11.7 3690 -10.3 9.2 7.2 9.1 5.0 0.7 1.30 45 -02060400.JAX 0.75 15.3 3128 -8.1 6.5 5.0 6.5 0.3 0.3 0.60 15 -02051500.PIT 0.75 5.9 521 -27.9 7.9 14.7 14.3 17.3 0.2 1.10 74 -01062400.BIS 0.75 13.7 4781 -10.9 9.0 18.7 27.1 15.0 2.7 1.70 249 -00090200.SHV 0.75 12.1 1896 -7.5 7.0 5.0 5.0 5.2 0.1 0.70 15 -00080400.LCH 0.75 15.7 3045 -7.5 5.6 5.0 12.8 4.7 0.2 0.60 28 -00072400.GGW 0.75 10.9 3240 -11.1 8.5 26.1 22.5 12.5 2.0 1.40 54 -00072300.GSO 0.75 16.5 2443 -9.1 5.7 20.6 22.2 6.6 1.0 0.60 88 -00072100.TBW 0.75 18.9 4845 -6.9 6.4 7.0 10.7 7.4 0.6 0.90 56 -00071900.JAN 0.75 19.7 3841 -6.1 6.1 7.5 6.9 5.7 0.5 0.60 32 -00071800.JAN 0.75 20.3 3305 -5.5 6.0 13.9 14.4 13.1 0.7 0.60 -56 -00071300.FWD 0.75 14.9 3103 -5.7 6.5 10.6 11.4 13.9 0.4 0.80 120 -00071300.DDC 0.75 15.1 3064 -3.7 6.1 6.2 10.6 9.2 0.1 0.60 0 -00062900.GRB 0.75 8.9 860 -18.9 6.4 17.0 24.4 14.1 0.4 1.10 108 -00062500.JAX 0.75 15.6 2442 -10.1 6.2 9.4 21.8 9.3 0.5 0.60 104 -00061900.WAL 0.75 17.4 2909 -7.9 6.3 11.3 9.5 11.6 0.7 0.60 134 -00061800.JAX 0.75 15.7 2677 -7.9 5.7 6.0 10.5 7.9 0.3 0.60 61 -00052200.LZK 0.75 12.1 2062 -13.5 6.2 22.6 32.5 17.7 1.1 1.40 162 -00050300.JAN 0.75 12.8 1438 -12.9 5.9 12.8 7.2 13.9 0.4 0.60 120 -00022400.LZK 0.75 10.6 1590 -18.1 7.0 25.0 34.2 17.2 1.2 2.50 270 + DATE / RAOB REPORT MUMR MUCAPE 500TEMP 7-5LR 0-6SHR 0-9SHR 0-3SHR SHIP MODEL SRH +95052300.DDC 6.00 15.3 4181 -9.6 7.5 19.4 26.8 23.4 2.0 3.00 325 +91051100.MAF 6.00 14.9 4692 -10.8 8.8 13.2 18.1 14.2 2.0 2.70 -37 +97061700.OUN 5.50 18.8 5751 -9.5 7.4 23.6 45.9 14.5 4.1 3.50 116 +99012200.LZK 5.00 12.3 2240 -17.3 7.6 26.3 32.1 23.0 2.2 3.00 294 +96061200.DDC 5.00 13.7 2820 -8.3 7.6 20.3 15.8 12.9 1.1 2.50 142 +92072600.DDC 5.00 17.4 4794 -4.6 6.8 17.4 14.6 18.2 1.0 0.80 176 +91052900.HON 5.00 15.2 3668 -12.3 8.0 40.7 36.0 25.0 5.1 3.50 269 +90070800.BIS 5.00 16.6 3717 -9.8 7.7 29.8 42.2 12.5 3.1 2.40 202 +57070300.RAP 5.00 15.8 4359 -6.7 7.7 22.9 39.3 13.9 1.8 3.40 130 +99060100.DDC 4.75 15.9 4387 -11.3 8.0 27.7 38.0 15.3 4.0 3.50 209 +99072600.LBF 4.50 16.4 4375 -6.7 7.9 12.9 16.1 9.5 1.1 2.60 60 +99050400.OUN 4.50 15.6 5195 -14.9 8.4 21.3 22.0 16.5 4.9 4.70 343 +99030600.LZK 4.50 11.7 1922 -18.5 8.2 22.8 39.2 21.4 1.8 2.10 360 +98052200.SGF 4.50 17.1 4642 -9.9 7.8 22.4 23.1 13.8 3.1 2.30 232 +98040800.ILX 4.50 10.2 1354 -19.7 7.2 21.2 25.1 20.1 0.9 2.60 180 +96102100.OUN 4.50 12.7 2995 -12.9 7.5 20.3 28.4 15.6 1.7 3.00 71 +96081100.LBF 4.50 13.3 2360 -8.4 6.2 26.1 22.0 26.5 1.0 2.60 326 +96062700.TFX 4.50 13.9 3835 -10.9 8.3 37.1 44.3 21.8 4.1 1.60 297 +96051000.TOP 4.50 15.6 3884 -11.1 8.8 18.3 22.3 22.1 2.4 3.30 234 +96050500.IAD 4.50 12.1 1906 -15.2 7.2 25.0 25.5 15.9 1.4 1.90 36 +96030700.JAN 4.50 14.0 2362 -12.5 6.8 34.9 36.9 16.8 2.2 0.60 196 +95060900.MAF 4.50 17.8 5653 -8.1 8.1 18.7 33.5 12.8 2.8 2.90 83 +95060500.MAF 4.50 14.9 4358 -8.6 7.6 23.2 32.0 16.0 2.2 2.90 181 +95051900.BMX 4.50 16.5 3340 -9.9 6.6 20.6 25.5 16.9 1.7 -999.00 247 +95051700.DDC 4.50 15.6 4878 -10.8 8.5 26.6 40.7 8.9 4.2 2.60 43 +94060800.LBF 4.50 13.0 3400 -9.5 7.8 18.7 18.4 8.1 1.4 2.40 109 +94042600.SEP 4.50 16.3 4409 -11.5 7.4 26.7 26.2 21.2 3.7 3.30 138 +94040300.OUN 4.50 10.1 2075 -17.0 7.6 31.2 39.3 18.7 1.9 2.10 163 +93101800.SEP 4.50 15.7 3958 -10.6 7.0 31.7 30.5 23.2 3.3 2.20 441 +93101300.SEP 4.50 14.2 3151 -13.1 8.0 22.3 31.8 15.0 2.4 2.90 307 +93092200.TOP 4.50 16.8 3665 -8.1 6.5 33.9 37.9 21.3 1.6 -999.00 460 +93092200.OVN 4.50 15.4 3685 -11.1 8.1 23.0 33.2 23.5 3.7 -999.00 216 +93072400.BIS 4.50 15.3 3597 -9.8 5.8 21.0 33.2 14.9 1.5 2.30 263 +93062700.OVN 4.50 15.0 3720 -10.0 6.3 22.3 28.9 9.4 1.8 3.10 140 +93060800.OUN 4.50 17.0 4917 -9.1 7.1 30.6 26.7 9.7 3.8 2.60 195 +93050100.DDC 4.50 11.1 3206 -16.5 8.0 24.0 29.9 15.4 2.6 3.70 194 +92073000.TOP 4.50 16.6 4074 -10.0 7.5 22.5 22.1 11.8 2.6 2.40 164 +92073000.OVN 4.50 16.6 4366 -11.4 7.4 22.3 23.7 13.9 3.1 3.20 216 +92062900.SEP 4.50 17.4 3761 -9.6 7.8 21.8 15.6 13.7 2.4 2.80 248 +92062800.DDC 4.50 13.8 2750 -11.3 7.8 20.6 41.3 15.2 1.6 2.90 315 +92062800.AMA 4.50 16.0 3950 -10.3 7.9 22.8 26.5 16.9 2.7 3.20 149 +91081400.GTF 4.50 11.5 2524 -13.2 8.5 25.8 28.9 15.3 1.9 2.00 213 +91072100.HON 4.50 20.1 5826 -6.1 6.8 22.8 33.9 14.3 2.5 1.90 180 +91042912.BRO 4.50 19.5 4180 -9.8 7.7 23.1 24.2 13.7 3.2 -999.00 254 +91032800.FNT 4.50 11.3 1681 -17.3 7.6 47.0 45.4 26.8 2.7 2.90 431 +90051600.OUN 4.50 16.7 4398 -9.0 7.6 25.5 44.9 23.2 2.9 3.60 180 +89080400.INL 4.50 17.4 3953 -11.5 8.3 18.6 29.2 7.3 2.8 1.00 36 +89070300.SEP 4.50 18.5 5261 -7.6 8.4 22.6 5.0 12.9 3.2 2.90 222 +89062700.GSO 4.50 17.6 4349 -7.3 6.3 14.2 6.4 7.8 1.1 0.90 52 +89060700.SEP 4.50 15.6 3272 -7.9 7.0 24.8 47.4 9.0 1.6 2.40 130 +89060400.MAF 4.50 14.0 3901 -10.0 8.5 20.6 33.6 6.6 2.2 2.20 58 +03062300.OAX 4.50 18.7 6203 -9.3 8.6 13.6 22.9 12.3 2.9 4.20 237 +03040400.OUN 4.50 11.9 2640 -15.1 7.3 24.0 23.9 13.4 1.9 2.30 187 +02091900.OUN 4.50 15.7 4268 -6.1 6.7 20.8 23.4 17.8 1.3 3.00 308 +02062400.ABR 4.50 17.2 5093 -10.5 8.2 26.3 30.9 16.9 4.5 3.50 187 +02060500.RNK 4.50 17.9 5399 -9.7 6.9 5.0 7.3 8.7 0.7 3.20 54 +02051200.TOP 4.50 15.8 4489 -11.9 8.1 26.0 26.5 13.7 4.1 3.30 224 +02051100.MAF 4.50 14.5 4658 -9.3 8.4 23.1 40.3 14.8 2.8 2.20 132 +01072100.GGW 4.50 13.5 3114 -10.7 7.7 28.3 30.5 15.8 2.2 2.80 354 +01071800.ABR 4.50 17.5 5177 -9.9 8.4 19.5 28.2 9.6 3.3 3.90 136 +01062100.DDC 4.50 15.2 4428 -10.7 7.8 19.0 25.2 13.4 2.4 3.20 400 +01061400.DDC 4.50 15.7 5244 -8.9 8.0 28.1 28.2 19.8 3.7 2.50 384 +01052500.JAN 4.50 13.5 3446 -15.1 7.5 21.8 31.4 17.4 2.6 2.70 240 +01051800.AMA 4.50 13.9 4695 -10.5 8.6 13.2 22.8 16.1 1.8 2.10 86 +01050700.SHV 4.50 15.7 2774 -12.5 6.5 15.7 22.1 9.0 1.3 1.70 110 +01050700.LZK 4.50 14.7 3512 -12.9 5.9 18.7 26.3 7.3 1.7 3.40 77 +01041500.DDC 4.50 13.1 3892 -18.3 9.0 43.1 54.7 24.4 8.2 2.50 233 +01040400.SGF 4.50 12.8 3277 -15.1 8.3 22.4 28.9 17.2 2.7 3.10 310 +04081000.DNR 4.25 12.9 3415 -9.1 8.0 15.0 15.4 16.2 1.1 3.20 270 +04071318.ILX 4.25 22.1 6811 -10.9 7.9 18.7 21.9 15.5 5.5 2.60 131 +04071300.LBF 4.25 19.5 7183 -7.3 8.6 14.7 20.5 10.3 2.9 3.70 68 +04071200.GGW 4.25 11.0 2390 -13.7 8.6 22.3 32.0 17.1 1.6 1.90 99 +04062200.AMA 4.25 13.8 3828 -8.9 8.0 26.2 40.5 17.8 2.2 2.30 141 +04053000.OUN 4.25 16.8 4526 -7.5 7.8 24.4 40.4 15.8 2.5 -999.00 224 +04052200.AMA 4.25 13.7 4265 -8.7 7.9 21.5 23.9 13.6 2.0 2.10 176 +04040400.MAF 4.25 12.0 2746 -14.7 7.0 19.5 31.1 14.4 1.5 2.70 262 +03051000.MHX 4.25 17.1 4373 -10.5 7.3 22.7 23.2 14.1 3.0 2.10 146 +03050518.BNA 4.25 16.1 2705 -12.9 7.1 37.0 37.2 18.3 3.4 -999.00 239 +03050500.SGF 4.25 15.7 5169 -13.5 7.6 38.4 50.7 30.0 7.3 2.90 348 +03040600.FWD 4.25 12.4 2487 -14.3 7.3 31.5 51.8 17.1 2.3 2.90 341 +01070300.LBF 4.25 16.7 5584 -8.7 8.5 18.0 24.7 14.2 2.8 4.20 154 +98063000.TOP 4.00 21.8 6490 -5.3 7.2 24.4 32.6 18.1 3.0 1.70 230 +98050800.FFC 4.00 17.3 4120 -12.3 7.7 31.0 51.6 17.1 4.7 2.20 172 +97082200.LBF 4.00 15.7 3974 -9.7 7.4 26.4 37.5 17.4 2.7 3.30 321 +96052300.LBF 4.00 13.5 2801 -11.1 8.0 27.8 43.7 18.5 2.1 2.90 303 +95102700.SGF 4.00 12.5 1922 -13.8 6.9 21.9 29.4 25.7 1.1 1.60 266 +95072600.DDC 4.00 18.3 5696 -10.1 8.8 21.3 19.2 17.1 4.5 3.30 238 +95072500.FTD 4.00 15.4 2897 -10.0 9.2 19.1 19.8 12.8 1.8 -999.00 168 +95051600.JAN 4.00 17.9 4861 -10.9 7.8 14.9 18.5 8.6 2.5 2.50 -35 +95050600.FTD 4.00 15.1 2036 -11.1 7.1 21.2 37.5 20.8 1.2 0.60 304 +93072300.HON 4.00 15.7 3720 -8.1 6.0 19.1 22.5 15.4 1.2 1.50 130 +93071600.RAP 4.00 14.1 3230 -7.5 7.7 25.0 35.8 18.6 1.5 3.20 97 +91041300.SEP 4.00 16.9 5008 -10.6 6.8 21.8 27.4 12.2 3.0 3.40 137 +90090200.RAP 4.00 11.3 1733 -7.4 7.5 23.6 32.7 14.1 0.6 2.10 181 +90070100.DAY 4.00 16.6 3541 -9.4 7.1 19.9 24.5 8.6 1.8 1.80 154 +90060900.TOP 4.00 18.5 5571 -10.1 7.3 22.6 16.4 14.8 3.9 2.70 252 +90051900.AMA 4.00 11.5 2732 -9.3 7.7 26.1 30.4 18.5 1.3 0.90 301 +90051500.AMA 4.00 14.8 4543 -9.9 8.2 24.7 33.8 19.2 3.0 2.60 473 +89071800.LBF 4.00 15.4 3622 -9.4 8.1 38.9 37.6 22.9 3.7 2.90 361 +89062700.DDC 4.00 14.3 2840 -8.4 7.6 19.4 19.2 12.7 1.1 2.20 167 +89061100.AMA 4.00 15.8 3666 -8.7 7.6 11.0 19.2 11.1 1.0 -999.00 87 +04071318.DVN 4.00 20.8 6090 -11.1 8.4 25.9 22.3 22.5 6.9 2.80 191 +03050300.BMX 4.00 15.2 4593 -15.7 7.9 32.4 30.5 8.1 6.4 2.90 72 +02061300.DDC 4.00 19.5 6234 -6.9 7.6 19.8 32.7 17.2 2.9 3.70 126 +98062000.OUN 3.50 19.0 6048 -7.1 7.8 15.4 11.2 13.7 2.2 3.90 209 +98052500.OUN 3.50 18.0 5688 -10.7 8.1 21.9 28.7 9.9 4.4 4.20 172 +98052100.TOP 3.50 17.2 4700 -12.5 8.4 10.5 23.7 9.8 2.0 3.80 100 +97062100.LBF 3.50 17.3 6058 -9.3 8.8 23.1 25.1 13.9 4.5 3.70 129 +96062000.OAX 3.50 16.3 4081 -9.8 8.6 19.0 24.4 18.9 2.4 -999.00 271 +90061900.BIS 3.50 11.1 1968 -13.5 8.2 28.4 38.0 17.4 1.6 2.90 257 +90060900.IAD 3.50 17.2 3994 -10.9 7.1 23.7 20.0 18.3 2.9 0.80 203 +90040600.SEP 3.50 12.4 3764 -14.9 7.8 25.2 36.8 15.4 3.1 2.60 305 +90031400.OUN 3.50 14.6 3950 -16.1 7.2 20.2 49.4 12.3 3.1 2.80 170 +89070300.STC 3.50 15.6 3556 -8.2 7.0 15.8 21.4 8.5 1.1 1.40 128 +02081200.DDC 3.50 14.6 3415 -8.7 8.0 15.7 27.7 10.7 1.2 3.10 157 +01061500.FWD 3.50 17.3 4260 -9.7 7.9 15.1 9.7 11.1 1.9 2.20 74 +01041000.SGF 3.50 13.0 3476 -14.5 7.9 21.6 30.3 12.5 2.5 2.60 141 +91060500.DDC 3.25 16.9 4631 -7.9 6.5 15.3 15.4 11.0 1.4 3.50 74 +99060200.FWD 3.00 17.3 4928 -11.5 8.8 15.0 30.3 15.3 2.9 4.50 171 +98062900.TOP 3.00 22.0 6870 -7.7 7.0 20.6 27.3 19.3 3.8 2.40 335 +98062500.BIS 3.00 15.5 4591 -13.3 8.1 15.9 15.4 15.5 2.8 3.00 89 +98062500.ABR 3.00 21.0 4446 -13.7 8.8 17.4 28.7 11.2 4.4 3.70 42 +98061400.OAX 3.00 13.3 2830 -10.5 7.7 24.4 45.4 15.3 1.7 3.40 219 +98052400.DDC 3.00 11.6 2630 -12.9 6.7 22.0 27.7 9.8 1.3 2.30 101 +97061000.FWD 3.00 15.6 2699 -9.9 7.0 18.7 24.1 10.9 1.2 1.30 98 +97052600.OUN 3.00 17.2 5143 -7.7 5.9 30.4 32.4 15.0 2.8 2.60 148 +96070800.LBF 3.00 15.3 3341 -6.4 7.0 30.0 41.5 20.6 1.6 2.20 390 +96062012.LBF 3.00 15.0 3262 -8.6 7.9 18.5 25.0 16.9 1.7 -999.00 195 +96061400.UNR 3.00 13.1 3614 -11.0 8.4 18.0 14.8 12.4 1.8 2.00 63 +96052700.OUN 3.00 15.2 3034 -9.4 6.9 29.8 33.6 22.5 2.0 2.00 330 +96042000.ILX 3.00 12.9 2394 -14.6 7.1 27.0 39.5 16.4 2.0 -999.00 249 +96033100.SHV 3.00 12.7 2841 -17.1 7.6 27.4 35.5 20.1 2.9 3.10 163 +95082700.GGW 3.00 11.7 2973 -12.6 8.3 26.8 41.0 13.6 2.2 1.70 162 +95082300.INL 3.00 15.4 2824 -11.6 8.0 30.9 26.5 25.4 2.8 2.10 695 +95072400.DDC 3.00 15.9 3645 -9.9 8.2 18.2 32.6 11.8 1.9 3.60 31 +95071500.LBF 3.00 14.4 3052 -7.0 6.5 15.9 24.7 13.9 0.7 2.10 159 +95062300.LBF 3.00 12.9 2776 -11.1 7.9 21.0 19.8 15.3 1.5 2.80 221 +95043000.FTD 3.00 15.0 4416 -13.3 8.1 21.9 31.7 15.6 3.5 3.40 166 +95021400.PBI 3.00 16.5 2393 -11.0 5.9 27.1 33.4 13.8 1.6 0.60 117 +94060600.DDC 3.00 14.8 4698 -8.8 8.7 15.6 18.6 13.1 1.9 2.10 248 +94052600.FNT 3.00 10.8 2240 -16.3 6.1 17.8 25.8 12.8 1.0 2.40 113 +94032800.CKL 3.00 15.3 2066 -9.6 6.3 38.6 36.3 30.5 1.7 0.60 429 +93091900.DDC 3.00 12.4 1941 -10.4 7.2 29.5 46.6 16.8 1.2 2.80 233 +93091900.AMA 3.00 12.4 1912 -9.0 7.7 32.7 35.4 16.5 1.2 2.40 264 +93082300.DDC 3.00 13.3 2608 -7.8 7.7 19.5 27.0 13.1 0.9 2.00 83 +93070900.OVN 3.00 19.7 5546 -6.8 6.9 29.4 24.3 16.9 3.4 0.60 345 +93070200.DDC 3.00 17.1 4895 -5.2 7.2 16.4 21.4 13.3 1.2 2.80 237 +93060600.HAT 3.00 16.0 4948 -13.5 8.3 15.5 17.2 12.6 3.1 3.90 70 +93050600.MAF 3.00 13.9 3784 -9.6 7.2 27.0 25.4 18.6 2.2 2.50 149 +92070500.OVN 3.00 17.3 5051 -9.3 7.4 21.8 33.3 16.1 3.0 3.50 243 +92062700.MAF 3.00 13.9 3224 -8.2 7.7 23.7 38.8 13.0 1.5 2.50 253 +92032600.TBW 3.00 12.6 1934 -14.0 6.5 31.1 37.0 18.6 1.6 1.10 196 +91052700.DDC 3.00 17.0 5256 -10.5 8.4 21.7 29.3 13.3 3.8 2.90 81 +91040912.1M1 3.00 14.2 3345 -15.2 8.0 19.7 20.8 11.5 2.6 -999.00 134 +91032700.TOP 3.00 12.7 2491 -12.3 6.8 27.7 31.7 21.6 1.6 2.50 282 +90052700.OUN 3.00 17.5 4621 -8.8 7.6 23.8 25.1 20.4 2.9 4.00 255 +90051500.OUN 3.00 16.8 4798 -10.7 7.8 19.8 29.7 12.5 3.0 4.20 186 +89060700.AMA 3.00 15.4 4752 -9.5 8.5 30.5 55.6 21.7 4.1 2.40 303 +89060500.OUN 3.00 12.5 1640 -11.6 7.0 15.7 23.9 8.8 0.6 0.70 53 +04081000.DDC 3.00 14.6 3147 -9.7 7.7 21.0 22.0 13.0 1.6 3.00 222 +04070200.AMA 3.00 16.9 5137 -8.1 7.4 14.0 16.6 18.0 1.7 3.00 80 +04052300.OAX 3.00 14.7 4320 -12.3 7.6 32.9 29.4 20.0 4.4 3.00 289 +04051700.DDC 3.00 10.0 2200 -11.9 8.4 31.7 30.2 20.5 1.6 1.50 390 +04042200.OUN 3.00 12.2 2363 -13.5 7.0 24.3 33.8 16.9 1.5 2.70 385 +04041900.OAX 3.00 11.9 3136 -15.1 8.2 33.8 44.9 20.5 3.6 1.90 394 +03062800.DDC 3.00 11.4 2329 -9.3 6.7 16.9 26.8 10.8 0.6 2.20 138 +03062400.LBF 3.00 18.6 6189 -8.7 8.1 30.8 31.6 21.7 5.7 4.80 381 +03050420.SGF 3.00 15.8 4524 -11.9 7.1 35.4 47.9 25.2 4.8 3.20 480 +03042100.SHV 3.00 15.5 2947 -13.5 7.5 24.0 38.0 14.3 2.5 0.90 110 +01090900.FWD 3.00 19.0 4304 -8.9 8.2 14.1 12.0 7.7 1.9 2.70 97 +01053000.AMA 3.00 16.4 5827 -9.7 8.2 26.1 29.7 25.0 4.5 2.80 268 +01051900.LZK 3.00 16.6 4269 -12.5 8.1 18.5 25.8 9.9 3.0 2.70 98 +00080600.OAX 3.00 19.0 5525 -7.1 7.5 15.0 22.8 9.4 1.9 3.10 56 +00062900.MAF 3.00 14.8 3565 -6.3 6.3 10.5 16.7 9.6 0.5 1.80 29 +00050400.FWD 3.00 13.2 2690 -14.3 6.3 21.9 28.5 19.0 1.6 3.00 327 +99081800.LBF 2.75 18.3 5554 -8.9 7.8 23.7 25.1 10.7 3.8 3.40 143 +99070100.MAF 2.75 14.3 3989 -2.5 7.5 14.9 13.7 10.5 0.4 2.00 146 +99061900.DDC 2.75 13.9 4137 -11.3 7.3 22.5 28.8 13.4 2.4 2.40 346 +99061200.AMA 2.75 14.7 4400 -10.3 7.7 26.2 36.6 18.8 3.1 2.40 210 +99060300.AMA 2.75 15.6 5087 -10.3 8.7 18.6 49.2 15.5 3.0 2.50 289 +98061400.OUN 2.75 20.5 6689 -6.5 7.7 32.8 42.7 17.9 5.1 4.00 262 +98052500.DDC 2.75 12.5 2643 -12.1 7.2 27.5 32.0 13.7 1.8 2.70 180 +98040900.BMX 2.75 15.8 3341 -13.9 7.9 40.1 51.5 25.9 5.3 2.00 296 +97061600.DDC 2.75 13.5 3187 -10.9 7.7 23.3 39.3 11.9 1.9 2.70 26 +97061200.TOP 2.75 12.6 1552 -11.7 7.1 23.5 30.2 11.6 0.9 0.90 141 +97052700.SGF 2.75 16.3 4440 -9.9 7.0 22.6 25.0 16.3 2.6 2.60 276 +97052700.OUN 2.75 18.0 5907 -8.7 6.4 17.5 23.9 17.6 2.4 3.70 271 +97042100.SGF 2.75 9.4 1773 -16.5 7.4 25.4 23.9 23.3 1.2 2.00 405 +97041100.MAF 2.75 11.9 4076 -15.0 8.2 23.7 30.7 20.8 3.2 2.10 260 +97032900.BNA 2.75 11.3 1569 -15.6 7.4 25.2 15.3 18.1 1.2 3.00 389 +97012500.SIL 2.75 13.0 2563 -16.5 7.5 18.3 25.8 18.3 1.7 2.80 145 +96092100.FTD 2.75 16.4 2870 -9.4 6.5 26.4 32.6 15.7 1.7 -999.00 136 +96083000.DEN 2.75 11.7 2478 -9.1 7.8 26.2 28.9 17.6 1.2 2.30 86 +96080100.DEN 2.75 13.5 3920 -7.8 8.5 22.6 26.3 15.0 1.8 2.10 276 +96072400.DDC 2.75 14.3 3068 -11.1 8.6 27.6 36.6 16.8 2.6 2.70 203 +96062500.AMA 2.75 13.9 3684 -9.4 8.5 22.9 28.2 7.0 2.1 1.90 123 +96061400.LBF 2.75 12.4 2384 -8.6 6.5 15.4 25.0 12.0 0.6 2.20 102 +96061300.FFC 2.75 13.7 2726 -9.1 5.7 12.9 13.1 12.9 0.6 1.00 152 +96061200.AMA 2.75 11.9 3029 -8.8 8.0 24.3 30.2 18.3 1.4 1.90 373 +96060300.SGF 2.75 11.7 2739 -15.9 7.1 26.4 35.9 14.8 2.2 2.10 90 +96060200.JAN 2.75 16.1 1789 -7.5 5.5 12.7 20.3 11.3 0.3 0.60 168 +96060100.ABR 2.75 12.6 2276 -13.4 6.2 22.4 27.2 24.6 1.2 2.20 370 +96053000.MAF 2.75 14.9 3675 -7.0 7.7 35.1 40.6 19.0 2.3 2.50 321 +96052600.MAF 2.75 14.1 3464 -6.2 7.7 28.7 42.1 22.5 1.5 2.90 240 +96052500.AMA 2.75 13.5 3927 -11.3 9.1 20.3 5.0 16.4 2.5 1.90 101 +96051800.OAX 2.75 15.3 4523 -11.1 8.8 16.0 21.2 12.9 2.5 -999.00 68 +96051700.UNR 2.75 14.8 4365 -8.1 8.0 25.5 28.7 15.0 2.4 2.50 219 +96042200.TOP 2.75 10.9 1522 -16.6 7.3 45.6 54.3 14.6 2.1 2.30 145 +96042200.OUN 2.75 12.7 2100 -10.9 5.9 38.3 48.8 18.5 1.5 2.30 500 +96031600.FFC 2.75 9.6 890 -19.2 7.8 28.8 55.2 20.5 0.8 2.20 353 +95081800.BIS 2.75 18.4 5584 -7.0 7.7 10.6 17.3 10.6 1.3 3.30 142 +95072400.AMA 2.75 13.3 2225 -7.8 8.5 21.6 25.1 13.1 1.0 2.90 124 +95071500.GRB 2.75 19.0 5409 -8.5 8.1 12.1 9.0 8.0 1.9 3.00 69 +95071200.OKX 2.75 13.9 2900 -15.6 6.9 12.7 13.6 8.1 1.2 2.40 48 +95070300.DDC 2.75 14.2 2905 -9.6 6.8 18.2 21.4 12.3 1.1 2.30 111 +95070300.AMA 2.75 14.7 3838 -11.5 8.8 22.8 29.0 8.2 2.9 2.50 115 +95062800.LBF 2.75 12.4 2880 -10.1 7.7 22.0 19.7 13.9 1.4 2.50 208 +95062100.OKX 2.75 17.1 3918 -9.8 7.1 18.4 25.8 11.4 2.0 1.00 18 +95060300.AMA 2.75 12.4 3024 -9.6 8.2 22.4 37.2 15.7 1.5 2.00 346 +95052200.LBF 2.75 10.4 2027 -14.9 7.4 28.3 33.3 18.7 1.5 2.10 221 +95051400.UMN 2.75 16.5 5245 -10.3 6.9 28.0 26.2 22.3 3.9 3.20 211 +95042000.FTD 2.75 14.6 2621 -13.3 7.7 31.2 59.2 25.8 3.2 -999.00 242 +95040900.TOP 2.75 10.7 2836 -17.5 9.2 21.4 31.9 16.5 2.4 1.90 120 +94070700.HON 2.75 16.5 2845 -8.8 7.2 20.5 18.6 10.2 1.4 0.60 159 +94070200.OAX 2.75 18.5 5257 -10.1 8.0 26.5 25.4 15.5 4.7 3.20 416 +94070100.STC 2.75 14.1 3635 -11.4 7.2 27.2 25.1 19.0 2.6 2.70 399 +94062600.JAN 2.75 16.1 2842 -9.5 6.4 24.0 32.8 12.4 1.5 0.90 130 +94062500.HON 2.75 11.8 1904 -10.8 6.4 27.8 33.5 15.4 1.0 2.20 211 +94061800.AMA 2.75 11.9 2676 -7.0 8.2 11.0 11.3 10.7 0.5 1.60 171 +94061200.TOP 2.75 13.9 2239 -9.5 6.6 23.9 24.4 15.8 1.1 0.90 117 +94061200.AMA 2.75 14.7 4015 -8.0 7.8 26.7 19.9 18.4 2.2 2.70 302 +94061100.AMA 2.75 12.3 2164 -8.3 7.3 19.5 20.3 16.6 0.7 2.80 229 +94060600.TOP 2.75 16.5 3953 -9.3 8.1 16.1 27.7 15.4 1.8 2.50 394 +94060500.HON 2.75 14.2 3749 -11.6 8.5 21.4 19.2 12.0 2.5 2.40 202 +94053000.SEP 2.75 17.5 5032 -10.6 8.2 27.0 23.8 16.1 4.7 3.90 291 +94052500.OUN 2.75 15.0 3912 -11.5 7.4 22.0 36.2 13.2 2.5 3.00 122 +94041100.UMN 2.75 12.6 2036 -16.5 7.6 46.3 45.4 19.9 2.8 -999.00 125 +94012700.GGG 2.75 12.7 1841 -15.9 6.8 31.0 32.3 17.5 1.8 0.70 288 +93102000.DRT 2.75 15.5 3433 -8.9 6.4 25.4 34.0 13.4 1.8 1.60 35 +93101900.GGG 2.75 15.7 3105 -9.8 6.9 23.5 33.9 10.3 1.8 0.70 105 +93101300.CRP 2.75 17.3 4367 -8.6 6.3 20.2 29.8 14.8 1.9 1.50 227 +93090400.IAD 2.75 15.6 2779 -5.9 5.7 15.2 15.6 12.4 0.5 0.60 149 +93070700.DDC 2.75 17.0 5334 -6.0 7.2 27.9 28.2 16.5 2.5 3.10 154 +93070700.AMA 2.75 17.0 5327 -4.7 7.8 21.3 20.0 11.4 1.6 3.80 127 +93070500.DDC 2.75 17.1 4186 -5.4 6.7 30.6 34.9 16.6 1.8 1.20 146 +93062400.LBF 2.75 16.0 3944 -8.6 8.1 21.9 33.8 18.1 2.2 2.80 178 +93062400.DEN 2.75 11.7 3442 -9.6 8.8 32.0 42.3 15.8 2.5 1.80 211 +93061900.AMA 2.75 12.8 2140 -7.8 7.0 22.7 23.3 14.4 0.8 1.90 146 +93051600.DDC 2.75 12.8 3614 -9.8 6.6 19.4 23.7 12.6 1.3 2.50 161 +93050600.AMA 2.75 13.2 4478 -13.6 8.6 34.6 38.4 16.6 5.5 2.00 340 +93050100.AMA 2.75 11.6 4085 -14.5 8.1 25.7 15.8 15.3 3.2 1.90 234 +93042900.MAF 2.75 11.7 2435 -10.9 7.1 29.3 37.4 20.8 1.5 2.20 551 +93042800.MAF 2.75 10.4 1494 -10.6 6.9 19.6 25.8 12.9 0.5 1.80 150 +93042500.UMN 2.75 11.4 2317 -14.6 6.9 25.2 33.1 18.2 1.5 2.40 198 +93042000.GGG 2.75 12.4 2342 -13.3 8.0 26.7 28.4 17.5 1.9 2.70 156 +93040200.WAL 2.75 10.9 1625 -18.5 7.3 30.7 48.4 26.8 1.7 2.40 200 +93033100.UMN 2.75 11.1 2598 -16.5 6.4 29.7 28.9 19.7 2.1 2.10 117 +93033100.1M1 2.75 11.9 2471 -15.1 7.2 30.2 27.1 17.8 2.2 2.80 54 +92101600.SEP 2.75 14.6 3654 -12.1 7.7 16.4 22.7 12.6 1.8 2.90 227 +92073000.LBF 2.75 15.0 3544 -10.3 7.9 25.7 33.8 22.0 2.5 3.00 335 +92062700.AMA 2.75 14.1 3165 -10.0 7.7 16.6 29.9 12.4 1.3 2.90 191 +92061900.DDC 2.75 12.8 2598 -8.3 7.9 25.1 40.5 15.7 1.2 2.70 114 +92061900.BIS 2.75 11.0 1791 -14.4 6.9 27.4 24.4 13.0 1.2 2.50 106 +92061300.AMA 2.75 14.7 2821 -8.8 7.2 19.1 36.4 12.0 1.1 2.70 165 +92061200.MAF 2.75 13.8 2387 -8.2 7.4 26.7 34.6 13.3 1.2 2.00 178 +92060500.AMA 2.75 13.4 2870 -9.4 7.5 17.5 25.9 12.2 1.1 2.60 249 +92030600.1M1 2.75 11.5 2572 -21.1 7.2 22.5 26.7 17.3 2.3 2.30 194 +92021500.UMN 2.75 10.2 1724 -16.9 6.4 33.2 28.2 24.2 1.4 2.20 289 +91072200.HON 2.75 19.3 4474 -6.8 7.2 17.3 24.1 11.1 1.7 -999.00 198 +91070500.GGW 2.75 11.4 2277 -9.9 7.0 17.5 23.9 6.7 0.7 2.20 144 +91070500.BIS 2.75 13.3 2851 -9.3 6.4 21.4 26.6 19.3 1.1 2.40 206 +91062000.HON 2.75 13.9 2691 -10.5 7.0 22.1 20.0 16.1 1.4 1.20 282 +91061900.LBF 2.75 13.0 3592 -12.0 8.6 15.2 20.9 13.5 1.7 2.60 219 +91061500.GRB 2.75 17.6 3430 -8.7 6.7 13.9 17.0 21.7 1.1 0.60 161 +91061500.BIS 2.75 13.0 2343 -11.9 6.6 22.5 25.2 13.2 1.2 2.60 152 +91060500.OVN 2.75 14.6 2813 -10.1 6.5 17.1 19.6 8.4 1.0 3.10 177 +91053000.RAP 2.75 16.8 4287 -10.2 6.8 18.2 19.0 13.0 2.1 2.00 159 +91053000.OVN 2.75 10.9 2814 -15.7 8.1 14.5 28.4 14.3 1.3 2.70 31 +91052500.AMA 2.75 13.7 3416 -10.5 7.0 17.4 13.8 17.0 1.3 2.50 124 +91051800.UMN 2.75 15.1 3444 -11.0 7.4 11.9 21.0 9.4 1.1 1.20 59 +91051700.UMN 2.75 15.9 3299 -10.6 7.6 16.1 11.8 14.4 1.5 1.90 174 +91051200.RAP 2.75 14.1 4430 -11.0 7.9 23.5 33.5 26.6 2.9 2.50 437 +91051100.AMA 2.75 15.6 5629 -10.7 9.0 16.5 21.5 14.5 3.2 2.50 314 +91042800.GGG 2.75 18.9 4554 -10.5 7.2 29.5 19.6 15.4 4.4 2.20 140 +91042700.OUN 2.75 16.6 4248 -11.5 7.0 23.6 26.4 20.6 3.0 3.70 376 +91042700.GGG 2.75 18.9 5164 -10.7 8.2 18.9 27.6 12.4 3.7 2.70 209 +91041300.OUN 2.75 14.1 4063 -13.7 8.0 22.0 25.1 17.1 3.1 2.90 205 +91040300.OUN 2.75 10.1 1560 -19.8 7.3 22.6 41.7 15.1 1.2 1.50 275 +91032700.DDC 2.75 12.4 3132 -14.2 8.2 40.7 44.0 18.9 4.2 2.10 160 +91032200.UMN 2.75 11.5 2599 -15.3 7.0 33.0 35.3 18.8 2.4 2.50 371 +90090600.STC 2.75 19.5 4798 -6.8 6.2 21.0 17.1 14.7 1.9 1.00 294 +90082800.SSM 2.75 18.2 4669 -8.5 6.2 31.6 29.9 20.5 3.2 1.10 335 +90081100.LBF 2.75 14.8 3971 -9.0 7.5 25.6 21.5 14.3 2.3 2.90 282 +90070700.BIS 2.75 14.9 3274 -7.5 6.9 19.0 25.7 12.9 1.1 2.20 316 +90070300.BIS 2.75 21.3 6982 -6.3 8.2 23.0 29.6 14.9 4.0 4.60 172 +90061900.LBF 2.75 19.2 7070 -6.1 8.4 30.2 38.1 18.5 4.8 1.30 266 +90060200.STC 2.75 13.4 2697 -13.3 8.5 18.6 17.2 10.4 1.7 2.60 132 +90060200.LBF 2.75 13.6 3719 -10.8 7.9 15.6 29.4 16.4 1.5 2.80 89 +90053100.GGG 2.75 19.3 4700 -5.7 6.1 27.2 25.7 21.5 1.9 2.50 317 +90052000.OUN 2.75 15.3 4565 -10.8 7.1 13.7 14.7 12.1 1.7 3.90 94 +90051900.LBF 2.75 12.1 3954 -13.9 8.6 25.1 24.6 16.2 3.2 2.70 398 +90051700.GGG 2.75 17.5 3234 -8.3 7.2 24.7 35.1 17.6 1.9 0.60 304 +90050100.AHN 2.75 14.9 4557 -12.6 7.7 14.7 9.3 19.7 2.2 2.70 92 +90042800.GGG 2.75 12.9 2263 -14.9 6.6 14.1 25.3 12.8 0.9 3.70 84 +90041700.OUN 2.75 13.6 3717 -15.0 8.3 11.5 20.5 17.2 1.6 4.70 152 +90031400.PIA 2.75 12.4 2115 -14.4 6.9 18.1 24.1 15.3 1.1 3.70 206 +90021600.JAN 2.75 15.2 2047 -10.9 6.6 20.9 34.6 18.9 1.1 -999.00 124 +89090400.LBF 2.75 17.3 4400 -8.6 8.3 29.6 38.8 8.6 3.7 3.30 223 +89082900.STC 2.75 14.6 1959 -10.0 6.8 26.3 44.7 18.0 1.2 1.10 147 +89082200.STC 2.75 16.2 3346 -11.1 6.9 20.6 30.6 11.9 1.9 1.20 173 +89082200.OMA 2.75 17.9 3959 -8.3 7.0 22.2 45.4 15.0 2.1 0.90 138 +89082200.HON 2.75 15.6 4160 -9.4 6.9 22.9 28.9 14.8 2.2 3.30 107 +89081600.AMA 2.75 12.8 2669 -7.1 6.9 17.0 24.9 10.5 0.6 2.50 158 +89062600.RAP 2.75 11.5 2246 -13.8 7.8 31.3 30.4 20.0 2.0 2.60 301 +89061300.AMA 2.75 14.4 3611 -10.8 8.1 15.8 22.1 9.9 1.6 3.00 79 +89060300.TOP 2.75 13.7 2586 -12.6 7.0 19.5 39.7 12.4 1.4 2.00 118 +89060300.MAF 2.75 11.9 2291 -8.4 7.6 19.3 32.2 13.3 0.8 2.20 147 +89060200.MAF 2.75 14.1 2971 -10.4 7.9 24.5 27.4 8.5 1.9 2.80 104 +58042200.FWH 2.75 13.3 3338 -16.1 7.8 37.0 49.4 25.5 4.7 2.40 276 +04070500.DDC 2.75 14.3 3819 -10.3 8.3 18.6 30.5 14.4 2.0 2.50 161 +04060300.FWD 2.75 16.9 4767 -11.1 8.7 19.1 24.1 14.1 3.4 -999.00 157 +04051300.OUN 2.75 16.8 5740 -11.5 8.2 15.2 20.9 12.4 3.1 3.60 131 +04051100.DNR 2.75 10.6 3995 -12.9 9.2 28.3 16.6 18.2 3.2 1.50 379 +04050600.WAL 2.75 9.3 1861 -21.3 7.2 20.2 28.3 21.3 1.2 1.40 239 +04040500.CRP 2.75 14.9 2478 -12.1 6.7 22.4 20.6 7.0 1.5 0.60 184 +04032800.OUN 2.75 12.6 2904 -15.9 7.8 23.3 31.1 16.4 2.4 2.80 315 +04032718.DDC 2.75 13.2 4133 -17.3 8.0 24.6 26.6 14.4 4.2 2.30 143 +03100600.AMA 2.75 12.2 2542 -10.3 6.4 24.1 30.2 12.9 1.1 2.50 50 +03091100.MAF 2.75 13.3 2808 -6.5 6.8 10.3 9.0 7.4 0.4 1.40 80 +03091000.DDC 2.75 14.8 3620 -7.7 7.5 12.1 15.8 11.3 0.9 3.00 233 +03061400.AMA 2.75 12.3 3153 -13.3 8.3 21.7 24.7 13.7 2.1 2.10 35 +03060500.AMA 2.75 11.9 2647 -11.9 7.6 23.0 28.5 13.1 1.5 2.10 167 +03051700.SHV 2.75 16.3 3995 -10.9 7.4 23.2 13.9 19.6 2.8 2.70 242 +03051600.AMA 2.75 14.1 3706 -10.3 8.9 42.9 37.7 34.9 4.7 -999.00 632 +03051400.SHV 2.75 16.7 3920 -9.5 7.2 27.2 37.0 19.3 2.8 0.80 389 +03051000.OUN 2.75 16.8 5328 -11.1 8.3 27.5 34.8 16.8 5.1 3.60 182 +03050700.FWD 2.75 17.8 5303 -9.7 7.1 30.4 36.2 8.4 4.5 3.50 126 +03050618.SGF 2.75 15.6 5492 -14.7 7.7 32.0 40.6 17.8 7.1 2.80 313 +03050100.TOP 2.75 13.1 3776 -14.1 7.8 17.2 19.6 13.9 2.1 2.70 117 +03042900.SGF 2.75 13.1 3399 -16.7 8.5 5.0 19.6 4.8 0.7 2.80 53 +03042600.BMX 2.75 14.2 3921 -13.3 6.2 35.8 33.5 26.6 3.8 2.70 89 +03042500.LZK 2.75 13.8 3423 -15.7 7.6 20.9 31.0 20.0 2.7 3.30 212 +03031300.SHV 2.75 13.5 2901 -15.3 7.1 17.1 24.1 11.0 1.6 2.00 162 +02081200.LBF 2.75 13.3 3735 -9.9 8.7 13.1 11.8 10.5 1.3 2.10 222 +02072700.TOP 2.75 19.3 6406 -5.3 6.9 18.2 19.3 9.1 1.9 2.60 131 +02072000.TOP 2.75 17.5 4986 -7.5 7.3 10.0 12.7 8.5 1.1 2.70 197 +02062500.ABR 2.75 15.1 4208 -7.1 6.8 19.1 19.3 11.1 1.3 3.10 20 +02062400.BIS 2.75 16.0 3559 -9.7 6.8 28.0 24.8 25.2 2.4 2.40 298 +02061300.AMA 2.75 13.7 3027 -8.5 8.4 29.6 33.0 18.7 2.0 2.50 65 +02060500.AMA 2.75 13.2 2947 -11.5 7.6 32.1 45.0 17.9 2.5 2.70 309 +02052400.AMA 2.75 13.8 4729 -13.3 8.3 28.8 21.8 18.5 4.7 2.30 258 +02051800.DRT 2.75 16.0 5077 -10.5 8.1 8.8 6.3 5.2 1.4 2.60 15 +01112418.BMX 2.75 15.1 2902 -11.3 6.1 26.9 31.9 22.2 1.9 0.80 328 +01072500.GGW 2.75 11.5 1714 -11.3 6.9 26.7 32.1 18.2 0.9 2.20 350 +01071900.BIS 2.75 17.8 5738 -9.9 8.6 21.8 28.8 14.1 4.3 2.90 183 +01071900.ABR 2.75 17.5 5356 -10.5 8.8 18.1 22.7 3.4 3.6 2.70 35 +01071800.INL 2.75 17.0 4580 -12.9 7.8 11.9 12.8 11.8 2.1 0.80 154 +01070100.RAP 2.75 14.3 3235 -10.7 7.7 30.8 40.7 12.9 2.7 2.60 114 +01061900.MPX 2.75 15.6 5114 -11.9 9.2 33.1 31.9 19.0 6.6 3.40 154 +01061700.TOP 2.75 15.7 4594 -13.7 8.5 22.1 26.6 15.7 4.2 3.40 214 +01061700.LMN 2.75 14.1 4093 -10.7 8.0 19.4 26.9 9.3 2.2 3.50 195 +01061400.OAX 2.75 17.2 4956 -11.3 9.0 20.4 25.5 18.5 4.0 3.80 153 +01061000.ABR 2.75 13.8 3452 -12.1 7.8 24.6 32.3 16.6 2.5 3.60 158 +01060800.DNR 2.75 13.9 3440 -8.7 7.2 25.3 21.9 7.4 1.7 3.10 -26 +01060600.AMA 2.75 14.9 4665 -8.9 7.2 15.8 15.6 11.9 1.6 2.30 191 +01052500.FFC 2.75 11.7 2338 -14.5 6.4 18.1 21.4 19.6 1.0 2.50 240 +01050620.LMN 2.75 15.4 4496 -16.1 7.3 11.5 20.9 7.3 2.1 3.10 60 +01042100.OAX 2.75 12.4 3283 -15.3 7.7 28.1 32.7 23.5 3.0 2.40 282 +01040400.LZK 2.75 15.2 4223 -15.1 8.5 18.1 24.8 11.9 3.4 3.10 105 +00121618.BMX 2.75 13.2 2219 -14.1 6.7 32.9 45.8 25.0 2.1 0.90 266 +00072700.OAX 2.75 18.5 5048 -9.7 8.0 21.8 23.2 16.7 3.6 2.60 215 +00072500.LBF 2.75 17.1 5901 -8.9 8.5 24.5 29.4 22.2 4.2 2.90 162 +00072100.LBF 2.75 15.3 3073 -11.3 7.8 26.5 39.4 16.9 2.5 2.00 223 +00071700.MHX 2.75 15.1 2929 -12.3 7.2 18.2 29.9 7.9 1.6 2.30 81 +00071000.LBF 2.75 18.1 5871 -5.5 7.8 14.3 19.9 10.7 1.5 3.50 146 +00071000.GGW 2.75 15.6 2962 -10.9 7.0 18.4 13.5 23.2 1.5 2.60 248 +00062000.LBF 2.75 14.9 4028 -8.5 6.8 18.8 23.9 11.9 1.5 3.00 96 +00061400.AMA 2.75 16.5 5758 -4.9 7.6 23.8 32.0 19.9 1.9 2.50 244 +00061200.BIS 2.75 11.3 2000 -13.1 7.5 22.0 28.0 10.2 1.1 2.50 306 +00052700.OUN 2.75 18.3 5870 -10.1 8.4 21.5 32.8 12.8 4.4 4.00 117 +00051300.DTX 2.75 16.9 4524 -8.5 7.7 24.1 18.5 20.2 2.8 2.40 328 +00022500.AMA 2.75 10.3 3614 -18.5 8.5 26.8 48.5 13.1 3.6 1.70 107 +98071100.DDC 2.50 18.9 4096 -4.3 6.2 12.7 15.2 16.0 0.6 0.60 230 +96072200.LBF 2.50 18.4 4756 -6.5 7.2 20.0 29.4 19.0 1.8 2.10 94 +96071900.GRB 2.50 20.7 4525 -7.5 6.4 26.3 26.2 20.0 2.7 0.70 162 +96062100.DEN 2.50 15.2 5603 -8.1 9.6 27.5 33.4 8.8 4.2 2.20 155 +96061200.LBF 2.50 12.2 2268 -9.9 7.5 16.7 22.2 12.7 0.8 2.40 122 +96060300.AMA 2.50 11.0 2356 -10.5 6.9 27.6 31.6 18.0 1.2 2.00 256 +96060100.DDC 2.50 13.3 2888 -10.9 8.3 13.3 19.3 13.9 1.0 2.50 111 +96051800.MPX 2.50 16.3 4406 -8.9 8.2 13.0 23.4 20.7 1.6 3.40 259 +96042200.FTD 2.50 12.0 1872 -12.6 8.2 27.1 34.0 18.3 1.4 -999.00 298 +96030700.TLH 2.50 15.4 2429 -10.4 6.0 20.9 23.7 20.7 1.1 0.60 320 +95081212.MPX 2.50 19.1 3357 -6.3 7.2 33.4 36.8 23.0 1.4 -999.00 147 +95061600.TFX 2.50 13.0 3142 -12.0 8.4 27.7 35.6 23.8 2.6 2.30 277 +95060700.DEN 2.50 12.3 3126 -10.8 9.2 37.2 35.9 20.7 3.2 2.00 284 +95052912.MAF 2.50 13.0 1618 -11.3 7.5 26.6 22.0 13.7 1.1 -999.00 179 +95051900.GSO 2.50 13.4 1758 -11.8 7.9 25.3 27.1 23.6 1.3 -999.00 83 +95051600.MAF 2.50 13.6 3261 -7.8 8.4 21.7 28.8 10.3 1.4 1.80 134 +95050900.TOP 2.50 10.0 1495 -19.3 6.9 19.3 22.8 21.2 0.9 1.20 126 +95050800.LCH 2.50 17.9 2493 -9.9 7.1 16.7 31.1 10.2 1.2 0.60 120 +95050800.FTD 2.50 16.5 2700 -10.4 7.7 30.8 30.8 24.5 2.5 0.80 407 +94062600.TOP 2.50 16.4 4265 -8.6 8.4 25.2 45.9 21.6 2.9 2.90 418 +94032800.AHN 2.50 14.4 2627 -10.5 6.2 34.5 24.7 30.4 1.9 0.70 518 +93070300.TOP 2.50 18.5 4019 -7.2 7.1 15.8 16.4 15.2 1.4 0.70 202 +93070200.HON 2.50 14.6 2619 -11.3 7.0 28.3 40.3 12.6 1.9 0.80 143 +93061400.TOP 2.50 16.5 4195 -8.5 7.7 12.5 17.8 10.7 1.3 2.80 65 +93033000.DRT 2.50 12.7 2680 -13.4 8.2 39.6 44.0 26.0 3.3 2.80 411 +92070200.DEN 2.50 11.7 2313 -11.2 8.0 27.6 29.9 20.0 1.5 2.50 362 +92041600.AMA 2.50 11.1 3350 -13.4 7.6 16.0 17.8 12.0 1.4 1.70 127 +92030400.SEP 2.50 12.7 2676 -15.3 7.7 20.1 27.2 9.2 1.8 2.30 133 +91080200.CAR 2.50 12.3 1891 -13.7 6.3 19.6 33.3 11.9 0.9 1.50 223 +91071800.STC 2.50 18.2 4876 -8.7 7.3 18.7 20.1 21.9 2.4 2.50 104 +91053100.DEN 2.50 12.0 3551 -12.1 9.5 27.3 45.8 10.7 3.0 1.90 149 +91052700.LBF 2.50 11.9 2669 -13.4 7.9 13.9 32.3 13.0 1.1 2.10 35 +91051200.AMA 2.50 14.3 4521 -10.8 8.5 12.4 14.9 16.7 1.7 2.30 208 +91050800.MAF 2.50 11.2 3415 -14.8 8.4 31.1 36.7 25.4 3.4 1.60 280 +91042100.AYS 2.50 11.8 2563 -16.9 7.4 13.4 30.0 10.3 1.1 1.70 76 +91041900.SEP 2.50 17.6 5996 -13.2 7.4 13.5 44.8 13.0 3.2 3.10 24 +90083100.CHS 2.50 16.0 2477 -8.5 6.5 17.0 17.7 8.3 0.9 0.60 67 +90070200.GSO 2.50 14.8 3964 -10.0 7.2 26.0 16.3 10.7 2.5 2.20 100 +90062200.ALB 2.50 12.6 1833 -14.1 6.7 32.5 29.1 20.6 1.6 1.60 203 +90061500.DDC 2.50 16.0 4667 -6.5 7.9 28.4 30.1 15.7 2.5 2.70 305 +90060700.DEN 2.50 10.9 2850 -8.2 9.0 26.3 23.9 19.6 1.4 1.50 170 +90060300.PAH 2.50 17.8 3663 -7.6 7.0 24.0 25.9 29.8 1.9 0.60 367 +04102400.JAN 2.50 15.8 1938 -6.9 5.3 30.8 27.8 19.3 0.8 0.60 328 +04091500.LBF 2.50 12.8 1474 -10.7 8.0 31.4 39.8 20.5 1.3 -999.00 91 +04080700.ABR 2.50 13.1 2792 -9.3 6.7 21.0 25.9 12.1 1.1 2.50 240 +04040400.EPZ 2.50 12.1 4482 -17.9 8.2 29.1 25.4 11.6 5.2 2.10 203 +04032718.OUN 2.50 12.6 2825 -14.9 7.3 21.1 32.3 11.5 1.9 2.10 199 +03062200.RAP 2.50 10.6 3380 -13.7 8.0 27.5 42.2 18.7 2.5 1.50 189 +03051500.SHV 2.50 16.8 4260 -9.9 6.8 33.7 42.9 16.3 3.7 0.80 246 +02072500.ABR 2.50 15.0 4004 -11.5 7.9 28.7 28.6 13.8 3.5 3.00 207 +02051700.AMA 2.50 13.8 5036 -12.7 8.7 21.9 26.5 17.4 3.8 2.20 216 +01101000.DDC 2.50 12.9 3299 -9.7 6.4 18.8 18.3 16.4 1.1 2.50 275 +01082400.AMA 2.50 15.4 4318 -6.7 7.4 24.0 28.1 21.0 1.8 2.80 158 +01070500.LBF 2.50 14.5 3571 -7.7 7.7 26.0 27.0 17.1 1.8 2.90 313 +01070400.RAP 2.50 14.5 3145 -11.1 8.3 25.2 26.1 12.9 2.4 2.60 144 +01052620.LMN 2.50 14.1 4355 -13.5 6.4 27.3 33.2 20.2 3.3 2.90 233 +01052500.BMX 2.50 11.9 2388 -14.9 6.7 29.2 27.4 23.5 1.9 2.70 436 +01050400.MAF 2.50 13.7 3866 -11.3 7.2 12.8 33.8 11.4 1.2 2.70 101 +01050100.OAX 2.50 10.4 2265 -16.9 7.7 17.4 17.0 19.2 1.2 2.20 226 +01042200.DDC 2.50 13.3 3749 -12.1 7.3 33.4 45.3 24.2 3.3 2.70 510 +01041700.MAF 2.50 13.9 4552 -12.1 7.5 16.2 30.6 8.0 2.1 2.20 100 +00091100.MPX 2.50 16.6 4560 -10.3 7.0 21.6 23.2 18.4 2.7 3.20 271 +00080500.BIS 2.50 17.0 4830 -8.7 6.9 17.2 22.9 4.0 1.9 3.30 86 +00070600.LBF 2.50 18.2 5506 -7.1 8.3 25.3 35.5 11.8 3.4 3.50 155 +00070200.ABR 2.50 17.8 5952 -10.3 8.4 12.2 23.4 8.1 2.5 3.90 147 +00062400.OAX 2.50 17.5 4783 -8.7 7.2 18.7 28.2 14.9 2.2 2.30 195 +00061000.RAP 2.50 13.2 3610 -8.1 7.8 14.3 21.1 11.9 1.0 2.10 70 +00052300.MHX 2.50 15.1 3613 -13.5 6.5 15.3 26.5 10.5 1.7 2.40 79 +00051200.DVN 2.50 15.6 4865 -8.1 7.4 24.8 24.9 19.3 2.6 3.40 225 +00050100.FWD 2.50 14.3 3593 -13.1 7.2 17.3 18.5 19.0 1.9 1.70 401 +00032700.SGF 2.50 9.8 1766 -18.3 7.5 34.3 43.9 21.4 1.9 2.20 350 +00021400.LZK 2.50 10.7 2091 -20.3 6.4 21.1 24.5 22.2 1.4 2.10 245 +00061300.OAX 2.25 17.7 5453 -11.5 8.5 15.8 19.3 12.9 3.4 4.00 206 +99053100.TOP 2.00 13.1 2215 -10.9 6.8 18.6 12.2 14.7 0.9 1.40 189 +99050400.DRT 2.00 17.4 5609 -10.1 7.5 40.5 38.9 21.2 6.8 4.56 342 +98063000.BUF 2.00 14.5 2615 -10.5 6.1 23.6 28.2 8.5 1.3 1.70 86 +98062500.APX 2.00 15.8 3453 -11.3 7.3 28.9 35.4 21.9 2.9 3.30 348 +98033100.FWD 2.00 13.3 2607 -14.3 7.2 29.6 57.5 17.6 2.4 2.90 93 +90091400.STC 2.00 13.1 2104 -10.9 7.4 27.8 39.0 23.2 1.4 -999.00 564 +90072600.TBW 2.00 18.4 4330 -6.3 5.7 5.0 8.5 6.3 0.3 0.60 7 +90061400.PIA 2.00 18.1 3571 -7.0 7.0 16.5 23.4 9.5 1.2 0.60 134 +90060900.PIT 2.00 16.7 4095 -9.5 6.7 18.1 13.6 18.8 1.8 1.00 236 +89103000.OUN 2.00 12.5 2163 -14.7 6.6 18.0 18.1 13.1 1.1 1.60 195 +89082100.LBF 2.00 14.8 3307 -9.1 7.1 28.0 44.7 8.0 2.0 3.00 83 +89071100.HON 2.00 15.7 3126 -7.0 6.9 14.6 18.6 12.3 0.8 1.20 151 +89052800.ELP 2.00 11.2 2569 -6.8 8.0 11.3 17.1 14.9 0.4 1.40 232 +04091200.GRB 2.00 12.3 2256 -14.9 7.2 14.7 24.8 11.6 1.0 0.90 64 +04082400.BIS 2.00 13.4 2596 -11.1 7.6 21.3 22.3 16.4 1.4 2.20 208 +04072300.TOP 2.00 16.0 3276 -7.7 6.4 15.8 19.6 11.4 0.9 0.70 158 +04062400.GRB 2.00 10.4 1604 -16.9 6.3 25.3 36.9 16.4 1.0 2.40 128 +04052200.DDC 2.00 13.5 3809 -9.7 8.1 21.0 27.0 20.3 1.9 2.20 297 +04043000.JAN 2.00 13.6 1469 -12.7 6.5 27.4 22.8 18.1 1.0 0.60 184 +03051900.TBW 2.00 17.1 3797 -10.9 6.8 5.9 5.0 4.0 0.6 1.00 -4 +02062600.MPX 2.00 19.6 5230 -9.7 7.1 18.6 21.8 9.2 3.0 3.20 120 +02061300.DVN 2.00 17.3 3501 -11.9 7.4 26.3 38.7 10.0 3.2 1.10 100 +02052800.LZK 2.00 15.1 3284 -12.3 6.5 5.0 12.3 2.6 0.4 0.60 13 +01101000.OUN 2.00 15.6 3485 -12.9 7.9 24.4 28.2 23.9 3.1 2.50 447 +01090800.TOP 2.00 17.8 4174 -11.3 8.1 26.2 26.7 24.5 4.0 1.70 274 +01090800.OUN 2.00 17.6 4351 -8.7 7.8 26.1 21.2 21.8 3.1 2.30 151 +01082400.DDC 2.00 16.4 4283 -7.5 7.7 14.7 16.3 11.9 1.3 3.10 77 +01082300.TOP 2.00 16.7 4361 -9.7 7.6 9.9 23.0 13.6 1.2 2.30 192 +01072000.RAP 2.00 15.1 4486 -8.7 8.4 15.4 26.3 10.9 1.7 2.40 71 +01071300.GGW 2.00 14.5 3042 -10.1 8.1 16.5 34.2 7.9 1.4 3.50 19 +01063000.FWD 2.00 16.8 4122 -9.7 6.9 11.2 19.2 9.2 1.2 1.60 133 +01062100.DNR 2.00 10.8 2544 -11.5 7.5 21.4 23.2 20.5 1.2 2.10 192 +01053100.LCH 2.00 17.4 3988 -8.3 7.0 8.3 13.9 0.8 0.8 2.40 8 +01053100.FWD 2.00 15.8 4571 -12.3 8.7 12.4 20.6 13.7 2.2 3.90 106 +01053000.DDC 2.00 15.2 2892 -12.1 8.0 23.2 25.5 14.8 2.3 1.80 388 +01052700.DDC 2.00 11.3 2853 -12.1 6.7 30.6 37.1 19.3 1.8 1.80 184 +01051200.OUN 2.00 13.2 3098 -13.9 7.1 10.0 10.8 8.7 0.9 2.10 132 +01050702.LZK 2.00 14.2 2759 -12.9 5.9 18.7 26.3 7.3 1.3 2.00 77 +01050700.SGF 2.00 14.5 4025 -13.7 6.1 8.8 17.0 10.5 1.0 3.10 202 +01050600.FWD 2.00 15.4 3092 -12.7 6.8 32.7 34.4 19.4 3.0 2.10 170 +01042200.MAF 2.00 13.7 4543 -12.3 8.4 27.4 36.2 12.3 4.0 2.20 164 +01042200.AMA 2.00 14.1 6059 -15.3 9.2 35.7 38.3 16.6 9.7 3.30 320 +00072300.LBF 2.00 13.2 2926 -11.5 7.1 25.2 27.3 13.6 1.8 2.80 91 +00071500.BIS 2.00 16.5 5132 -9.5 8.1 27.6 34.1 14.6 4.1 2.70 152 +00071100.GGW 2.00 14.2 3230 -11.3 6.9 30.1 48.1 16.9 2.5 3.00 88 +00061500.JAX 2.00 17.9 4801 -8.7 6.4 6.2 13.3 3.6 0.7 1.10 55 +00061300.LBF 2.00 13.9 4790 -9.9 8.3 16.6 18.6 9.9 2.1 2.00 159 +00061200.AMA 2.00 16.8 5720 -10.3 8.3 16.1 28.7 15.7 3.0 2.70 88 +00032800.JAX 2.00 12.5 2135 -14.5 6.3 29.1 24.7 25.7 1.6 0.90 268 +00031600.LMN 2.00 9.5 1478 -17.3 7.1 22.1 10.9 12.9 0.9 2.20 164 +00030300.FWD 2.00 12.3 2589 -14.3 6.2 33.4 29.1 20.2 2.1 2.70 239 +98062500.FFC 1.75 17.0 3224 -8.9 7.3 5.0 9.9 5.6 0.4 0.60 54 +97100900.OUN 1.75 16.5 3628 -7.5 6.0 20.0 29.9 16.6 1.2 0.80 205 +94071700.HAT 1.75 16.5 2831 -6.0 5.7 5.9 5.0 4.4 0.2 0.60 33 +94071700.1M1 1.75 17.7 3194 -6.4 5.8 12.5 11.3 19.1 0.6 0.60 164 +94070100.1M1 1.75 18.6 4791 -8.1 6.1 20.0 18.5 12.6 2.0 1.00 343 +94062600.PBI 1.75 17.7 4199 -9.1 6.6 5.0 6.6 5.2 0.5 1.80 10 +92051500.1M1 1.75 13.3 2877 -11.3 6.4 11.4 16.3 7.9 0.7 1.50 54 +91060600.RAP 1.75 13.1 2001 -11.5 7.1 13.2 19.7 11.9 0.6 1.40 170 +91060600.JAN 1.75 16.3 3344 -9.1 6.8 9.5 9.6 3.1 0.7 0.60 12 +91053100.AHN 1.75 16.3 3505 -6.9 5.9 5.0 5.0 3.2 0.3 0.60 15 +91051700.GGG 1.75 18.4 5081 -10.4 7.5 7.9 11.2 10.5 1.3 0.90 157 +91051300.HON 1.75 14.7 3615 -9.5 7.2 14.2 22.7 13.0 1.2 2.80 97 +91051300.BIS 1.75 13.8 1867 -11.5 6.8 26.9 19.8 15.8 1.2 0.70 -79 +91032700.DAY 1.75 10.7 1281 -13.1 6.3 23.7 30.6 24.3 0.8 -999.00 149 +90091100.AHN 1.75 15.1 2857 -8.6 5.9 7.9 7.6 6.3 0.4 0.60 80 +90090200.MAF 1.75 14.9 3597 -6.2 6.8 17.2 18.3 7.5 0.9 2.50 58 +90082600.HON 1.75 17.9 5206 -11.5 9.1 14.7 28.6 9.9 3.2 -999.00 156 +90082600.BIS 1.75 13.7 3187 -13.2 8.6 22.2 23.1 13.2 2.5 2.50 190 +90082400.OVN 1.75 18.7 4768 -7.4 6.8 7.4 14.7 9.4 0.8 0.70 100 +90082100.AMA 1.75 14.6 2833 -5.7 6.6 11.7 11.3 10.6 0.4 1.20 75 +90081500.DDC 1.75 15.1 3012 -6.6 5.6 9.0 15.8 9.9 0.3 0.60 59 +90081000.AHN 1.75 14.9 2234 -9.4 6.2 13.3 26.7 6.4 0.6 0.80 33 +90080200.LCH 1.75 18.4 3223 -7.3 6.4 6.5 5.0 3.1 0.4 0.60 14 +90073100.GGG 1.75 16.1 3254 -7.5 6.4 7.9 5.4 1.2 0.5 0.60 3 +90072700.AMA 1.75 14.3 3104 -5.8 7.3 7.7 7.9 11.1 0.3 2.20 117 +90072600.OUN 1.75 16.6 3546 -6.8 6.2 10.8 14.7 11.1 0.6 0.70 206 +90072100.ABQ 1.75 10.9 1327 -5.9 8.3 7.9 14.5 9.8 0.1 1.30 145 +90071800.LBF 1.75 12.3 3138 -7.7 8.2 17.7 16.6 10.0 1.0 1.60 115 +90071700.FNT 1.75 11.9 1393 -12.5 6.5 15.5 25.3 13.2 0.5 0.60 176 +90071400.ABQ 1.75 10.4 1587 -9.4 8.7 18.9 32.6 4.4 0.6 1.20 70 +90071300.CRP 1.75 13.3 1658 -6.5 6.5 12.8 9.3 14.6 0.3 0.60 121 +90071100.CKL 1.75 15.4 2544 -8.1 6.4 5.1 5.0 2.1 0.2 0.60 9 +90070900.GRB 1.75 16.9 2962 -6.5 6.5 18.2 22.7 12.1 0.9 0.60 82 +90070500.LCH 1.75 17.6 3315 -8.5 6.6 15.3 5.0 11.6 1.1 0.60 58 +90061800.PIA 1.75 19.5 4567 -8.1 7.4 17.0 25.7 14.1 2.1 1.00 94 +90061300.STC 1.75 16.2 2789 -10.4 7.2 36.6 42.0 14.2 2.8 0.70 139 +90061100.CHS 1.75 17.7 4050 -8.1 6.6 8.1 19.1 6.4 0.7 0.60 102 +90061000.OUN 1.75 15.1 3242 -8.5 7.8 10.1 5.0 10.9 0.7 2.50 21 +90061000.IAD 1.75 14.9 2818 -9.2 6.5 16.4 19.3 18.0 0.9 0.60 175 +90052800.SIL 1.75 18.0 3916 -10.0 6.8 19.3 10.6 10.4 2.1 2.80 48 +90052300.HON 1.75 10.9 1984 -14.0 7.2 22.3 33.6 15.0 1.1 2.90 107 +90052100.UMN 1.75 14.8 3661 -13.1 7.6 15.4 23.7 15.3 1.9 4.30 181 +90052100.HAT 1.75 15.8 2891 -9.7 5.6 13.8 19.5 12.4 0.8 0.60 182 +90051900.SEP 1.75 17.0 3250 -9.1 6.6 20.9 27.2 15.6 1.6 2.20 385 +90051600.IAD 1.75 13.4 2004 -14.0 7.0 16.7 27.7 12.7 1.0 -999.00 102 +90051200.SEP 1.75 13.6 2282 -9.2 6.9 34.8 47.4 14.5 1.6 -999.00 133 +90050600.OUN 1.75 7.6 881 -20.1 7.2 18.3 48.8 5.8 0.4 2.30 30 +90042900.AYS 1.75 13.0 2333 -12.2 6.2 30.6 23.2 19.1 1.6 2.60 243 +90042600.DRT 1.75 14.6 3699 -13.8 8.1 25.7 33.2 11.1 3.5 4.60 101 +90042200.OUN 1.75 11.1 2748 -13.3 6.6 12.2 14.9 7.3 0.7 2.90 48 +90040200.BRO 1.75 16.2 3494 -9.3 7.1 25.7 37.2 15.2 2.2 2.60 65 +90031300.OUN 1.75 12.7 3211 -13.6 7.8 24.2 18.1 19.4 2.4 3.40 286 +90031000.AMA 1.75 11.1 2468 -16.0 8.6 13.1 18.2 9.9 1.1 2.10 106 +90022800.MAF 1.75 9.7 607 -16.2 6.6 16.4 23.8 5.1 0.2 1.90 55 +89090800.DEN 1.75 10.1 1350 -6.8 8.3 24.1 24.0 15.4 0.4 2.00 366 +89090200.1M1 1.75 18.3 3691 -4.8 6.1 16.2 14.1 8.2 0.7 0.60 64 +89083100.DDC 1.75 16.5 2952 -5.7 6.6 13.6 22.5 13.3 0.6 0.80 346 +89083000.OUN 1.75 17.3 3864 -5.6 6.0 13.1 24.2 11.8 0.7 0.60 112 +89082900.TOP 1.75 19.8 4794 -6.3 6.6 15.4 21.1 13.2 1.4 0.60 156 +89082800.UMN 1.75 17.3 3603 -6.1 6.5 7.8 5.6 2.6 0.4 0.60 28 +89082700.OMA 1.75 17.8 3452 -6.6 6.1 19.5 33.1 15.2 1.1 0.60 142 +89082500.RAP 1.75 10.6 1899 -7.1 7.6 7.7 7.6 2.7 0.2 1.00 55 +89081300.TBW 1.75 16.4 2617 -8.6 6.0 18.1 18.2 10.1 0.9 0.60 65 +89080600.UMN 1.75 19.0 5227 -6.9 7.0 11.7 11.3 8.8 1.3 0.80 99 +89073000.JAN 1.75 18.0 3940 -7.7 6.7 5.0 5.0 2.1 0.4 0.60 9 +89072900.HON 1.75 14.0 2092 -5.9 6.0 12.0 17.9 6.4 0.3 0.80 105 +89071500.LBF 1.75 14.3 2675 -6.9 6.1 6.1 8.4 5.5 0.2 0.60 27 +89071300.OUN 1.75 19.0 4127 -5.4 6.9 13.8 19.1 13.0 0.9 -999.00 196 +89071300.DDC 1.75 15.1 3239 -4.9 6.9 5.1 7.2 7.9 0.2 1.20 81 +89070800.PIT 1.75 15.4 2732 -9.1 6.8 17.5 15.7 12.8 1.0 1.50 81 +89062800.BUF 1.75 15.2 2385 -8.2 5.3 20.1 22.3 9.8 0.7 0.60 82 +89062700.PIA 1.75 15.7 2460 -7.9 6.6 13.2 12.4 5.3 0.6 0.70 87 +89062600.IAD 1.75 16.2 3138 -8.6 6.1 14.3 23.0 12.1 0.9 0.70 108 +89062200.AHN 1.75 15.5 1517 -7.6 5.8 12.6 15.8 14.9 0.3 0.60 112 +89061900.BNA 1.75 13.9 1714 -10.2 6.3 9.7 7.8 6.8 0.3 0.60 86 +89061400.GGG 1.75 17.2 3674 -11.0 6.9 15.4 23.3 4.3 1.7 -999.00 61 +89060600.JAN 1.75 16.3 3336 -11.3 6.7 20.8 25.3 10.4 1.9 0.80 103 +89060600.GSO 1.75 14.8 2078 -9.1 5.9 8.1 6.7 10.0 0.3 0.60 93 +89060100.TOP 1.75 15.8 2588 -10.9 7.9 10.6 26.9 7.9 0.8 -999.00 90 +04092500.AMA 1.75 11.2 2465 -11.9 6.9 15.1 24.9 12.0 0.8 2.00 38 +04092300.AMA 1.75 12.8 1887 -10.1 6.7 23.5 21.8 19.6 0.9 1.30 374 +04082600.BIS 1.75 12.5 3083 -13.1 7.1 16.6 18.9 13.9 1.4 2.40 101 +04081900.ILX 1.75 15.1 3685 -9.1 5.9 19.9 28.2 19.7 1.4 1.30 371 +04071200.TOP 1.75 17.7 3644 -7.3 6.8 13.6 9.1 11.9 1.0 0.60 204 +04051600.EPZ 1.75 10.4 2888 -11.5 8.7 12.2 7.0 4.1 0.8 1.60 93 +04051000.LBF 1.75 11.6 4026 -13.9 9.0 13.9 17.5 3.0 1.8 1.60 38 +04042900.DRT 1.75 12.4 1834 -12.9 6.4 20.0 31.6 16.1 0.9 1.30 217 +04040700.FWD 1.75 10.4 835 -16.3 6.7 28.3 27.2 11.8 0.6 1.00 87 +04032100.MAF 1.75 10.2 2042 -12.9 7.9 9.6 21.3 5.5 0.5 1.50 39 +04032100.FFC 1.75 7.9 942 -17.3 7.5 12.0 13.4 11.3 0.3 1.10 154 +04030100.TOP 1.75 6.3 487 -28.7 8.7 32.0 35.0 20.1 0.6 1.60 171 +03092100.DDC 1.75 10.2 1784 -10.9 7.3 20.1 23.8 21.8 0.7 2.00 257 +03091100.DDC 1.75 14.8 3112 -7.5 6.9 22.3 30.8 15.7 1.2 2.20 259 +03091000.MAF 1.75 12.9 3038 -7.3 7.4 8.3 12.7 8.6 0.4 2.10 79 +03090500.DRA 1.75 11.3 1966 -8.3 8.1 5.0 9.2 5.0 0.2 1.20 33 +03062500.MAF 1.75 16.5 4621 -6.7 7.7 8.7 16.8 11.9 0.8 2.10 45 +03062100.MAF 1.75 10.7 1489 -7.7 7.0 14.5 29.4 6.5 0.3 1.90 74 +03061700.RAP 1.75 10.1 1501 -11.1 7.1 5.7 17.5 2.9 0.2 1.90 92 +03061700.FFC 1.75 16.3 2826 -8.5 6.2 7.0 13.0 5.5 0.4 0.60 32 +03061500.LBF 1.75 10.7 1717 -11.3 6.3 10.6 12.0 6.6 0.3 1.70 51 +03061500.FWD 1.75 14.3 2433 -11.3 6.9 12.1 5.0 5.3 0.7 1.70 32 +03061300.LBF 1.75 12.0 2759 -11.3 7.2 15.4 16.3 13.0 0.9 2.60 179 +03061100.OUN 1.75 14.5 3045 -9.3 7.2 17.8 13.1 12.1 1.2 2.00 135 +03060400.LCH 1.75 19.7 4988 -6.7 5.8 13.3 17.2 7.3 1.1 0.60 44 +03050700.BMX 1.75 17.4 4489 -10.5 7.0 26.5 28.4 12.2 3.5 2.10 101 +03050200.FFC 1.75 13.7 3289 -13.5 6.5 9.8 9.5 7.5 0.9 0.90 55 +03043000.BNA 1.75 12.9 3348 -15.3 7.2 5.0 5.5 4.1 0.5 1.30 30 +03042900.MAF 1.75 9.9 2371 -13.5 8.4 23.4 21.0 15.5 1.4 1.40 165 +03042900.AMA 1.75 9.6 2549 -14.5 8.3 25.3 33.7 16.5 1.7 1.60 237 +03032600.SHV 1.75 11.3 1723 -18.3 8.5 17.7 18.0 8.0 1.2 1.40 108 +03032600.LZK 1.75 11.3 2073 -18.5 6.7 14.3 15.4 9.5 0.9 2.20 67 +03031500.BMX 1.75 10.9 1555 -19.1 7.4 8.5 21.2 12.3 0.5 1.30 94 +02082300.LBF 1.75 17.8 6193 -10.1 8.0 12.9 28.1 3.8 2.6 3.10 10 +02072800.DDC 1.75 12.9 2480 -5.3 7.4 10.6 11.1 10.7 0.3 1.40 155 +02072518.TBW 1.75 18.9 4523 -8.5 6.7 7.8 6.3 2.0 0.9 0.60 7 +02070200.AMA 1.75 12.2 2393 -6.5 7.3 18.4 11.3 20.8 0.6 1.60 353 +02062600.DTX 1.75 14.5 3079 -8.9 6.1 5.0 7.2 1.4 0.3 0.70 -1 +02061200.TOP 1.75 19.6 5029 -8.9 7.6 21.1 24.7 15.6 3.2 0.70 224 +02060700.MPX 1.75 9.2 1952 -15.1 7.7 22.8 25.3 16.2 1.1 1.50 758 +02060402.CHS 1.75 13.7 2637 -10.1 7.6 9.7 10.8 11.7 0.6 0.80 33 +02052900.TOP 1.75 12.8 2661 -13.7 6.8 5.0 10.7 7.3 0.4 1.30 48 +02052800.MAF 1.75 12.7 3115 -11.1 8.0 20.6 24.7 16.4 1.7 2.10 103 +02052800.LBF 1.75 11.3 3387 -15.1 9.0 18.8 30.1 11.6 2.2 1.90 184 +01062000.DTX 1.75 14.9 3813 -12.5 6.9 8.4 17.6 15.0 0.9 2.80 -45 +01061800.TBW 1.75 15.9 3469 -9.7 5.9 5.0 6.6 1.5 0.4 0.80 23 +00090400.LBF 1.75 11.2 2441 -9.5 7.8 21.4 24.1 18.5 1.0 1.50 309 +00080800.OAX 1.75 18.7 4679 -8.1 7.8 16.4 25.1 10.8 2.1 3.00 185 +00080200.GGW 1.75 10.8 2057 -8.9 8.0 24.6 35.3 15.0 0.9 1.80 148 +00073100.JAX 1.75 17.6 3581 -8.9 6.0 6.6 5.5 4.7 0.5 0.60 27 +00072900.GSO 1.75 14.3 1962 -9.7 6.2 6.2 16.1 6.5 0.2 0.60 43 +00072700.LBF 1.75 18.1 5166 -8.9 8.7 17.5 26.1 12.2 2.9 2.20 351 +00072600.MPX 1.75 15.3 3240 -13.1 7.6 21.4 12.4 10.1 2.4 3.00 139 +00072600.MFL 1.75 18.3 4079 -8.5 6.6 5.2 5.6 2.4 0.5 0.60 18 +00072500.ABR 1.75 15.6 4195 -12.3 8.9 15.3 19.8 10.9 2.5 3.10 113 +00072200.LBF 1.75 12.8 3031 -11.5 7.6 27.5 23.7 14.5 2.1 2.60 247 +00072100.FFC 1.75 14.3 2149 -6.9 6.4 9.2 10.4 9.1 0.3 0.60 63 +00071800.AMA 1.75 14.4 3660 -4.7 6.9 9.1 7.7 5.9 0.4 1.50 79 +00071500.IAD 1.75 13.9 2186 -12.3 6.8 17.8 17.7 9.3 1.0 2.00 118 +00071300.ABR 1.75 13.6 2305 -8.7 6.7 29.3 44.3 21.7 1.2 2.00 278 +00070600.GGW 1.75 11.7 2743 -14.1 8.5 29.6 40.4 13.0 2.6 1.90 165 +00062400.LBF 1.75 14.8 4723 -9.7 8.6 17.4 29.6 9.8 2.3 2.00 126 +00062400.DDC 1.75 14.8 3499 -7.3 7.7 23.2 30.2 12.0 1.5 2.70 237 +00062200.DDC 1.75 14.3 3602 -8.7 7.0 15.4 23.4 16.2 1.1 2.90 157 +00061100.AMA 1.75 14.0 3932 -7.9 7.8 14.8 19.1 9.4 1.1 2.10 128 +00060300.ABQ 1.75 9.4 1267 -8.7 8.2 10.3 17.5 7.6 0.2 1.40 70 +00052900.GSO 1.75 14.3 1730 -11.1 6.2 28.7 35.1 17.6 1.1 1.20 139 +00051900.FWD 1.75 16.2 3610 -10.9 7.4 25.2 32.9 6.7 2.7 0.64 75 +00051200.TOP 1.75 16.7 5329 -7.3 6.5 25.1 29.2 21.0 2.4 3.70 216 +00033000.SHV 1.75 15.4 3548 -15.9 7.6 31.6 50.3 23.8 4.8 2.80 323 +94070100.GSO 1.50 13.8 2296 -10.3 5.4 8.1 14.3 6.6 0.3 0.60 40 +90082200.OUN 1.50 16.6 3350 -5.5 6.1 5.0 5.7 3.1 0.2 0.60 -7 +90082200.AHN 1.50 16.5 3247 -6.8 6.5 8.7 15.8 6.0 0.5 0.60 48 +90071000.DEN 1.50 13.5 3504 -8.2 8.0 25.4 20.1 16.7 1.8 2.50 41 +90041100.AHN 1.50 11.5 1096 -14.0 6.4 25.4 25.8 19.0 0.6 1.60 343 +90040200.GSO 1.50 8.7 984 -17.4 6.8 29.7 37.4 19.9 0.7 2.00 210 +89060200.AHN 1.50 13.2 1996 -7.3 6.1 5.0 5.0 3.2 0.1 -999.00 18 +03091800.INL 1.50 13.7 1863 -13.5 7.5 24.7 29.2 15.3 1.4 -999.00 384 +03031700.MHX 1.50 12.1 1241 -13.1 5.4 19.1 32.8 11.5 0.5 0.70 37 +02072500.LCH 1.50 20.2 5453 -7.3 5.9 8.5 11.3 5.5 0.9 0.60 66 +01062600.RNK 1.50 11.1 1653 -11.9 5.7 13.7 30.3 8.3 0.4 2.10 88 +01062600.GSO 1.50 11.9 929 -11.7 6.0 17.8 25.6 10.4 0.3 0.60 106 +00090200.SLC 1.50 9.1 1641 -14.7 8.4 16.1 24.8 20.1 0.7 1.70 101 +00051800.GSO 1.50 11.9 1767 -13.7 6.5 16.4 31.1 7.6 0.7 1.60 124 +94062500.GSO 1.25 15.9 2334 -5.4 5.6 9.9 5.2 12.9 0.3 0.60 103 +90041400.OUN 1.25 10.8 1408 -18.2 7.9 23.5 33.0 17.5 1.2 2.20 146 +04100400.AMA 1.25 10.5 1672 -13.5 7.6 23.5 31.9 10.7 1.0 2.40 28 +04032700.RAP 1.25 8.5 2052 -15.5 8.0 19.0 17.5 12.6 0.9 1.50 161 +03090800.PHX 1.25 12.1 2268 -6.7 6.7 10.7 16.8 8.2 0.3 1.20 90 +03090800.FGZ 1.25 8.3 663 -8.3 7.7 15.0 17.0 11.2 0.1 1.20 130 +03040500.ILN 1.25 10.4 1856 -15.7 6.5 20.8 25.6 17.7 0.9 2.20 233 +00072000.LZK 1.25 16.4 3973 -6.7 6.8 12.6 12.7 8.3 0.8 1.10 102 +00071100.DDC 1.25 16.4 4707 -4.1 6.8 5.0 8.7 6.0 0.2 2.60 136 +00030400.BMX 1.25 11.4 1311 -14.9 5.7 42.9 54.3 21.1 1.2 1.40 205 +99061200.ILN 1.00 14.7 3299 -8.3 5.8 5.0 5.0 8.2 0.3 1.10 32 +98052200.BNA 1.00 17.3 3709 -10.7 6.4 9.2 7.9 10.4 0.9 0.90 83 +97081800.FFC 1.00 18.4 3564 -6.1 6.1 5.0 5.0 4.4 0.3 0.60 37 +97081700.PIT 1.00 21.1 3951 -7.9 6.9 12.7 23.0 15.4 1.3 0.60 224 +97081700.DVN 1.00 22.3 5790 -8.3 7.5 14.3 11.8 12.3 2.6 1.00 137 +93092500.OUN 1.00 16.1 2895 -6.7 6.2 24.5 27.2 16.0 1.1 0.60 264 +91060500.CKL 1.00 16.9 3345 -7.5 6.3 5.0 5.0 9.2 0.3 0.60 52 +91060500.AHN 1.00 15.3 3036 -8.1 6.7 5.7 13.0 11.6 0.3 0.60 72 +90101800.GGG 1.00 14.2 1596 -10.6 6.4 20.0 27.9 12.5 0.7 0.60 114 +90100800.GGG 1.00 16.8 2689 -6.0 5.8 14.2 17.2 8.9 0.5 0.60 70 +90092900.MAF 1.00 12.2 1606 -8.0 6.0 15.0 28.7 11.3 0.3 0.80 35 +90083000.GSO 1.00 16.4 3552 -9.3 6.0 20.1 18.2 14.1 1.5 0.60 37 +90082300.HTS 1.00 15.2 707 -7.7 6.2 7.0 8.5 3.6 0.1 0.60 -4 +90082100.OUN 1.00 19.2 5290 -6.7 6.9 8.3 5.0 6.2 0.9 0.60 38 +90081900.AMA 1.00 13.6 2596 -7.9 7.0 5.1 5.1 3.8 0.2 0.80 45 +90080200.MAF 1.00 14.4 1702 -6.2 6.1 9.7 12.2 2.8 0.2 0.60 27 +90072600.GGW 1.00 10.2 1514 -10.6 7.0 15.6 16.6 7.9 0.4 1.80 55 +90072500.DDC 1.00 11.9 1703 -8.0 6.8 14.0 17.5 10.1 0.3 1.40 208 +90072200.TBW 1.00 17.8 3345 -5.7 6.0 5.0 7.8 3.6 0.2 0.60 34 +90072000.DEN 1.00 11.7 1698 -7.2 7.4 16.1 20.8 14.0 0.4 2.10 182 +90071800.AMA 1.00 11.4 1482 -6.5 6.7 14.8 26.1 8.4 0.2 1.10 98 +90071100.GSO 1.00 15.2 3487 -6.6 5.9 5.0 9.1 7.5 0.2 0.60 38 +90070900.GSO 1.00 17.6 4051 -5.3 5.6 10.2 10.5 6.1 0.5 0.80 73 +90062400.OUN 1.00 11.9 1572 -10.0 7.9 21.6 25.2 14.1 0.7 -999.00 80 +90062300.HTS 1.00 14.5 1346 -8.5 5.8 27.1 36.9 19.1 0.6 0.60 231 +90061000.GSO 1.00 15.3 2409 -8.8 6.1 9.7 14.5 11.1 0.4 0.60 145 +90050400.CKL 1.00 14.0 1534 -10.6 6.4 20.1 25.8 10.8 0.7 0.60 141 +89082700.DDC 1.00 16.9 4549 -7.4 7.6 11.3 24.3 1.4 1.1 2.10 11 +89082000.UMN 1.00 17.3 3524 -6.0 6.2 20.6 14.9 13.6 1.1 0.80 350 +89080600.OUN 1.00 16.3 3439 -5.4 6.8 10.2 12.1 9.7 0.5 0.80 101 +89073100.GTF 1.00 9.5 1858 -9.3 8.9 10.8 21.7 10.3 0.4 1.20 106 +89072800.DAY 1.00 16.4 2617 -7.8 5.7 13.5 11.3 7.5 0.6 0.60 83 +89072400.VCT 1.00 14.8 2953 -9.6 6.2 7.7 13.3 9.5 0.5 0.60 120 +89071200.TOP 1.00 16.6 3182 -8.1 7.6 12.6 8.2 13.2 0.9 1.60 157 +89070600.OUN 1.00 12.9 1373 -6.0 6.2 6.0 12.2 11.3 0.1 0.60 64 +89062900.AMA 1.00 12.6 2035 -8.2 8.6 14.8 26.0 13.0 0.6 2.30 165 +89062800.HTS 1.00 17.6 3659 -8.0 5.8 15.4 21.4 7.4 1.1 0.60 62 +89061900.CKL 1.00 16.7 3363 -9.6 6.4 14.5 12.2 12.2 1.1 0.60 103 +89061600.TBW 1.00 16.4 3463 -7.6 5.7 10.2 6.4 5.9 0.6 0.60 36 +89061400.JAN 1.00 16.0 3274 -11.5 7.1 11.3 8.2 9.4 1.1 1.00 57 +89061200.JAN 1.00 17.7 3616 -9.1 6.5 15.3 5.8 7.5 1.3 0.60 84 +89060500.1M1 1.00 15.8 2380 -8.2 6.0 14.7 13.0 10.3 0.6 0.60 19 +04082800.OUN 1.00 16.0 4225 -7.1 7.4 5.0 5.0 7.0 0.4 1.50 101 +04081700.TUS 1.00 13.1 2027 -8.9 7.1 13.2 13.3 8.8 0.5 1.00 96 +04080900.TOP 1.00 14.3 2676 -11.5 7.4 11.9 15.6 5.9 0.9 0.90 82 +04051200.AMA 1.00 9.7 1922 -11.5 8.0 15.0 8.4 19.1 0.6 1.60 282 +04051000.FFC 1.00 11.4 2006 -11.1 5.4 5.0 11.0 4.0 0.2 1.90 -15 +04032100.FWD 1.00 13.1 2648 -15.5 8.2 12.9 20.8 4.9 1.3 2.80 29 +04031500.DRT 1.00 11.6 1498 -15.5 7.0 16.8 24.5 6.6 0.7 1.40 123 +03090900.TUS 1.00 11.5 2363 -8.3 7.3 7.9 11.8 2.8 0.3 1.10 12 +03060900.RNK 1.00 15.0 2965 -9.1 6.2 24.1 29.2 18.9 1.4 1.20 134 +03060200.DDC 1.00 11.1 1960 -9.5 7.9 17.5 20.6 11.9 0.6 2.00 222 +03052700.ABQ 1.00 7.1 732 -9.9 8.5 14.7 20.6 3.1 0.1 0.60 12 +03052600.TFX 1.00 8.3 994 -10.9 8.0 16.0 15.9 9.1 0.3 1.30 59 +03051800.XMR 1.00 16.0 3602 -9.5 7.0 8.6 10.7 5.6 0.7 0.90 -7 +03051800.TBW 1.00 16.1 3839 -8.7 6.5 5.7 11.9 6.2 0.4 1.10 3 +03051200.JAX 1.00 15.9 3060 -7.9 6.9 13.2 20.0 10.1 0.8 -999.00 48 +03051100.MHX 1.00 16.0 3585 -9.3 7.3 16.2 15.0 11.9 1.4 0.90 104 +03050100.FFC 1.00 11.1 1429 -13.5 6.6 6.9 6.4 1.0 0.2 1.60 5 +03042800.MFL 1.00 16.7 2707 -10.7 6.4 11.7 25.5 12.3 0.8 0.60 83 +03042400.SHV 1.00 13.1 1455 -12.9 7.2 26.1 36.8 15.2 1.0 0.60 278 +03041800.DNR 1.00 5.3 1063 -18.1 8.6 11.0 43.9 5.9 0.2 0.60 41 +03040500.LZK 1.00 10.7 1751 -14.9 6.6 27.4 33.1 12.6 1.2 2.30 65 +03032100.DTX 1.00 8.7 1602 -21.3 6.6 13.3 27.1 7.7 0.6 1.10 80 +03032000.ILX 1.00 8.0 713 -21.9 6.9 5.0 11.4 5.4 0.1 1.40 -26 +03031500.TBW 1.00 15.9 3398 -13.7 7.0 18.6 27.3 3.9 2.2 0.90 32 +02080400.SGF 1.00 17.7 4328 -5.5 6.5 5.0 7.6 3.8 0.3 1.50 -11 +02080300.BMX 1.00 18.4 5098 -6.5 5.8 9.6 10.8 11.5 0.8 1.40 33 +02072900.AMA 1.00 13.6 3610 -6.5 7.8 12.5 12.2 13.6 0.7 2.00 164 +02072700.RAP 1.00 9.4 1688 -9.3 7.5 21.0 28.6 14.5 0.5 1.30 139 +02072600.TOP 1.00 15.6 3390 -5.9 7.5 16.9 16.9 11.9 0.9 2.20 168 +02072000.JAN 1.00 17.6 3501 -6.7 6.1 6.1 7.9 5.7 0.3 0.60 58 +02070300.LBF 1.00 14.1 3158 -5.9 7.5 14.0 6.2 11.5 0.6 1.20 158 +02070200.FFC 1.00 16.3 4268 -9.7 6.6 7.8 5.0 7.3 0.8 0.60 46 +02060700.ABR 1.00 9.0 2252 -14.7 8.1 12.4 18.1 8.2 0.7 1.20 118 +02060400.CHS 1.00 15.2 3170 -10.1 7.6 9.7 10.8 11.7 0.8 0.60 33 +02052700.AMA 1.00 9.7 2332 -11.1 7.2 14.5 11.8 13.0 0.6 1.40 198 +02051800.CRP 1.00 20.3 5902 -10.5 7.4 22.6 23.2 10.7 4.8 1.60 86 +01062600.LBF 1.00 12.7 3931 -8.1 8.1 9.3 8.1 8.1 0.7 1.50 119 +01062100.ABR 1.00 8.1 1118 -19.3 7.0 5.0 12.4 3.6 0.1 1.30 14 +01061900.JAX 1.00 17.2 2345 -9.5 6.1 5.0 8.3 5.0 0.3 0.60 13 +00080700.TOP 1.00 17.3 4476 -7.5 7.2 17.8 22.9 11.7 1.7 1.80 72 +00072900.ILN 1.00 14.3 2735 -11.5 6.7 13.4 21.0 8.0 0.9 0.60 68 +00072900.CHS 1.00 19.1 2462 -7.5 5.6 9.3 13.2 3.3 0.4 0.60 4 +00072800.TOP 1.00 15.3 3666 -10.3 7.6 22.0 26.4 9.1 2.2 2.60 115 +00072800.LBF 1.00 17.1 5581 -7.7 8.1 25.0 21.1 9.6 3.4 3.10 187 +00072700.JAN 1.00 12.5 2066 -10.7 6.4 8.0 8.4 4.2 0.3 1.00 -50 +00072300.OTX 1.00 9.0 2088 -12.3 8.2 17.2 21.1 7.8 0.7 1.20 43 +00071900.GYX 1.00 11.4 997 -13.3 6.0 27.0 36.1 18.8 0.6 1.00 107 +00071700.TOP 1.00 19.7 3927 -8.7 7.9 8.9 14.1 14.5 1.1 2.40 198 +00071500.SHV 1.00 17.2 4004 -5.9 6.0 5.0 8.6 6.2 0.3 0.60 46 +00071400.GRB 1.00 12.0 1743 -12.3 6.9 21.5 42.9 13.4 0.9 1.70 195 +00071200.DDC 1.00 14.4 2910 -5.5 7.2 11.3 11.7 10.8 0.4 1.40 196 +00070700.RAP 1.00 14.2 4065 -7.7 8.6 29.4 33.3 10.8 2.6 2.10 111 +00070400.DDC 1.00 18.1 5003 -7.1 7.6 9.7 19.2 11.4 1.1 2.40 114 +00070300.OAX 1.00 18.5 4633 -6.3 6.9 10.6 19.6 9.9 0.9 1.90 133 +00070300.DDC 1.00 17.2 4482 -5.9 7.5 13.6 22.7 11.7 1.0 2.40 66 +00070200.RAP 1.00 15.6 5621 -9.7 8.7 21.5 22.7 15.9 3.6 2.20 263 +00070200.DDC 1.00 16.8 3390 -5.7 6.6 14.2 21.9 5.5 0.7 1.30 38 +00063000.PIT 1.00 9.9 1086 -15.9 5.5 22.0 37.9 8.1 0.5 1.80 77 +00062600.TOP 1.00 17.8 4052 -8.9 7.6 5.0 23.9 2.4 0.6 2.30 26 +00062600.DDC 1.00 18.4 2618 -6.1 6.7 15.8 16.9 14.3 0.7 1.60 51 +00062300.MHX 1.00 18.6 4167 -8.7 6.1 6.0 6.1 9.7 0.6 0.60 89 +00062100.TBW 1.00 17.1 3180 -8.5 6.4 12.2 19.0 8.9 0.8 0.60 49 +00060200.TOP 1.00 16.1 3517 -9.3 6.9 10.4 16.3 4.9 0.9 0.80 39 +00060200.DVN 1.00 16.4 3451 -9.3 7.3 14.1 11.0 14.2 1.2 0.60 175 +00060100.ILX 1.00 16.1 3208 -9.1 7.0 17.9 15.6 20.7 1.3 1.80 163 +00053000.LBF 1.00 10.4 2258 -9.7 9.2 27.2 31.9 16.9 1.3 1.10 294 +00051400.TLH 1.00 18.3 3542 -9.9 6.9 5.0 5.0 5.4 0.5 1.00 -4 +98062500.DDC 0.88 11.9 2667 -7.3 8.7 25.1 34.7 12.4 1.2 1.40 224 +97010900.SIL 0.88 13.1 909 -13.6 6.7 31.9 37.0 33.7 1.0 -999.00 226 +90091900.OUN 0.88 18.0 3878 -6.7 6.2 11.9 20.5 12.1 0.8 0.60 119 +90073000.AMA 0.88 12.2 943 -7.5 6.3 12.7 18.1 8.4 0.2 0.60 14 +90071000.PIT 0.88 16.6 3362 -6.7 6.3 19.7 14.7 14.3 1.1 0.60 124 +89082900.GGG 0.88 18.5 3979 -4.6 6.0 5.0 5.0 1.6 0.2 0.60 3 +89082600.AHN 0.88 17.1 3463 -5.6 5.8 11.3 8.6 4.0 0.5 0.60 41 +89082500.AHN 0.88 16.9 3533 -5.1 6.1 5.0 8.1 2.7 0.2 0.60 5 +89072700.AHN 0.88 17.5 3996 -6.9 6.5 5.0 6.8 7.1 0.4 0.60 66 +89062700.DEN 0.88 8.6 931 -11.1 7.6 14.3 14.3 10.8 0.2 1.80 122 +89062600.UMN 0.88 16.2 3812 -6.9 6.3 5.0 10.8 2.0 0.3 0.60 -14 +89061200.AMA 0.88 13.2 3301 -11.7 8.7 12.9 25.2 9.2 1.3 2.30 167 +04100400.GSO 0.88 13.2 1385 -14.9 6.5 15.2 26.8 10.4 0.6 1.40 101 +04092000.OAK 0.88 7.3 242 -17.9 5.5 27.4 30.4 6.5 0.1 0.70 56 +04091900.LCH 0.88 15.9 2433 -6.9 5.8 5.0 15.6 7.7 0.2 0.60 6 +04082700.ABR 0.88 10.2 1433 -15.1 6.7 14.4 40.5 5.3 0.5 3.00 28 +04081800.PHX 0.88 10.5 1709 -9.1 7.3 5.0 9.2 6.0 0.1 0.80 15 +04040900.AMA 0.88 8.2 1515 -16.7 7.0 17.9 23.0 14.7 0.6 1.60 139 +03102600.CRP 0.88 17.9 3226 -9.9 6.3 15.2 34.5 9.8 1.2 0.60 17 +03062000.GGW 0.88 9.2 1032 -9.7 8.1 9.8 17.1 8.3 0.2 1.30 76 +03061600.TOP 0.88 12.4 1944 -11.9 6.4 5.0 5.0 5.8 0.2 1.00 3 +03060600.ABR 0.88 8.1 888 -19.9 6.8 17.3 14.2 9.2 0.4 1.50 47 +03060300.JAX 0.88 16.1 3513 -10.1 7.6 11.1 10.3 11.4 1.1 0.60 111 +03050400.BIS 0.88 8.2 1467 -18.7 7.4 15.4 16.1 8.8 0.6 1.60 86 +03031400.TLH 0.88 11.6 2141 -13.1 6.3 10.5 9.0 5.7 0.5 1.10 39 +02052900.OAX 0.88 13.0 2575 -13.3 7.1 7.5 7.0 10.0 0.5 2.60 127 +01062600.CRP 0.88 16.6 3837 -8.5 6.4 5.0 8.9 7.1 0.4 0.60 53 +01062200.DVN 0.88 10.3 1285 -18.1 6.5 10.8 11.8 8.7 0.4 1.00 66 +00090300.OAX 0.88 12.6 3099 -10.1 8.7 16.9 21.6 9.5 1.3 1.40 126 +00080700.DTX 0.88 19.4 4231 -7.3 6.0 16.6 31.6 10.6 1.4 0.60 78 +00080500.LZK 0.88 16.1 3872 -6.3 5.6 9.4 14.6 7.3 0.5 0.80 6 +00080400.BNA 0.88 16.3 3453 -9.9 6.8 10.9 16.0 9.1 0.9 0.60 83 +00080300.PIT 0.88 14.9 2780 -9.7 6.2 15.5 29.2 9.1 0.9 0.60 81 +00080200.DVN 0.88 16.6 4183 -9.7 6.6 11.2 16.4 13.3 1.1 1.10 169 +00072800.BMX 0.88 13.2 2147 -9.5 6.2 8.0 11.4 6.0 0.3 0.70 35 +00070600.DDC 0.88 12.3 2581 -7.5 8.5 9.4 10.0 10.7 0.4 1.80 97 +00061800.RAP 0.88 7.4 1396 -18.9 7.1 14.0 34.9 7.4 0.4 1.40 270 +00061100.DDC 0.88 14.3 3471 -7.9 6.9 11.0 20.2 14.0 0.7 2.40 53 +00021800.JAN 0.88 12.5 1866 -14.9 6.7 27.5 38.9 16.2 1.5 0.70 270 +90052100.SIL 0.85 16.6 3505 -10.6 6.7 8.4 13.0 10.9 0.8 0.60 70 +91051700.JAN 0.80 15.5 2683 -8.9 6.5 5.0 7.8 0.6 0.3 0.60 2 +03052100.TBW 0.80 15.8 2941 -9.5 6.2 5.0 5.4 7.1 0.3 0.60 27 +98081000.SHV 0.75 16.8 3464 -6.5 5.9 5.0 5.0 4.2 0.3 0.60 42 +98062500.JAN 0.75 19.0 3507 -6.1 6.0 5.0 8.6 7.1 0.3 0.70 -1 +97082200.ILN 0.75 9.6 520 -16.3 5.8 17.5 30.9 3.9 0.2 0.70 50 +97081800.SLC 0.75 8.3 931 -10.3 8.5 16.1 22.9 13.6 0.2 1.40 203 +97081700.TBW 0.75 18.5 3152 -7.3 6.2 5.0 5.0 1.8 0.3 0.60 8 +97062400.MAF 0.75 14.1 3277 -9.9 8.9 11.5 8.6 13.0 1.1 1.60 108 +97061700.BMX 0.75 18.2 3829 -6.9 5.9 12.4 13.0 6.9 0.8 0.60 48 +94070200.LCH 0.75 17.0 2754 -6.8 6.4 10.7 11.0 12.4 0.5 0.60 84 +94062400.HTS 0.75 16.5 2715 -5.5 5.3 8.5 15.0 4.7 0.3 0.60 39 +94062400.GGG 0.75 18.0 3599 -5.5 6.3 11.0 14.2 8.2 0.6 0.60 98 +91060600.CKL 0.75 16.3 2864 -8.6 6.4 8.9 11.4 6.2 0.5 0.60 21 +91051700.TBW 0.75 16.1 3306 -7.5 5.4 5.0 5.0 3.8 0.2 0.60 -5 +90101700.MAF 0.75 12.3 2870 -12.5 8.0 14.9 16.2 7.7 1.2 2.30 78 +90083000.ACY 0.75 15.2 2413 -9.3 5.8 13.9 22.7 9.0 0.6 0.60 62 +90082500.OVN 0.75 17.2 3413 -7.1 6.4 12.0 21.9 10.0 0.7 0.70 181 +90082500.OUN 0.75 15.7 2800 -6.4 6.6 5.0 11.9 5.3 0.2 0.60 63 +90082300.GGG 0.75 16.2 3016 -5.9 6.0 5.0 5.5 5.3 0.2 0.60 35 +90082200.BNA 0.75 15.5 2573 -6.1 6.1 9.1 12.7 8.7 0.3 0.60 -10 +90082000.PIA 0.75 19.3 4350 -6.5 6.2 12.0 9.9 9.4 0.9 0.60 67 +90081900.DEN 0.75 11.7 1982 -7.8 7.6 10.2 22.1 6.4 0.3 1.70 25 +90081700.CHS 0.75 19.5 3889 -6.9 5.7 14.2 20.9 11.2 1.0 0.60 100 +90081400.MAF 0.75 13.7 1599 -7.1 6.2 5.0 16.6 2.3 0.1 0.60 35 +90081400.ALB 0.75 14.6 1251 -7.6 5.7 31.1 21.6 20.7 0.6 0.60 261 +90080400.STC 0.75 13.1 2229 -12.5 7.3 5.3 20.0 8.7 0.3 1.40 45 +90073100.JAN 0.75 14.6 2834 -7.3 6.1 5.1 5.0 0.7 0.2 0.60 -3 +90072800.TOP 0.75 16.5 3218 -7.8 6.7 8.8 11.3 9.8 0.6 0.90 282 +90072700.DDC 0.75 14.7 3550 -7.0 7.6 7.6 7.2 6.0 0.5 2.20 84 +90072200.PAH 0.75 16.9 2541 -5.6 5.7 13.3 15.3 11.4 0.4 0.60 80 +90072200.CHS 0.75 18.4 3537 -7.5 6.2 8.3 10.2 7.1 0.6 0.60 88 +90070800.TBW 0.75 20.0 5452 -8.1 6.5 7.8 15.4 5.9 1.0 0.60 11 +90070300.SIL 0.75 18.4 3250 -5.7 5.8 11.8 14.5 7.5 0.5 0.60 79 +90061000.AHN 0.75 14.8 2847 -8.2 5.9 8.6 9.9 5.6 0.4 0.60 50 +90060700.TBW 0.75 17.0 3686 -8.6 6.0 5.0 7.3 4.1 0.4 1.80 8 +90060400.PIT 0.75 9.5 390 -12.5 5.6 26.0 37.7 14.6 0.2 0.60 57 +90052500.MAF 0.75 13.1 3262 -7.2 7.9 22.0 30.6 12.4 1.2 2.10 97 +90042400.1M1 0.75 12.8 2374 -12.6 6.7 14.0 8.3 6.6 0.8 1.50 56 +90042200.SEP 0.75 13.3 2775 -11.7 6.5 10.2 20.8 8.1 0.7 2.10 98 +90042100.OUN 0.75 12.4 1915 -14.1 6.5 25.3 31.9 13.1 1.2 2.30 138 +90033100.TBW 0.75 14.8 2515 -10.0 5.6 14.0 15.0 12.0 0.7 0.60 135 +89102800.OUN 0.75 12.0 1679 -12.7 6.8 10.1 27.1 8.3 0.4 1.00 115 +89081900.HON 0.75 13.1 984 -7.6 7.1 14.0 17.9 12.1 0.2 -999.00 244 +89081200.GRB 0.75 11.3 1782 -14.8 6.7 5.0 9.5 3.9 0.2 0.60 39 +89073100.TOP 0.75 14.5 2685 -6.4 6.7 9.8 13.0 12.0 0.4 0.60 117 +89073000.PAH 0.75 17.9 3630 -7.0 6.4 11.4 9.0 7.4 0.8 0.60 58 +89072900.SIL 0.75 18.8 4031 -6.8 6.3 5.0 5.0 3.9 0.4 0.60 37 +89071100.DDC 0.75 11.9 1858 -8.1 7.6 8.5 14.0 12.4 0.3 2.10 249 +89070800.AHN 0.75 16.8 2876 -6.5 5.8 5.0 5.0 4.3 0.2 0.60 33 +89062700.PIT 0.75 16.0 2924 -9.1 6.8 8.1 5.0 7.9 0.5 0.60 69 +89062300.OUN 0.75 16.0 3217 -7.1 5.9 12.8 14.9 6.9 0.6 0.60 113 +89062300.GRB 0.75 14.6 1729 -8.4 6.2 10.7 10.8 10.0 0.3 -999.00 139 +89062200.CKL 0.75 16.1 2986 -10.1 6.7 10.0 8.5 6.8 0.7 0.60 76 +89061600.ACY 0.75 16.5 2243 -7.6 5.9 18.8 19.1 19.5 0.7 0.60 217 +89061500.AHN 0.75 14.7 1717 -7.5 5.5 10.0 9.8 11.8 0.2 0.60 91 +89061300.CKL 0.75 16.1 2677 -8.6 6.1 15.9 7.3 11.5 0.8 0.60 102 +89060700.AHN 0.75 14.2 2402 -13.0 6.6 12.3 18.6 2.7 0.8 0.60 37 +89060400.PAH 0.75 16.4 3173 -9.7 5.8 14.2 14.7 15.5 0.9 0.60 90 +89052800.CKL 0.75 15.4 2098 -8.1 6.2 11.8 13.5 8.0 0.4 0.60 43 +04100400.CHS 0.75 15.3 1850 -10.7 6.0 22.1 32.7 13.4 0.9 0.60 81 +04092800.DNR 0.75 7.9 698 -13.9 7.1 17.7 21.0 12.4 0.2 1.00 112 +04082800.PIT 0.75 18.3 3258 -6.1 5.6 7.8 6.8 10.4 0.4 0.60 106 +04082800.JAN 0.75 18.0 3714 -7.5 6.4 5.0 5.0 1.0 0.4 0.60 12 +04081900.OTX 0.75 9.8 1929 -11.3 7.4 9.9 15.1 6.2 0.4 1.50 43 +04081900.DDC 0.75 11.7 2146 -6.3 6.2 5.0 11.0 10.2 0.1 0.70 15 +04081700.PHX 0.75 12.6 2729 -7.9 7.1 8.0 6.2 6.2 0.3 1.30 60 +04052300.BUF 0.75 13.8 1807 -10.6 5.8 22.4 24.0 18.8 0.8 0.60 239 +04051700.FFC 0.75 12.2 2077 -12.1 6.4 5.0 11.6 2.9 0.2 0.80 0 +04030500.LZK 0.75 12.4 745 -10.1 5.8 39.6 53.2 27.8 0.5 0.60 468 +03111300.BUF 0.75 8.1 418 -20.5 6.7 46.9 65.5 18.0 0.5 1.50 335 +03091000.JAN 0.75 15.0 1929 -9.5 6.0 10.8 22.1 8.1 0.4 0.60 83 +03090900.MAF 0.75 12.1 2389 -7.9 7.0 18.1 17.8 12.1 0.7 2.20 222 +03090900.GJT 0.75 6.8 996 -12.3 9.1 17.7 28.1 8.5 0.3 0.70 199 +03062200.IAD 0.75 10.5 1215 -17.1 5.8 15.1 9.7 9.3 0.4 1.10 79 +03062100.RAP 0.75 11.9 2338 -10.3 7.2 8.1 14.4 15.0 0.4 2.40 137 +03062000.BOI 0.75 7.0 491 -12.5 8.2 23.3 18.1 17.9 0.2 1.00 141 +03061900.TFX 0.75 8.6 1802 -9.3 8.2 10.8 13.4 13.1 0.3 1.00 178 +03061500.SHV 0.75 16.2 2511 -9.9 6.3 21.1 32.8 13.5 1.2 0.60 91 +03061222.XMR 0.75 17.1 2144 -7.9 6.1 5.0 6.1 5.2 0.2 0.60 65 +03061000.JAX 0.75 16.0 2482 -8.7 6.7 11.3 22.4 10.8 0.6 0.60 13 +03060700.MFL 0.75 18.2 3041 -6.7 5.6 5.0 9.3 0.9 0.2 0.60 5 +03052400.PIT 0.75 10.0 707 -16.7 6.5 26.5 23.6 12.1 0.5 1.00 65 +03050200.BMX 0.75 12.4 2216 -12.9 6.6 6.7 7.6 4.6 0.4 0.70 9 +03050100.DNR 0.75 6.7 1011 -20.1 8.0 33.5 27.3 12.5 0.8 1.20 108 +03042300.DNR 0.75 6.7 1183 -16.1 7.9 19.1 35.2 12.2 0.4 1.20 265 +03040922.XMR 0.75 15.5 2568 -10.3 5.6 31.0 38.3 12.7 1.6 0.60 34 +03032000.SGF 0.75 7.6 909 -22.1 6.7 10.5 8.6 18.2 0.2 1.40 205 +03031500.OTX 0.75 6.3 801 -26.3 7.5 24.9 28.7 18.3 0.6 1.50 240 +02072000.LZK 0.75 21.6 6551 -8.5 6.9 10.2 6.8 8.7 1.9 0.90 145 +02062500.LBF 0.75 11.7 3690 -10.3 9.2 7.2 9.1 5.0 0.7 1.30 45 +02060400.JAX 0.75 15.3 3128 -8.1 6.5 5.0 6.5 0.3 0.3 0.60 15 +02051500.PIT 0.75 5.9 521 -27.9 7.9 14.7 14.3 17.3 0.2 1.10 74 +01062400.BIS 0.75 13.7 4781 -10.9 9.0 18.7 27.1 15.0 2.7 1.70 249 +00090200.SHV 0.75 12.1 1896 -7.5 7.0 5.0 5.0 5.2 0.1 0.70 15 +00080400.LCH 0.75 15.7 3045 -7.5 5.6 5.0 12.8 4.7 0.2 0.60 28 +00072400.GGW 0.75 10.9 3240 -11.1 8.5 26.1 22.5 12.5 2.0 1.40 54 +00072300.GSO 0.75 16.5 2443 -9.1 5.7 20.6 22.2 6.6 1.0 0.60 88 +00072100.TBW 0.75 18.9 4845 -6.9 6.4 7.0 10.7 7.4 0.6 0.90 56 +00071900.JAN 0.75 19.7 3841 -6.1 6.1 7.5 6.9 5.7 0.5 0.60 32 +00071800.JAN 0.75 20.3 3305 -5.5 6.0 13.9 14.4 13.1 0.7 0.60 -56 +00071300.FWD 0.75 14.9 3103 -5.7 6.5 10.6 11.4 13.9 0.4 0.80 120 +00071300.DDC 0.75 15.1 3064 -3.7 6.1 6.2 10.6 9.2 0.1 0.60 0 +00062900.GRB 0.75 8.9 860 -18.9 6.4 17.0 24.4 14.1 0.4 1.10 108 +00062500.JAX 0.75 15.6 2442 -10.1 6.2 9.4 21.8 9.3 0.5 0.60 104 +00061900.WAL 0.75 17.4 2909 -7.9 6.3 11.3 9.5 11.6 0.7 0.60 134 +00061800.JAX 0.75 15.7 2677 -7.9 5.7 6.0 10.5 7.9 0.3 0.60 61 +00052200.LZK 0.75 12.1 2062 -13.5 6.2 22.6 32.5 17.7 1.1 1.40 162 +00050300.JAN 0.75 12.8 1438 -12.9 5.9 12.8 7.2 13.9 0.4 0.60 120 +00022400.LZK 0.75 10.6 1590 -18.1 7.0 25.0 34.2 17.2 1.2 2.50 270 diff --git a/ncep/gov.noaa.nws.ncep.ui.nsharp/BigNsharp/nlist_backup.txt b/ncep/gov.noaa.nws.ncep.ui.nsharp/BigNsharp/nlist_backup.txt index 8a0ed8aa98..901d5a2afe 100755 --- a/ncep/gov.noaa.nws.ncep.ui.nsharp/BigNsharp/nlist_backup.txt +++ b/ncep/gov.noaa.nws.ncep.ui.nsharp/BigNsharp/nlist_backup.txt @@ -1,1149 +1,1149 @@ -DATE / RAOB REPORT MUMR MUCAPE 500TEMP 7-5 LR 0-6SH 0-9SH 0-3SH SHIP MODELb SRH -91051100.MAF 6.00 14.9 4692 -10.8 8.8 13.2 18.1 14.2 1.9 2.70 -37 -95052300.DDC 6.00 15.3 4181 -9.6 7.5 19.4 26.8 23.4 1.9 3.00 325 -97061700.OUN 5.50 18.8 5751 -9.5 7.4 23.6 45.9 14.5 4.3 3.50 116 -06040300.LZK 5.00 13.7 3819 -14.9 8.0 26.6 32.6 20.9 3.9 3.40 251 -57070300.RAP 5.00 15.8 4359 -6.7 7.7 22.9 39.3 13.9 1.9 3.40 130 -90070800.BIS 5.00 16.6 3717 -9.8 7.7 29.8 42.2 12.5 3.3 2.40 202 -91052900.HON 5.00 15.2 3892 -12.3 8.0 40.7 36.0 25.0 5.7 3.50 269 -92072600.DDC 5.00 17.4 4794 -4.6 6.8 17.4 14.6 18.2 1.1 0.80 176 -96061200.DDC 5.00 13.7 2820 -8.3 7.6 20.3 15.8 12.9 1.2 2.50 142 -99012200.LZK 5.00 12.3 2240 -17.3 7.6 26.3 32.1 23.0 2.3 3.00 294 -99060100.DDC 4.75 15.9 4387 -11.3 8.0 27.7 38.0 15.3 4.2 3.50 209 -02042900.IAD 4.50 13.6 2553 -16.7 7.3 21.1 33.9 24.9 2.1 2.90 373 -02043000.FWD 4.50 19.4 5853 -10.9 8.0 29.7 37.1 14.6 7.0 3.10 151 -89060400.MAF 4.50 14.0 3939 -10.0 8.5 20.6 33.6 6.6 2.3 2.20 58 -89060700.SEP 4.50 15.6 3510 -7.9 7.0 24.8 47.4 9.0 1.8 2.40 130 -89062700.GSO 4.50 17.6 4349 -7.3 6.3 14.2 6.4 7.8 1.2 0.90 52 -89070300.SEP 4.50 18.5 5261 -7.6 8.4 22.6 1.2 12.9 3.4 2.90 222 -89080400.INL 4.50 17.4 3953 -11.5 8.3 18.6 29.2 7.3 2.9 1.00 36 -90051600.OUN 4.50 16.7 4398 -9.0 7.6 25.5 44.9 23.2 3.1 3.10 180 -91032800.FNT 4.50 11.3 1860 -17.3 7.6 47.0 45.4 26.8 3.1 2.90 431 -91042912.BRO 4.50 19.5 4471 -9.8 7.7 23.1 24.2 13.7 3.6 -999.00 254 -91072100.HON 4.50 20.1 5826 -6.1 6.8 22.8 33.9 14.3 2.6 1.90 180 -91081400.GTF 4.50 11.5 2524 -13.2 8.5 25.8 28.9 15.3 2.0 2.00 213 -92062800.AMA 4.50 16.0 4069 -10.3 7.9 22.8 27.5 16.9 2.9 3.20 150 -92062800.DDC 4.50 13.8 2750 -11.3 7.8 20.6 41.3 15.2 1.6 2.90 315 -92062900.SEP 4.50 17.4 3761 -9.6 7.8 21.8 15.6 13.7 2.5 2.80 248 -92073000.OVN 4.50 16.6 4366 -11.4 7.4 22.3 23.7 13.9 3.3 3.20 216 -92073000.TOP 4.50 16.6 4074 -10.0 7.5 22.5 22.1 11.8 2.7 2.40 164 -93050100.DDC 4.50 11.1 3206 -16.5 8.0 24.0 29.9 15.4 2.7 3.70 194 -93060800.OUN 4.50 17.0 4917 -9.1 7.1 30.6 26.7 9.7 3.9 2.60 195 -93062700.OVN 4.50 15.0 3720 -10.0 6.3 22.3 28.9 9.4 1.9 3.10 140 -93072400.BIS 4.50 15.3 3597 -9.8 5.8 21.0 33.2 14.9 1.6 2.30 263 -93092200.OVN 4.50 15.4 3685 -11.1 8.1 31.9 33.2 23.5 3.9 4.00 492 -93092200.TOP 4.50 16.8 3665 -8.1 6.5 21.3 37.9 21.3 1.7 1.30 502 -93101300.SEP 4.50 14.2 3151 -13.1 8.0 22.3 31.8 15.0 2.5 2.90 307 -93101800.SEP 4.50 15.7 3958 -10.6 7.0 31.7 30.5 23.2 3.5 2.20 441 -94040300.OUN 4.50 10.1 2075 -17.0 7.6 31.2 39.3 18.7 2.0 2.10 163 -94042600.SEP 4.50 16.3 4409 -11.5 7.4 26.7 26.2 21.2 3.9 3.30 138 -94060800.LBF 4.50 13.0 3400 -9.5 7.8 18.7 18.4 8.1 1.5 2.40 109 -95051700.DDC 4.50 15.6 4878 -10.8 8.5 26.6 40.7 8.9 4.4 2.60 43 -95060500.MAF 4.50 14.9 4358 -8.6 7.6 23.2 32.0 16.0 2.3 2.90 181 -95060900.MAF 4.50 17.8 5653 -8.1 8.1 18.7 33.5 12.8 2.9 2.90 83 -96030700.JAN 4.50 14.0 2362 -12.5 6.8 34.9 36.9 16.8 2.3 0.60 196 -96050500.IAD 4.50 12.1 2432 -15.2 7.2 25.0 25.5 15.9 1.9 1.90 36 -96051000.TOP 4.50 15.6 3884 -11.1 8.8 18.3 22.3 22.1 2.6 3.30 234 -96062700.TFX 4.50 13.9 3835 -10.9 8.3 37.1 44.3 21.8 4.3 1.60 297 -96081100.LBF 4.50 13.3 2360 -8.4 6.2 26.1 22.0 26.5 1.0 2.60 326 -96102100.OUN 4.50 12.7 2995 -12.9 7.5 20.3 28.4 15.6 1.8 3.00 71 -01070300.LBF 4.25 16.7 5584 -8.7 8.5 18.0 24.7 14.2 3.0 4.20 154 -03040600.FWD 4.25 12.4 2487 -14.3 7.3 31.5 51.8 17.1 2.4 2.90 341 -03050500.SGF 4.25 15.7 5169 -13.5 7.6 38.4 50.7 30.0 7.6 2.90 348 -03050518.BNA 4.25 16.0 2730 -12.9 7.1 37.0 37.2 18.3 3.5 -999.00 239 -03051000.MHX 4.25 17.1 4373 -10.5 7.3 22.7 23.2 14.1 3.1 2.10 146 -04040400.MAF 4.25 12.0 2746 -14.7 7.0 19.5 31.1 14.4 1.6 2.70 262 -04052200.AMA 4.25 13.7 4265 -8.7 7.9 21.5 23.9 13.6 2.1 2.10 176 -04053000.OUN 4.25 16.8 4526 -7.5 7.8 24.4 40.4 15.8 2.6 -999.00 224 -04062200.AMA 4.25 13.8 3828 -8.9 8.0 26.2 40.5 17.8 2.3 2.30 141 -04071200.GGW 4.25 11.0 2390 -13.7 8.6 22.3 32.0 17.1 1.6 1.90 99 -04071300.LBF 4.25 19.5 7183 -7.3 8.6 14.7 20.5 10.3 3.1 3.70 68 -04071318.ILX 4.25 22.1 6811 -10.9 7.9 18.7 21.9 15.5 5.8 2.60 131 -04081000.DNR 4.25 12.9 3415 -9.1 8.0 15.0 15.4 16.2 1.2 3.20 270 -05031400.JAN 4.25 11.1 1382 -15.7 7.6 25.5 49.7 19.2 1.1 2.80 161 -05042000.LBF 4.25 10.1 2460 -15.7 8.9 15.3 22.3 16.6 1.3 2.90 255 -05042200.SGF 4.25 12.6 2944 -13.3 6.8 21.3 15.6 15.1 1.7 2.20 193 -07080400.RAP 4.25 15.6 2983 -4.1 6.2 22.7 35.8 18.3 0.6 0.90 270 -08020600.SHV 4.25 13.5 2312 -14.1 7.3 32.4 43.7 25.8 2.5 1.80 212 -02042000.MAF 4.00 12.9 2974 -8.1 6.9 24.3 41.7 19.0 1.2 2.50 133 -02061300.DDC 4.00 19.5 6234 -6.9 7.6 19.8 32.7 17.2 3.0 3.70 126 -03050300.BMX 4.00 15.2 4593 -15.7 7.9 32.4 30.5 8.1 6.7 2.90 51 -04071318.DVN 4.00 20.8 6090 -11.1 8.4 25.9 22.3 22.5 7.3 2.80 191 -06050600.MAF 4.00 12.4 3533 -12.3 8.2 33.6 48.0 19.3 3.5 2.00 174 -06071700.INL 4.00 14.1 3719 -11.1 8.4 26.3 29.8 19.9 3.1 2.40 328 -06092221.SGF 4.00 17.6 5071 -6.7 5.3 31.6 37.0 21.0 2.4 1.10 202 -89061100.AMA 4.00 15.8 3666 -8.7 7.6 11.0 19.2 11.1 1.0 -999.00 87 -89062700.DDC 4.00 14.3 2840 -8.4 7.6 19.4 19.2 12.7 1.2 2.20 167 -89071800.LBF 4.00 15.4 3622 -9.4 8.1 38.9 37.6 22.9 3.9 2.90 361 -90051500.AMA 4.00 14.8 4543 -9.9 8.2 24.7 33.8 19.2 3.2 2.20 473 -90051900.AMA 4.00 11.5 2732 -9.3 7.7 26.1 30.4 18.5 1.4 2.10 301 -90060900.TOP 4.00 18.5 5571 -10.1 7.3 22.6 16.4 14.8 4.1 2.70 252 -90070100.DAY 4.00 16.6 3541 -9.4 7.1 19.9 24.5 8.6 1.8 1.80 154 -90090200.RAP 4.00 11.3 1762 -7.4 7.5 23.6 32.7 14.1 0.6 2.10 181 -91041300.SEP 4.00 16.9 5008 -10.6 6.8 21.8 27.4 12.2 3.2 3.40 137 -93071600.RAP 4.00 14.1 3230 -7.5 7.7 25.0 35.8 18.6 1.6 3.20 97 -93072300.HON 4.00 15.7 3720 -8.1 6.0 19.1 22.5 15.4 1.3 1.50 130 -95050600.FTD 4.00 15.1 2036 -11.1 7.1 21.2 37.5 20.8 1.2 0.60 304 -95051600.JAN 4.00 17.9 4861 -10.9 7.8 14.9 18.5 8.6 2.6 2.50 -35 -95072500.FTD 4.00 15.4 2897 -10.0 9.2 19.1 19.8 12.8 1.9 -999.00 168 -95072600.DDC 4.00 18.3 5696 -10.1 8.8 21.3 19.2 17.1 4.7 3.30 238 -95102700.SGF 4.00 12.5 2166 -13.8 6.9 21.9 29.4 25.7 1.3 1.60 267 -96052300.LBF 4.00 13.5 2915 -11.1 8.0 27.8 43.7 18.5 2.3 2.90 303 -97082200.LBF 4.00 15.7 3974 -9.7 7.4 26.4 37.5 17.4 2.8 3.30 321 -98050800.FFC 4.00 17.3 4120 -12.3 7.7 31.0 51.6 17.1 5.0 2.20 172 -98063000.TOP 4.00 21.8 6490 -5.3 7.2 24.4 32.6 18.1 3.1 1.70 230 -03040400.OUN 3.75 11.9 2640 -15.1 7.3 24.0 23.9 13.4 2.0 2.30 187 -95051900.BMX 3.75 16.5 3370 -9.9 6.6 20.6 25.5 16.9 1.8 0.60 246 -01040400.SGF 3.65 12.8 3277 -15.1 8.3 22.4 28.9 17.2 2.8 3.10 310 -01041500.DDC 3.65 13.1 3892 -18.3 9.0 43.1 54.7 24.4 8.6 2.50 233 -01050700.LZK 3.65 14.7 3512 -12.9 5.9 18.7 26.3 7.3 1.8 3.40 77 -01050700.SHV 3.65 14.8 2945 -12.5 6.5 15.7 22.1 9.0 1.3 1.70 110 -01051800.AMA 3.65 13.9 4695 -10.5 8.6 13.2 22.8 16.1 1.8 2.10 86 -01052500.JAN 3.65 13.5 3446 -15.1 7.5 21.8 31.4 17.4 2.7 2.70 240 -01061400.DDC 3.65 15.7 5244 -8.9 8.0 28.1 28.2 19.8 3.9 2.50 384 -01062100.DDC 3.65 15.2 4428 -10.7 7.8 19.0 25.2 13.4 2.5 3.20 400 -01071800.ABR 3.65 17.5 5177 -9.9 8.4 19.5 28.2 9.6 3.5 3.90 136 -01072100.GGW 3.65 13.5 3114 -10.7 7.7 28.3 30.5 15.8 2.3 2.80 354 -02051100.MAF 3.65 14.5 4658 -9.3 8.4 23.1 40.3 14.8 2.9 2.20 132 -02051200.TOP 3.65 15.8 4489 -11.9 8.1 26.0 26.5 13.7 4.2 3.30 224 -02060500.RNK 3.65 17.9 5399 -9.7 6.9 4.0 7.3 8.7 0.6 3.20 54 -02062400.ABR 3.65 17.2 5093 -10.5 8.2 26.3 30.9 16.9 4.7 3.50 187 -02091900.OUN 3.65 15.7 4268 -6.1 6.7 20.8 23.4 17.8 1.4 3.00 308 -03062300.OAX 3.65 18.7 6203 -9.3 8.6 13.6 22.9 12.3 3.0 4.20 237 -98040800.ILX 3.65 10.2 1354 -19.7 7.2 21.2 25.1 20.1 1.0 2.60 180 -98052200.SGF 3.65 17.1 4719 -9.9 7.8 22.4 23.1 13.8 3.3 2.30 232 -99030600.LZK 3.65 11.7 1922 -18.5 8.2 22.8 39.2 21.4 1.9 2.10 360 -99050400.OUN 3.65 15.6 5195 -14.9 8.4 21.3 22.0 16.5 5.1 4.70 343 -99072600.LBF 3.65 16.4 4375 -6.7 7.9 12.9 16.1 9.5 1.2 2.60 60 -01041000.SGF 3.50 13.0 3476 -14.5 7.9 21.6 30.3 12.5 2.7 2.60 141 -01061500.FWD 3.50 17.3 4260 -9.7 7.9 15.1 9.7 11.1 2.0 2.20 74 -02081200.DDC 3.50 14.0 3415 -8.7 8.0 15.7 27.7 10.7 1.2 3.10 157 -89070300.STC 3.50 15.6 3556 -8.2 7.0 15.8 21.4 8.5 1.2 1.40 128 -90031400.OUN 3.50 14.6 3950 -16.1 7.2 20.2 49.4 12.3 3.2 2.90 169 -90040600.SEP 3.50 12.4 3764 -14.9 7.8 25.2 36.8 15.4 3.3 2.30 305 -90060900.IAD 3.50 17.2 3994 -10.9 7.1 23.7 20.0 18.3 3.0 0.90 203 -90061900.BIS 3.50 11.1 1968 -13.5 8.2 28.4 38.0 17.4 1.6 2.90 257 -96062000.OAX 3.50 16.3 4081 -9.8 8.6 19.0 24.4 18.9 2.5 -999.00 271 -97062100.LBF 3.50 17.3 6058 -9.3 8.8 23.1 25.1 13.9 4.7 3.70 129 -98052100.TOP 3.50 16.5 4680 -12.5 8.4 10.5 23.7 9.8 2.0 3.80 100 -98052500.OUN 3.50 18.0 5688 -10.7 8.1 21.9 28.7 9.9 4.6 4.20 172 -98062000.OUN 3.50 19.0 6048 -7.1 7.8 15.4 11.2 13.7 2.3 3.90 209 -06070200.GRB 3.25 15.4 3255 -9.3 6.6 17.0 24.9 14.7 1.2 1.50 99 -91060500.DDC 3.25 16.9 4631 -7.9 6.5 15.3 15.4 11.0 1.5 3.50 74 -00050400.FWD 3.00 13.2 2731 -14.3 6.3 21.7 28.5 19.0 1.7 3.00 327 -00062900.MAF 3.00 14.8 3565 -6.3 6.3 10.5 16.7 9.6 0.5 1.80 29 -00080600.OAX 3.00 19.0 5525 -7.1 7.5 15.0 22.8 9.4 2.0 3.10 56 -01051900.LZK 3.00 16.6 4269 -12.5 8.1 18.5 25.8 9.9 3.2 2.70 98 -01053000.AMA 3.00 16.4 5827 -9.7 8.2 26.1 29.7 25.0 4.7 2.80 268 -01090900.FWD 3.00 17.1 4304 -8.9 8.2 14.1 12.0 7.7 1.8 2.70 97 -03042100.SHV 3.00 15.5 2947 -13.5 7.5 24.0 38.0 14.3 2.6 0.90 110 -03050420.SGF 3.00 15.8 4524 -11.9 7.1 35.4 47.9 25.2 5.1 3.20 480 -03062400.LBF 3.00 18.6 6189 -8.7 8.1 30.8 31.6 21.7 5.9 4.80 381 -03062800.DDC 3.00 11.4 2329 -9.3 6.7 16.9 26.8 10.8 0.7 2.20 138 -04041900.OAX 3.00 11.9 3136 -15.1 8.2 33.8 44.9 20.5 3.7 1.90 394 -04042200.OUN 3.00 12.2 2363 -13.5 7.0 24.3 33.8 16.9 1.6 2.70 385 -04051700.DDC 3.00 10.0 2200 -11.9 8.4 31.7 30.2 20.5 1.6 1.50 390 -04052300.OAX 3.00 15.6 4333 -12.3 7.6 32.4 28.9 19.6 4.9 3.00 289 -04070200.AMA 3.00 16.9 5137 -8.1 7.4 14.0 16.6 18.0 1.7 3.00 80 -04081000.DDC 3.00 14.6 3147 -9.7 7.7 21.0 22.0 13.0 1.7 3.00 222 -06042412.LMN 3.00 14.1 3248 -12.9 8.2 25.4 28.7 16.6 2.9 3.20 413 -06042500.OUN 3.00 15.5 4007 -12.3 8.6 20.1 21.2 15.4 3.2 3.30 105 -06052500.SGF 3.00 15.6 3470 -11.1 7.6 14.3 7.3 13.6 1.5 2.00 162 -06052700.BNA 3.00 16.1 3535 -8.3 5.9 12.8 17.2 17.7 0.9 0.70 196 -06052800.BIS 3.00 12.5 3434 -11.1 8.1 11.3 12.7 10.5 1.0 1.80 74 -72081200.YRM 3.00 10.9 1989 -14.2 8.3 24.6 35.0 14.0 1.5 2.40 132 -89060500.OUN 3.00 12.5 1640 -11.6 7.0 15.7 23.9 8.8 0.6 0.70 53 -89060700.AMA 3.00 15.4 4752 -9.5 8.5 30.5 55.6 21.7 4.3 2.40 303 -90051500.OUN 3.00 16.8 4798 -10.7 7.8 19.8 29.7 12.5 3.2 4.20 186 -90052700.OUN 3.00 17.5 4621 -8.8 7.6 23.8 25.1 20.4 3.1 3.20 255 -91032700.TOP 3.00 12.7 2763 -12.3 6.8 27.7 31.7 21.6 1.9 2.50 279 -91040912.1M1 3.00 14.2 3450 -15.2 8.0 19.7 20.8 11.5 2.8 -999.00 134 -91052700.DDC 3.00 17.0 5493 -10.5 8.4 21.7 29.3 13.3 4.2 2.90 81 -92032600.TBW 3.00 12.6 2104 -14.0 6.5 32.2 37.0 18.6 1.8 1.10 195 -92062700.MAF 3.00 13.9 3224 -8.2 7.7 23.7 38.8 13.0 1.6 2.50 253 -92070500.OVN 3.00 17.3 5051 -9.3 7.4 21.8 33.3 16.1 3.1 3.50 243 -93050600.MAF 3.00 13.9 3784 -9.6 7.2 27.0 25.4 18.6 2.3 2.50 149 -93060600.HAT 3.00 16.0 4948 -13.5 8.3 15.5 17.2 12.6 3.2 3.90 70 -93070200.DDC 3.00 17.1 4895 -5.2 7.2 16.4 21.4 13.3 1.2 2.80 237 -93070900.OVN 3.00 19.7 5546 -6.8 6.9 29.4 24.3 16.9 3.6 0.60 345 -93082300.DDC 3.00 13.3 2608 -7.8 7.7 19.5 27.0 13.1 1.0 2.00 83 -93091900.AMA 3.00 12.4 1911 -9.0 7.7 32.7 35.4 16.5 1.3 2.40 264 -93091900.DDC 3.00 12.4 1954 -10.4 7.2 29.5 46.6 16.8 1.3 2.80 233 -94032800.CKL 3.00 15.3 2066 -9.6 6.3 38.6 36.3 30.5 1.8 0.60 429 -94052600.FNT 3.00 10.8 2240 -16.3 6.1 17.8 25.8 12.8 1.0 2.40 113 -94060600.DDC 3.00 14.8 4882 -8.8 8.7 15.6 18.6 13.1 2.0 2.10 248 -95021400.PBI 3.00 16.5 2433 -11.0 5.9 27.1 33.4 13.8 1.7 0.60 117 -95043000.FTD 3.00 15.0 4416 -13.3 8.1 21.9 31.7 15.6 3.7 3.40 166 -95062300.LBF 3.00 12.9 2962 -11.1 7.9 21.0 19.8 15.3 1.7 2.80 220 -95071500.LBF 3.00 14.4 3052 -7.0 6.5 15.9 24.7 13.9 0.8 2.10 159 -95072400.DDC 3.00 15.9 3645 -9.9 8.2 18.2 32.6 11.8 2.0 3.60 31 -95082300.INL 3.00 15.4 3023 -11.6 8.0 30.9 26.5 25.4 3.2 2.10 694 -95082700.GGW 3.00 11.7 3094 -12.6 8.3 26.8 41.0 13.6 2.4 1.70 162 -96033100.SHV 3.00 12.7 2891 -17.1 7.6 27.4 35.5 20.1 3.1 3.10 163 -96042000.ILX 3.00 12.9 2394 -14.6 7.1 27.0 39.5 16.4 2.1 -999.00 249 -96052700.OUN 3.00 15.2 3034 -9.4 6.9 29.8 33.6 22.5 2.1 2.00 330 -96061400.UNR 3.00 13.1 3801 -11.0 8.4 18.0 14.8 12.4 2.0 2.00 63 -96062012.LBF 3.00 15.2 3418 -8.6 7.9 22.6 25.0 16.5 1.9 3.30 380 -96070800.LBF 3.00 15.3 3341 -6.4 7.0 30.0 41.5 20.6 1.6 2.20 390 -97052600.OUN 3.00 17.2 5143 -7.7 5.9 30.4 32.4 15.0 2.9 2.60 148 -97061000.FWD 3.00 15.6 2699 -9.9 7.0 18.7 24.1 10.9 1.3 1.30 98 -98052400.DDC 3.00 11.6 2630 -12.9 6.7 22.0 27.7 9.8 1.4 2.30 101 -98061400.OAX 3.00 13.3 2830 -10.5 7.7 24.4 45.4 15.3 1.8 3.40 219 -98062500.ABR 3.00 16.3 4448 -13.7 8.8 17.4 28.7 11.2 3.6 3.70 42 -98062500.BIS 3.00 15.5 4591 -13.3 8.1 15.9 15.4 15.5 2.9 3.00 89 -98062900.TOP 3.00 22.0 6895 -7.7 7.0 20.6 27.3 19.3 4.0 2.40 335 -99060200.FWD 3.00 17.3 4928 -11.5 8.8 15.0 30.3 15.3 3.1 4.50 171 -00022500.AMA 2.75 10.3 3614 -18.5 8.5 26.8 48.5 13.1 3.8 1.70 107 -00051300.DTX 2.75 16.9 4524 -8.5 7.7 24.1 18.5 20.2 2.9 2.40 328 -00052700.OUN 2.75 18.3 5870 -10.1 8.4 21.5 32.8 12.8 4.6 4.00 117 -00061200.BIS 2.75 11.3 2000 -13.1 7.5 22.0 28.0 10.2 1.2 2.50 306 -00061400.AMA 2.75 16.5 5758 -4.9 7.6 23.8 32.0 19.9 2.0 2.50 244 -00062000.LBF 2.75 14.9 4028 -8.5 6.8 18.8 23.9 11.9 1.6 3.00 96 -00071000.GGW 2.75 15.6 3180 -10.9 7.0 18.4 13.5 23.2 1.7 2.60 248 -00071000.LBF 2.75 18.1 5871 -5.5 7.8 14.3 19.9 10.7 1.5 3.50 146 -00071700.MHX 2.75 15.1 2929 -12.3 7.2 18.2 29.9 7.9 1.7 2.30 81 -00072100.LBF 2.75 15.3 3073 -11.3 7.8 26.5 39.4 16.9 2.6 2.00 223 -00072500.LBF 2.75 17.1 5901 -8.9 8.5 24.5 29.4 22.2 4.4 2.90 162 -00072700.OAX 2.75 18.5 5048 -9.7 8.0 21.8 23.2 16.7 3.8 2.60 215 -00121618.BMX 2.75 13.2 2219 -14.1 6.7 32.9 45.8 25.0 2.2 0.90 266 -01040400.LZK 2.75 15.2 4223 -15.1 8.5 18.1 24.8 11.9 3.5 3.10 105 -01042100.OAX 2.75 12.4 3283 -15.3 7.7 28.1 32.7 23.5 3.2 2.40 282 -01050620.LMN 2.75 15.4 4496 -16.1 7.3 11.5 20.9 7.3 2.2 3.10 60 -01052500.FFC 2.75 11.7 2338 -14.5 6.4 18.1 21.4 19.6 1.1 2.50 240 -01060600.AMA 2.75 14.9 4665 -8.9 7.2 15.8 15.6 11.9 1.7 2.30 191 -01060800.DNR 2.75 13.9 3440 -8.7 7.2 25.3 21.9 7.4 1.8 3.10 -26 -01061000.ABR 2.75 13.8 3453 -12.1 7.8 24.6 32.3 16.6 2.6 3.60 158 -01061400.OAX 2.75 17.2 4956 -11.3 9.0 20.4 25.5 18.5 4.2 3.80 153 -01061700.LMN 2.75 14.1 4093 -10.7 8.0 19.4 26.9 9.3 2.3 3.50 195 -01061700.TOP 2.75 15.7 4594 -13.7 8.5 22.1 26.6 15.7 4.4 3.40 214 -01061900.MPX 2.75 15.6 5114 -11.9 9.2 33.1 31.9 19.0 6.9 3.40 154 -01070100.RAP 2.75 14.3 3235 -10.7 7.7 30.8 40.7 12.9 2.8 2.60 114 -01071800.INL 2.75 17.0 4580 -12.9 7.8 11.9 12.8 11.8 2.2 0.80 154 -01071900.ABR 2.75 17.5 5356 -10.5 8.8 18.1 22.7 3.4 3.7 2.70 35 -01071900.BIS 2.75 17.8 5738 -9.9 8.6 21.8 28.8 14.1 4.5 2.90 183 -01072500.GGW 2.75 11.5 1714 -11.3 6.9 26.7 32.1 18.2 1.0 2.20 350 -01112418.BMX 2.75 15.1 2902 -11.3 6.1 26.9 31.9 22.2 1.9 0.80 328 -02051800.DRT 2.75 16.0 5077 -10.5 8.1 8.8 6.3 5.2 1.5 2.60 15 -02052400.AMA 2.75 13.8 4729 -13.3 8.3 28.8 21.8 18.5 4.9 2.30 258 -02060500.AMA 2.75 13.2 2947 -11.5 7.6 32.1 45.0 17.9 2.6 2.70 309 -02061300.AMA 2.75 13.7 3027 -8.5 8.4 29.6 33.0 18.7 2.1 2.50 65 -02062400.BIS 2.75 16.0 3559 -9.7 6.8 28.0 24.8 25.2 2.5 2.40 298 -02062500.ABR 2.75 15.1 4208 -7.1 6.8 19.1 19.3 11.1 1.4 3.10 20 -02072000.TOP 2.75 17.5 4986 -7.5 7.3 10.0 12.7 8.5 1.1 2.70 197 -02072700.TOP 2.75 19.3 6406 -5.3 6.9 18.2 19.3 9.1 2.0 2.60 131 -02081200.LBF 2.75 13.3 3735 -9.9 8.7 13.1 11.8 10.5 1.3 2.10 222 -03031300.SHV 2.75 13.5 2901 -15.3 7.1 17.1 24.1 11.0 1.7 2.00 162 -03040618.LZK 2.75 13.1 2556 -15.9 7.6 35.1 38.9 28.4 3.4 3.10 600 -03042500.LZK 2.75 13.8 3423 -15.7 7.6 20.9 31.0 20.0 2.8 3.30 212 -03042600.BMX 2.75 14.2 3921 -13.3 6.2 35.8 33.5 26.6 3.9 2.70 89 -03042900.SGF 2.75 13.1 3399 -16.7 8.5 5.0 19.6 4.8 0.7 2.80 53 -03050100.TOP 2.75 13.0 3922 -14.1 7.8 17.2 19.6 13.9 2.3 2.70 117 -03050618.SGF 2.75 15.6 5492 -14.7 7.7 32.0 40.6 17.8 7.4 2.80 313 -03050700.FWD 2.75 17.8 5303 -9.7 7.1 30.4 36.2 8.4 4.7 3.50 126 -03051000.OUN 2.75 16.8 5328 -11.1 8.3 27.5 34.8 16.8 5.4 3.60 182 -03051400.SHV 2.75 16.7 3920 -9.5 7.2 27.2 37.0 19.3 2.9 0.80 389 -03051600.AMA 2.75 14.1 3706 -10.3 8.9 42.9 37.7 34.9 4.9 -999.00 632 -03051700.SHV 2.75 16.3 3995 -10.9 7.4 23.2 13.9 19.6 2.9 2.70 242 -03060500.AMA 2.75 11.9 2647 -11.9 7.6 23.0 28.5 13.1 1.5 2.10 167 -03061400.AMA 2.75 12.3 3153 -13.3 8.3 21.7 24.7 13.7 2.2 2.10 35 -03091000.DDC 2.75 14.8 3620 -7.7 7.5 12.1 15.8 11.3 0.9 3.00 233 -03091100.MAF 2.75 13.3 2808 -6.5 6.8 10.3 9.0 7.4 0.4 1.40 80 -03100600.AMA 2.75 12.2 2542 -10.3 6.4 24.1 30.2 12.9 1.2 2.50 50 -04032718.DDC 2.75 13.2 4133 -17.3 8.0 24.6 26.6 14.4 4.4 2.30 143 -04032800.OUN 2.75 12.6 2904 -15.9 7.8 23.3 31.1 16.4 2.5 2.80 315 -04040500.CRP 2.75 14.9 2478 -12.1 6.7 22.4 20.6 7.0 1.6 0.60 184 -04050600.WAL 2.75 9.3 1861 -21.3 7.2 20.2 28.3 21.3 1.3 1.40 239 -04051100.DNR 2.75 10.6 3995 -12.9 9.2 28.3 16.6 18.2 3.4 1.50 379 -04051223.LMN 2.75 15.9 4076 -10.5 7.4 22.7 30.4 21.9 2.7 2.40 304 -04051300.OUN 2.75 16.8 5740 -11.5 8.2 15.2 20.9 12.4 3.3 3.60 131 -04053000.TOP 2.75 15.9 3882 -12.9 8.7 22.4 15.3 14.8 3.7 3.20 295 -04060300.FWD 2.75 16.9 4767 -11.1 8.7 19.1 24.1 14.1 3.5 -999.00 157 -04070500.DDC 2.75 14.3 3819 -10.3 8.3 18.6 30.5 14.4 2.1 2.50 161 -05022200.FFC 2.75 11.4 1389 -16.3 7.0 28.5 35.4 20.7 1.2 1.70 225 -05041800.AMA 2.75 9.4 1767 -17.3 8.7 19.6 22.9 15.5 1.2 1.90 211 -05042100.DDC 2.75 13.2 4722 -15.3 8.6 16.1 14.9 15.2 3.1 2.10 174 -05042300.JAN 2.75 13.6 2558 -14.7 7.1 28.5 34.1 19.9 2.5 2.70 183 -05051000.FWD 2.75 15.5 4841 -11.5 6.7 18.0 25.9 9.5 2.5 2.90 152 -05092300.ILX 2.75 14.1 1858 -8.1 6.9 21.5 16.8 11.5 0.7 0.80 121 -06031218.TOP 2.75 12.6 2814 -17.9 8.5 44.8 54.9 33.9 5.7 2.70 723 -06041400.DVN 2.75 11.2 1524 -15.7 8.3 30.6 30.3 15.8 1.6 3.40 263 -06042000.BMX 2.75 13.1 2242 -11.9 7.1 21.7 27.0 11.3 1.3 2.10 122 -06050300.DRT 2.75 13.7 3549 -12.1 8.5 14.2 19.0 5.1 1.7 2.10 74 -06050500.MAF 2.75 11.5 3709 -12.1 8.1 27.6 34.4 21.7 2.7 1.70 372 -06050718.CHS 2.75 12.9 2580 -12.5 6.0 17.7 18.8 15.9 1.1 2.00 177 -06050800.MAF 2.75 11.9 2440 -12.5 8.0 33.3 51.2 22.1 2.3 2.30 327 -06062200.DDC 2.75 12.7 2406 -8.7 8.1 21.1 24.9 11.0 1.1 2.40 175 -06081000.BIS 2.75 13.0 2589 -8.9 7.5 19.1 18.8 8.8 1.0 2.60 147 -06082600.DDC 2.75 16.5 3488 -5.5 6.5 20.2 26.5 17.6 1.0 0.80 141 -07021400.BMX 2.75 9.9 1032 -19.1 7.0 20.7 36.3 19.5 0.7 2.40 245 -58042200.FWH 2.75 13.3 3338 -16.1 7.8 37.0 49.4 25.5 4.9 2.40 276 -89060200.MAF 2.75 14.1 3193 -10.4 7.9 24.5 27.4 8.5 2.2 2.80 104 -89060300.MAF 2.75 11.9 2291 -8.4 7.6 19.3 32.2 13.3 0.8 2.20 147 -89060300.TOP 2.75 13.7 2623 -12.6 7.0 19.5 39.7 12.4 1.5 2.00 118 -89061300.AMA 2.75 14.4 3611 -10.8 8.1 15.8 22.1 9.9 1.7 3.00 79 -89062600.RAP 2.75 11.5 2246 -13.8 7.8 31.3 30.4 20.0 2.1 2.60 301 -89081600.AMA 2.75 12.8 2669 -7.1 6.9 17.0 24.9 10.5 0.7 2.50 158 -89082200.HON 2.75 15.6 4160 -9.4 6.9 22.9 28.9 14.8 2.3 3.30 107 -89082200.OMA 2.75 17.9 4223 -8.3 7.0 22.2 45.4 15.0 2.3 0.90 138 -89082200.STC 2.75 16.2 3346 -11.1 6.9 20.6 30.6 11.9 2.0 1.20 173 -89082900.STC 2.75 14.6 1959 -10.0 6.8 26.3 44.7 18.0 1.2 1.10 147 -89090400.LBF 2.75 17.3 4599 -8.6 8.3 29.6 38.8 8.6 4.0 3.30 223 -90021600.JAN 2.75 15.2 2047 -10.9 6.6 20.9 34.6 18.9 1.1 -999.00 124 -90031400.PIA 2.75 12.4 2115 -14.4 6.9 18.1 24.1 15.3 1.1 2.60 206 -90041700.OUN 2.75 13.6 3717 -15.0 8.3 11.5 20.5 17.2 1.7 3.80 152 -90042800.GGG 2.75 12.9 2263 -14.9 6.6 14.1 25.3 12.8 1.0 2.80 84 -90050100.AHN 2.75 14.9 4557 -12.6 7.7 14.7 9.3 19.7 2.3 3.40 92 -90051700.GGG 2.75 17.5 3234 -8.3 7.2 24.7 35.1 17.6 2.0 0.60 304 -90051900.LBF 2.75 12.1 3954 -13.9 8.6 25.1 24.6 16.2 3.4 2.00 398 -90052000.OUN 2.75 15.3 4565 -10.8 7.1 13.7 14.7 12.1 1.8 3.10 94 -90053100.GGG 2.75 19.3 4743 -5.7 6.1 27.2 25.7 21.5 2.1 0.70 317 -90060200.LBF 2.75 13.6 3719 -10.8 7.9 15.6 29.4 16.4 1.6 2.40 89 -90060200.STC 2.75 13.4 2697 -13.3 8.5 18.6 17.2 10.4 1.8 2.20 132 -90061900.LBF 2.75 19.2 7070 -6.1 8.4 30.2 38.1 18.5 5.0 3.60 266 -90070300.BIS 2.75 21.3 6982 -6.3 8.2 23.0 29.6 14.9 4.2 4.60 172 -90070700.BIS 2.75 14.9 3274 -7.5 6.9 19.0 25.7 12.9 1.1 2.20 316 -90081100.LBF 2.75 14.8 3971 -9.0 7.5 25.6 21.5 14.3 2.4 2.90 282 -90082800.SSM 2.75 18.2 5115 -8.5 6.2 31.6 29.9 20.5 3.7 1.10 334 -90090600.STC 2.75 19.5 4899 -6.8 6.2 21.0 17.1 14.7 2.0 1.00 294 -91032200.UMN 2.75 11.5 2632 -15.3 7.0 33.0 35.3 18.8 2.5 2.50 371 -91032700.DDC 2.75 12.4 3132 -14.2 8.2 40.7 44.0 18.9 4.4 2.10 160 -91040300.OUN 2.75 10.1 1560 -19.8 7.3 22.6 41.7 15.1 1.2 1.50 275 -91041300.OUN 2.75 14.1 4063 -13.7 8.0 22.0 25.1 17.1 3.3 2.90 205 -91042700.GGG 2.75 18.9 5164 -10.7 8.2 18.9 27.6 12.4 3.8 2.70 209 -91042700.OUN 2.75 16.6 4751 -11.5 7.0 23.6 26.4 20.6 3.6 3.70 376 -91042800.GGG 2.75 18.9 4554 -10.5 7.2 29.5 19.6 15.4 4.6 2.20 140 -91051100.AMA 2.75 15.6 5629 -10.7 9.0 16.5 21.5 14.5 3.3 2.50 314 -91051200.RAP 2.75 14.1 4430 -11.0 7.9 23.5 33.5 26.6 3.0 2.50 437 -91051700.UMN 2.75 15.9 3299 -10.6 7.6 16.1 11.8 14.4 1.6 1.90 174 -91051800.UMN 2.75 15.1 3444 -11.0 7.4 11.9 21.0 9.4 1.2 1.20 59 -91052500.AMA 2.75 13.7 3416 -10.5 7.0 17.4 13.8 17.0 1.4 2.50 124 -91053000.OVN 2.75 16.8 4446 -10.2 6.8 18.2 19.0 14.3 2.2 2.70 31 -91053000.RAP 2.75 10.9 2814 -15.7 8.1 14.5 28.4 13.0 1.3 2.00 159 -91060500.OVN 2.75 14.6 2813 -10.1 6.5 17.1 19.6 8.4 1.1 3.10 177 -91061500.BIS 2.75 13.0 2379 -11.9 6.6 22.5 25.2 13.2 1.3 2.60 152 -91061500.GRB 2.75 17.6 3430 -8.7 6.7 13.9 17.0 21.7 1.2 0.60 161 -91061900.LBF 2.75 13.0 3600 -12.0 8.6 15.2 20.9 13.5 1.7 2.60 219 -91062000.HON 2.75 13.9 2691 -10.5 7.0 22.1 20.0 16.1 1.4 1.20 282 -91070500.BIS 2.75 13.3 2941 -9.3 6.4 21.4 26.6 19.3 1.2 2.40 206 -91070500.GGW 2.75 11.4 2308 -9.9 7.0 17.5 23.9 6.7 0.8 2.20 144 -91072200.HON 2.75 19.3 4474 -6.8 7.2 17.3 24.1 11.1 1.7 -999.00 198 -92021500.UMN 2.75 10.2 1724 -16.9 6.4 33.2 28.2 24.2 1.5 2.20 289 -92030600.1M1 2.75 11.5 2572 -21.1 7.2 22.5 26.7 17.3 2.4 2.30 194 -92060500.AMA 2.75 13.4 2870 -9.4 7.5 17.5 25.9 12.2 1.1 2.60 249 -92061200.MAF 2.75 13.8 2387 -8.2 7.4 26.7 34.6 13.3 1.3 2.00 178 -92061300.AMA 2.75 14.7 2821 -8.8 7.2 19.1 36.4 12.0 1.2 2.70 165 -92061900.BIS 2.75 11.0 1791 -14.4 6.9 27.4 24.4 13.0 1.3 2.50 106 -92061900.DDC 2.75 12.8 2598 -8.3 7.9 25.1 40.5 15.7 1.3 2.70 114 -92062700.AMA 2.75 14.1 3165 -10.0 7.7 16.6 29.9 12.4 1.4 2.90 191 -92073000.LBF 2.75 15.0 3544 -10.3 7.9 25.7 33.8 22.0 2.6 3.00 335 -92101600.SEP 2.75 14.6 3654 -12.1 7.7 16.4 22.7 12.6 1.9 2.90 227 -93033100.1M1 2.75 11.9 2471 -15.1 7.2 30.2 27.1 17.8 2.3 2.80 54 -93033100.UMN 2.75 11.1 2598 -16.5 6.4 29.7 28.9 19.7 2.2 2.10 117 -93040200.WAL 2.75 10.9 1625 -18.5 7.3 30.7 48.4 26.8 1.7 2.40 200 -93042000.GGG 2.75 12.4 2342 -13.3 8.0 26.7 28.4 17.5 2.0 2.70 156 -93042500.UMN 2.75 11.4 2317 -14.6 6.9 25.2 33.1 18.2 1.6 2.40 198 -93042800.MAF 2.75 10.4 1494 -10.6 6.9 19.6 25.8 12.9 0.5 1.80 150 -93042900.MAF 2.75 11.7 2435 -10.9 7.1 29.3 37.4 20.8 1.5 2.20 551 -93050100.AMA 2.75 11.6 4085 -14.5 8.1 25.7 15.8 15.3 3.4 1.90 234 -93050600.AMA 2.75 13.2 4478 -13.6 8.6 34.6 38.4 16.6 5.7 2.00 340 -93051600.DDC 2.75 12.8 3614 -9.8 6.6 19.4 23.7 12.6 1.4 2.50 161 -93061900.AMA 2.75 12.8 2140 -7.8 7.0 22.7 23.3 14.4 0.8 1.90 146 -93062400.DEN 2.75 11.7 3442 -9.6 8.8 32.0 42.3 15.8 2.6 1.80 211 -93062400.LBF 2.75 16.0 3944 -8.6 8.1 21.9 33.8 18.1 2.3 2.80 178 -93070500.DDC 2.75 17.1 4186 -5.4 6.7 30.6 34.9 16.6 1.9 1.20 146 -93070700.AMA 2.75 17.0 5327 -4.7 7.8 21.3 20.0 11.4 1.7 3.80 127 -93070700.DDC 2.75 17.0 5334 -6.0 7.2 27.9 28.2 16.5 2.6 3.10 154 -93090400.IAD 2.75 15.6 2779 -5.9 5.7 15.2 15.6 12.4 0.5 0.60 149 -93101300.CRP 2.75 17.3 4367 -8.6 6.3 20.2 29.8 14.8 2.0 1.50 227 -93101900.GGG 2.75 15.7 3105 -9.8 6.9 23.5 33.9 10.3 1.9 0.70 105 -93102000.DRT 2.75 15.5 3433 -8.9 6.4 25.4 34.0 13.4 1.8 1.60 35 -94012700.GGG 2.75 13.2 2167 -15.9 6.8 31.0 32.3 17.5 2.3 0.70 306 -94041100.UMN 2.75 12.6 2040 -16.5 7.6 37.8 45.4 19.9 2.9 2.50 486 -94052500.OUN 2.75 15.0 3912 -11.5 7.4 22.0 36.2 13.2 2.6 3.00 122 -94053000.SEP 2.75 17.5 5032 -10.6 8.2 27.0 23.8 16.1 4.9 3.90 291 -94060500.HON 2.75 14.2 3871 -11.6 8.5 21.4 19.2 12.0 2.8 2.40 202 -94060600.TOP 2.75 16.5 3953 -9.3 8.1 16.1 27.7 15.4 1.9 2.50 394 -94061100.AMA 2.75 12.3 2164 -8.3 7.3 19.5 20.3 16.6 0.7 2.80 229 -94061200.AMA 2.75 14.7 4015 -8.0 7.8 26.7 19.9 18.4 2.3 2.70 302 -94061200.TOP 2.75 13.9 2320 -9.5 6.6 23.9 24.4 15.8 1.2 0.90 117 -94061800.AMA 2.75 11.9 2676 -7.0 8.2 11.0 11.3 10.7 0.5 1.60 171 -94061900.JAN 2.75 16.8 3177 -7.5 5.9 11.5 12.4 3.8 0.6 0.60 42 -94062500.HON 2.75 11.8 1962 -10.8 6.4 27.8 33.5 15.4 1.1 2.20 211 -94062600.JAN 2.75 16.1 2842 -9.5 6.4 24.0 32.8 12.4 1.6 0.90 130 -94070100.STC 2.75 14.3 3701 -11.6 7.3 27.2 25.1 19.0 2.9 2.70 399 -94070200.OAX 2.75 18.5 5257 -10.1 8.0 26.5 25.4 15.5 4.9 3.20 416 -94070700.HON 2.75 16.5 3051 -8.8 7.2 20.5 18.6 10.2 1.5 0.60 159 -95040900.TOP 2.75 10.7 2836 -17.5 9.2 21.4 31.9 16.5 2.5 1.90 120 -95042000.FTD 2.75 14.6 2621 -13.3 7.7 39.5 59.2 25.8 3.7 2.40 498 -95051400.UMN 2.75 16.5 5278 -10.3 6.9 28.0 26.2 22.3 4.1 3.20 211 -95052200.LBF 2.75 10.4 2027 -14.9 7.4 28.3 33.3 18.7 1.6 2.10 221 -95060300.AMA 2.75 12.4 3024 -9.6 8.2 22.4 37.2 15.7 1.6 2.00 346 -95062100.OKX 2.75 17.1 3918 -9.8 7.1 18.4 25.8 11.4 2.1 1.00 18 -95062800.LBF 2.75 12.4 2880 -10.1 7.7 22.0 19.7 13.9 1.5 2.50 208 -95070300.AMA 2.75 14.7 3838 -11.5 8.8 22.8 29.0 8.2 3.1 2.50 115 -95070300.DDC 2.75 14.2 2905 -9.6 6.8 18.2 21.4 12.3 1.2 2.30 111 -95071200.OKX 2.75 13.9 2900 -15.6 6.9 12.7 13.6 8.1 1.3 2.40 48 -95071500.GRB 2.75 19.0 5409 -8.5 8.1 12.1 9.0 8.0 2.0 3.00 69 -95072400.AMA 2.75 13.3 2225 -7.8 8.5 21.6 25.1 13.1 1.0 2.90 124 -95081800.BIS 2.75 18.4 5585 -7.0 7.7 10.6 17.3 10.6 1.4 3.30 142 -96031600.FFC 2.75 9.6 890 -19.2 7.8 28.8 55.2 20.5 0.9 2.20 353 -96042200.OUN 2.75 12.7 2260 -10.9 5.9 38.3 48.8 18.5 1.7 2.30 500 -96042200.TOP 2.75 10.9 1574 -16.6 7.3 45.6 54.3 14.6 2.2 2.30 145 -96051700.UNR 2.75 14.8 4365 -8.1 8.0 25.5 28.7 15.0 2.5 2.50 219 -96051800.OAX 2.75 15.3 4523 -11.1 8.8 16.0 21.2 12.9 2.6 -999.00 68 -96052500.AMA 2.75 13.5 3927 -11.3 9.1 20.3 4.9 16.4 2.6 1.90 101 -96052600.MAF 2.75 14.1 3464 -6.2 7.7 28.7 42.1 22.5 1.6 2.90 240 -96053000.MAF 2.75 14.9 3675 -7.0 7.7 35.1 40.6 19.0 2.4 2.50 321 -96060100.ABR 2.75 12.6 2276 -13.4 6.2 22.4 27.2 24.6 1.3 2.20 370 -96060200.JAN 2.75 16.1 1863 -7.5 5.5 12.7 20.3 11.3 0.4 0.60 168 -96060300.SGF 2.75 11.7 2739 -15.9 7.1 26.4 35.9 14.8 2.3 2.10 90 -96061200.AMA 2.75 11.9 3079 -8.8 8.0 24.3 30.2 18.3 1.5 1.90 373 -96061300.FFC 2.75 13.7 2727 -9.1 5.7 12.9 13.1 12.9 0.6 1.00 152 -96061400.LBF 2.75 12.4 2384 -8.6 6.5 15.4 25.0 12.0 0.6 2.20 102 -96062500.AMA 2.75 13.9 3778 -9.4 8.5 22.9 28.2 7.0 2.3 1.90 123 -96072400.DDC 2.75 14.3 3068 -11.1 8.6 27.6 36.6 16.8 2.8 2.70 203 -96080100.DEN 2.75 13.5 3920 -7.8 8.5 22.6 26.3 15.0 1.9 2.10 276 -96083000.DEN 2.75 11.7 2478 -9.1 7.8 26.2 28.9 17.6 1.3 2.30 86 -96092100.FTD 2.75 16.4 2870 -9.4 6.5 26.4 32.6 15.7 1.8 -999.00 136 -97012500.SIL 2.75 13.0 2563 -16.5 7.5 18.3 25.8 18.3 1.8 2.80 145 -97032900.BNA 2.75 11.1 1618 -15.6 7.4 25.2 15.3 18.1 1.3 3.00 389 -97041100.MAF 2.75 11.9 4076 -15.0 8.2 23.7 30.7 20.8 3.3 2.10 260 -97042100.SGF 2.75 9.4 1773 -16.5 7.4 25.4 23.9 23.3 1.2 2.00 405 -97052700.OUN 2.75 18.0 5907 -8.7 6.4 17.5 23.9 17.6 2.5 3.70 271 -97052700.SGF 2.75 16.3 4440 -9.9 7.0 22.6 25.0 16.3 2.7 2.60 276 -97061200.TOP 2.75 12.6 1552 -11.7 7.1 23.5 30.2 11.6 0.9 0.90 141 -97061600.DDC 2.75 13.5 3187 -10.9 7.7 23.3 39.3 11.9 2.0 2.70 26 -98040900.BMX 2.75 15.8 3341 -13.9 7.9 40.1 51.5 25.9 5.5 2.00 296 -98052500.DDC 2.75 12.5 2688 -12.1 7.2 27.9 32.0 13.7 1.9 2.70 180 -98061400.OUN 2.75 20.5 6689 -6.5 7.7 32.8 42.7 17.9 5.4 4.00 262 -99060300.AMA 2.75 15.6 5087 -10.3 8.7 18.6 49.2 15.5 3.1 2.50 289 -99061200.AMA 2.75 14.7 4400 -10.3 7.7 26.2 36.6 18.8 3.2 2.40 210 -99061900.DDC 2.75 13.9 4141 -11.3 7.3 22.5 29.0 13.4 2.5 2.40 346 -99070100.MAF 2.75 13.7 3989 -2.5 7.5 14.9 13.7 10.5 0.4 2.00 146 -99081800.LBF 2.75 18.3 5554 -8.9 7.8 23.7 25.1 10.7 3.9 3.40 143 -00021400.LZK 2.50 10.7 2091 -20.3 6.4 21.1 24.5 22.2 1.5 2.10 245 -00032700.SGF 2.50 9.8 1766 -18.3 7.5 34.3 43.9 21.4 1.9 2.20 350 -00050100.FWD 2.50 14.3 3593 -13.1 7.2 17.3 18.5 19.0 2.0 1.70 401 -00051200.DVN 2.50 15.6 4865 -8.1 7.4 24.8 24.9 19.3 2.7 3.40 225 -00052300.MHX 2.50 15.1 3613 -13.5 6.5 15.3 26.5 10.5 1.7 2.40 79 -00061000.RAP 2.50 13.2 3610 -8.1 7.8 14.3 21.1 11.9 1.0 2.10 70 -00062400.OAX 2.50 17.5 4783 -8.7 7.2 18.7 28.2 14.9 2.3 2.30 195 -00070200.ABR 2.50 17.8 5952 -10.3 8.4 12.2 23.4 8.1 2.7 3.90 147 -00070600.LBF 2.50 18.2 5506 -7.1 8.3 25.3 35.5 11.8 3.5 3.50 155 -00080500.BIS 2.50 17.0 4830 -8.7 6.9 17.2 22.9 4.0 2.0 3.30 86 -00091100.MPX 2.50 16.6 4554 -10.3 7.0 22.0 24.0 18.4 2.9 3.20 271 -01041700.MAF 2.50 13.9 4552 -12.1 7.5 16.2 30.6 8.0 2.2 2.20 100 -01042200.DDC 2.50 13.3 3749 -12.1 7.3 33.4 45.3 24.2 3.5 2.70 510 -01050100.OAX 2.50 10.4 2265 -16.9 7.7 17.4 17.0 19.2 1.3 2.20 226 -01050400.MAF 2.50 13.7 3866 -11.3 7.2 12.8 33.8 11.4 1.3 2.70 101 -01052500.BMX 2.50 11.9 2388 -14.9 6.7 29.2 27.4 23.5 2.0 2.70 436 -01052620.LMN 2.50 14.1 4355 -13.5 6.4 27.3 33.2 20.2 3.5 2.90 233 -01070400.RAP 2.50 13.2 3145 -11.1 8.3 25.2 26.1 12.9 2.3 2.60 144 -01070500.LBF 2.50 14.5 3571 -7.7 7.7 26.0 27.0 17.1 1.9 2.90 313 -01082400.AMA 2.50 15.4 4318 -6.7 7.4 24.0 28.1 21.0 1.9 2.80 158 -01101000.DDC 2.50 12.9 3299 -9.7 6.4 18.8 18.3 16.4 1.2 2.50 275 -02040300.JAX 2.50 14.8 3327 -14.3 7.2 11.5 30.9 11.8 1.4 1.50 80 -02041212.AMA 2.50 12.2 2907 -13.7 7.5 20.4 25.1 14.6 1.8 2.80 184 -02041900.DVN 2.50 12.3 2861 -14.5 8.2 14.1 20.0 15.9 1.4 2.50 213 -02051700.AMA 2.50 13.8 5036 -12.7 8.7 21.9 26.5 17.4 4.0 2.20 216 -02072500.ABR 2.50 15.0 3995 -11.5 7.9 28.3 28.6 13.8 3.7 3.00 207 -03051500.SHV 2.50 16.8 4260 -9.9 6.8 33.7 42.9 16.3 3.9 0.80 246 -03062200.RAP 2.50 10.6 3380 -13.7 8.0 27.5 42.2 18.7 2.6 1.50 189 -04032718.OUN 2.50 12.6 2825 -14.9 7.3 21.1 32.3 11.5 2.0 2.10 199 -04040400.EPZ 2.50 12.1 4482 -17.9 8.2 29.1 25.4 11.6 5.5 2.10 203 -04080700.ABR 2.50 13.1 2792 -9.3 6.7 21.0 25.9 12.1 1.1 2.50 240 -04091500.LBF 2.50 12.8 1474 -10.7 8.0 35.4 39.8 20.5 1.4 -999.00 306 -04102400.JAN 2.50 15.8 1938 -6.9 5.3 30.8 27.8 19.3 0.8 0.60 328 -05050322.XMR 2.50 13.4 2165 -13.9 7.6 23.3 41.5 21.5 1.7 1.20 82 -05050700.MAF 2.50 10.7 3257 -12.3 8.0 20.3 24.6 11.2 1.7 1.60 48 -06050900.JAN 2.50 16.1 3303 -13.3 7.3 28.4 39.9 14.9 3.5 1.90 170 -06052600.SGF 2.50 13.9 3409 -9.5 6.5 18.9 23.2 18.8 1.3 2.50 262 -06061400.RAP 2.50 11.5 2691 -7.7 8.3 17.3 24.5 15.3 0.8 1.60 248 -06062500.DNR 2.50 7.1 987 -11.5 8.9 26.1 26.5 12.5 0.4 0.90 -172 -06071123.LMN 2.50 16.5 2996 -5.9 6.7 12.6 11.2 9.4 0.6 0.60 110 -08110600.OUN 2.50 11.4 1623 -12.5 6.9 29.8 32.7 24.8 1.1 2.40 317 -90060300.PAH 2.50 17.8 3663 -7.6 7.0 24.0 25.9 29.8 2.0 0.60 367 -90060700.DEN 2.50 10.9 2393 -8.2 9.0 26.3 23.9 19.6 1.2 1.60 170 -90061500.DDC 2.50 16.0 4667 -6.5 7.9 28.4 30.1 15.7 2.6 2.70 306 -90062200.ALB 2.50 12.6 1833 -14.1 6.7 32.5 29.1 20.6 1.7 1.60 203 -90070200.GSO 2.50 14.8 3963 -10.0 7.2 26.0 16.3 10.7 2.6 2.20 100 -90083100.CHS 2.50 16.0 2477 -8.5 6.5 17.0 17.7 8.3 0.9 0.60 67 -91041900.SEP 2.50 17.6 5996 -13.2 7.4 13.5 44.8 13.0 3.3 3.10 24 -91042100.AYS 2.50 11.8 2563 -16.9 7.4 13.4 30.0 10.3 1.2 1.70 76 -91050800.MAF 2.50 11.2 3415 -14.8 8.4 31.1 36.7 25.4 3.5 1.60 280 -91051200.AMA 2.50 14.3 4539 -10.8 8.5 12.4 14.9 16.7 1.7 2.30 208 -91052700.LBF 2.50 11.9 2669 -13.4 7.9 13.9 32.3 13.0 1.1 2.10 35 -91053100.DEN 2.50 12.0 3551 -12.1 9.5 27.3 45.8 10.7 3.2 1.90 149 -91071800.STC 2.50 18.2 4956 -8.7 7.3 18.7 20.1 21.9 2.5 2.50 104 -91080200.CAR 2.50 12.3 1891 -13.7 6.3 19.6 33.3 11.9 0.9 1.50 223 -92030400.SEP 2.50 12.7 2676 -15.3 7.7 20.1 27.2 9.2 1.9 2.30 133 -92041600.AMA 2.50 11.1 3362 -13.4 7.6 16.0 17.8 12.0 1.5 1.70 127 -92070200.DEN 2.50 11.7 2313 -11.2 8.0 27.6 29.9 20.0 1.6 2.50 362 -93033000.DRT 2.50 12.7 2680 -13.4 8.2 39.6 44.0 26.0 3.5 2.80 411 -93061400.TOP 2.50 16.5 4195 -8.5 7.7 12.5 17.8 10.7 1.3 2.80 65 -93070200.HON 2.50 14.6 2619 -11.3 7.0 28.3 40.3 12.6 2.0 0.80 143 -93070300.TOP 2.50 18.5 4019 -7.2 7.1 15.8 16.4 15.2 1.4 0.70 202 -94032800.AHN 2.50 14.4 2627 -10.5 6.2 34.5 24.7 30.4 2.0 0.70 518 -94062600.TOP 2.50 16.4 4265 -8.6 8.4 25.2 45.9 21.6 3.0 2.90 418 -95050800.FTD 2.50 16.5 2700 -10.4 7.7 30.8 30.8 24.5 2.6 0.80 407 -95050800.LCH 2.50 17.9 3259 -9.9 7.1 16.7 31.1 10.2 1.6 0.60 119 -95050900.TOP 2.50 10.0 1495 -19.3 6.9 19.3 22.8 21.2 0.9 1.20 126 -95051600.MAF 2.50 13.6 3261 -7.8 8.4 21.7 28.8 10.3 1.5 1.80 134 -95051900.GSO 2.50 13.4 1758 -11.8 7.9 25.3 27.1 23.6 1.3 -999.00 83 -95052912.MAF 2.50 13.0 1617 -11.3 7.5 27.6 22.0 13.7 1.2 1.90 284 -95060700.DEN 2.50 12.3 3137 -10.8 9.2 37.2 35.9 20.7 3.4 2.00 284 -95061600.TFX 2.50 13.0 3142 -12.0 8.4 27.7 35.6 23.8 2.7 2.30 277 -95081212.MPX 2.50 19.1 3361 -6.3 7.2 20.6 36.8 23.0 1.4 -999.00 164 -96030700.TLH 2.50 15.4 2615 -10.4 6.0 20.9 23.7 20.7 1.2 0.60 320 -96042200.FTD 2.50 12.0 1872 -12.6 8.2 27.1 34.0 18.3 1.5 -999.00 298 -96051800.MPX 2.50 16.3 4406 -8.9 8.2 13.0 23.4 20.7 1.6 3.40 259 -96060100.DDC 2.50 13.3 2888 -10.9 8.3 13.3 19.3 13.9 1.1 2.50 111 -96060300.AMA 2.50 11.0 2356 -10.5 6.9 27.6 31.6 18.0 1.2 2.00 256 -96061200.LBF 2.50 11.7 2310 -9.9 7.5 16.7 22.2 12.7 0.8 2.40 122 -96062100.DEN 2.50 15.2 5603 -8.1 9.6 27.5 33.4 8.8 4.4 2.20 155 -96071900.GRB 2.50 20.7 4746 -7.5 6.4 26.3 26.2 20.0 3.0 0.70 164 -96072200.LBF 2.50 18.4 4756 -6.5 7.2 20.0 29.4 19.0 1.9 2.10 94 -98071100.DDC 2.50 18.9 4323 -4.3 6.2 12.7 15.2 16.0 0.7 0.60 230 -00061300.OAX 2.25 17.7 5453 -11.5 8.5 15.8 19.3 12.9 3.5 4.00 206 -00030300.FWD 2.00 12.3 2589 -14.3 6.2 33.4 29.1 20.2 2.2 2.70 239 -00031600.LMN 2.00 9.5 1478 -17.3 7.1 22.1 10.9 12.9 0.9 2.20 164 -00032800.JAX 2.00 12.5 2135 -14.5 6.3 29.1 24.7 25.7 1.7 0.90 268 -00061200.AMA 2.00 16.8 5720 -10.3 8.3 16.1 28.7 15.7 3.2 2.70 88 -00061300.LBF 2.00 13.9 4790 -9.9 8.3 16.6 18.6 9.9 2.1 2.00 159 -00061500.JAX 2.00 17.9 4801 -8.7 6.4 6.2 13.3 3.6 0.7 1.10 55 -00071100.GGW 2.00 14.2 3230 -11.3 6.9 30.1 48.1 16.9 2.6 3.00 88 -00071500.BIS 2.00 16.5 5132 -9.5 8.1 27.6 34.1 14.6 4.3 2.70 152 -00072300.LBF 2.00 13.2 2926 -11.5 7.1 25.2 27.3 13.6 1.9 2.80 91 -01042200.AMA 2.00 14.1 6059 -15.3 9.2 35.7 38.3 16.6 10.2 3.30 320 -01042200.MAF 2.00 13.7 4543 -12.3 8.4 27.4 36.2 12.3 4.2 2.20 164 -01050600.FWD 2.00 15.4 3092 -12.7 6.8 32.7 34.4 19.4 3.2 2.10 170 -01050700.SGF 2.00 14.5 4025 -13.7 6.1 8.8 17.0 10.5 1.0 3.10 202 -01050702.LZK 2.00 14.2 2759 -12.9 5.9 18.7 26.3 7.3 1.3 2.00 77 -01051200.OUN 2.00 13.2 3098 -13.9 7.1 10.0 10.8 8.7 1.0 2.10 132 -01052700.DDC 2.00 11.3 2853 -12.1 6.7 30.6 37.1 19.3 1.9 1.80 184 -01052800.OUN 2.00 16.5 4910 -10.7 7.6 29.7 38.8 16.9 4.7 3.10 113 -01053000.DDC 2.00 15.2 2892 -12.1 8.0 19.5 26.6 14.8 2.0 1.80 388 -01053100.FWD 2.00 15.8 4571 -12.3 8.7 12.4 20.6 13.7 2.3 3.90 106 -01053100.LCH 2.00 17.4 3988 -8.3 7.0 8.3 13.9 0.8 0.8 2.40 8 -01062100.DNR 2.00 10.8 2544 -11.5 7.5 21.4 23.2 20.5 1.2 2.10 192 -01063000.FWD 2.00 16.8 4122 -9.7 6.9 11.2 19.2 9.2 1.2 1.60 133 -01071300.GGW 2.00 14.5 3042 -10.1 8.1 16.5 34.2 7.9 1.4 3.50 19 -01072000.RAP 2.00 15.1 4486 -8.7 8.4 15.4 26.3 10.9 1.8 2.40 71 -01082300.TOP 2.00 16.7 4361 -9.7 7.6 9.9 23.0 13.6 1.3 2.30 192 -01082400.DDC 2.00 16.4 4283 -7.5 7.7 14.7 16.3 11.9 1.4 3.10 77 -01090800.OUN 2.00 17.6 4351 -8.7 7.8 26.1 21.2 21.8 3.3 2.30 151 -01090800.TOP 2.00 17.8 4174 -11.3 8.1 26.2 26.7 24.5 4.2 1.70 274 -01101000.OUN 2.00 15.6 3485 -12.9 7.9 24.4 28.2 23.9 3.2 2.50 447 -02041800.OAX 2.00 11.4 2113 -14.5 7.6 33.9 35.5 24.0 2.1 2.20 376 -02052800.LZK 2.00 15.1 3284 -12.3 6.5 4.4 12.3 2.6 0.4 0.60 13 -02061300.DVN 2.00 17.3 3501 -11.9 7.4 26.3 38.7 10.0 3.3 1.10 100 -02062600.MPX 2.00 19.6 6228 -9.7 7.1 18.6 21.8 9.2 3.7 3.20 120 -03051900.TBW 2.00 17.1 3797 -10.9 6.8 5.9 5.0 4.0 0.7 1.00 -4 -04043000.JAN 2.00 13.6 1469 -12.7 6.5 27.4 22.8 18.1 1.1 0.60 184 -04052200.DDC 2.00 13.5 3809 -9.7 8.1 21.0 27.0 20.3 2.0 2.20 297 -04062400.GRB 2.00 10.4 1604 -16.9 6.3 25.3 36.9 16.4 1.1 2.40 128 -04072300.TOP 2.00 16.0 3276 -7.7 6.4 15.8 19.6 11.4 1.0 0.70 158 -04082400.BIS 2.00 13.4 2596 -11.1 7.6 21.3 22.3 16.4 1.5 2.20 208 -04091200.GRB 2.00 12.3 2256 -14.9 7.2 14.7 24.8 11.6 1.0 1.00 64 -05022100.SGF 2.00 9.1 1128 -18.9 6.8 27.7 36.6 17.1 0.9 1.90 97 -05050700.LBF 2.00 9.7 3058 -14.3 8.2 12.5 21.7 6.1 1.0 1.40 135 -05050900.LMN 2.00 12.0 2971 -16.1 7.8 15.1 29.6 15.9 1.6 2.20 290 -06040700.TOP 2.00 11.0 2249 -15.1 7.4 35.7 27.3 15.8 2.3 2.10 206 -06041600.TOP 2.00 12.2 2191 -12.9 8.2 37.2 42.6 28.5 2.5 2.90 533 -06050800.DDC 2.00 9.5 1674 -17.1 8.9 16.8 27.8 16.1 1.0 2.60 248 -06051600.MFL 2.00 15.8 2473 -11.1 6.8 26.6 21.2 18.7 1.9 0.60 227 -06052400.DDC 2.00 10.2 1607 -8.7 7.6 22.4 19.3 17.0 0.6 1.80 189 -06061400.TFX 2.00 12.3 2827 -9.7 8.1 15.9 28.9 14.3 1.0 2.10 65 -06062700.ILX 2.00 12.2 2025 -15.7 6.4 3.5 11.7 5.2 0.2 1.20 15 -06090100.DDC 2.00 12.2 1972 -7.7 7.1 15.6 27.4 13.9 0.5 1.60 363 -89052800.ELP 2.00 11.2 2569 -6.8 8.0 11.3 17.1 14.9 0.4 1.40 232 -89071100.HON 2.00 15.7 3126 -7.0 6.9 14.6 18.6 12.3 0.8 1.20 151 -89082100.LBF 2.00 14.8 3307 -9.1 7.1 28.0 44.7 8.0 2.1 3.00 83 -89103000.OUN 2.00 12.5 2163 -14.7 6.6 18.0 18.1 13.1 1.1 1.60 195 -90060900.PIT 2.00 16.7 4095 -9.5 6.7 18.1 13.6 18.8 1.9 1.00 236 -90061400.PIA 2.00 18.1 3570 -7.0 7.0 16.5 23.4 9.5 1.2 0.60 134 -90072600.TBW 2.00 18.4 4330 -6.3 5.7 3.5 8.5 6.3 0.2 0.60 7 -90091400.STC 2.00 13.1 2123 -10.9 7.4 27.8 39.0 23.2 1.5 -999.00 564 -98033100.FWD 2.00 13.3 2873 -14.3 7.2 29.6 57.5 17.6 2.7 2.90 93 -98062500.APX 2.00 15.8 3453 -11.3 7.3 28.9 35.4 21.9 3.1 3.30 348 -98063000.BUF 2.00 14.5 2615 -10.5 6.1 23.6 28.2 8.5 1.4 1.70 86 -99050400.DRT 2.00 17.4 5609 -10.1 7.5 40.5 38.9 21.2 7.1 4.56 342 -99053100.TOP 2.00 13.1 2215 -10.9 6.8 18.6 12.2 14.7 1.0 1.40 189 -00033000.SHV 1.75 15.4 3548 -15.9 7.6 31.6 50.3 23.8 5.0 2.80 323 -00051200.TOP 1.75 16.7 5329 -7.3 6.5 25.1 29.2 21.0 2.5 3.70 216 -00051900.FWD 1.75 16.2 3610 -10.9 7.4 25.2 32.9 6.7 2.8 0.64 75 -00052900.GSO 1.75 14.3 1988 -11.1 6.2 28.7 35.1 17.6 1.3 1.20 139 -00060300.ABQ 1.75 9.4 1267 -8.7 8.2 10.3 17.5 7.6 0.2 1.40 70 -00061100.AMA 1.75 14.0 3932 -7.9 7.8 14.8 19.1 9.4 1.2 2.10 128 -00062200.DDC 1.75 14.3 3602 -8.7 7.0 15.4 23.4 16.2 1.2 2.90 157 -00062400.DDC 1.75 14.8 3499 -7.3 7.7 23.2 30.2 12.0 1.6 2.70 237 -00062400.LBF 1.75 14.8 4723 -9.7 8.6 17.4 29.6 9.8 2.4 2.00 126 -00070600.GGW 1.75 11.7 2743 -14.1 8.5 29.6 40.4 13.0 2.7 1.90 165 -00071300.ABR 1.75 13.6 2305 -8.7 6.7 29.3 44.3 21.7 1.3 2.00 278 -00071500.IAD 1.75 13.9 2186 -12.3 6.8 17.8 17.7 9.3 1.1 2.00 118 -00071800.AMA 1.75 14.4 3660 -4.7 6.9 9.1 7.7 5.9 0.4 1.50 79 -00072100.FFC 1.75 14.3 2149 -6.9 6.4 9.2 10.4 9.1 0.3 0.60 63 -00072200.LBF 1.75 12.8 3031 -11.5 7.6 27.5 23.7 14.5 2.2 2.60 247 -00072500.ABR 1.75 15.6 4195 -12.3 8.9 15.3 19.8 10.9 2.6 3.10 113 -00072600.MFL 1.75 18.3 4079 -8.5 6.6 5.2 5.6 2.4 0.5 0.60 18 -00072600.MPX 1.75 15.3 3240 -13.1 7.6 21.4 12.4 10.1 2.5 3.00 139 -00072700.LBF 1.75 18.1 5178 -8.9 8.7 17.5 26.1 12.2 3.0 2.20 351 -00072900.GSO 1.75 14.3 2081 -9.7 6.2 6.2 16.1 6.5 0.3 0.60 43 -00073100.JAX 1.75 17.6 3581 -8.9 6.0 6.6 5.5 4.7 0.5 0.60 27 -00080200.GGW 1.75 10.8 2057 -8.9 8.0 24.6 35.3 15.0 0.9 1.80 148 -00080800.OAX 1.75 16.3 4679 -8.1 7.8 16.4 25.1 10.8 1.9 3.00 185 -00090400.LBF 1.75 11.2 2441 -9.5 7.8 21.4 24.1 18.5 1.0 1.50 309 -01061800.TBW 1.75 15.9 3469 -9.7 5.9 4.6 6.6 1.5 0.3 0.80 23 -01062000.DTX 1.75 14.9 3813 -12.5 6.9 8.4 17.6 15.0 1.0 2.80 -45 -02041600.PIT 1.75 11.5 1856 -14.9 7.3 17.9 18.1 15.8 1.0 1.60 245 -02041800.FWD 1.75 15.9 3343 -9.9 6.4 12.4 34.6 5.6 1.0 -999.00 61 -02050400.CHS 1.75 15.9 3255 -10.7 6.6 21.1 29.5 16.6 1.8 0.90 19 -02052800.LBF 1.75 11.3 3387 -15.1 9.0 18.8 30.1 11.6 2.3 1.90 184 -02052800.MAF 1.75 12.7 3115 -11.1 8.0 20.6 24.7 16.4 1.7 2.10 103 -02052900.TOP 1.75 12.8 2661 -13.7 6.8 4.2 10.7 7.3 0.3 1.30 48 -02060402.CHS 1.75 13.7 2637 -10.1 7.6 9.7 10.8 11.7 0.6 0.80 33 -02060700.MPX 1.75 9.2 1952 -15.1 7.7 22.8 25.3 16.2 1.1 1.50 758 -02061200.TOP 1.75 19.6 5029 -8.9 7.6 21.1 24.7 15.6 3.3 0.70 224 -02062600.DTX 1.75 14.5 3079 -8.9 6.1 1.9 7.2 1.4 0.1 0.70 -1 -02070200.AMA 1.75 12.2 2393 -6.5 7.3 18.4 11.3 20.8 0.6 1.60 353 -02072518.TBW 1.75 18.9 4523 -8.5 6.7 7.8 6.3 2.0 0.9 0.60 7 -02072800.DDC 1.75 12.9 2480 -5.3 7.4 10.6 11.1 10.7 0.3 1.40 155 -02082300.LBF 1.75 17.8 6193 -10.1 8.0 12.9 28.1 3.8 2.7 3.10 10 -03031500.BMX 1.75 10.9 1555 -19.1 7.4 8.5 21.2 12.3 0.5 1.30 94 -03032600.LZK 1.75 11.3 2073 -18.5 6.7 14.3 15.4 9.5 1.0 2.20 67 -03032600.SHV 1.75 11.3 1723 -18.3 8.5 17.7 18.0 8.0 1.3 1.40 108 -03042900.AMA 1.75 9.6 2549 -14.5 8.3 25.3 33.7 16.5 1.8 1.60 237 -03042900.MAF 1.75 9.8 2325 -13.5 8.4 23.4 21.0 15.5 1.4 1.40 165 -03043000.BNA 1.75 12.4 3359 -15.3 7.2 4.3 5.5 4.1 0.5 1.30 30 -03050200.FFC 1.75 13.7 3289 -13.5 6.5 9.8 9.5 7.5 0.9 0.90 55 -03050700.BMX 1.75 17.4 4489 -10.5 7.0 26.5 28.4 12.2 3.6 2.10 101 -03051312.FWD 1.75 12.6 1814 -10.3 7.3 17.7 24.7 16.8 0.7 1.20 205 -03060400.LCH 1.75 19.7 4988 -6.7 5.8 13.3 17.2 7.3 1.2 0.60 44 -03061100.OUN 1.75 14.5 3045 -9.3 7.2 17.8 13.1 12.1 1.3 2.00 135 -03061300.LBF 1.75 12.0 2759 -11.3 7.2 15.4 16.3 13.0 1.0 2.60 179 -03061500.FWD 1.75 14.3 2433 -11.3 6.9 12.1 2.8 5.3 0.8 1.70 32 -03061500.LBF 1.75 10.7 1717 -11.3 6.3 10.6 12.0 6.6 0.3 1.70 51 -03061700.FFC 1.75 16.3 2826 -8.5 6.2 7.0 13.0 5.5 0.4 0.60 32 -03061700.RAP 1.75 10.1 1501 -11.1 7.1 5.7 17.5 2.9 0.2 1.90 92 -03062100.MAF 1.75 10.7 1489 -7.7 7.0 14.5 29.4 6.5 0.3 1.90 74 -03062500.MAF 1.75 16.5 4621 -6.7 7.7 8.7 16.8 11.9 0.8 2.10 45 -03090500.DRA 1.75 11.3 1966 -8.3 8.1 3.7 9.2 5.0 0.1 1.20 33 -03091000.MAF 1.75 12.9 3038 -7.3 7.4 8.3 12.7 8.6 0.4 2.10 79 -03091100.DDC 1.75 14.8 3112 -7.5 6.9 22.3 30.8 15.7 1.3 2.20 259 -03092100.DDC 1.75 10.2 1784 -10.9 7.3 20.1 23.8 21.8 0.7 2.00 257 -04022512.LIX 1.75 10.3 837 -17.7 6.7 31.9 48.7 25.2 0.8 2.40 340 -04030100.TOP 1.75 6.3 487 -28.7 8.7 32.0 35.0 20.1 0.6 1.60 171 -04032100.FFC 1.75 7.9 942 -17.3 7.5 12.0 13.4 11.3 0.3 1.10 154 -04032100.MAF 1.75 10.0 2053 -12.9 7.9 9.6 21.3 5.5 0.5 1.50 39 -04040700.FWD 1.75 10.4 835 -16.3 6.7 28.3 27.2 11.8 0.6 1.00 87 -04042900.DRT 1.75 12.4 1834 -12.9 6.4 20.0 31.6 16.1 0.9 1.30 217 -04051000.LBF 1.75 11.6 4026 -13.9 9.0 13.9 17.5 3.0 1.9 1.60 38 -04051600.EPZ 1.75 10.4 2888 -11.5 8.7 12.2 7.0 4.1 0.9 1.60 93 -04071200.TOP 1.75 17.7 3709 -7.3 6.8 13.6 9.1 11.9 1.1 0.60 204 -04081900.ILX 1.75 15.1 3685 -9.1 5.9 19.9 28.2 19.7 1.4 1.30 371 -04082600.BIS 1.75 12.5 3083 -13.1 7.1 16.6 18.9 13.9 1.4 2.40 101 -04092300.AMA 1.75 12.8 1887 -10.1 6.7 23.5 21.8 19.6 0.9 1.30 374 -04092500.AMA 1.75 11.2 2465 -11.9 6.9 15.1 24.9 12.0 0.8 2.00 38 -05030400.AMA 1.75 4.3 697 -23.3 8.7 22.7 36.0 13.1 0.3 1.30 142 -05031500.TLH 1.75 12.4 1338 -14.1 7.1 28.4 53.2 12.7 1.1 1.10 41 -05082400.RAP 1.75 11.3 2040 -11.3 8.6 11.6 19.1 13.6 0.6 -999.00 116 -05082700.AMA 1.75 13.6 2765 -5.5 7.4 11.5 11.5 10.0 0.4 2.00 31 -06040400.CHS 1.75 11.6 2165 -16.9 8.1 31.6 39.3 26.6 2.6 2.60 207 -06040900.JAX 1.75 13.6 2254 -13.7 6.6 20.4 22.0 19.5 1.3 2.10 178 -06041300.LZK 1.75 11.0 1294 -13.5 7.2 12.6 20.8 6.0 0.4 -999.00 34 -06041600.IAD 1.75 10.2 2181 -16.7 7.0 27.7 43.3 16.6 1.7 1.80 48 -06041600.WAL 1.75 10.9 2234 -16.5 7.2 17.7 48.2 17.2 1.2 2.30 81 -06041900.BMX 1.75 12.0 1805 -11.1 6.3 14.2 22.0 5.4 0.5 0.70 62 -06042300.DTX 1.75 6.7 609 -24.1 7.4 17.7 27.4 14.0 0.3 1.80 50 -06050400.SHV 1.75 15.0 3310 -12.1 6.7 8.0 14.3 5.8 0.8 0.60 85 -06050600.LCH 1.75 14.9 2655 -10.3 5.8 23.1 25.2 15.8 1.3 0.60 64 -06050900.DDC 1.75 9.6 1630 -13.3 7.9 27.2 27.8 15.1 1.1 2.00 179 -06050912.SGF 1.75 12.9 2144 -12.9 6.7 20.3 18.4 10.1 1.2 1.80 144 -06051100.LCH 1.75 18.5 4564 -12.3 8.9 22.9 22.0 12.2 5.1 1.70 38 -06051412.SHV 1.75 12.4 2270 -14.9 7.8 16.8 26.2 15.5 1.3 2.80 84 -06051800.ILX 1.75 8.0 713 -17.5 6.9 28.8 29.6 16.9 0.5 2.10 226 -06052300.SGF 1.75 14.4 3032 -11.9 7.1 9.0 15.5 8.3 0.8 1.60 91 -06052500.TLH 1.75 14.8 2619 -10.5 6.4 7.3 7.5 9.2 0.5 0.60 56 -06052700.GSO 1.75 12.7 2136 -9.9 5.8 17.4 21.2 17.1 0.6 1.50 217 -06061800.FWD 1.75 14.3 2286 -10.9 8.2 13.9 24.6 11.6 1.0 2.30 134 -06062100.CHS 1.75 17.0 4007 -10.1 6.4 12.9 19.3 7.1 1.3 0.70 66 -06062400.BIS 1.75 8.3 942 -15.3 7.0 22.7 27.2 16.7 0.5 1.60 167 -06062400.LBF 1.75 10.7 1400 -12.1 7.4 26.6 25.0 13.6 0.8 2.10 272 -06062900.DDC 1.75 7.7 919 -10.1 7.7 17.9 17.9 1.9 0.2 0.80 16 -06070100.BNA 1.75 13.5 2750 -11.5 6.7 10.8 7.8 11.5 0.7 1.50 41 -06071200.DDC 1.75 11.8 1068 -8.7 8.0 15.4 21.8 11.8 0.3 1.00 12 -06071300.DDC 1.75 12.8 1575 -5.9 6.9 12.7 13.7 7.4 0.2 0.80 99 -06071900.JAN 1.75 15.2 2280 -6.9 6.5 11.1 11.1 9.0 0.4 0.60 88 -06072200.LZK 1.75 14.1 2480 -8.1 7.3 6.9 5.8 7.7 0.3 0.60 67 -06072600.TUS 1.75 11.2 1725 -5.7 7.4 15.0 18.3 8.5 0.3 0.90 36 -06080700.TOP 1.75 12.5 1693 -6.7 7.0 7.6 6.8 3.2 0.2 0.60 35 -06080900.TUS 1.75 11.9 1640 -4.7 6.6 5.1 8.2 6.6 0.1 0.60 25 -06082100.ABR 1.75 12.5 1851 -9.9 6.8 21.9 39.5 15.5 0.8 2.10 257 -06082300.RAP 1.75 8.3 1757 -9.5 9.1 21.3 28.7 12.7 0.6 0.80 108 -06091100.AMA 1.75 12.5 1812 -8.9 7.1 14.9 33.3 13.7 0.5 2.10 51 -06091400.EPZ 1.75 11.7 1589 -10.3 7.6 17.4 23.7 13.1 0.6 2.00 167 -06091600.DDC 1.75 14.4 2738 -6.9 6.6 29.7 39.0 21.6 1.3 2.20 378 -06100400.MPX 1.75 13.7 3011 -12.1 7.4 34.0 30.2 23.9 3.0 2.90 514 -89060100.TOP 1.75 15.8 2810 -10.9 7.9 10.6 26.9 7.9 1.0 -999.00 90 -89060600.GSO 1.75 14.8 2078 -9.1 5.9 8.1 6.7 10.0 0.3 0.60 93 -89060600.JAN 1.75 16.3 3336 -11.3 6.7 20.8 25.3 10.4 2.0 0.80 103 -89061400.GGG 1.75 17.2 3674 -11.0 6.9 15.4 23.3 4.3 1.7 -999.00 61 -89061900.BNA 1.75 13.9 1755 -10.2 6.3 9.7 7.8 6.8 0.4 0.60 86 -89062200.AHN 1.75 15.5 1517 -7.6 5.8 12.6 15.8 14.9 0.3 0.60 112 -89062600.IAD 1.75 16.2 3138 -8.6 6.1 14.3 23.0 12.1 0.9 0.70 108 -89062700.PIA 1.75 15.7 2460 -7.9 6.6 13.2 12.4 5.3 0.6 0.70 87 -89062800.BUF 1.75 15.2 2385 -8.2 5.3 20.1 22.3 9.8 0.7 0.60 82 -89070800.PIT 1.75 15.4 2732 -9.1 6.8 17.5 15.7 12.8 1.1 1.50 81 -89071300.DDC 1.75 15.1 3239 -4.9 6.9 5.1 7.2 7.9 0.2 1.20 81 -89071300.OUN 1.75 19.0 4127 -5.4 6.9 13.8 19.1 13.0 1.0 -999.00 196 -89071500.LBF 1.75 14.3 2675 -6.9 6.1 6.1 8.4 5.5 0.2 0.60 27 -89072900.HON 1.75 14.0 2092 -5.9 6.0 12.0 17.9 6.4 0.3 0.80 105 -89073000.JAN 1.75 18.0 3940 -7.7 6.7 1.9 3.1 2.1 0.2 0.60 9 -89080600.UMN 1.75 19.0 5563 -6.9 7.0 11.7 11.3 8.8 1.4 0.80 99 -89081300.TBW 1.75 16.4 2617 -8.6 6.0 18.1 18.2 10.1 1.0 0.60 65 -89082500.RAP 1.75 10.6 1899 -7.1 7.6 7.7 7.6 2.7 0.2 1.00 55 -89082700.OMA 1.75 17.8 3452 -6.6 6.1 19.5 33.1 15.2 1.1 0.60 142 -89082800.UMN 1.75 17.3 3603 -6.1 6.5 7.8 5.6 2.6 0.5 0.60 28 -89082900.TOP 1.75 19.8 4842 -6.3 6.6 15.4 21.1 13.2 1.5 0.60 156 -89083000.OUN 1.75 17.3 3864 -5.6 6.0 13.1 24.2 11.8 0.7 0.60 112 -89083100.DDC 1.75 16.5 2956 -5.7 6.6 13.6 22.5 13.3 0.6 0.80 346 -89090200.1M1 1.75 18.3 3818 -4.8 6.1 16.2 14.1 8.2 0.8 0.60 64 -89090800.DEN 1.75 10.1 1350 -6.8 8.3 24.1 24.0 15.4 0.4 2.00 366 -90022800.MAF 1.75 9.7 607 -16.2 6.6 16.4 23.8 5.1 0.2 1.20 55 -90031000.AMA 1.75 11.1 2468 -16.0 8.6 13.1 18.2 9.9 1.2 1.90 106 -90031300.OUN 1.75 12.7 3211 -13.6 7.8 24.2 18.1 19.4 2.5 2.80 286 -90040200.BRO 1.75 16.2 3494 -9.3 7.1 25.7 37.2 15.2 2.3 0.90 65 -90042200.OUN 1.75 11.1 2748 -13.3 6.6 12.2 14.9 7.3 0.8 2.00 48 -90042600.DRT 1.75 14.6 3699 -13.8 8.1 25.7 33.2 11.1 3.7 4.30 101 -90042900.AYS 1.75 13.0 2333 -12.2 6.2 30.6 23.2 19.1 1.7 2.30 243 -90050600.OUN 1.75 7.6 836 -20.1 7.2 18.3 48.8 5.8 0.4 1.40 30 -90051200.SEP 1.75 13.6 2282 -9.2 6.9 34.8 47.4 14.5 1.6 -999.00 134 -90051600.IAD 1.75 13.4 2004 -14.0 7.0 16.7 27.7 12.7 1.0 -999.00 102 -90051900.SEP 1.75 17.0 3246 -9.1 6.6 20.9 27.2 15.6 1.6 0.60 387 -90052100.HAT 1.75 15.8 2891 -9.7 5.6 13.8 19.5 12.4 0.8 0.60 182 -90052100.UMN 1.75 14.8 3661 -13.1 7.6 15.4 23.7 15.3 2.0 3.40 181 -90052300.HON 1.75 10.9 1984 -14.0 7.2 22.3 33.6 15.0 1.1 2.40 107 -90052800.SIL 1.75 18.0 3916 -10.0 6.8 19.3 10.6 10.4 2.2 0.80 48 -90061000.IAD 1.75 14.9 2818 -9.2 6.5 16.4 19.3 18.0 1.0 0.60 175 -90061000.OUN 1.75 15.1 3242 -8.5 7.8 10.1 1.3 10.9 0.8 2.50 21 -90061100.CHS 1.75 17.7 4050 -8.1 6.6 8.1 19.1 6.4 0.7 0.60 102 -90061300.STC 1.75 16.2 2789 -10.4 7.2 36.6 42.0 14.2 2.9 0.70 139 -90061800.PIA 1.75 19.5 4567 -8.1 7.4 17.0 25.7 14.1 2.2 1.00 94 -90070500.LCH 1.75 17.6 3315 -8.5 6.6 15.3 2.5 11.6 1.2 0.60 58 -90070900.GRB 1.75 16.9 2962 -6.5 6.5 18.2 22.7 12.1 0.9 0.60 82 -90071100.CKL 1.75 15.4 2544 -8.1 6.4 5.1 4.6 2.1 0.3 0.60 9 -90071300.CRP 1.75 13.3 1658 -6.5 6.5 12.8 9.3 14.6 0.3 0.60 121 -90071400.ABQ 1.75 10.4 1588 -9.4 8.7 18.9 32.6 4.4 0.6 1.20 70 -90071700.FNT 1.75 11.9 1393 -12.5 6.5 15.5 25.3 13.2 0.5 0.60 176 -90071800.LBF 1.75 12.3 3138 -7.7 8.2 17.7 16.6 10.0 1.0 1.60 115 -90072100.ABQ 1.75 10.9 1327 -5.9 8.3 7.9 14.5 9.8 0.1 1.30 145 -90072600.OUN 1.75 16.6 3546 -6.8 6.2 10.8 14.7 11.1 0.6 0.70 206 -90072700.AMA 1.75 14.3 3104 -5.8 7.3 7.7 7.9 11.1 0.3 2.20 117 -90073100.GGG 1.75 16.1 3254 -7.5 6.4 7.9 5.4 1.2 0.5 0.60 3 -90080200.LCH 1.75 18.4 3223 -7.3 6.4 6.5 2.0 3.1 0.4 0.60 14 -90081000.AHN 1.75 14.9 2234 -9.4 6.2 13.3 26.7 6.4 0.6 0.80 33 -90081500.DDC 1.75 15.1 3012 -6.6 5.6 9.0 15.8 9.9 0.4 0.60 59 -90082100.AMA 1.75 14.6 2833 -5.7 6.6 11.7 11.3 10.6 0.4 1.20 75 -90082400.OVN 1.75 18.7 5016 -7.4 6.8 7.4 14.7 9.4 0.8 0.70 100 -90082600.BIS 1.75 13.7 3187 -13.2 8.6 22.2 23.1 13.2 2.6 2.50 190 -90082600.HON 1.75 17.9 5529 -11.5 9.1 14.7 28.6 9.9 3.6 -999.00 156 -90090200.MAF 1.75 14.9 3597 -6.2 6.8 17.2 18.3 7.5 0.9 2.50 58 -90091100.AHN 1.75 15.1 2857 -8.6 5.9 7.9 7.6 6.3 0.4 0.60 80 -91032700.DAY 1.75 10.7 1310 -13.1 6.4 30.2 30.6 24.3 0.8 1.80 531 -91051300.BIS 1.75 13.8 1867 -11.5 6.8 26.9 19.8 15.8 1.3 0.70 -79 -91051300.HON 1.75 14.7 3615 -9.5 7.2 14.2 22.7 13.0 1.2 2.80 97 -91051700.GGG 1.75 18.4 5081 -10.4 7.5 7.9 11.2 10.5 1.4 0.90 157 -91053100.AHN 1.75 16.3 3505 -6.9 5.9 3.9 4.1 3.2 0.2 0.60 15 -91060600.JAN 1.75 16.3 3344 -9.1 6.8 9.5 9.6 3.1 0.8 0.60 12 -91060600.RAP 1.75 13.1 2001 -11.5 7.1 13.2 19.7 11.9 0.7 1.40 170 -92051500.1M1 1.75 13.3 2877 -11.3 6.4 11.4 16.3 7.9 0.7 1.50 54 -94062600.PBI 1.75 17.7 4199 -9.1 6.6 4.9 6.6 5.2 0.5 1.80 10 -94070100.1M1 1.75 18.6 4820 -8.1 6.1 20.0 18.5 12.6 2.1 1.00 342 -94071700.1M1 1.75 17.7 3339 -6.4 5.8 12.5 11.3 19.1 0.7 0.60 164 -94071700.HAT 1.75 16.5 2973 -6.0 5.7 5.9 3.1 4.4 0.2 0.60 33 -97100900.OUN 1.75 16.5 3628 -7.5 6.0 20.0 29.9 16.6 1.3 0.80 205 -98062500.FFC 1.75 15.8 3224 -8.9 7.3 4.2 9.9 5.6 0.3 0.60 54 -00051800.GSO 1.50 11.9 1767 -13.7 6.5 16.4 31.1 7.6 0.7 1.60 124 -00090200.SLC 1.50 9.1 1641 -14.7 8.4 16.1 24.8 20.1 0.7 1.70 101 -01062600.GSO 1.50 11.9 929 -11.7 6.0 17.8 25.6 10.4 0.3 0.60 106 -01062600.RNK 1.50 11.1 1653 -11.9 5.7 13.7 30.3 8.3 0.4 2.10 88 -02042200.ILN 1.50 10.3 623 -13.3 6.8 36.0 43.5 31.2 0.5 2.10 525 -02072500.LCH 1.50 20.2 5453 -7.3 5.9 8.5 11.3 5.5 1.0 0.60 66 -03031700.MHX 1.50 12.1 1241 -13.1 5.4 19.1 32.8 11.5 0.5 0.70 37 -03091800.INL 1.50 13.7 1863 -13.5 7.5 24.7 29.2 15.3 1.5 -999.00 384 -06042117.JAN 1.50 13.4 1486 -12.9 6.5 17.4 11.7 6.4 0.7 0.60 58 -06052200.LBF 1.50 8.2 1420 -11.1 7.7 15.2 22.6 14.8 0.4 1.30 199 -06053000.SGF 1.50 15.0 2988 -9.3 6.5 2.7 12.8 4.0 0.2 0.60 27 -06071100.DNR 1.50 10.1 1192 -7.9 7.6 16.2 27.0 12.2 0.3 1.70 79 -89060200.AHN 1.50 13.2 1996 -7.3 6.1 2.6 1.6 3.2 0.1 -999.00 18 -90040200.GSO 1.50 8.7 984 -17.4 6.8 29.7 37.4 19.9 0.7 2.00 210 -90041100.AHN 1.50 11.5 1096 -14.0 6.4 25.4 25.8 19.0 0.7 0.60 343 -90071000.DEN 1.50 13.5 3504 -8.2 8.0 25.4 20.1 16.7 1.9 2.50 41 -90082200.AHN 1.50 16.5 3275 -6.8 6.5 8.7 15.8 6.0 0.5 0.60 48 -90082200.OUN 1.50 16.6 3350 -5.5 6.1 3.3 5.7 3.1 0.1 0.60 -7 -94070100.GSO 1.50 13.8 2296 -10.3 5.4 8.1 14.3 6.6 0.3 0.60 40 -00030400.BMX 1.25 11.4 1311 -14.9 5.7 42.9 54.3 21.1 1.3 1.40 205 -00071100.DDC 1.25 16.4 4707 -4.1 6.8 4.6 8.7 6.0 0.2 2.60 136 -00072000.LZK 1.25 16.4 3973 -6.7 6.8 12.6 12.7 8.3 0.9 1.10 102 -02041200.TOP 1.25 9.8 1084 -16.5 7.1 9.4 27.2 16.2 0.3 1.60 99 -03040500.ILN 1.25 10.4 1856 -15.7 6.5 20.8 25.6 17.7 1.0 2.20 233 -03090300.NKX 1.25 10.8 940 -5.9 6.6 7.0 5.9 4.2 0.1 0.70 9 -03090800.FGZ 1.25 8.3 663 -8.3 7.7 15.0 17.0 11.2 0.1 1.20 130 -03090800.PHX 1.25 12.1 2268 -6.7 6.7 10.7 16.8 8.2 0.3 1.20 90 -04032700.RAP 1.25 8.5 2052 -15.5 8.0 19.0 17.5 12.6 1.0 1.50 161 -04100400.AMA 1.25 10.5 1672 -13.5 7.6 23.5 31.9 10.7 1.0 2.40 28 -05030700.MAF 1.25 8.0 547 -16.7 6.9 34.3 40.4 16.9 0.4 1.90 177 -05090600.LBF 1.25 13.0 2252 -9.1 8.1 14.1 27.2 6.3 0.7 2.90 28 -05100123.LMN 1.25 15.9 2672 -9.9 7.0 21.4 26.0 14.1 1.5 -999.00 276 -06051500.TLH 1.25 10.8 1279 -13.7 7.1 24.7 23.2 18.5 0.8 1.70 104 -06052000.BOI 1.25 7.4 1070 -13.5 8.4 15.9 25.9 9.2 0.3 0.80 95 -06052600.FFC 1.25 12.1 1711 -12.1 7.1 8.7 3.3 4.1 0.4 1.10 46 -06060300.ILX 1.25 10.0 1218 -14.5 5.9 20.0 22.7 14.1 0.5 1.50 87 -06060312.LBF 1.25 7.7 988 -11.9 9.0 19.5 17.8 10.8 0.4 1.00 699 -06061200.DNR 1.25 6.0 942 -9.9 9.4 17.1 22.2 7.4 0.2 0.60 130 -06070400.GRB 1.25 14.1 1881 -10.1 6.6 22.8 40.7 14.0 1.0 0.60 132 -06072700.ILX 1.25 20.7 4385 -4.3 5.7 12.7 19.1 14.7 0.7 0.60 318 -06072800.FGZ 1.25 13.5 3100 -5.3 8.1 22.7 18.3 14.1 1.0 2.70 193 -90041400.OUN 1.25 10.8 1408 -18.2 7.9 23.5 33.0 17.5 1.2 2.00 146 -94062500.GSO 1.25 15.9 2334 -5.4 5.6 9.9 5.2 12.9 0.3 0.60 103 -00051400.TLH 1.00 15.9 3542 -9.9 6.9 4.2 4.2 5.4 0.4 1.00 -4 -00053000.LBF 1.00 9.9 2258 -9.7 9.2 27.2 31.9 16.9 1.3 1.10 294 -00060100.ILX 1.00 16.1 3208 -9.1 7.0 17.9 15.6 20.7 1.4 1.80 163 -00060200.DVN 1.00 16.4 3451 -9.3 7.3 14.1 11.0 14.2 1.3 0.60 175 -00060200.TOP 1.00 16.1 3517 -9.3 6.9 10.4 16.3 4.9 0.9 0.80 39 -00062100.TBW 1.00 17.1 3180 -8.5 6.4 12.2 19.0 8.9 0.9 0.60 49 -00062300.MHX 1.00 18.6 4167 -8.7 6.1 6.0 6.1 9.7 0.6 0.60 89 -00062600.DDC 1.00 13.5 2618 -6.1 6.7 15.8 16.9 14.3 0.5 1.60 51 -00062600.TOP 1.00 17.8 4052 -8.9 7.6 1.3 23.9 2.4 0.1 2.30 26 -00063000.PIT 1.00 9.9 1086 -15.9 5.5 22.0 37.9 8.1 0.5 1.80 77 -00070200.DDC 1.00 16.2 3566 -5.7 6.6 14.2 21.9 5.5 0.7 1.30 38 -00070200.RAP 1.00 15.6 5621 -9.7 8.7 21.5 22.7 15.9 3.8 2.20 263 -00070300.DDC 1.00 17.2 4558 -5.9 7.5 13.6 22.7 11.7 1.1 2.40 66 -00070300.OAX 1.00 18.5 4633 -6.3 6.9 10.6 19.6 9.9 0.9 1.90 133 -00070400.DDC 1.00 18.1 5142 -7.1 7.6 9.7 19.2 11.4 1.2 2.40 114 -00070700.RAP 1.00 14.2 4065 -7.7 8.6 29.4 33.3 10.8 2.7 2.10 111 -00071200.DDC 1.00 14.4 2941 -5.5 7.2 11.3 11.7 10.8 0.5 1.40 196 -00071400.GRB 1.00 12.0 1743 -12.3 6.9 21.5 42.9 13.4 0.9 1.70 195 -00071500.SHV 1.00 17.2 4004 -5.9 6.0 4.6 8.6 6.2 0.3 0.60 46 -00071700.TOP 1.00 15.9 3927 -8.7 7.9 8.9 14.1 14.5 0.9 2.40 198 -00071900.GYX 1.00 11.4 997 -13.3 6.0 27.0 36.1 18.8 0.6 1.00 107 -00072300.OTX 1.00 9.0 2088 -12.3 8.2 17.2 21.1 7.8 0.8 1.20 43 -00072700.JAN 1.00 12.5 2066 -10.7 6.4 8.0 8.4 4.2 0.3 1.00 -50 -00072800.LBF 1.00 17.1 5581 -7.7 8.1 25.0 21.1 9.6 3.5 3.10 187 -00072800.TOP 1.00 15.3 3666 -10.3 7.6 22.0 26.4 9.1 2.3 2.60 115 -00072900.CHS 1.00 16.1 2462 -7.5 5.6 9.3 13.2 3.3 0.4 0.60 4 -00072900.ILN 1.00 14.3 2735 -11.5 6.7 13.4 21.0 8.0 1.0 0.60 68 -00080700.TOP 1.00 17.3 4476 -7.5 7.2 17.8 22.9 11.7 1.8 1.80 72 -01061900.JAX 1.00 17.2 2584 -9.5 6.1 4.8 8.3 5.0 0.3 0.60 13 -01062100.ABR 1.00 8.1 1118 -19.3 7.0 4.2 12.4 3.6 0.1 1.30 14 -01062600.LBF 1.00 12.7 3931 -8.1 8.1 9.3 8.1 8.1 0.7 1.50 119 -02012400.LZK 1.00 13.1 1343 -12.7 6.6 32.5 40.7 20.2 1.1 0.60 290 -02042300.OAX 1.00 6.4 614 -23.3 7.9 26.3 36.6 15.2 0.4 1.40 133 -02051800.CRP 1.00 20.3 5902 -10.5 7.4 22.6 23.2 10.7 5.0 1.60 86 -02052700.AMA 1.00 9.7 2332 -11.1 7.2 14.5 11.8 13.0 0.6 1.40 198 -02060400.CHS 1.00 15.2 3170 -10.1 7.6 9.7 10.8 11.7 0.9 0.60 33 -02060700.ABR 1.00 9.0 2252 -14.7 8.1 12.4 18.1 8.2 0.7 1.20 118 -02070200.FFC 1.00 16.3 4268 -9.7 6.6 7.8 4.3 7.3 0.8 0.60 46 -02070300.LBF 1.00 14.1 3367 -5.9 7.5 14.0 6.2 11.5 0.7 1.20 158 -02072000.JAN 1.00 17.6 3501 -6.7 6.1 6.1 7.9 5.7 0.4 0.60 58 -02072600.TOP 1.00 13.8 3390 -5.9 7.5 16.9 16.9 11.9 0.8 2.20 168 -02072700.RAP 1.00 9.4 1688 -9.3 7.5 21.0 28.6 14.5 0.6 1.30 139 -02072900.AMA 1.00 13.6 3610 -6.5 7.8 12.5 12.2 13.6 0.7 2.00 164 -02080300.BMX 1.00 18.4 5098 -6.5 5.8 9.6 10.8 11.5 0.8 1.40 33 -02080400.SGF 1.00 17.7 4328 -5.5 6.5 1.1 7.6 3.8 0.1 1.50 -11 -03031500.TBW 1.00 15.9 3398 -13.7 7.0 18.6 27.3 3.9 2.3 0.90 32 -03032000.ILX 1.00 8.0 713 -21.9 6.9 3.5 11.4 5.4 0.1 1.40 -26 -03032100.DTX 1.00 8.7 1602 -21.3 6.6 13.3 27.1 7.7 0.6 1.10 80 -03040500.LZK 1.00 10.7 1751 -14.9 6.6 27.4 33.1 12.6 1.2 2.30 65 -03041800.DNR 1.00 5.3 1063 -18.1 8.6 11.0 43.9 5.9 0.2 0.60 41 -03042400.SHV 1.00 13.1 1456 -12.9 7.2 26.1 36.8 15.2 1.1 0.60 278 -03042800.MFL 1.00 16.7 2735 -10.7 6.4 11.7 25.5 12.3 0.9 0.60 83 -03043000.OAX 1.00 8.9 1064 -16.3 7.4 29.1 32.0 18.4 0.8 1.90 353 -03050100.FFC 1.00 11.1 1429 -13.5 6.6 6.9 6.4 1.0 0.2 1.60 5 -03050212.BNA 1.00 10.3 1865 -15.3 7.0 13.0 18.0 12.1 0.6 2.20 55 -03050312.BMX 1.00 9.7 1402 -16.1 7.5 13.8 38.5 7.9 0.5 1.80 72 -03051100.MHX 1.00 16.0 3585 -9.3 7.3 16.2 15.0 11.9 1.5 0.90 104 -03051200.JAX 1.00 15.9 3060 -7.9 6.9 13.2 20.0 10.1 0.8 -999.00 48 -03051800.TBW 1.00 16.1 3839 -8.7 6.5 5.7 11.9 6.2 0.5 1.10 3 -03051800.XMR 1.00 16.0 3602 -9.5 7.0 8.6 10.7 5.6 0.8 0.90 -7 -03052600.TFX 1.00 8.3 994 -10.9 8.0 16.0 15.9 9.1 0.3 1.30 59 -03052700.ABQ 1.00 7.1 713 -9.9 8.3 14.7 20.6 3.1 0.1 0.60 12 -03060200.DDC 1.00 11.1 1960 -9.5 7.9 17.5 20.6 11.9 0.7 2.00 222 -03060900.RNK 1.00 15.0 2965 -9.1 6.2 24.1 29.2 18.9 1.4 1.20 134 -03090900.TUS 1.00 11.5 2363 -8.3 7.3 7.9 11.8 2.8 0.3 1.10 12 -03111712.TOP 1.00 11.5 1641 -17.3 7.3 25.6 32.6 17.8 1.4 2.70 329 -04031500.DRT 1.00 11.6 1498 -15.5 7.0 16.8 24.5 6.6 0.8 1.40 123 -04032100.FWD 1.00 13.1 2648 -15.5 8.2 12.9 20.8 4.9 1.4 2.80 29 -04051000.FFC 1.00 11.4 2006 -11.1 5.4 4.7 11.0 4.0 0.2 1.90 -15 -04051200.AMA 1.00 9.7 1922 -11.5 8.0 15.0 8.4 19.1 0.6 1.60 282 -04080900.TOP 1.00 14.3 2676 -11.5 7.4 11.9 15.6 5.9 0.9 0.90 82 -04081700.TUS 1.00 13.1 2027 -8.9 7.1 13.2 13.3 8.8 0.5 1.00 96 -04082800.OUN 1.00 16.0 4225 -7.1 7.4 3.8 3.0 7.0 0.3 1.50 101 -05030400.SGF 1.00 5.9 823 -25.9 7.1 24.2 27.9 13.0 0.5 0.70 151 -05050412.TBW 1.00 14.1 1839 -13.5 7.3 15.8 33.3 10.0 1.0 1.00 187 -05050600.EPZ 1.00 8.0 1672 -12.7 8.6 27.7 28.8 15.0 1.0 1.20 178 -05081100.GGW 1.00 10.1 805 -13.7 7.4 30.5 38.9 15.6 0.6 2.10 170 -05081700.GGW 1.00 9.2 1042 -11.1 7.8 27.6 40.5 16.7 0.5 1.70 265 -05081800.LMN 1.00 17.7 3655 -4.1 6.0 22.3 17.3 13.3 0.8 0.60 221 -05082700.EPZ 1.00 11.1 2162 -6.5 8.5 4.9 6.7 4.0 0.2 1.00 21 -05092900.FWD 1.00 12.7 1553 -5.9 6.4 10.1 13.0 8.5 0.2 0.60 39 -06010300.ILN 1.00 9.0 791 -19.3 7.5 16.0 23.8 7.8 0.4 1.40 140 -06011200.GSO 1.00 9.5 1374 -19.1 7.5 15.6 28.9 21.9 0.7 2.50 253 -06041400.BUF 1.00 6.2 383 -23.3 7.6 26.8 55.7 21.6 0.3 1.40 237 -06041400.PIT 1.00 6.2 390 -20.1 7.0 18.6 40.0 18.8 0.1 0.90 220 -06051600.DTX 1.00 8.7 519 -20.5 6.1 5.0 17.9 7.2 0.1 0.70 -7 -06051800.IAD 1.00 8.4 1009 -20.5 6.7 16.0 20.3 11.9 0.4 1.30 66 -06052300.RAP 1.00 9.6 2536 -10.3 8.5 9.7 18.1 5.6 0.5 1.30 43 -06052600.AMA 1.00 7.9 1911 -11.3 9.9 16.9 12.6 11.8 0.7 0.70 262 -06052600.GSO 1.00 11.9 1743 -10.1 6.1 14.4 11.4 8.4 0.4 0.80 82 -06052600.JAX 1.00 13.3 1856 -10.7 6.6 15.3 20.8 10.5 0.6 0.60 70 -06052700.BIS 1.00 9.4 2274 -11.9 8.5 22.0 21.3 20.2 1.1 1.30 198 -06052700.JAX 1.00 15.0 2879 -9.9 6.1 13.7 13.1 11.0 0.9 0.80 117 -06053100.GGW 1.00 5.6 570 -21.1 7.4 5.0 8.1 2.8 0.1 0.90 30 -06060200.BNA 1.00 14.2 2055 -7.9 5.4 5.5 12.6 8.6 0.2 0.60 -2 -06060300.GRB 1.00 8.8 1314 -18.9 7.1 16.3 19.5 12.0 0.6 1.60 77 -06060400.ILN 1.00 8.3 1032 -18.1 6.5 8.5 11.1 6.7 0.2 1.20 35 -06060500.FFC 1.00 11.0 1475 -12.5 5.9 11.7 22.4 5.7 0.3 2.10 18 -06060700.SHV 1.00 14.6 2252 -10.3 7.4 25.4 14.5 15.1 1.5 0.60 164 -06060712.RAP 1.00 7.9 1110 -10.3 8.7 12.3 19.2 9.9 0.2 1.30 131 -06060800.LBF 1.00 10.8 2368 -6.9 7.7 20.5 22.3 11.2 0.7 1.70 244 -06061200.BNA 1.00 13.6 1539 -6.7 5.6 15.2 7.0 9.1 0.3 0.60 107 -06061900.GRB 1.00 14.0 2397 -11.7 6.2 15.9 20.9 12.4 0.9 1.90 74 -06062100.BNA 1.00 14.1 2387 -9.3 6.8 6.7 3.3 6.8 0.3 0.60 43 -06062200.JAN 1.00 15.3 2595 -8.7 7.0 3.0 2.5 4.6 0.2 0.60 -15 -06062300.BMX 1.00 12.5 1595 -7.1 6.2 5.1 4.3 1.9 0.1 0.60 -10 -06062300.BNA 1.00 15.6 3023 -10.1 7.3 10.6 3.6 8.0 0.9 0.60 71 -06062300.DDC 1.00 11.0 987 -11.1 7.2 17.7 17.5 9.3 0.4 1.30 78 -06062700.FFC 1.00 15.4 2376 -6.9 5.6 12.6 21.6 9.3 0.4 0.60 23 -06062800.GRB 1.00 9.4 1049 -15.5 6.1 13.8 20.6 8.1 0.3 1.60 34 -06062900.PIT 1.00 10.9 925 -13.7 6.4 21.3 35.7 7.1 0.4 1.60 17 -06062900.TOP 1.00 8.5 959 -12.3 7.1 12.7 14.7 8.1 0.2 1.00 120 -06070200.FFC 1.00 11.2 1552 -9.7 6.3 6.5 9.5 1.2 0.2 0.90 4 -06070200.FWD 1.00 12.8 1806 -9.9 7.2 6.1 11.2 1.6 0.2 0.60 20 -06070200.LBF 1.00 12.2 2554 -8.5 8.0 20.5 17.9 17.1 1.0 2.00 223 -06070300.IAD 1.00 14.8 3195 -9.3 5.9 10.7 13.6 10.7 0.7 0.90 60 -06070500.GSO 1.00 15.2 2335 -7.3 6.1 9.6 6.1 7.6 0.4 0.60 96 -06071300.BIS 1.00 9.0 966 -8.7 8.1 7.7 14.5 5.9 0.1 0.70 108 -06071800.DNR 1.00 9.1 1197 -6.9 8.0 7.7 6.2 3.5 0.1 1.10 83 -06072000.RNK 1.00 14.2 2160 -8.5 5.9 9.1 3.0 11.1 0.3 1.00 113 -06072200.RNK 1.00 16.5 3249 -6.1 6.0 7.0 9.1 7.2 0.3 0.60 100 -06072300.ABQ 1.00 9.6 1267 -4.9 7.8 5.7 11.2 2.8 0.1 1.00 -9 -06072700.RAP 1.00 8.7 694 -8.7 8.3 16.3 21.8 13.4 0.2 0.90 157 -06072800.ABR 1.00 12.7 1956 -6.1 6.4 23.5 29.4 16.1 0.5 1.40 149 -06072800.OAX 1.00 15.6 2714 -5.3 6.0 16.8 22.8 9.3 0.5 0.60 92 -06080100.PIT 1.00 18.6 3456 -4.5 5.8 12.7 7.9 10.1 0.5 0.60 104 -06081000.TUS 1.00 13.4 1913 -6.3 7.3 3.1 6.2 1.2 0.1 0.60 12 -06090800.ABR 1.00 9.5 1406 -14.3 7.5 9.4 9.1 10.6 0.3 1.70 163 -06090800.LBF 1.00 7.9 880 -14.1 7.5 11.1 19.9 6.9 0.2 0.90 20 -06091200.ILX 1.00 13.6 1642 -11.1 6.4 12.9 23.9 8.6 0.5 0.60 56 -06092900.FFC 1.00 10.8 705 -11.1 4.6 19.1 33.4 18.9 0.2 0.60 85 -89060500.1M1 1.00 15.8 2493 -8.2 6.0 14.7 13.0 10.3 0.7 0.60 19 -89061200.JAN 1.00 17.7 3616 -9.1 6.5 15.3 5.8 7.5 1.4 0.60 84 -89061400.JAN 1.00 16.0 3274 -11.5 7.1 11.3 8.2 9.4 1.2 1.00 57 -89061600.TBW 1.00 16.4 3463 -7.6 5.7 10.2 6.4 5.9 0.6 0.60 36 -89061900.CKL 1.00 16.7 3363 -9.6 6.4 14.5 12.2 12.2 1.2 0.60 103 -89062800.HTS 1.00 17.6 3659 -8.0 5.8 15.4 21.4 7.4 1.1 0.60 62 -89062900.AMA 1.00 12.6 2035 -8.2 8.6 14.8 26.0 13.0 0.6 2.30 165 -89070600.OUN 1.00 12.9 1373 -6.0 6.2 6.0 12.2 11.3 0.1 0.60 64 -89071200.TOP 1.00 16.6 3182 -8.1 7.6 12.6 8.2 13.2 1.0 1.60 157 -89072400.VCT 1.00 14.8 2953 -9.6 6.2 7.7 13.3 9.5 0.5 0.60 120 -89072800.DAY 1.00 16.4 2617 -7.8 5.7 13.5 11.3 7.5 0.6 0.60 83 -89073100.GTF 1.00 9.5 1858 -9.3 8.9 10.8 21.7 10.3 0.4 1.20 106 -89080600.OUN 1.00 16.3 3439 -5.4 6.8 10.2 12.1 9.7 0.5 0.80 101 -89082000.UMN 1.00 17.3 3524 -6.0 6.2 20.6 14.9 13.6 1.1 0.80 350 -89082700.DDC 1.00 16.9 4549 -7.4 7.6 11.3 24.3 1.4 1.2 2.10 11 -90050400.CKL 1.00 14.0 1534 -10.6 6.4 20.1 25.8 10.8 0.7 0.60 141 -90061000.GSO 1.00 15.3 2409 -8.8 6.1 9.7 14.5 11.1 0.5 0.60 145 -90062300.HTS 1.00 14.5 1346 -8.5 5.8 27.1 36.9 19.1 0.6 0.60 231 -90062400.OUN 1.00 11.9 1571 -10.8 8.2 26.8 24.9 14.1 1.1 1.90 186 -90070900.GSO 1.00 17.6 4051 -5.3 5.6 10.2 10.5 6.1 0.5 0.80 73 -90071100.GSO 1.00 15.2 3487 -6.6 5.9 3.5 9.1 7.5 0.2 0.60 38 -90071800.AMA 1.00 11.4 1482 -6.5 6.7 14.8 26.1 8.4 0.3 1.10 98 -90072000.DEN 1.00 11.7 1698 -7.2 7.4 16.1 20.8 14.0 0.4 2.10 182 -90072200.TBW 1.00 17.8 3409 -5.7 6.0 4.6 7.8 3.6 0.2 0.60 35 -90072500.DDC 1.00 11.9 1703 -8.0 6.8 14.0 17.5 10.1 0.4 1.40 208 -90072600.GGW 1.00 10.2 1514 -10.6 7.0 15.6 16.6 7.9 0.4 1.80 55 -90080200.MAF 1.00 14.4 1702 -6.2 6.1 9.7 12.2 2.8 0.2 0.60 27 -90081900.AMA 1.00 13.6 2596 -7.9 7.0 5.1 5.1 3.8 0.2 0.80 45 -90082100.OUN 1.00 19.2 5290 -6.7 6.9 8.3 3.4 6.2 0.9 0.60 38 -90082300.HTS 1.00 15.2 707 -7.7 6.2 7.0 8.5 3.6 0.1 0.60 -4 -90083000.GSO 1.00 16.4 3552 -9.3 6.0 20.1 18.2 14.1 1.6 0.60 37 -90092900.MAF 1.00 12.2 1606 -8.0 6.0 15.0 28.7 11.3 0.3 0.80 35 -90100800.GGG 1.00 16.8 2689 -6.0 5.8 14.2 17.2 8.9 0.5 0.60 70 -90101800.GGG 1.00 14.2 1619 -10.6 6.4 20.0 27.9 12.5 0.7 0.60 114 -91060500.AHN 1.00 15.3 3036 -8.1 6.7 5.7 13.0 11.6 0.3 0.60 72 -91060500.CKL 1.00 16.9 3345 -7.5 6.3 5.0 4.8 9.2 0.3 0.60 52 -93092500.OUN 1.00 16.1 2895 -6.7 6.2 24.5 27.2 16.0 1.1 0.60 264 -97081700.DVN 1.00 20.8 5790 -8.3 7.5 14.3 11.8 12.3 2.6 1.00 137 -97081700.PIT 1.00 18.3 3951 -7.9 6.9 12.7 23.0 15.4 1.2 0.60 224 -97081800.FFC 1.00 18.4 3564 -6.1 6.1 2.5 2.0 4.4 0.1 0.60 37 -98052200.BNA 1.00 15.2 3709 -10.7 6.4 9.2 7.9 10.4 0.8 0.90 83 -99061200.ILN 1.00 14.7 3299 -8.3 5.8 4.6 4.0 8.2 0.3 1.10 32 -00021800.JAN 0.88 12.5 1866 -14.9 6.7 27.5 38.9 16.2 1.5 0.70 270 -00061100.DDC 0.88 14.3 3471 -7.9 6.9 11.0 20.2 14.0 0.7 2.40 53 -00061800.RAP 0.88 7.4 1396 -18.9 7.1 14.0 34.9 7.4 0.5 1.40 270 -00070600.DDC 0.88 12.3 2581 -7.5 8.5 9.4 10.0 10.7 0.5 1.80 97 -00072800.BMX 0.88 13.2 2147 -9.5 6.2 8.0 11.4 6.0 0.3 0.70 35 -00080200.DVN 0.88 16.6 4183 -9.7 6.6 11.2 16.4 13.3 1.2 1.10 169 -00080300.PIT 0.88 14.9 2780 -9.7 6.2 15.5 29.2 9.1 0.9 0.60 81 -00080400.BNA 0.88 16.3 3453 -9.9 6.8 10.9 16.0 9.1 1.0 0.60 83 -00080500.LZK 0.88 16.1 3872 -6.3 5.6 9.4 14.6 7.3 0.5 0.80 6 -00080700.DTX 0.88 19.4 4231 -7.3 6.0 16.6 31.6 10.6 1.4 0.60 78 -00090300.OAX 0.88 12.6 3099 -10.1 8.7 16.9 21.6 9.5 1.4 1.40 126 -01062200.DVN 0.88 10.3 1285 -18.1 6.5 10.8 11.8 8.7 0.4 1.00 66 -01062600.CRP 0.88 16.6 3837 -8.5 6.4 4.0 8.9 7.1 0.3 0.60 53 -02031000.GSO 0.88 11.0 819 -15.3 5.8 24.6 29.7 19.8 0.5 1.20 236 -02052900.OAX 0.88 13.0 2754 -13.3 7.1 7.5 7.0 10.0 0.6 2.60 127 -03031400.TLH 0.88 11.6 2141 -13.1 6.3 10.5 9.0 5.7 0.5 1.10 39 -03042912.TOP 0.88 10.6 1617 -16.9 7.8 16.7 22.5 11.0 0.9 2.80 238 -03050400.BIS 0.88 8.2 1467 -18.7 7.4 15.4 16.1 8.8 0.6 1.60 86 -03060300.JAX 0.88 16.1 3513 -10.1 7.6 11.1 10.3 11.4 1.1 0.60 111 -03060600.ABR 0.88 8.1 888 -19.9 6.8 17.3 14.2 9.2 0.4 1.50 47 -03061600.TOP 0.88 12.4 1944 -11.9 6.4 0.8 4.2 5.8 0.0 1.00 3 -03062000.GGW 0.88 9.2 1032 -9.7 8.1 9.8 17.1 8.3 0.2 1.30 76 -03101712.JAN 0.88 12.8 1891 -11.5 6.3 25.4 33.9 16.9 1.1 1.20 246 -03102600.CRP 0.88 17.9 3408 -9.9 6.3 15.2 34.5 9.8 1.4 0.60 17 -03111800.OAX 0.88 10.0 957 -18.3 6.8 41.2 58.6 20.0 1.2 2.50 88 -04040900.AMA 0.88 8.2 1515 -16.7 7.0 17.9 23.0 14.7 0.6 1.60 139 -04081800.PHX 0.88 10.5 1709 -9.1 7.3 4.8 9.2 6.0 0.1 0.80 15 -04082700.ABR 0.88 10.2 1433 -15.1 6.7 14.4 40.5 5.3 0.5 1.50 28 -04091900.LCH 0.88 15.9 2433 -6.9 5.8 4.4 15.6 7.7 0.2 0.60 6 -04092000.OAK 0.88 7.3 242 -17.9 5.5 27.4 30.4 6.5 0.1 0.70 56 -04100400.GSO 0.88 13.2 1385 -14.9 6.5 15.2 26.8 10.4 0.6 1.40 101 -05081300.MAF 0.88 12.8 1568 -6.3 6.5 11.8 13.7 6.9 0.2 0.60 82 -06013012.JAN 0.88 10.0 1058 -20.9 7.1 38.7 46.0 18.9 1.5 2.60 71 -06032100.OUN 0.88 5.4 579 -25.5 7.4 16.6 26.7 5.7 0.2 0.90 53 -06040700.FWD 0.88 12.5 2831 -12.5 6.2 33.5 41.5 20.1 2.2 2.80 40 -06041200.TOP 0.88 8.4 726 -14.3 7.0 33.2 37.2 23.1 0.5 2.00 232 -06043000.OTX 0.88 6.4 499 -17.9 7.3 17.3 23.3 8.3 0.2 0.80 75 -89061200.AMA 0.88 13.2 3301 -11.7 8.7 12.9 25.2 9.2 1.4 2.30 167 -89062600.UMN 0.88 16.2 3812 -6.9 6.3 0.7 10.8 2.0 0.0 0.60 -14 -89062700.DEN 0.88 8.6 931 -11.1 7.6 14.3 14.3 10.8 0.2 1.80 122 -89072700.AHN 0.88 17.5 3996 -6.9 6.5 3.5 6.8 7.1 0.3 0.60 66 -89082500.AHN 0.88 16.9 3533 -5.1 6.1 3.3 8.1 2.7 0.1 0.60 5 -89082600.AHN 0.88 17.1 3463 -5.6 5.8 11.3 8.6 4.0 0.5 0.60 41 -89082900.GGG 0.88 18.5 3979 -4.6 6.0 4.1 2.2 1.6 0.2 0.60 3 -90071000.PIT 0.88 16.6 3362 -6.7 6.3 19.7 14.7 14.3 1.1 0.60 124 -90073000.AMA 0.88 12.2 943 -7.5 6.3 12.7 18.1 8.4 0.2 0.60 14 -90091900.OUN 0.88 18.0 3878 -6.7 6.2 11.9 20.5 12.1 0.8 0.60 119 -97010900.SIL 0.88 13.1 909 -13.6 6.7 39.7 37.0 33.7 1.0 -999.00 511 -98062500.DDC 0.88 11.9 2667 -7.3 8.7 25.1 34.7 12.4 1.2 1.40 224 -90052100.SIL 0.85 16.6 3505 -10.6 6.7 8.4 13.0 10.9 0.8 0.60 70 -03052100.TBW 0.80 15.8 2941 -9.5 6.2 2.7 5.4 7.1 0.2 0.60 27 -91051700.JAN 0.80 15.5 2890 -8.9 6.5 1.1 7.8 0.6 0.1 0.60 1 -00022400.LZK 0.75 10.6 1590 -18.1 7.0 25.0 34.2 17.2 1.3 2.50 270 -00050300.JAN 0.75 12.8 1438 -12.9 5.9 12.8 7.2 13.9 0.4 0.60 120 -00052200.LZK 0.75 12.1 2062 -13.5 6.2 22.6 32.5 17.7 1.1 1.40 162 -00061800.JAX 0.75 15.7 2677 -7.9 5.7 6.0 10.5 7.9 0.3 0.60 61 -00061900.WAL 0.75 17.4 2940 -7.9 6.3 11.3 9.5 11.6 0.7 0.60 134 -00062500.JAX 0.75 15.6 2442 -10.1 6.2 9.4 21.8 9.3 0.5 0.60 104 -00062900.GRB 0.75 8.9 860 -18.9 6.4 17.0 24.4 14.1 0.4 1.10 108 -00071300.DDC 0.75 15.1 3064 -3.7 6.1 6.2 10.6 9.2 0.2 0.60 0 -00071300.FWD 0.75 14.9 3103 -5.7 6.5 10.6 11.4 13.9 0.4 0.80 120 -00071800.JAN 0.75 15.8 3305 -5.5 6.0 13.9 14.4 13.1 0.6 0.60 -56 -00071900.JAN 0.75 17.3 3841 -6.1 6.1 7.5 6.9 5.7 0.4 0.60 32 -00072100.TBW 0.75 18.9 4845 -6.9 6.4 7.0 10.7 7.4 0.7 0.90 56 -00072300.GSO 0.75 16.5 2443 -9.1 5.7 20.6 22.2 6.6 1.0 0.60 88 -00072400.GGW 0.75 10.9 3240 -11.1 8.5 26.1 22.5 12.5 2.1 1.40 54 -00080400.LCH 0.75 15.7 3045 -7.5 5.6 2.8 12.8 4.7 0.1 0.60 28 -00090200.SHV 0.75 12.1 1896 -7.5 7.0 3.2 2.0 5.2 0.1 0.70 15 -01062400.BIS 0.75 13.7 4781 -10.9 9.0 18.7 27.1 15.0 2.8 1.70 249 -02030812.ILX 0.75 7.2 533 -19.7 6.9 31.5 49.1 16.1 0.4 1.30 599 -02051500.PIT 0.75 5.9 521 -27.9 7.9 14.7 14.3 17.3 0.2 1.10 74 -02060400.JAX 0.75 15.3 3128 -8.1 6.5 3.7 6.5 0.3 0.2 0.60 15 -02062500.LBF 0.75 11.7 3690 -10.3 9.2 7.2 9.1 5.0 0.7 1.30 45 -02072000.LZK 0.75 21.6 6551 -8.5 6.9 10.2 6.8 8.7 2.0 0.90 145 -03031500.OTX 0.75 6.3 801 -26.3 7.5 24.9 28.7 18.3 0.6 1.50 240 -03032000.SGF 0.75 7.6 909 -22.1 6.7 10.5 8.6 18.2 0.3 1.40 205 -03040922.XMR 0.75 15.5 2570 -10.3 5.6 31.0 38.3 12.7 1.7 0.60 34 -03042300.DNR 0.75 6.7 1183 -16.1 7.9 19.1 35.2 12.2 0.5 1.20 265 -03050100.DNR 0.75 6.7 1011 -20.1 8.0 33.5 27.3 12.5 0.9 1.20 108 -03050200.BMX 0.75 12.4 2216 -12.9 6.6 6.7 7.6 4.6 0.4 0.70 9 -03052400.PIT 0.75 10.0 707 -16.7 6.5 26.5 23.6 12.1 0.5 1.00 65 -03060700.MFL 0.75 18.2 3041 -6.7 5.6 2.8 9.3 0.9 0.1 0.60 5 -03061000.JAX 0.75 16.0 2482 -8.7 6.7 11.3 22.4 10.8 0.6 0.60 13 -03061222.XMR 0.75 17.1 2144 -7.9 6.1 4.6 6.1 5.2 0.2 0.60 65 -03061500.SHV 0.75 16.2 2511 -9.9 6.3 21.1 32.8 13.5 1.3 0.60 91 -03061900.TFX 0.75 8.6 1802 -9.3 8.2 10.8 13.4 13.1 0.3 1.00 178 -03062000.BOI 0.75 7.0 491 -12.5 8.2 23.3 18.1 17.9 0.2 1.00 141 -03062100.RAP 0.75 11.9 2338 -10.3 7.2 8.1 14.4 15.0 0.4 2.40 137 -03062200.IAD 0.75 10.5 1215 -17.1 5.8 15.1 9.7 9.3 0.5 1.10 79 -03090900.GJT 0.75 6.8 996 -12.3 9.1 17.7 28.1 8.5 0.3 0.70 199 -03090900.MAF 0.75 12.1 2389 -7.9 7.0 18.1 17.8 12.1 0.7 2.20 222 -03091000.JAN 0.75 15.0 1929 -9.5 6.0 10.8 22.1 8.1 0.4 0.60 83 -03111300.BUF 0.75 8.1 418 -20.5 6.7 46.9 65.5 18.0 0.5 1.50 335 -04030500.LZK 0.75 12.4 745 -10.1 5.8 39.6 53.2 27.8 0.5 0.60 468 -04051300.OAX 0.75 10.5 1193 -13.7 6.9 24.2 28.7 16.7 0.7 2.20 133 -04051700.FFC 0.75 12.2 2077 -12.1 6.4 2.0 11.6 2.9 0.1 0.80 0 -04052300.BUF 0.75 13.8 1807 -10.6 5.8 22.4 24.0 18.8 0.8 0.60 239 -04081700.PHX 0.75 12.6 2729 -7.9 7.1 8.0 6.2 6.2 0.4 1.30 60 -04081900.DDC 0.75 11.7 2146 -6.3 6.2 4.3 11.0 10.2 0.1 0.70 15 -04081900.OTX 0.75 9.8 1929 -11.3 7.4 9.9 15.1 6.2 0.4 1.50 43 -04082800.JAN 0.75 18.0 3714 -7.5 6.4 2.6 3.6 1.0 0.2 0.60 12 -04082800.PIT 0.75 18.3 3258 -6.1 5.6 7.8 6.8 10.4 0.4 0.60 106 -04092800.DNR 0.75 7.9 698 -13.9 7.1 17.7 21.0 12.4 0.2 1.00 112 -04100400.CHS 0.75 15.3 1850 -10.7 6.0 22.1 32.7 13.4 1.0 0.60 81 -05022200.BMX 0.75 11.8 1749 -15.9 6.8 26.1 36.8 19.0 1.4 1.20 174 -05030700.OAX 0.75 5.7 324 -21.9 7.4 14.9 9.6 13.6 0.1 0.90 156 -05042612.JAN 0.75 9.2 993 -17.3 6.9 27.2 35.7 15.7 0.7 2.20 336 -05050500.OTX 0.75 7.7 1601 -19.1 7.3 15.7 22.0 8.5 0.6 1.40 35 -05082100.OAX 0.75 15.5 2617 -6.9 6.0 14.8 30.9 15.0 0.6 0.60 159 -05082400.SHV 0.75 16.6 3397 -5.3 6.1 9.2 4.4 11.1 0.4 0.60 72 -06011400.JAX 0.75 12.1 1223 -15.1 6.5 19.6 26.7 19.7 0.7 0.70 233 -89052800.CKL 0.75 15.4 2098 -8.1 6.2 11.8 13.5 8.0 0.5 0.60 43 -89060400.PAH 0.75 16.4 3338 -9.7 5.8 14.2 14.7 15.5 1.0 0.60 90 -89060700.AHN 0.75 14.2 2402 -13.0 6.6 12.3 18.6 2.7 0.9 0.60 37 -89061300.CKL 0.75 16.1 2677 -8.6 6.1 15.9 7.3 11.5 0.9 0.60 102 -89061500.AHN 0.75 14.7 1717 -7.5 5.5 10.0 9.8 11.8 0.2 0.60 91 -89061600.ACY 0.75 16.5 2243 -7.6 5.9 18.8 19.1 19.5 0.7 0.60 217 -89062200.CKL 0.75 16.1 2986 -10.1 6.7 10.0 8.5 6.8 0.8 0.60 76 -89062300.GRB 0.75 14.6 1729 -8.4 6.2 10.7 10.8 10.0 0.3 -999.00 139 -89062300.OUN 0.75 16.0 3217 -7.1 5.9 12.8 14.9 6.9 0.7 0.60 113 -89062700.PIT 0.75 16.0 2924 -9.1 6.8 8.1 4.9 7.9 0.6 0.60 69 -89070800.AHN 0.75 16.8 2876 -6.5 5.8 4.1 4.8 4.3 0.2 0.60 33 -89071100.DDC 0.75 11.9 1858 -8.1 7.6 8.5 14.0 12.4 0.3 2.10 249 -89072900.SIL 0.75 18.8 4031 -6.8 6.3 4.1 4.4 3.9 0.3 0.60 37 -89073000.PAH 0.75 17.9 3630 -7.0 6.4 11.4 9.0 7.4 0.8 0.60 58 -89073100.TOP 0.75 14.5 2685 -6.4 6.7 9.8 13.0 12.0 0.4 0.60 117 -89081200.GRB 0.75 11.3 1782 -14.8 6.7 4.1 9.5 3.9 0.2 0.60 39 -89081900.HON 0.75 13.1 984 -7.6 7.1 14.0 17.9 12.1 0.2 -999.00 244 -89102800.OUN 0.75 12.0 1679 -12.7 6.8 10.1 27.1 8.3 0.4 1.00 115 -90033100.TBW 0.75 14.8 2515 -10.0 5.6 14.0 15.0 12.0 0.7 0.60 135 -90042100.OUN 0.75 12.4 1915 -14.1 6.5 25.3 31.9 13.1 1.3 1.70 138 -90042200.SEP 0.75 13.3 2775 -11.7 6.5 10.2 20.8 8.1 0.7 1.00 98 -90042400.1M1 0.75 12.8 2374 -12.6 6.7 14.0 8.3 6.6 0.9 0.90 56 -90052500.MAF 0.75 13.1 3262 -7.2 7.9 22.0 30.6 12.4 1.3 1.80 97 -90060400.PIT 0.75 9.5 390 -12.5 5.6 26.0 37.7 14.6 0.2 0.60 57 -90060700.TBW 0.75 17.0 3262 -8.6 6.0 1.6 7.3 4.1 0.1 0.60 8 -90061000.AHN 0.75 14.8 2847 -8.2 5.9 8.6 9.9 5.6 0.4 0.60 50 -90070300.SLI 0.75 18.4 3250 -5.7 5.8 11.8 14.5 7.5 0.6 0.60 79 -90070800.TBW 0.75 20.0 5452 -8.1 6.5 7.8 15.4 5.9 1.1 0.60 11 -90072200.CHS 0.75 18.4 3537 -7.5 6.2 8.3 10.2 7.1 0.6 0.60 88 -90072200.PAH 0.75 16.9 2541 -5.6 5.7 13.3 15.3 11.4 0.4 0.60 80 -90072700.DDC 0.75 14.7 3550 -7.0 7.6 7.6 7.2 6.0 0.5 2.20 84 -90072800.TOP 0.75 16.5 3231 -7.8 6.7 8.8 11.3 9.8 0.6 0.90 281 -90073100.JAN 0.75 14.6 2834 -7.3 6.1 5.1 4.3 0.7 0.2 0.60 -3 -90080400.STC 0.75 13.1 2284 -12.5 7.3 5.3 20.0 8.7 0.3 1.40 45 -90081400.ALB 0.75 14.6 1251 -7.6 5.7 31.1 21.6 20.7 0.6 0.60 261 -90081400.MAF 0.75 13.7 1598 -7.1 6.2 4.4 16.6 2.3 0.1 0.60 35 -90081700.CHS 0.75 19.5 3949 -6.9 5.7 14.2 20.9 11.2 1.0 0.60 101 -90081900.DEN 0.75 11.7 1982 -7.8 7.6 10.2 22.1 6.4 0.3 1.70 25 -90082000.PIA 0.75 19.3 4350 -6.5 6.2 12.0 9.9 9.4 1.0 0.60 67 -90082200.BNA 0.75 15.5 2619 -6.1 6.1 9.1 12.7 8.7 0.3 0.60 -10 -90082300.GGG 0.75 16.2 3016 -5.9 6.0 1.3 5.5 5.3 0.1 0.60 35 -90082500.OUN 0.75 15.7 2800 -6.4 6.6 5.0 11.9 5.3 0.2 0.60 63 -90082500.OVN 0.75 17.2 3418 -7.1 6.4 12.0 21.9 10.0 0.8 0.70 181 -90083000.ACY 0.75 15.2 2413 -9.3 5.8 13.9 22.7 9.0 0.7 0.60 62 -90101700.MAF 0.75 12.3 2870 -12.5 8.0 14.9 16.2 7.7 1.3 2.30 78 -91051700.TBW 0.75 16.1 3306 -7.5 5.4 4.0 0.9 3.8 0.2 0.60 -5 -91060600.CKL 0.75 16.3 2864 -8.6 6.4 8.9 11.4 6.2 0.5 0.60 21 -94062400.GGG 0.75 18.0 3754 -5.5 6.3 11.0 14.2 8.2 0.6 0.60 98 -94062400.HTS 0.75 16.5 2798 -5.5 5.3 8.5 15.0 4.7 0.3 0.60 39 -94070200.LCH 0.75 17.0 2754 -6.8 6.4 10.7 11.0 12.4 0.5 0.60 84 -97061700.BMX 0.75 18.2 3829 -6.9 5.9 12.4 13.0 6.9 0.8 0.60 48 -97062400.MAF 0.75 14.1 3310 -9.9 8.9 11.5 8.6 13.0 1.1 1.60 108 -97081700.TBW 0.75 17.4 3152 -7.3 6.2 2.6 4.4 1.8 0.2 0.60 8 -97081800.SLC 0.75 8.3 931 -10.3 8.5 16.1 22.9 13.6 0.3 1.40 203 -97082200.ILN 0.75 9.6 520 -16.3 5.8 17.5 30.9 3.9 0.2 0.70 50 -98062500.JAN 0.75 17.3 3507 -6.1 6.0 2.3 8.6 7.1 0.1 0.70 -1 -98081000.SHV 0.75 16.8 3464 -6.5 5.9 4.8 1.1 4.2 0.3 0.60 42 +DATE / RAOB REPORT MUMR MUCAPE 500TEMP 7-5 LR 0-6SH 0-9SH 0-3SH SHIP MODELb SRH +91051100.MAF 6.00 14.9 4692 -10.8 8.8 13.2 18.1 14.2 1.9 2.70 -37 +95052300.DDC 6.00 15.3 4181 -9.6 7.5 19.4 26.8 23.4 1.9 3.00 325 +97061700.OUN 5.50 18.8 5751 -9.5 7.4 23.6 45.9 14.5 4.3 3.50 116 +06040300.LZK 5.00 13.7 3819 -14.9 8.0 26.6 32.6 20.9 3.9 3.40 251 +57070300.RAP 5.00 15.8 4359 -6.7 7.7 22.9 39.3 13.9 1.9 3.40 130 +90070800.BIS 5.00 16.6 3717 -9.8 7.7 29.8 42.2 12.5 3.3 2.40 202 +91052900.HON 5.00 15.2 3892 -12.3 8.0 40.7 36.0 25.0 5.7 3.50 269 +92072600.DDC 5.00 17.4 4794 -4.6 6.8 17.4 14.6 18.2 1.1 0.80 176 +96061200.DDC 5.00 13.7 2820 -8.3 7.6 20.3 15.8 12.9 1.2 2.50 142 +99012200.LZK 5.00 12.3 2240 -17.3 7.6 26.3 32.1 23.0 2.3 3.00 294 +99060100.DDC 4.75 15.9 4387 -11.3 8.0 27.7 38.0 15.3 4.2 3.50 209 +02042900.IAD 4.50 13.6 2553 -16.7 7.3 21.1 33.9 24.9 2.1 2.90 373 +02043000.FWD 4.50 19.4 5853 -10.9 8.0 29.7 37.1 14.6 7.0 3.10 151 +89060400.MAF 4.50 14.0 3939 -10.0 8.5 20.6 33.6 6.6 2.3 2.20 58 +89060700.SEP 4.50 15.6 3510 -7.9 7.0 24.8 47.4 9.0 1.8 2.40 130 +89062700.GSO 4.50 17.6 4349 -7.3 6.3 14.2 6.4 7.8 1.2 0.90 52 +89070300.SEP 4.50 18.5 5261 -7.6 8.4 22.6 1.2 12.9 3.4 2.90 222 +89080400.INL 4.50 17.4 3953 -11.5 8.3 18.6 29.2 7.3 2.9 1.00 36 +90051600.OUN 4.50 16.7 4398 -9.0 7.6 25.5 44.9 23.2 3.1 3.10 180 +91032800.FNT 4.50 11.3 1860 -17.3 7.6 47.0 45.4 26.8 3.1 2.90 431 +91042912.BRO 4.50 19.5 4471 -9.8 7.7 23.1 24.2 13.7 3.6 -999.00 254 +91072100.HON 4.50 20.1 5826 -6.1 6.8 22.8 33.9 14.3 2.6 1.90 180 +91081400.GTF 4.50 11.5 2524 -13.2 8.5 25.8 28.9 15.3 2.0 2.00 213 +92062800.AMA 4.50 16.0 4069 -10.3 7.9 22.8 27.5 16.9 2.9 3.20 150 +92062800.DDC 4.50 13.8 2750 -11.3 7.8 20.6 41.3 15.2 1.6 2.90 315 +92062900.SEP 4.50 17.4 3761 -9.6 7.8 21.8 15.6 13.7 2.5 2.80 248 +92073000.OVN 4.50 16.6 4366 -11.4 7.4 22.3 23.7 13.9 3.3 3.20 216 +92073000.TOP 4.50 16.6 4074 -10.0 7.5 22.5 22.1 11.8 2.7 2.40 164 +93050100.DDC 4.50 11.1 3206 -16.5 8.0 24.0 29.9 15.4 2.7 3.70 194 +93060800.OUN 4.50 17.0 4917 -9.1 7.1 30.6 26.7 9.7 3.9 2.60 195 +93062700.OVN 4.50 15.0 3720 -10.0 6.3 22.3 28.9 9.4 1.9 3.10 140 +93072400.BIS 4.50 15.3 3597 -9.8 5.8 21.0 33.2 14.9 1.6 2.30 263 +93092200.OVN 4.50 15.4 3685 -11.1 8.1 31.9 33.2 23.5 3.9 4.00 492 +93092200.TOP 4.50 16.8 3665 -8.1 6.5 21.3 37.9 21.3 1.7 1.30 502 +93101300.SEP 4.50 14.2 3151 -13.1 8.0 22.3 31.8 15.0 2.5 2.90 307 +93101800.SEP 4.50 15.7 3958 -10.6 7.0 31.7 30.5 23.2 3.5 2.20 441 +94040300.OUN 4.50 10.1 2075 -17.0 7.6 31.2 39.3 18.7 2.0 2.10 163 +94042600.SEP 4.50 16.3 4409 -11.5 7.4 26.7 26.2 21.2 3.9 3.30 138 +94060800.LBF 4.50 13.0 3400 -9.5 7.8 18.7 18.4 8.1 1.5 2.40 109 +95051700.DDC 4.50 15.6 4878 -10.8 8.5 26.6 40.7 8.9 4.4 2.60 43 +95060500.MAF 4.50 14.9 4358 -8.6 7.6 23.2 32.0 16.0 2.3 2.90 181 +95060900.MAF 4.50 17.8 5653 -8.1 8.1 18.7 33.5 12.8 2.9 2.90 83 +96030700.JAN 4.50 14.0 2362 -12.5 6.8 34.9 36.9 16.8 2.3 0.60 196 +96050500.IAD 4.50 12.1 2432 -15.2 7.2 25.0 25.5 15.9 1.9 1.90 36 +96051000.TOP 4.50 15.6 3884 -11.1 8.8 18.3 22.3 22.1 2.6 3.30 234 +96062700.TFX 4.50 13.9 3835 -10.9 8.3 37.1 44.3 21.8 4.3 1.60 297 +96081100.LBF 4.50 13.3 2360 -8.4 6.2 26.1 22.0 26.5 1.0 2.60 326 +96102100.OUN 4.50 12.7 2995 -12.9 7.5 20.3 28.4 15.6 1.8 3.00 71 +01070300.LBF 4.25 16.7 5584 -8.7 8.5 18.0 24.7 14.2 3.0 4.20 154 +03040600.FWD 4.25 12.4 2487 -14.3 7.3 31.5 51.8 17.1 2.4 2.90 341 +03050500.SGF 4.25 15.7 5169 -13.5 7.6 38.4 50.7 30.0 7.6 2.90 348 +03050518.BNA 4.25 16.0 2730 -12.9 7.1 37.0 37.2 18.3 3.5 -999.00 239 +03051000.MHX 4.25 17.1 4373 -10.5 7.3 22.7 23.2 14.1 3.1 2.10 146 +04040400.MAF 4.25 12.0 2746 -14.7 7.0 19.5 31.1 14.4 1.6 2.70 262 +04052200.AMA 4.25 13.7 4265 -8.7 7.9 21.5 23.9 13.6 2.1 2.10 176 +04053000.OUN 4.25 16.8 4526 -7.5 7.8 24.4 40.4 15.8 2.6 -999.00 224 +04062200.AMA 4.25 13.8 3828 -8.9 8.0 26.2 40.5 17.8 2.3 2.30 141 +04071200.GGW 4.25 11.0 2390 -13.7 8.6 22.3 32.0 17.1 1.6 1.90 99 +04071300.LBF 4.25 19.5 7183 -7.3 8.6 14.7 20.5 10.3 3.1 3.70 68 +04071318.ILX 4.25 22.1 6811 -10.9 7.9 18.7 21.9 15.5 5.8 2.60 131 +04081000.DNR 4.25 12.9 3415 -9.1 8.0 15.0 15.4 16.2 1.2 3.20 270 +05031400.JAN 4.25 11.1 1382 -15.7 7.6 25.5 49.7 19.2 1.1 2.80 161 +05042000.LBF 4.25 10.1 2460 -15.7 8.9 15.3 22.3 16.6 1.3 2.90 255 +05042200.SGF 4.25 12.6 2944 -13.3 6.8 21.3 15.6 15.1 1.7 2.20 193 +07080400.RAP 4.25 15.6 2983 -4.1 6.2 22.7 35.8 18.3 0.6 0.90 270 +08020600.SHV 4.25 13.5 2312 -14.1 7.3 32.4 43.7 25.8 2.5 1.80 212 +02042000.MAF 4.00 12.9 2974 -8.1 6.9 24.3 41.7 19.0 1.2 2.50 133 +02061300.DDC 4.00 19.5 6234 -6.9 7.6 19.8 32.7 17.2 3.0 3.70 126 +03050300.BMX 4.00 15.2 4593 -15.7 7.9 32.4 30.5 8.1 6.7 2.90 51 +04071318.DVN 4.00 20.8 6090 -11.1 8.4 25.9 22.3 22.5 7.3 2.80 191 +06050600.MAF 4.00 12.4 3533 -12.3 8.2 33.6 48.0 19.3 3.5 2.00 174 +06071700.INL 4.00 14.1 3719 -11.1 8.4 26.3 29.8 19.9 3.1 2.40 328 +06092221.SGF 4.00 17.6 5071 -6.7 5.3 31.6 37.0 21.0 2.4 1.10 202 +89061100.AMA 4.00 15.8 3666 -8.7 7.6 11.0 19.2 11.1 1.0 -999.00 87 +89062700.DDC 4.00 14.3 2840 -8.4 7.6 19.4 19.2 12.7 1.2 2.20 167 +89071800.LBF 4.00 15.4 3622 -9.4 8.1 38.9 37.6 22.9 3.9 2.90 361 +90051500.AMA 4.00 14.8 4543 -9.9 8.2 24.7 33.8 19.2 3.2 2.20 473 +90051900.AMA 4.00 11.5 2732 -9.3 7.7 26.1 30.4 18.5 1.4 2.10 301 +90060900.TOP 4.00 18.5 5571 -10.1 7.3 22.6 16.4 14.8 4.1 2.70 252 +90070100.DAY 4.00 16.6 3541 -9.4 7.1 19.9 24.5 8.6 1.8 1.80 154 +90090200.RAP 4.00 11.3 1762 -7.4 7.5 23.6 32.7 14.1 0.6 2.10 181 +91041300.SEP 4.00 16.9 5008 -10.6 6.8 21.8 27.4 12.2 3.2 3.40 137 +93071600.RAP 4.00 14.1 3230 -7.5 7.7 25.0 35.8 18.6 1.6 3.20 97 +93072300.HON 4.00 15.7 3720 -8.1 6.0 19.1 22.5 15.4 1.3 1.50 130 +95050600.FTD 4.00 15.1 2036 -11.1 7.1 21.2 37.5 20.8 1.2 0.60 304 +95051600.JAN 4.00 17.9 4861 -10.9 7.8 14.9 18.5 8.6 2.6 2.50 -35 +95072500.FTD 4.00 15.4 2897 -10.0 9.2 19.1 19.8 12.8 1.9 -999.00 168 +95072600.DDC 4.00 18.3 5696 -10.1 8.8 21.3 19.2 17.1 4.7 3.30 238 +95102700.SGF 4.00 12.5 2166 -13.8 6.9 21.9 29.4 25.7 1.3 1.60 267 +96052300.LBF 4.00 13.5 2915 -11.1 8.0 27.8 43.7 18.5 2.3 2.90 303 +97082200.LBF 4.00 15.7 3974 -9.7 7.4 26.4 37.5 17.4 2.8 3.30 321 +98050800.FFC 4.00 17.3 4120 -12.3 7.7 31.0 51.6 17.1 5.0 2.20 172 +98063000.TOP 4.00 21.8 6490 -5.3 7.2 24.4 32.6 18.1 3.1 1.70 230 +03040400.OUN 3.75 11.9 2640 -15.1 7.3 24.0 23.9 13.4 2.0 2.30 187 +95051900.BMX 3.75 16.5 3370 -9.9 6.6 20.6 25.5 16.9 1.8 0.60 246 +01040400.SGF 3.65 12.8 3277 -15.1 8.3 22.4 28.9 17.2 2.8 3.10 310 +01041500.DDC 3.65 13.1 3892 -18.3 9.0 43.1 54.7 24.4 8.6 2.50 233 +01050700.LZK 3.65 14.7 3512 -12.9 5.9 18.7 26.3 7.3 1.8 3.40 77 +01050700.SHV 3.65 14.8 2945 -12.5 6.5 15.7 22.1 9.0 1.3 1.70 110 +01051800.AMA 3.65 13.9 4695 -10.5 8.6 13.2 22.8 16.1 1.8 2.10 86 +01052500.JAN 3.65 13.5 3446 -15.1 7.5 21.8 31.4 17.4 2.7 2.70 240 +01061400.DDC 3.65 15.7 5244 -8.9 8.0 28.1 28.2 19.8 3.9 2.50 384 +01062100.DDC 3.65 15.2 4428 -10.7 7.8 19.0 25.2 13.4 2.5 3.20 400 +01071800.ABR 3.65 17.5 5177 -9.9 8.4 19.5 28.2 9.6 3.5 3.90 136 +01072100.GGW 3.65 13.5 3114 -10.7 7.7 28.3 30.5 15.8 2.3 2.80 354 +02051100.MAF 3.65 14.5 4658 -9.3 8.4 23.1 40.3 14.8 2.9 2.20 132 +02051200.TOP 3.65 15.8 4489 -11.9 8.1 26.0 26.5 13.7 4.2 3.30 224 +02060500.RNK 3.65 17.9 5399 -9.7 6.9 4.0 7.3 8.7 0.6 3.20 54 +02062400.ABR 3.65 17.2 5093 -10.5 8.2 26.3 30.9 16.9 4.7 3.50 187 +02091900.OUN 3.65 15.7 4268 -6.1 6.7 20.8 23.4 17.8 1.4 3.00 308 +03062300.OAX 3.65 18.7 6203 -9.3 8.6 13.6 22.9 12.3 3.0 4.20 237 +98040800.ILX 3.65 10.2 1354 -19.7 7.2 21.2 25.1 20.1 1.0 2.60 180 +98052200.SGF 3.65 17.1 4719 -9.9 7.8 22.4 23.1 13.8 3.3 2.30 232 +99030600.LZK 3.65 11.7 1922 -18.5 8.2 22.8 39.2 21.4 1.9 2.10 360 +99050400.OUN 3.65 15.6 5195 -14.9 8.4 21.3 22.0 16.5 5.1 4.70 343 +99072600.LBF 3.65 16.4 4375 -6.7 7.9 12.9 16.1 9.5 1.2 2.60 60 +01041000.SGF 3.50 13.0 3476 -14.5 7.9 21.6 30.3 12.5 2.7 2.60 141 +01061500.FWD 3.50 17.3 4260 -9.7 7.9 15.1 9.7 11.1 2.0 2.20 74 +02081200.DDC 3.50 14.0 3415 -8.7 8.0 15.7 27.7 10.7 1.2 3.10 157 +89070300.STC 3.50 15.6 3556 -8.2 7.0 15.8 21.4 8.5 1.2 1.40 128 +90031400.OUN 3.50 14.6 3950 -16.1 7.2 20.2 49.4 12.3 3.2 2.90 169 +90040600.SEP 3.50 12.4 3764 -14.9 7.8 25.2 36.8 15.4 3.3 2.30 305 +90060900.IAD 3.50 17.2 3994 -10.9 7.1 23.7 20.0 18.3 3.0 0.90 203 +90061900.BIS 3.50 11.1 1968 -13.5 8.2 28.4 38.0 17.4 1.6 2.90 257 +96062000.OAX 3.50 16.3 4081 -9.8 8.6 19.0 24.4 18.9 2.5 -999.00 271 +97062100.LBF 3.50 17.3 6058 -9.3 8.8 23.1 25.1 13.9 4.7 3.70 129 +98052100.TOP 3.50 16.5 4680 -12.5 8.4 10.5 23.7 9.8 2.0 3.80 100 +98052500.OUN 3.50 18.0 5688 -10.7 8.1 21.9 28.7 9.9 4.6 4.20 172 +98062000.OUN 3.50 19.0 6048 -7.1 7.8 15.4 11.2 13.7 2.3 3.90 209 +06070200.GRB 3.25 15.4 3255 -9.3 6.6 17.0 24.9 14.7 1.2 1.50 99 +91060500.DDC 3.25 16.9 4631 -7.9 6.5 15.3 15.4 11.0 1.5 3.50 74 +00050400.FWD 3.00 13.2 2731 -14.3 6.3 21.7 28.5 19.0 1.7 3.00 327 +00062900.MAF 3.00 14.8 3565 -6.3 6.3 10.5 16.7 9.6 0.5 1.80 29 +00080600.OAX 3.00 19.0 5525 -7.1 7.5 15.0 22.8 9.4 2.0 3.10 56 +01051900.LZK 3.00 16.6 4269 -12.5 8.1 18.5 25.8 9.9 3.2 2.70 98 +01053000.AMA 3.00 16.4 5827 -9.7 8.2 26.1 29.7 25.0 4.7 2.80 268 +01090900.FWD 3.00 17.1 4304 -8.9 8.2 14.1 12.0 7.7 1.8 2.70 97 +03042100.SHV 3.00 15.5 2947 -13.5 7.5 24.0 38.0 14.3 2.6 0.90 110 +03050420.SGF 3.00 15.8 4524 -11.9 7.1 35.4 47.9 25.2 5.1 3.20 480 +03062400.LBF 3.00 18.6 6189 -8.7 8.1 30.8 31.6 21.7 5.9 4.80 381 +03062800.DDC 3.00 11.4 2329 -9.3 6.7 16.9 26.8 10.8 0.7 2.20 138 +04041900.OAX 3.00 11.9 3136 -15.1 8.2 33.8 44.9 20.5 3.7 1.90 394 +04042200.OUN 3.00 12.2 2363 -13.5 7.0 24.3 33.8 16.9 1.6 2.70 385 +04051700.DDC 3.00 10.0 2200 -11.9 8.4 31.7 30.2 20.5 1.6 1.50 390 +04052300.OAX 3.00 15.6 4333 -12.3 7.6 32.4 28.9 19.6 4.9 3.00 289 +04070200.AMA 3.00 16.9 5137 -8.1 7.4 14.0 16.6 18.0 1.7 3.00 80 +04081000.DDC 3.00 14.6 3147 -9.7 7.7 21.0 22.0 13.0 1.7 3.00 222 +06042412.LMN 3.00 14.1 3248 -12.9 8.2 25.4 28.7 16.6 2.9 3.20 413 +06042500.OUN 3.00 15.5 4007 -12.3 8.6 20.1 21.2 15.4 3.2 3.30 105 +06052500.SGF 3.00 15.6 3470 -11.1 7.6 14.3 7.3 13.6 1.5 2.00 162 +06052700.BNA 3.00 16.1 3535 -8.3 5.9 12.8 17.2 17.7 0.9 0.70 196 +06052800.BIS 3.00 12.5 3434 -11.1 8.1 11.3 12.7 10.5 1.0 1.80 74 +72081200.YRM 3.00 10.9 1989 -14.2 8.3 24.6 35.0 14.0 1.5 2.40 132 +89060500.OUN 3.00 12.5 1640 -11.6 7.0 15.7 23.9 8.8 0.6 0.70 53 +89060700.AMA 3.00 15.4 4752 -9.5 8.5 30.5 55.6 21.7 4.3 2.40 303 +90051500.OUN 3.00 16.8 4798 -10.7 7.8 19.8 29.7 12.5 3.2 4.20 186 +90052700.OUN 3.00 17.5 4621 -8.8 7.6 23.8 25.1 20.4 3.1 3.20 255 +91032700.TOP 3.00 12.7 2763 -12.3 6.8 27.7 31.7 21.6 1.9 2.50 279 +91040912.1M1 3.00 14.2 3450 -15.2 8.0 19.7 20.8 11.5 2.8 -999.00 134 +91052700.DDC 3.00 17.0 5493 -10.5 8.4 21.7 29.3 13.3 4.2 2.90 81 +92032600.TBW 3.00 12.6 2104 -14.0 6.5 32.2 37.0 18.6 1.8 1.10 195 +92062700.MAF 3.00 13.9 3224 -8.2 7.7 23.7 38.8 13.0 1.6 2.50 253 +92070500.OVN 3.00 17.3 5051 -9.3 7.4 21.8 33.3 16.1 3.1 3.50 243 +93050600.MAF 3.00 13.9 3784 -9.6 7.2 27.0 25.4 18.6 2.3 2.50 149 +93060600.HAT 3.00 16.0 4948 -13.5 8.3 15.5 17.2 12.6 3.2 3.90 70 +93070200.DDC 3.00 17.1 4895 -5.2 7.2 16.4 21.4 13.3 1.2 2.80 237 +93070900.OVN 3.00 19.7 5546 -6.8 6.9 29.4 24.3 16.9 3.6 0.60 345 +93082300.DDC 3.00 13.3 2608 -7.8 7.7 19.5 27.0 13.1 1.0 2.00 83 +93091900.AMA 3.00 12.4 1911 -9.0 7.7 32.7 35.4 16.5 1.3 2.40 264 +93091900.DDC 3.00 12.4 1954 -10.4 7.2 29.5 46.6 16.8 1.3 2.80 233 +94032800.CKL 3.00 15.3 2066 -9.6 6.3 38.6 36.3 30.5 1.8 0.60 429 +94052600.FNT 3.00 10.8 2240 -16.3 6.1 17.8 25.8 12.8 1.0 2.40 113 +94060600.DDC 3.00 14.8 4882 -8.8 8.7 15.6 18.6 13.1 2.0 2.10 248 +95021400.PBI 3.00 16.5 2433 -11.0 5.9 27.1 33.4 13.8 1.7 0.60 117 +95043000.FTD 3.00 15.0 4416 -13.3 8.1 21.9 31.7 15.6 3.7 3.40 166 +95062300.LBF 3.00 12.9 2962 -11.1 7.9 21.0 19.8 15.3 1.7 2.80 220 +95071500.LBF 3.00 14.4 3052 -7.0 6.5 15.9 24.7 13.9 0.8 2.10 159 +95072400.DDC 3.00 15.9 3645 -9.9 8.2 18.2 32.6 11.8 2.0 3.60 31 +95082300.INL 3.00 15.4 3023 -11.6 8.0 30.9 26.5 25.4 3.2 2.10 694 +95082700.GGW 3.00 11.7 3094 -12.6 8.3 26.8 41.0 13.6 2.4 1.70 162 +96033100.SHV 3.00 12.7 2891 -17.1 7.6 27.4 35.5 20.1 3.1 3.10 163 +96042000.ILX 3.00 12.9 2394 -14.6 7.1 27.0 39.5 16.4 2.1 -999.00 249 +96052700.OUN 3.00 15.2 3034 -9.4 6.9 29.8 33.6 22.5 2.1 2.00 330 +96061400.UNR 3.00 13.1 3801 -11.0 8.4 18.0 14.8 12.4 2.0 2.00 63 +96062012.LBF 3.00 15.2 3418 -8.6 7.9 22.6 25.0 16.5 1.9 3.30 380 +96070800.LBF 3.00 15.3 3341 -6.4 7.0 30.0 41.5 20.6 1.6 2.20 390 +97052600.OUN 3.00 17.2 5143 -7.7 5.9 30.4 32.4 15.0 2.9 2.60 148 +97061000.FWD 3.00 15.6 2699 -9.9 7.0 18.7 24.1 10.9 1.3 1.30 98 +98052400.DDC 3.00 11.6 2630 -12.9 6.7 22.0 27.7 9.8 1.4 2.30 101 +98061400.OAX 3.00 13.3 2830 -10.5 7.7 24.4 45.4 15.3 1.8 3.40 219 +98062500.ABR 3.00 16.3 4448 -13.7 8.8 17.4 28.7 11.2 3.6 3.70 42 +98062500.BIS 3.00 15.5 4591 -13.3 8.1 15.9 15.4 15.5 2.9 3.00 89 +98062900.TOP 3.00 22.0 6895 -7.7 7.0 20.6 27.3 19.3 4.0 2.40 335 +99060200.FWD 3.00 17.3 4928 -11.5 8.8 15.0 30.3 15.3 3.1 4.50 171 +00022500.AMA 2.75 10.3 3614 -18.5 8.5 26.8 48.5 13.1 3.8 1.70 107 +00051300.DTX 2.75 16.9 4524 -8.5 7.7 24.1 18.5 20.2 2.9 2.40 328 +00052700.OUN 2.75 18.3 5870 -10.1 8.4 21.5 32.8 12.8 4.6 4.00 117 +00061200.BIS 2.75 11.3 2000 -13.1 7.5 22.0 28.0 10.2 1.2 2.50 306 +00061400.AMA 2.75 16.5 5758 -4.9 7.6 23.8 32.0 19.9 2.0 2.50 244 +00062000.LBF 2.75 14.9 4028 -8.5 6.8 18.8 23.9 11.9 1.6 3.00 96 +00071000.GGW 2.75 15.6 3180 -10.9 7.0 18.4 13.5 23.2 1.7 2.60 248 +00071000.LBF 2.75 18.1 5871 -5.5 7.8 14.3 19.9 10.7 1.5 3.50 146 +00071700.MHX 2.75 15.1 2929 -12.3 7.2 18.2 29.9 7.9 1.7 2.30 81 +00072100.LBF 2.75 15.3 3073 -11.3 7.8 26.5 39.4 16.9 2.6 2.00 223 +00072500.LBF 2.75 17.1 5901 -8.9 8.5 24.5 29.4 22.2 4.4 2.90 162 +00072700.OAX 2.75 18.5 5048 -9.7 8.0 21.8 23.2 16.7 3.8 2.60 215 +00121618.BMX 2.75 13.2 2219 -14.1 6.7 32.9 45.8 25.0 2.2 0.90 266 +01040400.LZK 2.75 15.2 4223 -15.1 8.5 18.1 24.8 11.9 3.5 3.10 105 +01042100.OAX 2.75 12.4 3283 -15.3 7.7 28.1 32.7 23.5 3.2 2.40 282 +01050620.LMN 2.75 15.4 4496 -16.1 7.3 11.5 20.9 7.3 2.2 3.10 60 +01052500.FFC 2.75 11.7 2338 -14.5 6.4 18.1 21.4 19.6 1.1 2.50 240 +01060600.AMA 2.75 14.9 4665 -8.9 7.2 15.8 15.6 11.9 1.7 2.30 191 +01060800.DNR 2.75 13.9 3440 -8.7 7.2 25.3 21.9 7.4 1.8 3.10 -26 +01061000.ABR 2.75 13.8 3453 -12.1 7.8 24.6 32.3 16.6 2.6 3.60 158 +01061400.OAX 2.75 17.2 4956 -11.3 9.0 20.4 25.5 18.5 4.2 3.80 153 +01061700.LMN 2.75 14.1 4093 -10.7 8.0 19.4 26.9 9.3 2.3 3.50 195 +01061700.TOP 2.75 15.7 4594 -13.7 8.5 22.1 26.6 15.7 4.4 3.40 214 +01061900.MPX 2.75 15.6 5114 -11.9 9.2 33.1 31.9 19.0 6.9 3.40 154 +01070100.RAP 2.75 14.3 3235 -10.7 7.7 30.8 40.7 12.9 2.8 2.60 114 +01071800.INL 2.75 17.0 4580 -12.9 7.8 11.9 12.8 11.8 2.2 0.80 154 +01071900.ABR 2.75 17.5 5356 -10.5 8.8 18.1 22.7 3.4 3.7 2.70 35 +01071900.BIS 2.75 17.8 5738 -9.9 8.6 21.8 28.8 14.1 4.5 2.90 183 +01072500.GGW 2.75 11.5 1714 -11.3 6.9 26.7 32.1 18.2 1.0 2.20 350 +01112418.BMX 2.75 15.1 2902 -11.3 6.1 26.9 31.9 22.2 1.9 0.80 328 +02051800.DRT 2.75 16.0 5077 -10.5 8.1 8.8 6.3 5.2 1.5 2.60 15 +02052400.AMA 2.75 13.8 4729 -13.3 8.3 28.8 21.8 18.5 4.9 2.30 258 +02060500.AMA 2.75 13.2 2947 -11.5 7.6 32.1 45.0 17.9 2.6 2.70 309 +02061300.AMA 2.75 13.7 3027 -8.5 8.4 29.6 33.0 18.7 2.1 2.50 65 +02062400.BIS 2.75 16.0 3559 -9.7 6.8 28.0 24.8 25.2 2.5 2.40 298 +02062500.ABR 2.75 15.1 4208 -7.1 6.8 19.1 19.3 11.1 1.4 3.10 20 +02072000.TOP 2.75 17.5 4986 -7.5 7.3 10.0 12.7 8.5 1.1 2.70 197 +02072700.TOP 2.75 19.3 6406 -5.3 6.9 18.2 19.3 9.1 2.0 2.60 131 +02081200.LBF 2.75 13.3 3735 -9.9 8.7 13.1 11.8 10.5 1.3 2.10 222 +03031300.SHV 2.75 13.5 2901 -15.3 7.1 17.1 24.1 11.0 1.7 2.00 162 +03040618.LZK 2.75 13.1 2556 -15.9 7.6 35.1 38.9 28.4 3.4 3.10 600 +03042500.LZK 2.75 13.8 3423 -15.7 7.6 20.9 31.0 20.0 2.8 3.30 212 +03042600.BMX 2.75 14.2 3921 -13.3 6.2 35.8 33.5 26.6 3.9 2.70 89 +03042900.SGF 2.75 13.1 3399 -16.7 8.5 5.0 19.6 4.8 0.7 2.80 53 +03050100.TOP 2.75 13.0 3922 -14.1 7.8 17.2 19.6 13.9 2.3 2.70 117 +03050618.SGF 2.75 15.6 5492 -14.7 7.7 32.0 40.6 17.8 7.4 2.80 313 +03050700.FWD 2.75 17.8 5303 -9.7 7.1 30.4 36.2 8.4 4.7 3.50 126 +03051000.OUN 2.75 16.8 5328 -11.1 8.3 27.5 34.8 16.8 5.4 3.60 182 +03051400.SHV 2.75 16.7 3920 -9.5 7.2 27.2 37.0 19.3 2.9 0.80 389 +03051600.AMA 2.75 14.1 3706 -10.3 8.9 42.9 37.7 34.9 4.9 -999.00 632 +03051700.SHV 2.75 16.3 3995 -10.9 7.4 23.2 13.9 19.6 2.9 2.70 242 +03060500.AMA 2.75 11.9 2647 -11.9 7.6 23.0 28.5 13.1 1.5 2.10 167 +03061400.AMA 2.75 12.3 3153 -13.3 8.3 21.7 24.7 13.7 2.2 2.10 35 +03091000.DDC 2.75 14.8 3620 -7.7 7.5 12.1 15.8 11.3 0.9 3.00 233 +03091100.MAF 2.75 13.3 2808 -6.5 6.8 10.3 9.0 7.4 0.4 1.40 80 +03100600.AMA 2.75 12.2 2542 -10.3 6.4 24.1 30.2 12.9 1.2 2.50 50 +04032718.DDC 2.75 13.2 4133 -17.3 8.0 24.6 26.6 14.4 4.4 2.30 143 +04032800.OUN 2.75 12.6 2904 -15.9 7.8 23.3 31.1 16.4 2.5 2.80 315 +04040500.CRP 2.75 14.9 2478 -12.1 6.7 22.4 20.6 7.0 1.6 0.60 184 +04050600.WAL 2.75 9.3 1861 -21.3 7.2 20.2 28.3 21.3 1.3 1.40 239 +04051100.DNR 2.75 10.6 3995 -12.9 9.2 28.3 16.6 18.2 3.4 1.50 379 +04051223.LMN 2.75 15.9 4076 -10.5 7.4 22.7 30.4 21.9 2.7 2.40 304 +04051300.OUN 2.75 16.8 5740 -11.5 8.2 15.2 20.9 12.4 3.3 3.60 131 +04053000.TOP 2.75 15.9 3882 -12.9 8.7 22.4 15.3 14.8 3.7 3.20 295 +04060300.FWD 2.75 16.9 4767 -11.1 8.7 19.1 24.1 14.1 3.5 -999.00 157 +04070500.DDC 2.75 14.3 3819 -10.3 8.3 18.6 30.5 14.4 2.1 2.50 161 +05022200.FFC 2.75 11.4 1389 -16.3 7.0 28.5 35.4 20.7 1.2 1.70 225 +05041800.AMA 2.75 9.4 1767 -17.3 8.7 19.6 22.9 15.5 1.2 1.90 211 +05042100.DDC 2.75 13.2 4722 -15.3 8.6 16.1 14.9 15.2 3.1 2.10 174 +05042300.JAN 2.75 13.6 2558 -14.7 7.1 28.5 34.1 19.9 2.5 2.70 183 +05051000.FWD 2.75 15.5 4841 -11.5 6.7 18.0 25.9 9.5 2.5 2.90 152 +05092300.ILX 2.75 14.1 1858 -8.1 6.9 21.5 16.8 11.5 0.7 0.80 121 +06031218.TOP 2.75 12.6 2814 -17.9 8.5 44.8 54.9 33.9 5.7 2.70 723 +06041400.DVN 2.75 11.2 1524 -15.7 8.3 30.6 30.3 15.8 1.6 3.40 263 +06042000.BMX 2.75 13.1 2242 -11.9 7.1 21.7 27.0 11.3 1.3 2.10 122 +06050300.DRT 2.75 13.7 3549 -12.1 8.5 14.2 19.0 5.1 1.7 2.10 74 +06050500.MAF 2.75 11.5 3709 -12.1 8.1 27.6 34.4 21.7 2.7 1.70 372 +06050718.CHS 2.75 12.9 2580 -12.5 6.0 17.7 18.8 15.9 1.1 2.00 177 +06050800.MAF 2.75 11.9 2440 -12.5 8.0 33.3 51.2 22.1 2.3 2.30 327 +06062200.DDC 2.75 12.7 2406 -8.7 8.1 21.1 24.9 11.0 1.1 2.40 175 +06081000.BIS 2.75 13.0 2589 -8.9 7.5 19.1 18.8 8.8 1.0 2.60 147 +06082600.DDC 2.75 16.5 3488 -5.5 6.5 20.2 26.5 17.6 1.0 0.80 141 +07021400.BMX 2.75 9.9 1032 -19.1 7.0 20.7 36.3 19.5 0.7 2.40 245 +58042200.FWH 2.75 13.3 3338 -16.1 7.8 37.0 49.4 25.5 4.9 2.40 276 +89060200.MAF 2.75 14.1 3193 -10.4 7.9 24.5 27.4 8.5 2.2 2.80 104 +89060300.MAF 2.75 11.9 2291 -8.4 7.6 19.3 32.2 13.3 0.8 2.20 147 +89060300.TOP 2.75 13.7 2623 -12.6 7.0 19.5 39.7 12.4 1.5 2.00 118 +89061300.AMA 2.75 14.4 3611 -10.8 8.1 15.8 22.1 9.9 1.7 3.00 79 +89062600.RAP 2.75 11.5 2246 -13.8 7.8 31.3 30.4 20.0 2.1 2.60 301 +89081600.AMA 2.75 12.8 2669 -7.1 6.9 17.0 24.9 10.5 0.7 2.50 158 +89082200.HON 2.75 15.6 4160 -9.4 6.9 22.9 28.9 14.8 2.3 3.30 107 +89082200.OMA 2.75 17.9 4223 -8.3 7.0 22.2 45.4 15.0 2.3 0.90 138 +89082200.STC 2.75 16.2 3346 -11.1 6.9 20.6 30.6 11.9 2.0 1.20 173 +89082900.STC 2.75 14.6 1959 -10.0 6.8 26.3 44.7 18.0 1.2 1.10 147 +89090400.LBF 2.75 17.3 4599 -8.6 8.3 29.6 38.8 8.6 4.0 3.30 223 +90021600.JAN 2.75 15.2 2047 -10.9 6.6 20.9 34.6 18.9 1.1 -999.00 124 +90031400.PIA 2.75 12.4 2115 -14.4 6.9 18.1 24.1 15.3 1.1 2.60 206 +90041700.OUN 2.75 13.6 3717 -15.0 8.3 11.5 20.5 17.2 1.7 3.80 152 +90042800.GGG 2.75 12.9 2263 -14.9 6.6 14.1 25.3 12.8 1.0 2.80 84 +90050100.AHN 2.75 14.9 4557 -12.6 7.7 14.7 9.3 19.7 2.3 3.40 92 +90051700.GGG 2.75 17.5 3234 -8.3 7.2 24.7 35.1 17.6 2.0 0.60 304 +90051900.LBF 2.75 12.1 3954 -13.9 8.6 25.1 24.6 16.2 3.4 2.00 398 +90052000.OUN 2.75 15.3 4565 -10.8 7.1 13.7 14.7 12.1 1.8 3.10 94 +90053100.GGG 2.75 19.3 4743 -5.7 6.1 27.2 25.7 21.5 2.1 0.70 317 +90060200.LBF 2.75 13.6 3719 -10.8 7.9 15.6 29.4 16.4 1.6 2.40 89 +90060200.STC 2.75 13.4 2697 -13.3 8.5 18.6 17.2 10.4 1.8 2.20 132 +90061900.LBF 2.75 19.2 7070 -6.1 8.4 30.2 38.1 18.5 5.0 3.60 266 +90070300.BIS 2.75 21.3 6982 -6.3 8.2 23.0 29.6 14.9 4.2 4.60 172 +90070700.BIS 2.75 14.9 3274 -7.5 6.9 19.0 25.7 12.9 1.1 2.20 316 +90081100.LBF 2.75 14.8 3971 -9.0 7.5 25.6 21.5 14.3 2.4 2.90 282 +90082800.SSM 2.75 18.2 5115 -8.5 6.2 31.6 29.9 20.5 3.7 1.10 334 +90090600.STC 2.75 19.5 4899 -6.8 6.2 21.0 17.1 14.7 2.0 1.00 294 +91032200.UMN 2.75 11.5 2632 -15.3 7.0 33.0 35.3 18.8 2.5 2.50 371 +91032700.DDC 2.75 12.4 3132 -14.2 8.2 40.7 44.0 18.9 4.4 2.10 160 +91040300.OUN 2.75 10.1 1560 -19.8 7.3 22.6 41.7 15.1 1.2 1.50 275 +91041300.OUN 2.75 14.1 4063 -13.7 8.0 22.0 25.1 17.1 3.3 2.90 205 +91042700.GGG 2.75 18.9 5164 -10.7 8.2 18.9 27.6 12.4 3.8 2.70 209 +91042700.OUN 2.75 16.6 4751 -11.5 7.0 23.6 26.4 20.6 3.6 3.70 376 +91042800.GGG 2.75 18.9 4554 -10.5 7.2 29.5 19.6 15.4 4.6 2.20 140 +91051100.AMA 2.75 15.6 5629 -10.7 9.0 16.5 21.5 14.5 3.3 2.50 314 +91051200.RAP 2.75 14.1 4430 -11.0 7.9 23.5 33.5 26.6 3.0 2.50 437 +91051700.UMN 2.75 15.9 3299 -10.6 7.6 16.1 11.8 14.4 1.6 1.90 174 +91051800.UMN 2.75 15.1 3444 -11.0 7.4 11.9 21.0 9.4 1.2 1.20 59 +91052500.AMA 2.75 13.7 3416 -10.5 7.0 17.4 13.8 17.0 1.4 2.50 124 +91053000.OVN 2.75 16.8 4446 -10.2 6.8 18.2 19.0 14.3 2.2 2.70 31 +91053000.RAP 2.75 10.9 2814 -15.7 8.1 14.5 28.4 13.0 1.3 2.00 159 +91060500.OVN 2.75 14.6 2813 -10.1 6.5 17.1 19.6 8.4 1.1 3.10 177 +91061500.BIS 2.75 13.0 2379 -11.9 6.6 22.5 25.2 13.2 1.3 2.60 152 +91061500.GRB 2.75 17.6 3430 -8.7 6.7 13.9 17.0 21.7 1.2 0.60 161 +91061900.LBF 2.75 13.0 3600 -12.0 8.6 15.2 20.9 13.5 1.7 2.60 219 +91062000.HON 2.75 13.9 2691 -10.5 7.0 22.1 20.0 16.1 1.4 1.20 282 +91070500.BIS 2.75 13.3 2941 -9.3 6.4 21.4 26.6 19.3 1.2 2.40 206 +91070500.GGW 2.75 11.4 2308 -9.9 7.0 17.5 23.9 6.7 0.8 2.20 144 +91072200.HON 2.75 19.3 4474 -6.8 7.2 17.3 24.1 11.1 1.7 -999.00 198 +92021500.UMN 2.75 10.2 1724 -16.9 6.4 33.2 28.2 24.2 1.5 2.20 289 +92030600.1M1 2.75 11.5 2572 -21.1 7.2 22.5 26.7 17.3 2.4 2.30 194 +92060500.AMA 2.75 13.4 2870 -9.4 7.5 17.5 25.9 12.2 1.1 2.60 249 +92061200.MAF 2.75 13.8 2387 -8.2 7.4 26.7 34.6 13.3 1.3 2.00 178 +92061300.AMA 2.75 14.7 2821 -8.8 7.2 19.1 36.4 12.0 1.2 2.70 165 +92061900.BIS 2.75 11.0 1791 -14.4 6.9 27.4 24.4 13.0 1.3 2.50 106 +92061900.DDC 2.75 12.8 2598 -8.3 7.9 25.1 40.5 15.7 1.3 2.70 114 +92062700.AMA 2.75 14.1 3165 -10.0 7.7 16.6 29.9 12.4 1.4 2.90 191 +92073000.LBF 2.75 15.0 3544 -10.3 7.9 25.7 33.8 22.0 2.6 3.00 335 +92101600.SEP 2.75 14.6 3654 -12.1 7.7 16.4 22.7 12.6 1.9 2.90 227 +93033100.1M1 2.75 11.9 2471 -15.1 7.2 30.2 27.1 17.8 2.3 2.80 54 +93033100.UMN 2.75 11.1 2598 -16.5 6.4 29.7 28.9 19.7 2.2 2.10 117 +93040200.WAL 2.75 10.9 1625 -18.5 7.3 30.7 48.4 26.8 1.7 2.40 200 +93042000.GGG 2.75 12.4 2342 -13.3 8.0 26.7 28.4 17.5 2.0 2.70 156 +93042500.UMN 2.75 11.4 2317 -14.6 6.9 25.2 33.1 18.2 1.6 2.40 198 +93042800.MAF 2.75 10.4 1494 -10.6 6.9 19.6 25.8 12.9 0.5 1.80 150 +93042900.MAF 2.75 11.7 2435 -10.9 7.1 29.3 37.4 20.8 1.5 2.20 551 +93050100.AMA 2.75 11.6 4085 -14.5 8.1 25.7 15.8 15.3 3.4 1.90 234 +93050600.AMA 2.75 13.2 4478 -13.6 8.6 34.6 38.4 16.6 5.7 2.00 340 +93051600.DDC 2.75 12.8 3614 -9.8 6.6 19.4 23.7 12.6 1.4 2.50 161 +93061900.AMA 2.75 12.8 2140 -7.8 7.0 22.7 23.3 14.4 0.8 1.90 146 +93062400.DEN 2.75 11.7 3442 -9.6 8.8 32.0 42.3 15.8 2.6 1.80 211 +93062400.LBF 2.75 16.0 3944 -8.6 8.1 21.9 33.8 18.1 2.3 2.80 178 +93070500.DDC 2.75 17.1 4186 -5.4 6.7 30.6 34.9 16.6 1.9 1.20 146 +93070700.AMA 2.75 17.0 5327 -4.7 7.8 21.3 20.0 11.4 1.7 3.80 127 +93070700.DDC 2.75 17.0 5334 -6.0 7.2 27.9 28.2 16.5 2.6 3.10 154 +93090400.IAD 2.75 15.6 2779 -5.9 5.7 15.2 15.6 12.4 0.5 0.60 149 +93101300.CRP 2.75 17.3 4367 -8.6 6.3 20.2 29.8 14.8 2.0 1.50 227 +93101900.GGG 2.75 15.7 3105 -9.8 6.9 23.5 33.9 10.3 1.9 0.70 105 +93102000.DRT 2.75 15.5 3433 -8.9 6.4 25.4 34.0 13.4 1.8 1.60 35 +94012700.GGG 2.75 13.2 2167 -15.9 6.8 31.0 32.3 17.5 2.3 0.70 306 +94041100.UMN 2.75 12.6 2040 -16.5 7.6 37.8 45.4 19.9 2.9 2.50 486 +94052500.OUN 2.75 15.0 3912 -11.5 7.4 22.0 36.2 13.2 2.6 3.00 122 +94053000.SEP 2.75 17.5 5032 -10.6 8.2 27.0 23.8 16.1 4.9 3.90 291 +94060500.HON 2.75 14.2 3871 -11.6 8.5 21.4 19.2 12.0 2.8 2.40 202 +94060600.TOP 2.75 16.5 3953 -9.3 8.1 16.1 27.7 15.4 1.9 2.50 394 +94061100.AMA 2.75 12.3 2164 -8.3 7.3 19.5 20.3 16.6 0.7 2.80 229 +94061200.AMA 2.75 14.7 4015 -8.0 7.8 26.7 19.9 18.4 2.3 2.70 302 +94061200.TOP 2.75 13.9 2320 -9.5 6.6 23.9 24.4 15.8 1.2 0.90 117 +94061800.AMA 2.75 11.9 2676 -7.0 8.2 11.0 11.3 10.7 0.5 1.60 171 +94061900.JAN 2.75 16.8 3177 -7.5 5.9 11.5 12.4 3.8 0.6 0.60 42 +94062500.HON 2.75 11.8 1962 -10.8 6.4 27.8 33.5 15.4 1.1 2.20 211 +94062600.JAN 2.75 16.1 2842 -9.5 6.4 24.0 32.8 12.4 1.6 0.90 130 +94070100.STC 2.75 14.3 3701 -11.6 7.3 27.2 25.1 19.0 2.9 2.70 399 +94070200.OAX 2.75 18.5 5257 -10.1 8.0 26.5 25.4 15.5 4.9 3.20 416 +94070700.HON 2.75 16.5 3051 -8.8 7.2 20.5 18.6 10.2 1.5 0.60 159 +95040900.TOP 2.75 10.7 2836 -17.5 9.2 21.4 31.9 16.5 2.5 1.90 120 +95042000.FTD 2.75 14.6 2621 -13.3 7.7 39.5 59.2 25.8 3.7 2.40 498 +95051400.UMN 2.75 16.5 5278 -10.3 6.9 28.0 26.2 22.3 4.1 3.20 211 +95052200.LBF 2.75 10.4 2027 -14.9 7.4 28.3 33.3 18.7 1.6 2.10 221 +95060300.AMA 2.75 12.4 3024 -9.6 8.2 22.4 37.2 15.7 1.6 2.00 346 +95062100.OKX 2.75 17.1 3918 -9.8 7.1 18.4 25.8 11.4 2.1 1.00 18 +95062800.LBF 2.75 12.4 2880 -10.1 7.7 22.0 19.7 13.9 1.5 2.50 208 +95070300.AMA 2.75 14.7 3838 -11.5 8.8 22.8 29.0 8.2 3.1 2.50 115 +95070300.DDC 2.75 14.2 2905 -9.6 6.8 18.2 21.4 12.3 1.2 2.30 111 +95071200.OKX 2.75 13.9 2900 -15.6 6.9 12.7 13.6 8.1 1.3 2.40 48 +95071500.GRB 2.75 19.0 5409 -8.5 8.1 12.1 9.0 8.0 2.0 3.00 69 +95072400.AMA 2.75 13.3 2225 -7.8 8.5 21.6 25.1 13.1 1.0 2.90 124 +95081800.BIS 2.75 18.4 5585 -7.0 7.7 10.6 17.3 10.6 1.4 3.30 142 +96031600.FFC 2.75 9.6 890 -19.2 7.8 28.8 55.2 20.5 0.9 2.20 353 +96042200.OUN 2.75 12.7 2260 -10.9 5.9 38.3 48.8 18.5 1.7 2.30 500 +96042200.TOP 2.75 10.9 1574 -16.6 7.3 45.6 54.3 14.6 2.2 2.30 145 +96051700.UNR 2.75 14.8 4365 -8.1 8.0 25.5 28.7 15.0 2.5 2.50 219 +96051800.OAX 2.75 15.3 4523 -11.1 8.8 16.0 21.2 12.9 2.6 -999.00 68 +96052500.AMA 2.75 13.5 3927 -11.3 9.1 20.3 4.9 16.4 2.6 1.90 101 +96052600.MAF 2.75 14.1 3464 -6.2 7.7 28.7 42.1 22.5 1.6 2.90 240 +96053000.MAF 2.75 14.9 3675 -7.0 7.7 35.1 40.6 19.0 2.4 2.50 321 +96060100.ABR 2.75 12.6 2276 -13.4 6.2 22.4 27.2 24.6 1.3 2.20 370 +96060200.JAN 2.75 16.1 1863 -7.5 5.5 12.7 20.3 11.3 0.4 0.60 168 +96060300.SGF 2.75 11.7 2739 -15.9 7.1 26.4 35.9 14.8 2.3 2.10 90 +96061200.AMA 2.75 11.9 3079 -8.8 8.0 24.3 30.2 18.3 1.5 1.90 373 +96061300.FFC 2.75 13.7 2727 -9.1 5.7 12.9 13.1 12.9 0.6 1.00 152 +96061400.LBF 2.75 12.4 2384 -8.6 6.5 15.4 25.0 12.0 0.6 2.20 102 +96062500.AMA 2.75 13.9 3778 -9.4 8.5 22.9 28.2 7.0 2.3 1.90 123 +96072400.DDC 2.75 14.3 3068 -11.1 8.6 27.6 36.6 16.8 2.8 2.70 203 +96080100.DEN 2.75 13.5 3920 -7.8 8.5 22.6 26.3 15.0 1.9 2.10 276 +96083000.DEN 2.75 11.7 2478 -9.1 7.8 26.2 28.9 17.6 1.3 2.30 86 +96092100.FTD 2.75 16.4 2870 -9.4 6.5 26.4 32.6 15.7 1.8 -999.00 136 +97012500.SIL 2.75 13.0 2563 -16.5 7.5 18.3 25.8 18.3 1.8 2.80 145 +97032900.BNA 2.75 11.1 1618 -15.6 7.4 25.2 15.3 18.1 1.3 3.00 389 +97041100.MAF 2.75 11.9 4076 -15.0 8.2 23.7 30.7 20.8 3.3 2.10 260 +97042100.SGF 2.75 9.4 1773 -16.5 7.4 25.4 23.9 23.3 1.2 2.00 405 +97052700.OUN 2.75 18.0 5907 -8.7 6.4 17.5 23.9 17.6 2.5 3.70 271 +97052700.SGF 2.75 16.3 4440 -9.9 7.0 22.6 25.0 16.3 2.7 2.60 276 +97061200.TOP 2.75 12.6 1552 -11.7 7.1 23.5 30.2 11.6 0.9 0.90 141 +97061600.DDC 2.75 13.5 3187 -10.9 7.7 23.3 39.3 11.9 2.0 2.70 26 +98040900.BMX 2.75 15.8 3341 -13.9 7.9 40.1 51.5 25.9 5.5 2.00 296 +98052500.DDC 2.75 12.5 2688 -12.1 7.2 27.9 32.0 13.7 1.9 2.70 180 +98061400.OUN 2.75 20.5 6689 -6.5 7.7 32.8 42.7 17.9 5.4 4.00 262 +99060300.AMA 2.75 15.6 5087 -10.3 8.7 18.6 49.2 15.5 3.1 2.50 289 +99061200.AMA 2.75 14.7 4400 -10.3 7.7 26.2 36.6 18.8 3.2 2.40 210 +99061900.DDC 2.75 13.9 4141 -11.3 7.3 22.5 29.0 13.4 2.5 2.40 346 +99070100.MAF 2.75 13.7 3989 -2.5 7.5 14.9 13.7 10.5 0.4 2.00 146 +99081800.LBF 2.75 18.3 5554 -8.9 7.8 23.7 25.1 10.7 3.9 3.40 143 +00021400.LZK 2.50 10.7 2091 -20.3 6.4 21.1 24.5 22.2 1.5 2.10 245 +00032700.SGF 2.50 9.8 1766 -18.3 7.5 34.3 43.9 21.4 1.9 2.20 350 +00050100.FWD 2.50 14.3 3593 -13.1 7.2 17.3 18.5 19.0 2.0 1.70 401 +00051200.DVN 2.50 15.6 4865 -8.1 7.4 24.8 24.9 19.3 2.7 3.40 225 +00052300.MHX 2.50 15.1 3613 -13.5 6.5 15.3 26.5 10.5 1.7 2.40 79 +00061000.RAP 2.50 13.2 3610 -8.1 7.8 14.3 21.1 11.9 1.0 2.10 70 +00062400.OAX 2.50 17.5 4783 -8.7 7.2 18.7 28.2 14.9 2.3 2.30 195 +00070200.ABR 2.50 17.8 5952 -10.3 8.4 12.2 23.4 8.1 2.7 3.90 147 +00070600.LBF 2.50 18.2 5506 -7.1 8.3 25.3 35.5 11.8 3.5 3.50 155 +00080500.BIS 2.50 17.0 4830 -8.7 6.9 17.2 22.9 4.0 2.0 3.30 86 +00091100.MPX 2.50 16.6 4554 -10.3 7.0 22.0 24.0 18.4 2.9 3.20 271 +01041700.MAF 2.50 13.9 4552 -12.1 7.5 16.2 30.6 8.0 2.2 2.20 100 +01042200.DDC 2.50 13.3 3749 -12.1 7.3 33.4 45.3 24.2 3.5 2.70 510 +01050100.OAX 2.50 10.4 2265 -16.9 7.7 17.4 17.0 19.2 1.3 2.20 226 +01050400.MAF 2.50 13.7 3866 -11.3 7.2 12.8 33.8 11.4 1.3 2.70 101 +01052500.BMX 2.50 11.9 2388 -14.9 6.7 29.2 27.4 23.5 2.0 2.70 436 +01052620.LMN 2.50 14.1 4355 -13.5 6.4 27.3 33.2 20.2 3.5 2.90 233 +01070400.RAP 2.50 13.2 3145 -11.1 8.3 25.2 26.1 12.9 2.3 2.60 144 +01070500.LBF 2.50 14.5 3571 -7.7 7.7 26.0 27.0 17.1 1.9 2.90 313 +01082400.AMA 2.50 15.4 4318 -6.7 7.4 24.0 28.1 21.0 1.9 2.80 158 +01101000.DDC 2.50 12.9 3299 -9.7 6.4 18.8 18.3 16.4 1.2 2.50 275 +02040300.JAX 2.50 14.8 3327 -14.3 7.2 11.5 30.9 11.8 1.4 1.50 80 +02041212.AMA 2.50 12.2 2907 -13.7 7.5 20.4 25.1 14.6 1.8 2.80 184 +02041900.DVN 2.50 12.3 2861 -14.5 8.2 14.1 20.0 15.9 1.4 2.50 213 +02051700.AMA 2.50 13.8 5036 -12.7 8.7 21.9 26.5 17.4 4.0 2.20 216 +02072500.ABR 2.50 15.0 3995 -11.5 7.9 28.3 28.6 13.8 3.7 3.00 207 +03051500.SHV 2.50 16.8 4260 -9.9 6.8 33.7 42.9 16.3 3.9 0.80 246 +03062200.RAP 2.50 10.6 3380 -13.7 8.0 27.5 42.2 18.7 2.6 1.50 189 +04032718.OUN 2.50 12.6 2825 -14.9 7.3 21.1 32.3 11.5 2.0 2.10 199 +04040400.EPZ 2.50 12.1 4482 -17.9 8.2 29.1 25.4 11.6 5.5 2.10 203 +04080700.ABR 2.50 13.1 2792 -9.3 6.7 21.0 25.9 12.1 1.1 2.50 240 +04091500.LBF 2.50 12.8 1474 -10.7 8.0 35.4 39.8 20.5 1.4 -999.00 306 +04102400.JAN 2.50 15.8 1938 -6.9 5.3 30.8 27.8 19.3 0.8 0.60 328 +05050322.XMR 2.50 13.4 2165 -13.9 7.6 23.3 41.5 21.5 1.7 1.20 82 +05050700.MAF 2.50 10.7 3257 -12.3 8.0 20.3 24.6 11.2 1.7 1.60 48 +06050900.JAN 2.50 16.1 3303 -13.3 7.3 28.4 39.9 14.9 3.5 1.90 170 +06052600.SGF 2.50 13.9 3409 -9.5 6.5 18.9 23.2 18.8 1.3 2.50 262 +06061400.RAP 2.50 11.5 2691 -7.7 8.3 17.3 24.5 15.3 0.8 1.60 248 +06062500.DNR 2.50 7.1 987 -11.5 8.9 26.1 26.5 12.5 0.4 0.90 -172 +06071123.LMN 2.50 16.5 2996 -5.9 6.7 12.6 11.2 9.4 0.6 0.60 110 +08110600.OUN 2.50 11.4 1623 -12.5 6.9 29.8 32.7 24.8 1.1 2.40 317 +90060300.PAH 2.50 17.8 3663 -7.6 7.0 24.0 25.9 29.8 2.0 0.60 367 +90060700.DEN 2.50 10.9 2393 -8.2 9.0 26.3 23.9 19.6 1.2 1.60 170 +90061500.DDC 2.50 16.0 4667 -6.5 7.9 28.4 30.1 15.7 2.6 2.70 306 +90062200.ALB 2.50 12.6 1833 -14.1 6.7 32.5 29.1 20.6 1.7 1.60 203 +90070200.GSO 2.50 14.8 3963 -10.0 7.2 26.0 16.3 10.7 2.6 2.20 100 +90083100.CHS 2.50 16.0 2477 -8.5 6.5 17.0 17.7 8.3 0.9 0.60 67 +91041900.SEP 2.50 17.6 5996 -13.2 7.4 13.5 44.8 13.0 3.3 3.10 24 +91042100.AYS 2.50 11.8 2563 -16.9 7.4 13.4 30.0 10.3 1.2 1.70 76 +91050800.MAF 2.50 11.2 3415 -14.8 8.4 31.1 36.7 25.4 3.5 1.60 280 +91051200.AMA 2.50 14.3 4539 -10.8 8.5 12.4 14.9 16.7 1.7 2.30 208 +91052700.LBF 2.50 11.9 2669 -13.4 7.9 13.9 32.3 13.0 1.1 2.10 35 +91053100.DEN 2.50 12.0 3551 -12.1 9.5 27.3 45.8 10.7 3.2 1.90 149 +91071800.STC 2.50 18.2 4956 -8.7 7.3 18.7 20.1 21.9 2.5 2.50 104 +91080200.CAR 2.50 12.3 1891 -13.7 6.3 19.6 33.3 11.9 0.9 1.50 223 +92030400.SEP 2.50 12.7 2676 -15.3 7.7 20.1 27.2 9.2 1.9 2.30 133 +92041600.AMA 2.50 11.1 3362 -13.4 7.6 16.0 17.8 12.0 1.5 1.70 127 +92070200.DEN 2.50 11.7 2313 -11.2 8.0 27.6 29.9 20.0 1.6 2.50 362 +93033000.DRT 2.50 12.7 2680 -13.4 8.2 39.6 44.0 26.0 3.5 2.80 411 +93061400.TOP 2.50 16.5 4195 -8.5 7.7 12.5 17.8 10.7 1.3 2.80 65 +93070200.HON 2.50 14.6 2619 -11.3 7.0 28.3 40.3 12.6 2.0 0.80 143 +93070300.TOP 2.50 18.5 4019 -7.2 7.1 15.8 16.4 15.2 1.4 0.70 202 +94032800.AHN 2.50 14.4 2627 -10.5 6.2 34.5 24.7 30.4 2.0 0.70 518 +94062600.TOP 2.50 16.4 4265 -8.6 8.4 25.2 45.9 21.6 3.0 2.90 418 +95050800.FTD 2.50 16.5 2700 -10.4 7.7 30.8 30.8 24.5 2.6 0.80 407 +95050800.LCH 2.50 17.9 3259 -9.9 7.1 16.7 31.1 10.2 1.6 0.60 119 +95050900.TOP 2.50 10.0 1495 -19.3 6.9 19.3 22.8 21.2 0.9 1.20 126 +95051600.MAF 2.50 13.6 3261 -7.8 8.4 21.7 28.8 10.3 1.5 1.80 134 +95051900.GSO 2.50 13.4 1758 -11.8 7.9 25.3 27.1 23.6 1.3 -999.00 83 +95052912.MAF 2.50 13.0 1617 -11.3 7.5 27.6 22.0 13.7 1.2 1.90 284 +95060700.DEN 2.50 12.3 3137 -10.8 9.2 37.2 35.9 20.7 3.4 2.00 284 +95061600.TFX 2.50 13.0 3142 -12.0 8.4 27.7 35.6 23.8 2.7 2.30 277 +95081212.MPX 2.50 19.1 3361 -6.3 7.2 20.6 36.8 23.0 1.4 -999.00 164 +96030700.TLH 2.50 15.4 2615 -10.4 6.0 20.9 23.7 20.7 1.2 0.60 320 +96042200.FTD 2.50 12.0 1872 -12.6 8.2 27.1 34.0 18.3 1.5 -999.00 298 +96051800.MPX 2.50 16.3 4406 -8.9 8.2 13.0 23.4 20.7 1.6 3.40 259 +96060100.DDC 2.50 13.3 2888 -10.9 8.3 13.3 19.3 13.9 1.1 2.50 111 +96060300.AMA 2.50 11.0 2356 -10.5 6.9 27.6 31.6 18.0 1.2 2.00 256 +96061200.LBF 2.50 11.7 2310 -9.9 7.5 16.7 22.2 12.7 0.8 2.40 122 +96062100.DEN 2.50 15.2 5603 -8.1 9.6 27.5 33.4 8.8 4.4 2.20 155 +96071900.GRB 2.50 20.7 4746 -7.5 6.4 26.3 26.2 20.0 3.0 0.70 164 +96072200.LBF 2.50 18.4 4756 -6.5 7.2 20.0 29.4 19.0 1.9 2.10 94 +98071100.DDC 2.50 18.9 4323 -4.3 6.2 12.7 15.2 16.0 0.7 0.60 230 +00061300.OAX 2.25 17.7 5453 -11.5 8.5 15.8 19.3 12.9 3.5 4.00 206 +00030300.FWD 2.00 12.3 2589 -14.3 6.2 33.4 29.1 20.2 2.2 2.70 239 +00031600.LMN 2.00 9.5 1478 -17.3 7.1 22.1 10.9 12.9 0.9 2.20 164 +00032800.JAX 2.00 12.5 2135 -14.5 6.3 29.1 24.7 25.7 1.7 0.90 268 +00061200.AMA 2.00 16.8 5720 -10.3 8.3 16.1 28.7 15.7 3.2 2.70 88 +00061300.LBF 2.00 13.9 4790 -9.9 8.3 16.6 18.6 9.9 2.1 2.00 159 +00061500.JAX 2.00 17.9 4801 -8.7 6.4 6.2 13.3 3.6 0.7 1.10 55 +00071100.GGW 2.00 14.2 3230 -11.3 6.9 30.1 48.1 16.9 2.6 3.00 88 +00071500.BIS 2.00 16.5 5132 -9.5 8.1 27.6 34.1 14.6 4.3 2.70 152 +00072300.LBF 2.00 13.2 2926 -11.5 7.1 25.2 27.3 13.6 1.9 2.80 91 +01042200.AMA 2.00 14.1 6059 -15.3 9.2 35.7 38.3 16.6 10.2 3.30 320 +01042200.MAF 2.00 13.7 4543 -12.3 8.4 27.4 36.2 12.3 4.2 2.20 164 +01050600.FWD 2.00 15.4 3092 -12.7 6.8 32.7 34.4 19.4 3.2 2.10 170 +01050700.SGF 2.00 14.5 4025 -13.7 6.1 8.8 17.0 10.5 1.0 3.10 202 +01050702.LZK 2.00 14.2 2759 -12.9 5.9 18.7 26.3 7.3 1.3 2.00 77 +01051200.OUN 2.00 13.2 3098 -13.9 7.1 10.0 10.8 8.7 1.0 2.10 132 +01052700.DDC 2.00 11.3 2853 -12.1 6.7 30.6 37.1 19.3 1.9 1.80 184 +01052800.OUN 2.00 16.5 4910 -10.7 7.6 29.7 38.8 16.9 4.7 3.10 113 +01053000.DDC 2.00 15.2 2892 -12.1 8.0 19.5 26.6 14.8 2.0 1.80 388 +01053100.FWD 2.00 15.8 4571 -12.3 8.7 12.4 20.6 13.7 2.3 3.90 106 +01053100.LCH 2.00 17.4 3988 -8.3 7.0 8.3 13.9 0.8 0.8 2.40 8 +01062100.DNR 2.00 10.8 2544 -11.5 7.5 21.4 23.2 20.5 1.2 2.10 192 +01063000.FWD 2.00 16.8 4122 -9.7 6.9 11.2 19.2 9.2 1.2 1.60 133 +01071300.GGW 2.00 14.5 3042 -10.1 8.1 16.5 34.2 7.9 1.4 3.50 19 +01072000.RAP 2.00 15.1 4486 -8.7 8.4 15.4 26.3 10.9 1.8 2.40 71 +01082300.TOP 2.00 16.7 4361 -9.7 7.6 9.9 23.0 13.6 1.3 2.30 192 +01082400.DDC 2.00 16.4 4283 -7.5 7.7 14.7 16.3 11.9 1.4 3.10 77 +01090800.OUN 2.00 17.6 4351 -8.7 7.8 26.1 21.2 21.8 3.3 2.30 151 +01090800.TOP 2.00 17.8 4174 -11.3 8.1 26.2 26.7 24.5 4.2 1.70 274 +01101000.OUN 2.00 15.6 3485 -12.9 7.9 24.4 28.2 23.9 3.2 2.50 447 +02041800.OAX 2.00 11.4 2113 -14.5 7.6 33.9 35.5 24.0 2.1 2.20 376 +02052800.LZK 2.00 15.1 3284 -12.3 6.5 4.4 12.3 2.6 0.4 0.60 13 +02061300.DVN 2.00 17.3 3501 -11.9 7.4 26.3 38.7 10.0 3.3 1.10 100 +02062600.MPX 2.00 19.6 6228 -9.7 7.1 18.6 21.8 9.2 3.7 3.20 120 +03051900.TBW 2.00 17.1 3797 -10.9 6.8 5.9 5.0 4.0 0.7 1.00 -4 +04043000.JAN 2.00 13.6 1469 -12.7 6.5 27.4 22.8 18.1 1.1 0.60 184 +04052200.DDC 2.00 13.5 3809 -9.7 8.1 21.0 27.0 20.3 2.0 2.20 297 +04062400.GRB 2.00 10.4 1604 -16.9 6.3 25.3 36.9 16.4 1.1 2.40 128 +04072300.TOP 2.00 16.0 3276 -7.7 6.4 15.8 19.6 11.4 1.0 0.70 158 +04082400.BIS 2.00 13.4 2596 -11.1 7.6 21.3 22.3 16.4 1.5 2.20 208 +04091200.GRB 2.00 12.3 2256 -14.9 7.2 14.7 24.8 11.6 1.0 1.00 64 +05022100.SGF 2.00 9.1 1128 -18.9 6.8 27.7 36.6 17.1 0.9 1.90 97 +05050700.LBF 2.00 9.7 3058 -14.3 8.2 12.5 21.7 6.1 1.0 1.40 135 +05050900.LMN 2.00 12.0 2971 -16.1 7.8 15.1 29.6 15.9 1.6 2.20 290 +06040700.TOP 2.00 11.0 2249 -15.1 7.4 35.7 27.3 15.8 2.3 2.10 206 +06041600.TOP 2.00 12.2 2191 -12.9 8.2 37.2 42.6 28.5 2.5 2.90 533 +06050800.DDC 2.00 9.5 1674 -17.1 8.9 16.8 27.8 16.1 1.0 2.60 248 +06051600.MFL 2.00 15.8 2473 -11.1 6.8 26.6 21.2 18.7 1.9 0.60 227 +06052400.DDC 2.00 10.2 1607 -8.7 7.6 22.4 19.3 17.0 0.6 1.80 189 +06061400.TFX 2.00 12.3 2827 -9.7 8.1 15.9 28.9 14.3 1.0 2.10 65 +06062700.ILX 2.00 12.2 2025 -15.7 6.4 3.5 11.7 5.2 0.2 1.20 15 +06090100.DDC 2.00 12.2 1972 -7.7 7.1 15.6 27.4 13.9 0.5 1.60 363 +89052800.ELP 2.00 11.2 2569 -6.8 8.0 11.3 17.1 14.9 0.4 1.40 232 +89071100.HON 2.00 15.7 3126 -7.0 6.9 14.6 18.6 12.3 0.8 1.20 151 +89082100.LBF 2.00 14.8 3307 -9.1 7.1 28.0 44.7 8.0 2.1 3.00 83 +89103000.OUN 2.00 12.5 2163 -14.7 6.6 18.0 18.1 13.1 1.1 1.60 195 +90060900.PIT 2.00 16.7 4095 -9.5 6.7 18.1 13.6 18.8 1.9 1.00 236 +90061400.PIA 2.00 18.1 3570 -7.0 7.0 16.5 23.4 9.5 1.2 0.60 134 +90072600.TBW 2.00 18.4 4330 -6.3 5.7 3.5 8.5 6.3 0.2 0.60 7 +90091400.STC 2.00 13.1 2123 -10.9 7.4 27.8 39.0 23.2 1.5 -999.00 564 +98033100.FWD 2.00 13.3 2873 -14.3 7.2 29.6 57.5 17.6 2.7 2.90 93 +98062500.APX 2.00 15.8 3453 -11.3 7.3 28.9 35.4 21.9 3.1 3.30 348 +98063000.BUF 2.00 14.5 2615 -10.5 6.1 23.6 28.2 8.5 1.4 1.70 86 +99050400.DRT 2.00 17.4 5609 -10.1 7.5 40.5 38.9 21.2 7.1 4.56 342 +99053100.TOP 2.00 13.1 2215 -10.9 6.8 18.6 12.2 14.7 1.0 1.40 189 +00033000.SHV 1.75 15.4 3548 -15.9 7.6 31.6 50.3 23.8 5.0 2.80 323 +00051200.TOP 1.75 16.7 5329 -7.3 6.5 25.1 29.2 21.0 2.5 3.70 216 +00051900.FWD 1.75 16.2 3610 -10.9 7.4 25.2 32.9 6.7 2.8 0.64 75 +00052900.GSO 1.75 14.3 1988 -11.1 6.2 28.7 35.1 17.6 1.3 1.20 139 +00060300.ABQ 1.75 9.4 1267 -8.7 8.2 10.3 17.5 7.6 0.2 1.40 70 +00061100.AMA 1.75 14.0 3932 -7.9 7.8 14.8 19.1 9.4 1.2 2.10 128 +00062200.DDC 1.75 14.3 3602 -8.7 7.0 15.4 23.4 16.2 1.2 2.90 157 +00062400.DDC 1.75 14.8 3499 -7.3 7.7 23.2 30.2 12.0 1.6 2.70 237 +00062400.LBF 1.75 14.8 4723 -9.7 8.6 17.4 29.6 9.8 2.4 2.00 126 +00070600.GGW 1.75 11.7 2743 -14.1 8.5 29.6 40.4 13.0 2.7 1.90 165 +00071300.ABR 1.75 13.6 2305 -8.7 6.7 29.3 44.3 21.7 1.3 2.00 278 +00071500.IAD 1.75 13.9 2186 -12.3 6.8 17.8 17.7 9.3 1.1 2.00 118 +00071800.AMA 1.75 14.4 3660 -4.7 6.9 9.1 7.7 5.9 0.4 1.50 79 +00072100.FFC 1.75 14.3 2149 -6.9 6.4 9.2 10.4 9.1 0.3 0.60 63 +00072200.LBF 1.75 12.8 3031 -11.5 7.6 27.5 23.7 14.5 2.2 2.60 247 +00072500.ABR 1.75 15.6 4195 -12.3 8.9 15.3 19.8 10.9 2.6 3.10 113 +00072600.MFL 1.75 18.3 4079 -8.5 6.6 5.2 5.6 2.4 0.5 0.60 18 +00072600.MPX 1.75 15.3 3240 -13.1 7.6 21.4 12.4 10.1 2.5 3.00 139 +00072700.LBF 1.75 18.1 5178 -8.9 8.7 17.5 26.1 12.2 3.0 2.20 351 +00072900.GSO 1.75 14.3 2081 -9.7 6.2 6.2 16.1 6.5 0.3 0.60 43 +00073100.JAX 1.75 17.6 3581 -8.9 6.0 6.6 5.5 4.7 0.5 0.60 27 +00080200.GGW 1.75 10.8 2057 -8.9 8.0 24.6 35.3 15.0 0.9 1.80 148 +00080800.OAX 1.75 16.3 4679 -8.1 7.8 16.4 25.1 10.8 1.9 3.00 185 +00090400.LBF 1.75 11.2 2441 -9.5 7.8 21.4 24.1 18.5 1.0 1.50 309 +01061800.TBW 1.75 15.9 3469 -9.7 5.9 4.6 6.6 1.5 0.3 0.80 23 +01062000.DTX 1.75 14.9 3813 -12.5 6.9 8.4 17.6 15.0 1.0 2.80 -45 +02041600.PIT 1.75 11.5 1856 -14.9 7.3 17.9 18.1 15.8 1.0 1.60 245 +02041800.FWD 1.75 15.9 3343 -9.9 6.4 12.4 34.6 5.6 1.0 -999.00 61 +02050400.CHS 1.75 15.9 3255 -10.7 6.6 21.1 29.5 16.6 1.8 0.90 19 +02052800.LBF 1.75 11.3 3387 -15.1 9.0 18.8 30.1 11.6 2.3 1.90 184 +02052800.MAF 1.75 12.7 3115 -11.1 8.0 20.6 24.7 16.4 1.7 2.10 103 +02052900.TOP 1.75 12.8 2661 -13.7 6.8 4.2 10.7 7.3 0.3 1.30 48 +02060402.CHS 1.75 13.7 2637 -10.1 7.6 9.7 10.8 11.7 0.6 0.80 33 +02060700.MPX 1.75 9.2 1952 -15.1 7.7 22.8 25.3 16.2 1.1 1.50 758 +02061200.TOP 1.75 19.6 5029 -8.9 7.6 21.1 24.7 15.6 3.3 0.70 224 +02062600.DTX 1.75 14.5 3079 -8.9 6.1 1.9 7.2 1.4 0.1 0.70 -1 +02070200.AMA 1.75 12.2 2393 -6.5 7.3 18.4 11.3 20.8 0.6 1.60 353 +02072518.TBW 1.75 18.9 4523 -8.5 6.7 7.8 6.3 2.0 0.9 0.60 7 +02072800.DDC 1.75 12.9 2480 -5.3 7.4 10.6 11.1 10.7 0.3 1.40 155 +02082300.LBF 1.75 17.8 6193 -10.1 8.0 12.9 28.1 3.8 2.7 3.10 10 +03031500.BMX 1.75 10.9 1555 -19.1 7.4 8.5 21.2 12.3 0.5 1.30 94 +03032600.LZK 1.75 11.3 2073 -18.5 6.7 14.3 15.4 9.5 1.0 2.20 67 +03032600.SHV 1.75 11.3 1723 -18.3 8.5 17.7 18.0 8.0 1.3 1.40 108 +03042900.AMA 1.75 9.6 2549 -14.5 8.3 25.3 33.7 16.5 1.8 1.60 237 +03042900.MAF 1.75 9.8 2325 -13.5 8.4 23.4 21.0 15.5 1.4 1.40 165 +03043000.BNA 1.75 12.4 3359 -15.3 7.2 4.3 5.5 4.1 0.5 1.30 30 +03050200.FFC 1.75 13.7 3289 -13.5 6.5 9.8 9.5 7.5 0.9 0.90 55 +03050700.BMX 1.75 17.4 4489 -10.5 7.0 26.5 28.4 12.2 3.6 2.10 101 +03051312.FWD 1.75 12.6 1814 -10.3 7.3 17.7 24.7 16.8 0.7 1.20 205 +03060400.LCH 1.75 19.7 4988 -6.7 5.8 13.3 17.2 7.3 1.2 0.60 44 +03061100.OUN 1.75 14.5 3045 -9.3 7.2 17.8 13.1 12.1 1.3 2.00 135 +03061300.LBF 1.75 12.0 2759 -11.3 7.2 15.4 16.3 13.0 1.0 2.60 179 +03061500.FWD 1.75 14.3 2433 -11.3 6.9 12.1 2.8 5.3 0.8 1.70 32 +03061500.LBF 1.75 10.7 1717 -11.3 6.3 10.6 12.0 6.6 0.3 1.70 51 +03061700.FFC 1.75 16.3 2826 -8.5 6.2 7.0 13.0 5.5 0.4 0.60 32 +03061700.RAP 1.75 10.1 1501 -11.1 7.1 5.7 17.5 2.9 0.2 1.90 92 +03062100.MAF 1.75 10.7 1489 -7.7 7.0 14.5 29.4 6.5 0.3 1.90 74 +03062500.MAF 1.75 16.5 4621 -6.7 7.7 8.7 16.8 11.9 0.8 2.10 45 +03090500.DRA 1.75 11.3 1966 -8.3 8.1 3.7 9.2 5.0 0.1 1.20 33 +03091000.MAF 1.75 12.9 3038 -7.3 7.4 8.3 12.7 8.6 0.4 2.10 79 +03091100.DDC 1.75 14.8 3112 -7.5 6.9 22.3 30.8 15.7 1.3 2.20 259 +03092100.DDC 1.75 10.2 1784 -10.9 7.3 20.1 23.8 21.8 0.7 2.00 257 +04022512.LIX 1.75 10.3 837 -17.7 6.7 31.9 48.7 25.2 0.8 2.40 340 +04030100.TOP 1.75 6.3 487 -28.7 8.7 32.0 35.0 20.1 0.6 1.60 171 +04032100.FFC 1.75 7.9 942 -17.3 7.5 12.0 13.4 11.3 0.3 1.10 154 +04032100.MAF 1.75 10.0 2053 -12.9 7.9 9.6 21.3 5.5 0.5 1.50 39 +04040700.FWD 1.75 10.4 835 -16.3 6.7 28.3 27.2 11.8 0.6 1.00 87 +04042900.DRT 1.75 12.4 1834 -12.9 6.4 20.0 31.6 16.1 0.9 1.30 217 +04051000.LBF 1.75 11.6 4026 -13.9 9.0 13.9 17.5 3.0 1.9 1.60 38 +04051600.EPZ 1.75 10.4 2888 -11.5 8.7 12.2 7.0 4.1 0.9 1.60 93 +04071200.TOP 1.75 17.7 3709 -7.3 6.8 13.6 9.1 11.9 1.1 0.60 204 +04081900.ILX 1.75 15.1 3685 -9.1 5.9 19.9 28.2 19.7 1.4 1.30 371 +04082600.BIS 1.75 12.5 3083 -13.1 7.1 16.6 18.9 13.9 1.4 2.40 101 +04092300.AMA 1.75 12.8 1887 -10.1 6.7 23.5 21.8 19.6 0.9 1.30 374 +04092500.AMA 1.75 11.2 2465 -11.9 6.9 15.1 24.9 12.0 0.8 2.00 38 +05030400.AMA 1.75 4.3 697 -23.3 8.7 22.7 36.0 13.1 0.3 1.30 142 +05031500.TLH 1.75 12.4 1338 -14.1 7.1 28.4 53.2 12.7 1.1 1.10 41 +05082400.RAP 1.75 11.3 2040 -11.3 8.6 11.6 19.1 13.6 0.6 -999.00 116 +05082700.AMA 1.75 13.6 2765 -5.5 7.4 11.5 11.5 10.0 0.4 2.00 31 +06040400.CHS 1.75 11.6 2165 -16.9 8.1 31.6 39.3 26.6 2.6 2.60 207 +06040900.JAX 1.75 13.6 2254 -13.7 6.6 20.4 22.0 19.5 1.3 2.10 178 +06041300.LZK 1.75 11.0 1294 -13.5 7.2 12.6 20.8 6.0 0.4 -999.00 34 +06041600.IAD 1.75 10.2 2181 -16.7 7.0 27.7 43.3 16.6 1.7 1.80 48 +06041600.WAL 1.75 10.9 2234 -16.5 7.2 17.7 48.2 17.2 1.2 2.30 81 +06041900.BMX 1.75 12.0 1805 -11.1 6.3 14.2 22.0 5.4 0.5 0.70 62 +06042300.DTX 1.75 6.7 609 -24.1 7.4 17.7 27.4 14.0 0.3 1.80 50 +06050400.SHV 1.75 15.0 3310 -12.1 6.7 8.0 14.3 5.8 0.8 0.60 85 +06050600.LCH 1.75 14.9 2655 -10.3 5.8 23.1 25.2 15.8 1.3 0.60 64 +06050900.DDC 1.75 9.6 1630 -13.3 7.9 27.2 27.8 15.1 1.1 2.00 179 +06050912.SGF 1.75 12.9 2144 -12.9 6.7 20.3 18.4 10.1 1.2 1.80 144 +06051100.LCH 1.75 18.5 4564 -12.3 8.9 22.9 22.0 12.2 5.1 1.70 38 +06051412.SHV 1.75 12.4 2270 -14.9 7.8 16.8 26.2 15.5 1.3 2.80 84 +06051800.ILX 1.75 8.0 713 -17.5 6.9 28.8 29.6 16.9 0.5 2.10 226 +06052300.SGF 1.75 14.4 3032 -11.9 7.1 9.0 15.5 8.3 0.8 1.60 91 +06052500.TLH 1.75 14.8 2619 -10.5 6.4 7.3 7.5 9.2 0.5 0.60 56 +06052700.GSO 1.75 12.7 2136 -9.9 5.8 17.4 21.2 17.1 0.6 1.50 217 +06061800.FWD 1.75 14.3 2286 -10.9 8.2 13.9 24.6 11.6 1.0 2.30 134 +06062100.CHS 1.75 17.0 4007 -10.1 6.4 12.9 19.3 7.1 1.3 0.70 66 +06062400.BIS 1.75 8.3 942 -15.3 7.0 22.7 27.2 16.7 0.5 1.60 167 +06062400.LBF 1.75 10.7 1400 -12.1 7.4 26.6 25.0 13.6 0.8 2.10 272 +06062900.DDC 1.75 7.7 919 -10.1 7.7 17.9 17.9 1.9 0.2 0.80 16 +06070100.BNA 1.75 13.5 2750 -11.5 6.7 10.8 7.8 11.5 0.7 1.50 41 +06071200.DDC 1.75 11.8 1068 -8.7 8.0 15.4 21.8 11.8 0.3 1.00 12 +06071300.DDC 1.75 12.8 1575 -5.9 6.9 12.7 13.7 7.4 0.2 0.80 99 +06071900.JAN 1.75 15.2 2280 -6.9 6.5 11.1 11.1 9.0 0.4 0.60 88 +06072200.LZK 1.75 14.1 2480 -8.1 7.3 6.9 5.8 7.7 0.3 0.60 67 +06072600.TUS 1.75 11.2 1725 -5.7 7.4 15.0 18.3 8.5 0.3 0.90 36 +06080700.TOP 1.75 12.5 1693 -6.7 7.0 7.6 6.8 3.2 0.2 0.60 35 +06080900.TUS 1.75 11.9 1640 -4.7 6.6 5.1 8.2 6.6 0.1 0.60 25 +06082100.ABR 1.75 12.5 1851 -9.9 6.8 21.9 39.5 15.5 0.8 2.10 257 +06082300.RAP 1.75 8.3 1757 -9.5 9.1 21.3 28.7 12.7 0.6 0.80 108 +06091100.AMA 1.75 12.5 1812 -8.9 7.1 14.9 33.3 13.7 0.5 2.10 51 +06091400.EPZ 1.75 11.7 1589 -10.3 7.6 17.4 23.7 13.1 0.6 2.00 167 +06091600.DDC 1.75 14.4 2738 -6.9 6.6 29.7 39.0 21.6 1.3 2.20 378 +06100400.MPX 1.75 13.7 3011 -12.1 7.4 34.0 30.2 23.9 3.0 2.90 514 +89060100.TOP 1.75 15.8 2810 -10.9 7.9 10.6 26.9 7.9 1.0 -999.00 90 +89060600.GSO 1.75 14.8 2078 -9.1 5.9 8.1 6.7 10.0 0.3 0.60 93 +89060600.JAN 1.75 16.3 3336 -11.3 6.7 20.8 25.3 10.4 2.0 0.80 103 +89061400.GGG 1.75 17.2 3674 -11.0 6.9 15.4 23.3 4.3 1.7 -999.00 61 +89061900.BNA 1.75 13.9 1755 -10.2 6.3 9.7 7.8 6.8 0.4 0.60 86 +89062200.AHN 1.75 15.5 1517 -7.6 5.8 12.6 15.8 14.9 0.3 0.60 112 +89062600.IAD 1.75 16.2 3138 -8.6 6.1 14.3 23.0 12.1 0.9 0.70 108 +89062700.PIA 1.75 15.7 2460 -7.9 6.6 13.2 12.4 5.3 0.6 0.70 87 +89062800.BUF 1.75 15.2 2385 -8.2 5.3 20.1 22.3 9.8 0.7 0.60 82 +89070800.PIT 1.75 15.4 2732 -9.1 6.8 17.5 15.7 12.8 1.1 1.50 81 +89071300.DDC 1.75 15.1 3239 -4.9 6.9 5.1 7.2 7.9 0.2 1.20 81 +89071300.OUN 1.75 19.0 4127 -5.4 6.9 13.8 19.1 13.0 1.0 -999.00 196 +89071500.LBF 1.75 14.3 2675 -6.9 6.1 6.1 8.4 5.5 0.2 0.60 27 +89072900.HON 1.75 14.0 2092 -5.9 6.0 12.0 17.9 6.4 0.3 0.80 105 +89073000.JAN 1.75 18.0 3940 -7.7 6.7 1.9 3.1 2.1 0.2 0.60 9 +89080600.UMN 1.75 19.0 5563 -6.9 7.0 11.7 11.3 8.8 1.4 0.80 99 +89081300.TBW 1.75 16.4 2617 -8.6 6.0 18.1 18.2 10.1 1.0 0.60 65 +89082500.RAP 1.75 10.6 1899 -7.1 7.6 7.7 7.6 2.7 0.2 1.00 55 +89082700.OMA 1.75 17.8 3452 -6.6 6.1 19.5 33.1 15.2 1.1 0.60 142 +89082800.UMN 1.75 17.3 3603 -6.1 6.5 7.8 5.6 2.6 0.5 0.60 28 +89082900.TOP 1.75 19.8 4842 -6.3 6.6 15.4 21.1 13.2 1.5 0.60 156 +89083000.OUN 1.75 17.3 3864 -5.6 6.0 13.1 24.2 11.8 0.7 0.60 112 +89083100.DDC 1.75 16.5 2956 -5.7 6.6 13.6 22.5 13.3 0.6 0.80 346 +89090200.1M1 1.75 18.3 3818 -4.8 6.1 16.2 14.1 8.2 0.8 0.60 64 +89090800.DEN 1.75 10.1 1350 -6.8 8.3 24.1 24.0 15.4 0.4 2.00 366 +90022800.MAF 1.75 9.7 607 -16.2 6.6 16.4 23.8 5.1 0.2 1.20 55 +90031000.AMA 1.75 11.1 2468 -16.0 8.6 13.1 18.2 9.9 1.2 1.90 106 +90031300.OUN 1.75 12.7 3211 -13.6 7.8 24.2 18.1 19.4 2.5 2.80 286 +90040200.BRO 1.75 16.2 3494 -9.3 7.1 25.7 37.2 15.2 2.3 0.90 65 +90042200.OUN 1.75 11.1 2748 -13.3 6.6 12.2 14.9 7.3 0.8 2.00 48 +90042600.DRT 1.75 14.6 3699 -13.8 8.1 25.7 33.2 11.1 3.7 4.30 101 +90042900.AYS 1.75 13.0 2333 -12.2 6.2 30.6 23.2 19.1 1.7 2.30 243 +90050600.OUN 1.75 7.6 836 -20.1 7.2 18.3 48.8 5.8 0.4 1.40 30 +90051200.SEP 1.75 13.6 2282 -9.2 6.9 34.8 47.4 14.5 1.6 -999.00 134 +90051600.IAD 1.75 13.4 2004 -14.0 7.0 16.7 27.7 12.7 1.0 -999.00 102 +90051900.SEP 1.75 17.0 3246 -9.1 6.6 20.9 27.2 15.6 1.6 0.60 387 +90052100.HAT 1.75 15.8 2891 -9.7 5.6 13.8 19.5 12.4 0.8 0.60 182 +90052100.UMN 1.75 14.8 3661 -13.1 7.6 15.4 23.7 15.3 2.0 3.40 181 +90052300.HON 1.75 10.9 1984 -14.0 7.2 22.3 33.6 15.0 1.1 2.40 107 +90052800.SIL 1.75 18.0 3916 -10.0 6.8 19.3 10.6 10.4 2.2 0.80 48 +90061000.IAD 1.75 14.9 2818 -9.2 6.5 16.4 19.3 18.0 1.0 0.60 175 +90061000.OUN 1.75 15.1 3242 -8.5 7.8 10.1 1.3 10.9 0.8 2.50 21 +90061100.CHS 1.75 17.7 4050 -8.1 6.6 8.1 19.1 6.4 0.7 0.60 102 +90061300.STC 1.75 16.2 2789 -10.4 7.2 36.6 42.0 14.2 2.9 0.70 139 +90061800.PIA 1.75 19.5 4567 -8.1 7.4 17.0 25.7 14.1 2.2 1.00 94 +90070500.LCH 1.75 17.6 3315 -8.5 6.6 15.3 2.5 11.6 1.2 0.60 58 +90070900.GRB 1.75 16.9 2962 -6.5 6.5 18.2 22.7 12.1 0.9 0.60 82 +90071100.CKL 1.75 15.4 2544 -8.1 6.4 5.1 4.6 2.1 0.3 0.60 9 +90071300.CRP 1.75 13.3 1658 -6.5 6.5 12.8 9.3 14.6 0.3 0.60 121 +90071400.ABQ 1.75 10.4 1588 -9.4 8.7 18.9 32.6 4.4 0.6 1.20 70 +90071700.FNT 1.75 11.9 1393 -12.5 6.5 15.5 25.3 13.2 0.5 0.60 176 +90071800.LBF 1.75 12.3 3138 -7.7 8.2 17.7 16.6 10.0 1.0 1.60 115 +90072100.ABQ 1.75 10.9 1327 -5.9 8.3 7.9 14.5 9.8 0.1 1.30 145 +90072600.OUN 1.75 16.6 3546 -6.8 6.2 10.8 14.7 11.1 0.6 0.70 206 +90072700.AMA 1.75 14.3 3104 -5.8 7.3 7.7 7.9 11.1 0.3 2.20 117 +90073100.GGG 1.75 16.1 3254 -7.5 6.4 7.9 5.4 1.2 0.5 0.60 3 +90080200.LCH 1.75 18.4 3223 -7.3 6.4 6.5 2.0 3.1 0.4 0.60 14 +90081000.AHN 1.75 14.9 2234 -9.4 6.2 13.3 26.7 6.4 0.6 0.80 33 +90081500.DDC 1.75 15.1 3012 -6.6 5.6 9.0 15.8 9.9 0.4 0.60 59 +90082100.AMA 1.75 14.6 2833 -5.7 6.6 11.7 11.3 10.6 0.4 1.20 75 +90082400.OVN 1.75 18.7 5016 -7.4 6.8 7.4 14.7 9.4 0.8 0.70 100 +90082600.BIS 1.75 13.7 3187 -13.2 8.6 22.2 23.1 13.2 2.6 2.50 190 +90082600.HON 1.75 17.9 5529 -11.5 9.1 14.7 28.6 9.9 3.6 -999.00 156 +90090200.MAF 1.75 14.9 3597 -6.2 6.8 17.2 18.3 7.5 0.9 2.50 58 +90091100.AHN 1.75 15.1 2857 -8.6 5.9 7.9 7.6 6.3 0.4 0.60 80 +91032700.DAY 1.75 10.7 1310 -13.1 6.4 30.2 30.6 24.3 0.8 1.80 531 +91051300.BIS 1.75 13.8 1867 -11.5 6.8 26.9 19.8 15.8 1.3 0.70 -79 +91051300.HON 1.75 14.7 3615 -9.5 7.2 14.2 22.7 13.0 1.2 2.80 97 +91051700.GGG 1.75 18.4 5081 -10.4 7.5 7.9 11.2 10.5 1.4 0.90 157 +91053100.AHN 1.75 16.3 3505 -6.9 5.9 3.9 4.1 3.2 0.2 0.60 15 +91060600.JAN 1.75 16.3 3344 -9.1 6.8 9.5 9.6 3.1 0.8 0.60 12 +91060600.RAP 1.75 13.1 2001 -11.5 7.1 13.2 19.7 11.9 0.7 1.40 170 +92051500.1M1 1.75 13.3 2877 -11.3 6.4 11.4 16.3 7.9 0.7 1.50 54 +94062600.PBI 1.75 17.7 4199 -9.1 6.6 4.9 6.6 5.2 0.5 1.80 10 +94070100.1M1 1.75 18.6 4820 -8.1 6.1 20.0 18.5 12.6 2.1 1.00 342 +94071700.1M1 1.75 17.7 3339 -6.4 5.8 12.5 11.3 19.1 0.7 0.60 164 +94071700.HAT 1.75 16.5 2973 -6.0 5.7 5.9 3.1 4.4 0.2 0.60 33 +97100900.OUN 1.75 16.5 3628 -7.5 6.0 20.0 29.9 16.6 1.3 0.80 205 +98062500.FFC 1.75 15.8 3224 -8.9 7.3 4.2 9.9 5.6 0.3 0.60 54 +00051800.GSO 1.50 11.9 1767 -13.7 6.5 16.4 31.1 7.6 0.7 1.60 124 +00090200.SLC 1.50 9.1 1641 -14.7 8.4 16.1 24.8 20.1 0.7 1.70 101 +01062600.GSO 1.50 11.9 929 -11.7 6.0 17.8 25.6 10.4 0.3 0.60 106 +01062600.RNK 1.50 11.1 1653 -11.9 5.7 13.7 30.3 8.3 0.4 2.10 88 +02042200.ILN 1.50 10.3 623 -13.3 6.8 36.0 43.5 31.2 0.5 2.10 525 +02072500.LCH 1.50 20.2 5453 -7.3 5.9 8.5 11.3 5.5 1.0 0.60 66 +03031700.MHX 1.50 12.1 1241 -13.1 5.4 19.1 32.8 11.5 0.5 0.70 37 +03091800.INL 1.50 13.7 1863 -13.5 7.5 24.7 29.2 15.3 1.5 -999.00 384 +06042117.JAN 1.50 13.4 1486 -12.9 6.5 17.4 11.7 6.4 0.7 0.60 58 +06052200.LBF 1.50 8.2 1420 -11.1 7.7 15.2 22.6 14.8 0.4 1.30 199 +06053000.SGF 1.50 15.0 2988 -9.3 6.5 2.7 12.8 4.0 0.2 0.60 27 +06071100.DNR 1.50 10.1 1192 -7.9 7.6 16.2 27.0 12.2 0.3 1.70 79 +89060200.AHN 1.50 13.2 1996 -7.3 6.1 2.6 1.6 3.2 0.1 -999.00 18 +90040200.GSO 1.50 8.7 984 -17.4 6.8 29.7 37.4 19.9 0.7 2.00 210 +90041100.AHN 1.50 11.5 1096 -14.0 6.4 25.4 25.8 19.0 0.7 0.60 343 +90071000.DEN 1.50 13.5 3504 -8.2 8.0 25.4 20.1 16.7 1.9 2.50 41 +90082200.AHN 1.50 16.5 3275 -6.8 6.5 8.7 15.8 6.0 0.5 0.60 48 +90082200.OUN 1.50 16.6 3350 -5.5 6.1 3.3 5.7 3.1 0.1 0.60 -7 +94070100.GSO 1.50 13.8 2296 -10.3 5.4 8.1 14.3 6.6 0.3 0.60 40 +00030400.BMX 1.25 11.4 1311 -14.9 5.7 42.9 54.3 21.1 1.3 1.40 205 +00071100.DDC 1.25 16.4 4707 -4.1 6.8 4.6 8.7 6.0 0.2 2.60 136 +00072000.LZK 1.25 16.4 3973 -6.7 6.8 12.6 12.7 8.3 0.9 1.10 102 +02041200.TOP 1.25 9.8 1084 -16.5 7.1 9.4 27.2 16.2 0.3 1.60 99 +03040500.ILN 1.25 10.4 1856 -15.7 6.5 20.8 25.6 17.7 1.0 2.20 233 +03090300.NKX 1.25 10.8 940 -5.9 6.6 7.0 5.9 4.2 0.1 0.70 9 +03090800.FGZ 1.25 8.3 663 -8.3 7.7 15.0 17.0 11.2 0.1 1.20 130 +03090800.PHX 1.25 12.1 2268 -6.7 6.7 10.7 16.8 8.2 0.3 1.20 90 +04032700.RAP 1.25 8.5 2052 -15.5 8.0 19.0 17.5 12.6 1.0 1.50 161 +04100400.AMA 1.25 10.5 1672 -13.5 7.6 23.5 31.9 10.7 1.0 2.40 28 +05030700.MAF 1.25 8.0 547 -16.7 6.9 34.3 40.4 16.9 0.4 1.90 177 +05090600.LBF 1.25 13.0 2252 -9.1 8.1 14.1 27.2 6.3 0.7 2.90 28 +05100123.LMN 1.25 15.9 2672 -9.9 7.0 21.4 26.0 14.1 1.5 -999.00 276 +06051500.TLH 1.25 10.8 1279 -13.7 7.1 24.7 23.2 18.5 0.8 1.70 104 +06052000.BOI 1.25 7.4 1070 -13.5 8.4 15.9 25.9 9.2 0.3 0.80 95 +06052600.FFC 1.25 12.1 1711 -12.1 7.1 8.7 3.3 4.1 0.4 1.10 46 +06060300.ILX 1.25 10.0 1218 -14.5 5.9 20.0 22.7 14.1 0.5 1.50 87 +06060312.LBF 1.25 7.7 988 -11.9 9.0 19.5 17.8 10.8 0.4 1.00 699 +06061200.DNR 1.25 6.0 942 -9.9 9.4 17.1 22.2 7.4 0.2 0.60 130 +06070400.GRB 1.25 14.1 1881 -10.1 6.6 22.8 40.7 14.0 1.0 0.60 132 +06072700.ILX 1.25 20.7 4385 -4.3 5.7 12.7 19.1 14.7 0.7 0.60 318 +06072800.FGZ 1.25 13.5 3100 -5.3 8.1 22.7 18.3 14.1 1.0 2.70 193 +90041400.OUN 1.25 10.8 1408 -18.2 7.9 23.5 33.0 17.5 1.2 2.00 146 +94062500.GSO 1.25 15.9 2334 -5.4 5.6 9.9 5.2 12.9 0.3 0.60 103 +00051400.TLH 1.00 15.9 3542 -9.9 6.9 4.2 4.2 5.4 0.4 1.00 -4 +00053000.LBF 1.00 9.9 2258 -9.7 9.2 27.2 31.9 16.9 1.3 1.10 294 +00060100.ILX 1.00 16.1 3208 -9.1 7.0 17.9 15.6 20.7 1.4 1.80 163 +00060200.DVN 1.00 16.4 3451 -9.3 7.3 14.1 11.0 14.2 1.3 0.60 175 +00060200.TOP 1.00 16.1 3517 -9.3 6.9 10.4 16.3 4.9 0.9 0.80 39 +00062100.TBW 1.00 17.1 3180 -8.5 6.4 12.2 19.0 8.9 0.9 0.60 49 +00062300.MHX 1.00 18.6 4167 -8.7 6.1 6.0 6.1 9.7 0.6 0.60 89 +00062600.DDC 1.00 13.5 2618 -6.1 6.7 15.8 16.9 14.3 0.5 1.60 51 +00062600.TOP 1.00 17.8 4052 -8.9 7.6 1.3 23.9 2.4 0.1 2.30 26 +00063000.PIT 1.00 9.9 1086 -15.9 5.5 22.0 37.9 8.1 0.5 1.80 77 +00070200.DDC 1.00 16.2 3566 -5.7 6.6 14.2 21.9 5.5 0.7 1.30 38 +00070200.RAP 1.00 15.6 5621 -9.7 8.7 21.5 22.7 15.9 3.8 2.20 263 +00070300.DDC 1.00 17.2 4558 -5.9 7.5 13.6 22.7 11.7 1.1 2.40 66 +00070300.OAX 1.00 18.5 4633 -6.3 6.9 10.6 19.6 9.9 0.9 1.90 133 +00070400.DDC 1.00 18.1 5142 -7.1 7.6 9.7 19.2 11.4 1.2 2.40 114 +00070700.RAP 1.00 14.2 4065 -7.7 8.6 29.4 33.3 10.8 2.7 2.10 111 +00071200.DDC 1.00 14.4 2941 -5.5 7.2 11.3 11.7 10.8 0.5 1.40 196 +00071400.GRB 1.00 12.0 1743 -12.3 6.9 21.5 42.9 13.4 0.9 1.70 195 +00071500.SHV 1.00 17.2 4004 -5.9 6.0 4.6 8.6 6.2 0.3 0.60 46 +00071700.TOP 1.00 15.9 3927 -8.7 7.9 8.9 14.1 14.5 0.9 2.40 198 +00071900.GYX 1.00 11.4 997 -13.3 6.0 27.0 36.1 18.8 0.6 1.00 107 +00072300.OTX 1.00 9.0 2088 -12.3 8.2 17.2 21.1 7.8 0.8 1.20 43 +00072700.JAN 1.00 12.5 2066 -10.7 6.4 8.0 8.4 4.2 0.3 1.00 -50 +00072800.LBF 1.00 17.1 5581 -7.7 8.1 25.0 21.1 9.6 3.5 3.10 187 +00072800.TOP 1.00 15.3 3666 -10.3 7.6 22.0 26.4 9.1 2.3 2.60 115 +00072900.CHS 1.00 16.1 2462 -7.5 5.6 9.3 13.2 3.3 0.4 0.60 4 +00072900.ILN 1.00 14.3 2735 -11.5 6.7 13.4 21.0 8.0 1.0 0.60 68 +00080700.TOP 1.00 17.3 4476 -7.5 7.2 17.8 22.9 11.7 1.8 1.80 72 +01061900.JAX 1.00 17.2 2584 -9.5 6.1 4.8 8.3 5.0 0.3 0.60 13 +01062100.ABR 1.00 8.1 1118 -19.3 7.0 4.2 12.4 3.6 0.1 1.30 14 +01062600.LBF 1.00 12.7 3931 -8.1 8.1 9.3 8.1 8.1 0.7 1.50 119 +02012400.LZK 1.00 13.1 1343 -12.7 6.6 32.5 40.7 20.2 1.1 0.60 290 +02042300.OAX 1.00 6.4 614 -23.3 7.9 26.3 36.6 15.2 0.4 1.40 133 +02051800.CRP 1.00 20.3 5902 -10.5 7.4 22.6 23.2 10.7 5.0 1.60 86 +02052700.AMA 1.00 9.7 2332 -11.1 7.2 14.5 11.8 13.0 0.6 1.40 198 +02060400.CHS 1.00 15.2 3170 -10.1 7.6 9.7 10.8 11.7 0.9 0.60 33 +02060700.ABR 1.00 9.0 2252 -14.7 8.1 12.4 18.1 8.2 0.7 1.20 118 +02070200.FFC 1.00 16.3 4268 -9.7 6.6 7.8 4.3 7.3 0.8 0.60 46 +02070300.LBF 1.00 14.1 3367 -5.9 7.5 14.0 6.2 11.5 0.7 1.20 158 +02072000.JAN 1.00 17.6 3501 -6.7 6.1 6.1 7.9 5.7 0.4 0.60 58 +02072600.TOP 1.00 13.8 3390 -5.9 7.5 16.9 16.9 11.9 0.8 2.20 168 +02072700.RAP 1.00 9.4 1688 -9.3 7.5 21.0 28.6 14.5 0.6 1.30 139 +02072900.AMA 1.00 13.6 3610 -6.5 7.8 12.5 12.2 13.6 0.7 2.00 164 +02080300.BMX 1.00 18.4 5098 -6.5 5.8 9.6 10.8 11.5 0.8 1.40 33 +02080400.SGF 1.00 17.7 4328 -5.5 6.5 1.1 7.6 3.8 0.1 1.50 -11 +03031500.TBW 1.00 15.9 3398 -13.7 7.0 18.6 27.3 3.9 2.3 0.90 32 +03032000.ILX 1.00 8.0 713 -21.9 6.9 3.5 11.4 5.4 0.1 1.40 -26 +03032100.DTX 1.00 8.7 1602 -21.3 6.6 13.3 27.1 7.7 0.6 1.10 80 +03040500.LZK 1.00 10.7 1751 -14.9 6.6 27.4 33.1 12.6 1.2 2.30 65 +03041800.DNR 1.00 5.3 1063 -18.1 8.6 11.0 43.9 5.9 0.2 0.60 41 +03042400.SHV 1.00 13.1 1456 -12.9 7.2 26.1 36.8 15.2 1.1 0.60 278 +03042800.MFL 1.00 16.7 2735 -10.7 6.4 11.7 25.5 12.3 0.9 0.60 83 +03043000.OAX 1.00 8.9 1064 -16.3 7.4 29.1 32.0 18.4 0.8 1.90 353 +03050100.FFC 1.00 11.1 1429 -13.5 6.6 6.9 6.4 1.0 0.2 1.60 5 +03050212.BNA 1.00 10.3 1865 -15.3 7.0 13.0 18.0 12.1 0.6 2.20 55 +03050312.BMX 1.00 9.7 1402 -16.1 7.5 13.8 38.5 7.9 0.5 1.80 72 +03051100.MHX 1.00 16.0 3585 -9.3 7.3 16.2 15.0 11.9 1.5 0.90 104 +03051200.JAX 1.00 15.9 3060 -7.9 6.9 13.2 20.0 10.1 0.8 -999.00 48 +03051800.TBW 1.00 16.1 3839 -8.7 6.5 5.7 11.9 6.2 0.5 1.10 3 +03051800.XMR 1.00 16.0 3602 -9.5 7.0 8.6 10.7 5.6 0.8 0.90 -7 +03052600.TFX 1.00 8.3 994 -10.9 8.0 16.0 15.9 9.1 0.3 1.30 59 +03052700.ABQ 1.00 7.1 713 -9.9 8.3 14.7 20.6 3.1 0.1 0.60 12 +03060200.DDC 1.00 11.1 1960 -9.5 7.9 17.5 20.6 11.9 0.7 2.00 222 +03060900.RNK 1.00 15.0 2965 -9.1 6.2 24.1 29.2 18.9 1.4 1.20 134 +03090900.TUS 1.00 11.5 2363 -8.3 7.3 7.9 11.8 2.8 0.3 1.10 12 +03111712.TOP 1.00 11.5 1641 -17.3 7.3 25.6 32.6 17.8 1.4 2.70 329 +04031500.DRT 1.00 11.6 1498 -15.5 7.0 16.8 24.5 6.6 0.8 1.40 123 +04032100.FWD 1.00 13.1 2648 -15.5 8.2 12.9 20.8 4.9 1.4 2.80 29 +04051000.FFC 1.00 11.4 2006 -11.1 5.4 4.7 11.0 4.0 0.2 1.90 -15 +04051200.AMA 1.00 9.7 1922 -11.5 8.0 15.0 8.4 19.1 0.6 1.60 282 +04080900.TOP 1.00 14.3 2676 -11.5 7.4 11.9 15.6 5.9 0.9 0.90 82 +04081700.TUS 1.00 13.1 2027 -8.9 7.1 13.2 13.3 8.8 0.5 1.00 96 +04082800.OUN 1.00 16.0 4225 -7.1 7.4 3.8 3.0 7.0 0.3 1.50 101 +05030400.SGF 1.00 5.9 823 -25.9 7.1 24.2 27.9 13.0 0.5 0.70 151 +05050412.TBW 1.00 14.1 1839 -13.5 7.3 15.8 33.3 10.0 1.0 1.00 187 +05050600.EPZ 1.00 8.0 1672 -12.7 8.6 27.7 28.8 15.0 1.0 1.20 178 +05081100.GGW 1.00 10.1 805 -13.7 7.4 30.5 38.9 15.6 0.6 2.10 170 +05081700.GGW 1.00 9.2 1042 -11.1 7.8 27.6 40.5 16.7 0.5 1.70 265 +05081800.LMN 1.00 17.7 3655 -4.1 6.0 22.3 17.3 13.3 0.8 0.60 221 +05082700.EPZ 1.00 11.1 2162 -6.5 8.5 4.9 6.7 4.0 0.2 1.00 21 +05092900.FWD 1.00 12.7 1553 -5.9 6.4 10.1 13.0 8.5 0.2 0.60 39 +06010300.ILN 1.00 9.0 791 -19.3 7.5 16.0 23.8 7.8 0.4 1.40 140 +06011200.GSO 1.00 9.5 1374 -19.1 7.5 15.6 28.9 21.9 0.7 2.50 253 +06041400.BUF 1.00 6.2 383 -23.3 7.6 26.8 55.7 21.6 0.3 1.40 237 +06041400.PIT 1.00 6.2 390 -20.1 7.0 18.6 40.0 18.8 0.1 0.90 220 +06051600.DTX 1.00 8.7 519 -20.5 6.1 5.0 17.9 7.2 0.1 0.70 -7 +06051800.IAD 1.00 8.4 1009 -20.5 6.7 16.0 20.3 11.9 0.4 1.30 66 +06052300.RAP 1.00 9.6 2536 -10.3 8.5 9.7 18.1 5.6 0.5 1.30 43 +06052600.AMA 1.00 7.9 1911 -11.3 9.9 16.9 12.6 11.8 0.7 0.70 262 +06052600.GSO 1.00 11.9 1743 -10.1 6.1 14.4 11.4 8.4 0.4 0.80 82 +06052600.JAX 1.00 13.3 1856 -10.7 6.6 15.3 20.8 10.5 0.6 0.60 70 +06052700.BIS 1.00 9.4 2274 -11.9 8.5 22.0 21.3 20.2 1.1 1.30 198 +06052700.JAX 1.00 15.0 2879 -9.9 6.1 13.7 13.1 11.0 0.9 0.80 117 +06053100.GGW 1.00 5.6 570 -21.1 7.4 5.0 8.1 2.8 0.1 0.90 30 +06060200.BNA 1.00 14.2 2055 -7.9 5.4 5.5 12.6 8.6 0.2 0.60 -2 +06060300.GRB 1.00 8.8 1314 -18.9 7.1 16.3 19.5 12.0 0.6 1.60 77 +06060400.ILN 1.00 8.3 1032 -18.1 6.5 8.5 11.1 6.7 0.2 1.20 35 +06060500.FFC 1.00 11.0 1475 -12.5 5.9 11.7 22.4 5.7 0.3 2.10 18 +06060700.SHV 1.00 14.6 2252 -10.3 7.4 25.4 14.5 15.1 1.5 0.60 164 +06060712.RAP 1.00 7.9 1110 -10.3 8.7 12.3 19.2 9.9 0.2 1.30 131 +06060800.LBF 1.00 10.8 2368 -6.9 7.7 20.5 22.3 11.2 0.7 1.70 244 +06061200.BNA 1.00 13.6 1539 -6.7 5.6 15.2 7.0 9.1 0.3 0.60 107 +06061900.GRB 1.00 14.0 2397 -11.7 6.2 15.9 20.9 12.4 0.9 1.90 74 +06062100.BNA 1.00 14.1 2387 -9.3 6.8 6.7 3.3 6.8 0.3 0.60 43 +06062200.JAN 1.00 15.3 2595 -8.7 7.0 3.0 2.5 4.6 0.2 0.60 -15 +06062300.BMX 1.00 12.5 1595 -7.1 6.2 5.1 4.3 1.9 0.1 0.60 -10 +06062300.BNA 1.00 15.6 3023 -10.1 7.3 10.6 3.6 8.0 0.9 0.60 71 +06062300.DDC 1.00 11.0 987 -11.1 7.2 17.7 17.5 9.3 0.4 1.30 78 +06062700.FFC 1.00 15.4 2376 -6.9 5.6 12.6 21.6 9.3 0.4 0.60 23 +06062800.GRB 1.00 9.4 1049 -15.5 6.1 13.8 20.6 8.1 0.3 1.60 34 +06062900.PIT 1.00 10.9 925 -13.7 6.4 21.3 35.7 7.1 0.4 1.60 17 +06062900.TOP 1.00 8.5 959 -12.3 7.1 12.7 14.7 8.1 0.2 1.00 120 +06070200.FFC 1.00 11.2 1552 -9.7 6.3 6.5 9.5 1.2 0.2 0.90 4 +06070200.FWD 1.00 12.8 1806 -9.9 7.2 6.1 11.2 1.6 0.2 0.60 20 +06070200.LBF 1.00 12.2 2554 -8.5 8.0 20.5 17.9 17.1 1.0 2.00 223 +06070300.IAD 1.00 14.8 3195 -9.3 5.9 10.7 13.6 10.7 0.7 0.90 60 +06070500.GSO 1.00 15.2 2335 -7.3 6.1 9.6 6.1 7.6 0.4 0.60 96 +06071300.BIS 1.00 9.0 966 -8.7 8.1 7.7 14.5 5.9 0.1 0.70 108 +06071800.DNR 1.00 9.1 1197 -6.9 8.0 7.7 6.2 3.5 0.1 1.10 83 +06072000.RNK 1.00 14.2 2160 -8.5 5.9 9.1 3.0 11.1 0.3 1.00 113 +06072200.RNK 1.00 16.5 3249 -6.1 6.0 7.0 9.1 7.2 0.3 0.60 100 +06072300.ABQ 1.00 9.6 1267 -4.9 7.8 5.7 11.2 2.8 0.1 1.00 -9 +06072700.RAP 1.00 8.7 694 -8.7 8.3 16.3 21.8 13.4 0.2 0.90 157 +06072800.ABR 1.00 12.7 1956 -6.1 6.4 23.5 29.4 16.1 0.5 1.40 149 +06072800.OAX 1.00 15.6 2714 -5.3 6.0 16.8 22.8 9.3 0.5 0.60 92 +06080100.PIT 1.00 18.6 3456 -4.5 5.8 12.7 7.9 10.1 0.5 0.60 104 +06081000.TUS 1.00 13.4 1913 -6.3 7.3 3.1 6.2 1.2 0.1 0.60 12 +06090800.ABR 1.00 9.5 1406 -14.3 7.5 9.4 9.1 10.6 0.3 1.70 163 +06090800.LBF 1.00 7.9 880 -14.1 7.5 11.1 19.9 6.9 0.2 0.90 20 +06091200.ILX 1.00 13.6 1642 -11.1 6.4 12.9 23.9 8.6 0.5 0.60 56 +06092900.FFC 1.00 10.8 705 -11.1 4.6 19.1 33.4 18.9 0.2 0.60 85 +89060500.1M1 1.00 15.8 2493 -8.2 6.0 14.7 13.0 10.3 0.7 0.60 19 +89061200.JAN 1.00 17.7 3616 -9.1 6.5 15.3 5.8 7.5 1.4 0.60 84 +89061400.JAN 1.00 16.0 3274 -11.5 7.1 11.3 8.2 9.4 1.2 1.00 57 +89061600.TBW 1.00 16.4 3463 -7.6 5.7 10.2 6.4 5.9 0.6 0.60 36 +89061900.CKL 1.00 16.7 3363 -9.6 6.4 14.5 12.2 12.2 1.2 0.60 103 +89062800.HTS 1.00 17.6 3659 -8.0 5.8 15.4 21.4 7.4 1.1 0.60 62 +89062900.AMA 1.00 12.6 2035 -8.2 8.6 14.8 26.0 13.0 0.6 2.30 165 +89070600.OUN 1.00 12.9 1373 -6.0 6.2 6.0 12.2 11.3 0.1 0.60 64 +89071200.TOP 1.00 16.6 3182 -8.1 7.6 12.6 8.2 13.2 1.0 1.60 157 +89072400.VCT 1.00 14.8 2953 -9.6 6.2 7.7 13.3 9.5 0.5 0.60 120 +89072800.DAY 1.00 16.4 2617 -7.8 5.7 13.5 11.3 7.5 0.6 0.60 83 +89073100.GTF 1.00 9.5 1858 -9.3 8.9 10.8 21.7 10.3 0.4 1.20 106 +89080600.OUN 1.00 16.3 3439 -5.4 6.8 10.2 12.1 9.7 0.5 0.80 101 +89082000.UMN 1.00 17.3 3524 -6.0 6.2 20.6 14.9 13.6 1.1 0.80 350 +89082700.DDC 1.00 16.9 4549 -7.4 7.6 11.3 24.3 1.4 1.2 2.10 11 +90050400.CKL 1.00 14.0 1534 -10.6 6.4 20.1 25.8 10.8 0.7 0.60 141 +90061000.GSO 1.00 15.3 2409 -8.8 6.1 9.7 14.5 11.1 0.5 0.60 145 +90062300.HTS 1.00 14.5 1346 -8.5 5.8 27.1 36.9 19.1 0.6 0.60 231 +90062400.OUN 1.00 11.9 1571 -10.8 8.2 26.8 24.9 14.1 1.1 1.90 186 +90070900.GSO 1.00 17.6 4051 -5.3 5.6 10.2 10.5 6.1 0.5 0.80 73 +90071100.GSO 1.00 15.2 3487 -6.6 5.9 3.5 9.1 7.5 0.2 0.60 38 +90071800.AMA 1.00 11.4 1482 -6.5 6.7 14.8 26.1 8.4 0.3 1.10 98 +90072000.DEN 1.00 11.7 1698 -7.2 7.4 16.1 20.8 14.0 0.4 2.10 182 +90072200.TBW 1.00 17.8 3409 -5.7 6.0 4.6 7.8 3.6 0.2 0.60 35 +90072500.DDC 1.00 11.9 1703 -8.0 6.8 14.0 17.5 10.1 0.4 1.40 208 +90072600.GGW 1.00 10.2 1514 -10.6 7.0 15.6 16.6 7.9 0.4 1.80 55 +90080200.MAF 1.00 14.4 1702 -6.2 6.1 9.7 12.2 2.8 0.2 0.60 27 +90081900.AMA 1.00 13.6 2596 -7.9 7.0 5.1 5.1 3.8 0.2 0.80 45 +90082100.OUN 1.00 19.2 5290 -6.7 6.9 8.3 3.4 6.2 0.9 0.60 38 +90082300.HTS 1.00 15.2 707 -7.7 6.2 7.0 8.5 3.6 0.1 0.60 -4 +90083000.GSO 1.00 16.4 3552 -9.3 6.0 20.1 18.2 14.1 1.6 0.60 37 +90092900.MAF 1.00 12.2 1606 -8.0 6.0 15.0 28.7 11.3 0.3 0.80 35 +90100800.GGG 1.00 16.8 2689 -6.0 5.8 14.2 17.2 8.9 0.5 0.60 70 +90101800.GGG 1.00 14.2 1619 -10.6 6.4 20.0 27.9 12.5 0.7 0.60 114 +91060500.AHN 1.00 15.3 3036 -8.1 6.7 5.7 13.0 11.6 0.3 0.60 72 +91060500.CKL 1.00 16.9 3345 -7.5 6.3 5.0 4.8 9.2 0.3 0.60 52 +93092500.OUN 1.00 16.1 2895 -6.7 6.2 24.5 27.2 16.0 1.1 0.60 264 +97081700.DVN 1.00 20.8 5790 -8.3 7.5 14.3 11.8 12.3 2.6 1.00 137 +97081700.PIT 1.00 18.3 3951 -7.9 6.9 12.7 23.0 15.4 1.2 0.60 224 +97081800.FFC 1.00 18.4 3564 -6.1 6.1 2.5 2.0 4.4 0.1 0.60 37 +98052200.BNA 1.00 15.2 3709 -10.7 6.4 9.2 7.9 10.4 0.8 0.90 83 +99061200.ILN 1.00 14.7 3299 -8.3 5.8 4.6 4.0 8.2 0.3 1.10 32 +00021800.JAN 0.88 12.5 1866 -14.9 6.7 27.5 38.9 16.2 1.5 0.70 270 +00061100.DDC 0.88 14.3 3471 -7.9 6.9 11.0 20.2 14.0 0.7 2.40 53 +00061800.RAP 0.88 7.4 1396 -18.9 7.1 14.0 34.9 7.4 0.5 1.40 270 +00070600.DDC 0.88 12.3 2581 -7.5 8.5 9.4 10.0 10.7 0.5 1.80 97 +00072800.BMX 0.88 13.2 2147 -9.5 6.2 8.0 11.4 6.0 0.3 0.70 35 +00080200.DVN 0.88 16.6 4183 -9.7 6.6 11.2 16.4 13.3 1.2 1.10 169 +00080300.PIT 0.88 14.9 2780 -9.7 6.2 15.5 29.2 9.1 0.9 0.60 81 +00080400.BNA 0.88 16.3 3453 -9.9 6.8 10.9 16.0 9.1 1.0 0.60 83 +00080500.LZK 0.88 16.1 3872 -6.3 5.6 9.4 14.6 7.3 0.5 0.80 6 +00080700.DTX 0.88 19.4 4231 -7.3 6.0 16.6 31.6 10.6 1.4 0.60 78 +00090300.OAX 0.88 12.6 3099 -10.1 8.7 16.9 21.6 9.5 1.4 1.40 126 +01062200.DVN 0.88 10.3 1285 -18.1 6.5 10.8 11.8 8.7 0.4 1.00 66 +01062600.CRP 0.88 16.6 3837 -8.5 6.4 4.0 8.9 7.1 0.3 0.60 53 +02031000.GSO 0.88 11.0 819 -15.3 5.8 24.6 29.7 19.8 0.5 1.20 236 +02052900.OAX 0.88 13.0 2754 -13.3 7.1 7.5 7.0 10.0 0.6 2.60 127 +03031400.TLH 0.88 11.6 2141 -13.1 6.3 10.5 9.0 5.7 0.5 1.10 39 +03042912.TOP 0.88 10.6 1617 -16.9 7.8 16.7 22.5 11.0 0.9 2.80 238 +03050400.BIS 0.88 8.2 1467 -18.7 7.4 15.4 16.1 8.8 0.6 1.60 86 +03060300.JAX 0.88 16.1 3513 -10.1 7.6 11.1 10.3 11.4 1.1 0.60 111 +03060600.ABR 0.88 8.1 888 -19.9 6.8 17.3 14.2 9.2 0.4 1.50 47 +03061600.TOP 0.88 12.4 1944 -11.9 6.4 0.8 4.2 5.8 0.0 1.00 3 +03062000.GGW 0.88 9.2 1032 -9.7 8.1 9.8 17.1 8.3 0.2 1.30 76 +03101712.JAN 0.88 12.8 1891 -11.5 6.3 25.4 33.9 16.9 1.1 1.20 246 +03102600.CRP 0.88 17.9 3408 -9.9 6.3 15.2 34.5 9.8 1.4 0.60 17 +03111800.OAX 0.88 10.0 957 -18.3 6.8 41.2 58.6 20.0 1.2 2.50 88 +04040900.AMA 0.88 8.2 1515 -16.7 7.0 17.9 23.0 14.7 0.6 1.60 139 +04081800.PHX 0.88 10.5 1709 -9.1 7.3 4.8 9.2 6.0 0.1 0.80 15 +04082700.ABR 0.88 10.2 1433 -15.1 6.7 14.4 40.5 5.3 0.5 1.50 28 +04091900.LCH 0.88 15.9 2433 -6.9 5.8 4.4 15.6 7.7 0.2 0.60 6 +04092000.OAK 0.88 7.3 242 -17.9 5.5 27.4 30.4 6.5 0.1 0.70 56 +04100400.GSO 0.88 13.2 1385 -14.9 6.5 15.2 26.8 10.4 0.6 1.40 101 +05081300.MAF 0.88 12.8 1568 -6.3 6.5 11.8 13.7 6.9 0.2 0.60 82 +06013012.JAN 0.88 10.0 1058 -20.9 7.1 38.7 46.0 18.9 1.5 2.60 71 +06032100.OUN 0.88 5.4 579 -25.5 7.4 16.6 26.7 5.7 0.2 0.90 53 +06040700.FWD 0.88 12.5 2831 -12.5 6.2 33.5 41.5 20.1 2.2 2.80 40 +06041200.TOP 0.88 8.4 726 -14.3 7.0 33.2 37.2 23.1 0.5 2.00 232 +06043000.OTX 0.88 6.4 499 -17.9 7.3 17.3 23.3 8.3 0.2 0.80 75 +89061200.AMA 0.88 13.2 3301 -11.7 8.7 12.9 25.2 9.2 1.4 2.30 167 +89062600.UMN 0.88 16.2 3812 -6.9 6.3 0.7 10.8 2.0 0.0 0.60 -14 +89062700.DEN 0.88 8.6 931 -11.1 7.6 14.3 14.3 10.8 0.2 1.80 122 +89072700.AHN 0.88 17.5 3996 -6.9 6.5 3.5 6.8 7.1 0.3 0.60 66 +89082500.AHN 0.88 16.9 3533 -5.1 6.1 3.3 8.1 2.7 0.1 0.60 5 +89082600.AHN 0.88 17.1 3463 -5.6 5.8 11.3 8.6 4.0 0.5 0.60 41 +89082900.GGG 0.88 18.5 3979 -4.6 6.0 4.1 2.2 1.6 0.2 0.60 3 +90071000.PIT 0.88 16.6 3362 -6.7 6.3 19.7 14.7 14.3 1.1 0.60 124 +90073000.AMA 0.88 12.2 943 -7.5 6.3 12.7 18.1 8.4 0.2 0.60 14 +90091900.OUN 0.88 18.0 3878 -6.7 6.2 11.9 20.5 12.1 0.8 0.60 119 +97010900.SIL 0.88 13.1 909 -13.6 6.7 39.7 37.0 33.7 1.0 -999.00 511 +98062500.DDC 0.88 11.9 2667 -7.3 8.7 25.1 34.7 12.4 1.2 1.40 224 +90052100.SIL 0.85 16.6 3505 -10.6 6.7 8.4 13.0 10.9 0.8 0.60 70 +03052100.TBW 0.80 15.8 2941 -9.5 6.2 2.7 5.4 7.1 0.2 0.60 27 +91051700.JAN 0.80 15.5 2890 -8.9 6.5 1.1 7.8 0.6 0.1 0.60 1 +00022400.LZK 0.75 10.6 1590 -18.1 7.0 25.0 34.2 17.2 1.3 2.50 270 +00050300.JAN 0.75 12.8 1438 -12.9 5.9 12.8 7.2 13.9 0.4 0.60 120 +00052200.LZK 0.75 12.1 2062 -13.5 6.2 22.6 32.5 17.7 1.1 1.40 162 +00061800.JAX 0.75 15.7 2677 -7.9 5.7 6.0 10.5 7.9 0.3 0.60 61 +00061900.WAL 0.75 17.4 2940 -7.9 6.3 11.3 9.5 11.6 0.7 0.60 134 +00062500.JAX 0.75 15.6 2442 -10.1 6.2 9.4 21.8 9.3 0.5 0.60 104 +00062900.GRB 0.75 8.9 860 -18.9 6.4 17.0 24.4 14.1 0.4 1.10 108 +00071300.DDC 0.75 15.1 3064 -3.7 6.1 6.2 10.6 9.2 0.2 0.60 0 +00071300.FWD 0.75 14.9 3103 -5.7 6.5 10.6 11.4 13.9 0.4 0.80 120 +00071800.JAN 0.75 15.8 3305 -5.5 6.0 13.9 14.4 13.1 0.6 0.60 -56 +00071900.JAN 0.75 17.3 3841 -6.1 6.1 7.5 6.9 5.7 0.4 0.60 32 +00072100.TBW 0.75 18.9 4845 -6.9 6.4 7.0 10.7 7.4 0.7 0.90 56 +00072300.GSO 0.75 16.5 2443 -9.1 5.7 20.6 22.2 6.6 1.0 0.60 88 +00072400.GGW 0.75 10.9 3240 -11.1 8.5 26.1 22.5 12.5 2.1 1.40 54 +00080400.LCH 0.75 15.7 3045 -7.5 5.6 2.8 12.8 4.7 0.1 0.60 28 +00090200.SHV 0.75 12.1 1896 -7.5 7.0 3.2 2.0 5.2 0.1 0.70 15 +01062400.BIS 0.75 13.7 4781 -10.9 9.0 18.7 27.1 15.0 2.8 1.70 249 +02030812.ILX 0.75 7.2 533 -19.7 6.9 31.5 49.1 16.1 0.4 1.30 599 +02051500.PIT 0.75 5.9 521 -27.9 7.9 14.7 14.3 17.3 0.2 1.10 74 +02060400.JAX 0.75 15.3 3128 -8.1 6.5 3.7 6.5 0.3 0.2 0.60 15 +02062500.LBF 0.75 11.7 3690 -10.3 9.2 7.2 9.1 5.0 0.7 1.30 45 +02072000.LZK 0.75 21.6 6551 -8.5 6.9 10.2 6.8 8.7 2.0 0.90 145 +03031500.OTX 0.75 6.3 801 -26.3 7.5 24.9 28.7 18.3 0.6 1.50 240 +03032000.SGF 0.75 7.6 909 -22.1 6.7 10.5 8.6 18.2 0.3 1.40 205 +03040922.XMR 0.75 15.5 2570 -10.3 5.6 31.0 38.3 12.7 1.7 0.60 34 +03042300.DNR 0.75 6.7 1183 -16.1 7.9 19.1 35.2 12.2 0.5 1.20 265 +03050100.DNR 0.75 6.7 1011 -20.1 8.0 33.5 27.3 12.5 0.9 1.20 108 +03050200.BMX 0.75 12.4 2216 -12.9 6.6 6.7 7.6 4.6 0.4 0.70 9 +03052400.PIT 0.75 10.0 707 -16.7 6.5 26.5 23.6 12.1 0.5 1.00 65 +03060700.MFL 0.75 18.2 3041 -6.7 5.6 2.8 9.3 0.9 0.1 0.60 5 +03061000.JAX 0.75 16.0 2482 -8.7 6.7 11.3 22.4 10.8 0.6 0.60 13 +03061222.XMR 0.75 17.1 2144 -7.9 6.1 4.6 6.1 5.2 0.2 0.60 65 +03061500.SHV 0.75 16.2 2511 -9.9 6.3 21.1 32.8 13.5 1.3 0.60 91 +03061900.TFX 0.75 8.6 1802 -9.3 8.2 10.8 13.4 13.1 0.3 1.00 178 +03062000.BOI 0.75 7.0 491 -12.5 8.2 23.3 18.1 17.9 0.2 1.00 141 +03062100.RAP 0.75 11.9 2338 -10.3 7.2 8.1 14.4 15.0 0.4 2.40 137 +03062200.IAD 0.75 10.5 1215 -17.1 5.8 15.1 9.7 9.3 0.5 1.10 79 +03090900.GJT 0.75 6.8 996 -12.3 9.1 17.7 28.1 8.5 0.3 0.70 199 +03090900.MAF 0.75 12.1 2389 -7.9 7.0 18.1 17.8 12.1 0.7 2.20 222 +03091000.JAN 0.75 15.0 1929 -9.5 6.0 10.8 22.1 8.1 0.4 0.60 83 +03111300.BUF 0.75 8.1 418 -20.5 6.7 46.9 65.5 18.0 0.5 1.50 335 +04030500.LZK 0.75 12.4 745 -10.1 5.8 39.6 53.2 27.8 0.5 0.60 468 +04051300.OAX 0.75 10.5 1193 -13.7 6.9 24.2 28.7 16.7 0.7 2.20 133 +04051700.FFC 0.75 12.2 2077 -12.1 6.4 2.0 11.6 2.9 0.1 0.80 0 +04052300.BUF 0.75 13.8 1807 -10.6 5.8 22.4 24.0 18.8 0.8 0.60 239 +04081700.PHX 0.75 12.6 2729 -7.9 7.1 8.0 6.2 6.2 0.4 1.30 60 +04081900.DDC 0.75 11.7 2146 -6.3 6.2 4.3 11.0 10.2 0.1 0.70 15 +04081900.OTX 0.75 9.8 1929 -11.3 7.4 9.9 15.1 6.2 0.4 1.50 43 +04082800.JAN 0.75 18.0 3714 -7.5 6.4 2.6 3.6 1.0 0.2 0.60 12 +04082800.PIT 0.75 18.3 3258 -6.1 5.6 7.8 6.8 10.4 0.4 0.60 106 +04092800.DNR 0.75 7.9 698 -13.9 7.1 17.7 21.0 12.4 0.2 1.00 112 +04100400.CHS 0.75 15.3 1850 -10.7 6.0 22.1 32.7 13.4 1.0 0.60 81 +05022200.BMX 0.75 11.8 1749 -15.9 6.8 26.1 36.8 19.0 1.4 1.20 174 +05030700.OAX 0.75 5.7 324 -21.9 7.4 14.9 9.6 13.6 0.1 0.90 156 +05042612.JAN 0.75 9.2 993 -17.3 6.9 27.2 35.7 15.7 0.7 2.20 336 +05050500.OTX 0.75 7.7 1601 -19.1 7.3 15.7 22.0 8.5 0.6 1.40 35 +05082100.OAX 0.75 15.5 2617 -6.9 6.0 14.8 30.9 15.0 0.6 0.60 159 +05082400.SHV 0.75 16.6 3397 -5.3 6.1 9.2 4.4 11.1 0.4 0.60 72 +06011400.JAX 0.75 12.1 1223 -15.1 6.5 19.6 26.7 19.7 0.7 0.70 233 +89052800.CKL 0.75 15.4 2098 -8.1 6.2 11.8 13.5 8.0 0.5 0.60 43 +89060400.PAH 0.75 16.4 3338 -9.7 5.8 14.2 14.7 15.5 1.0 0.60 90 +89060700.AHN 0.75 14.2 2402 -13.0 6.6 12.3 18.6 2.7 0.9 0.60 37 +89061300.CKL 0.75 16.1 2677 -8.6 6.1 15.9 7.3 11.5 0.9 0.60 102 +89061500.AHN 0.75 14.7 1717 -7.5 5.5 10.0 9.8 11.8 0.2 0.60 91 +89061600.ACY 0.75 16.5 2243 -7.6 5.9 18.8 19.1 19.5 0.7 0.60 217 +89062200.CKL 0.75 16.1 2986 -10.1 6.7 10.0 8.5 6.8 0.8 0.60 76 +89062300.GRB 0.75 14.6 1729 -8.4 6.2 10.7 10.8 10.0 0.3 -999.00 139 +89062300.OUN 0.75 16.0 3217 -7.1 5.9 12.8 14.9 6.9 0.7 0.60 113 +89062700.PIT 0.75 16.0 2924 -9.1 6.8 8.1 4.9 7.9 0.6 0.60 69 +89070800.AHN 0.75 16.8 2876 -6.5 5.8 4.1 4.8 4.3 0.2 0.60 33 +89071100.DDC 0.75 11.9 1858 -8.1 7.6 8.5 14.0 12.4 0.3 2.10 249 +89072900.SIL 0.75 18.8 4031 -6.8 6.3 4.1 4.4 3.9 0.3 0.60 37 +89073000.PAH 0.75 17.9 3630 -7.0 6.4 11.4 9.0 7.4 0.8 0.60 58 +89073100.TOP 0.75 14.5 2685 -6.4 6.7 9.8 13.0 12.0 0.4 0.60 117 +89081200.GRB 0.75 11.3 1782 -14.8 6.7 4.1 9.5 3.9 0.2 0.60 39 +89081900.HON 0.75 13.1 984 -7.6 7.1 14.0 17.9 12.1 0.2 -999.00 244 +89102800.OUN 0.75 12.0 1679 -12.7 6.8 10.1 27.1 8.3 0.4 1.00 115 +90033100.TBW 0.75 14.8 2515 -10.0 5.6 14.0 15.0 12.0 0.7 0.60 135 +90042100.OUN 0.75 12.4 1915 -14.1 6.5 25.3 31.9 13.1 1.3 1.70 138 +90042200.SEP 0.75 13.3 2775 -11.7 6.5 10.2 20.8 8.1 0.7 1.00 98 +90042400.1M1 0.75 12.8 2374 -12.6 6.7 14.0 8.3 6.6 0.9 0.90 56 +90052500.MAF 0.75 13.1 3262 -7.2 7.9 22.0 30.6 12.4 1.3 1.80 97 +90060400.PIT 0.75 9.5 390 -12.5 5.6 26.0 37.7 14.6 0.2 0.60 57 +90060700.TBW 0.75 17.0 3262 -8.6 6.0 1.6 7.3 4.1 0.1 0.60 8 +90061000.AHN 0.75 14.8 2847 -8.2 5.9 8.6 9.9 5.6 0.4 0.60 50 +90070300.SLI 0.75 18.4 3250 -5.7 5.8 11.8 14.5 7.5 0.6 0.60 79 +90070800.TBW 0.75 20.0 5452 -8.1 6.5 7.8 15.4 5.9 1.1 0.60 11 +90072200.CHS 0.75 18.4 3537 -7.5 6.2 8.3 10.2 7.1 0.6 0.60 88 +90072200.PAH 0.75 16.9 2541 -5.6 5.7 13.3 15.3 11.4 0.4 0.60 80 +90072700.DDC 0.75 14.7 3550 -7.0 7.6 7.6 7.2 6.0 0.5 2.20 84 +90072800.TOP 0.75 16.5 3231 -7.8 6.7 8.8 11.3 9.8 0.6 0.90 281 +90073100.JAN 0.75 14.6 2834 -7.3 6.1 5.1 4.3 0.7 0.2 0.60 -3 +90080400.STC 0.75 13.1 2284 -12.5 7.3 5.3 20.0 8.7 0.3 1.40 45 +90081400.ALB 0.75 14.6 1251 -7.6 5.7 31.1 21.6 20.7 0.6 0.60 261 +90081400.MAF 0.75 13.7 1598 -7.1 6.2 4.4 16.6 2.3 0.1 0.60 35 +90081700.CHS 0.75 19.5 3949 -6.9 5.7 14.2 20.9 11.2 1.0 0.60 101 +90081900.DEN 0.75 11.7 1982 -7.8 7.6 10.2 22.1 6.4 0.3 1.70 25 +90082000.PIA 0.75 19.3 4350 -6.5 6.2 12.0 9.9 9.4 1.0 0.60 67 +90082200.BNA 0.75 15.5 2619 -6.1 6.1 9.1 12.7 8.7 0.3 0.60 -10 +90082300.GGG 0.75 16.2 3016 -5.9 6.0 1.3 5.5 5.3 0.1 0.60 35 +90082500.OUN 0.75 15.7 2800 -6.4 6.6 5.0 11.9 5.3 0.2 0.60 63 +90082500.OVN 0.75 17.2 3418 -7.1 6.4 12.0 21.9 10.0 0.8 0.70 181 +90083000.ACY 0.75 15.2 2413 -9.3 5.8 13.9 22.7 9.0 0.7 0.60 62 +90101700.MAF 0.75 12.3 2870 -12.5 8.0 14.9 16.2 7.7 1.3 2.30 78 +91051700.TBW 0.75 16.1 3306 -7.5 5.4 4.0 0.9 3.8 0.2 0.60 -5 +91060600.CKL 0.75 16.3 2864 -8.6 6.4 8.9 11.4 6.2 0.5 0.60 21 +94062400.GGG 0.75 18.0 3754 -5.5 6.3 11.0 14.2 8.2 0.6 0.60 98 +94062400.HTS 0.75 16.5 2798 -5.5 5.3 8.5 15.0 4.7 0.3 0.60 39 +94070200.LCH 0.75 17.0 2754 -6.8 6.4 10.7 11.0 12.4 0.5 0.60 84 +97061700.BMX 0.75 18.2 3829 -6.9 5.9 12.4 13.0 6.9 0.8 0.60 48 +97062400.MAF 0.75 14.1 3310 -9.9 8.9 11.5 8.6 13.0 1.1 1.60 108 +97081700.TBW 0.75 17.4 3152 -7.3 6.2 2.6 4.4 1.8 0.2 0.60 8 +97081800.SLC 0.75 8.3 931 -10.3 8.5 16.1 22.9 13.6 0.3 1.40 203 +97082200.ILN 0.75 9.6 520 -16.3 5.8 17.5 30.9 3.9 0.2 0.70 50 +98062500.JAN 0.75 17.3 3507 -6.1 6.0 2.3 8.6 7.1 0.1 0.70 -1 +98081000.SHV 0.75 16.8 3464 -6.5 5.9 4.8 1.1 4.2 0.3 0.60 42 diff --git a/ncep/gov.noaa.nws.ncep.ui.nsharp/BigNsharp/siglist.txt b/ncep/gov.noaa.nws.ncep.ui.nsharp/BigNsharp/siglist.txt index 3995f55c39..11e50be13e 100755 --- a/ncep/gov.noaa.nws.ncep.ui.nsharp/BigNsharp/siglist.txt +++ b/ncep/gov.noaa.nws.ncep.ui.nsharp/BigNsharp/siglist.txt @@ -1,641 +1,641 @@ -FILENAME CAT MLMIXR ML CAPE ML CIN MLCL(MAGL) 0-1SRH 0-6KT STPC 500 T (C) 500DIR 7-5 LR 0-3(KT) 0-9(KT) 0-3 KM SRH (M2/S2) -00042320.TXK 2 12.9 1702 -1 657 134 61.7 2.3 -14.0 250 6.5 32.8 76.6 166 -00042001.PPF 2 13.5 2614 -50 1216 227 59.9 4.7 -12.9 234 7.5 39.7 73.5 244 -00032900.FTW 2 13.1 2058 -42 1069 83 49.7 1.3 -15.2 245 8.0 21.9 87.1 126 -00032304.SJT 2 11.9 1680 -119 896 119 61.1 1.1 -15.5 212 9.1 38.4 66.9 217 -00031622.ATT 2 9.4 1019 -7 1566 12 45.8 0.0 -17.5 249 8.0 34.4 53.7 159 -00021323.LRF 2 9.2 1256 -9 1066 82 46.9 0.8 -21.2 249 7.5 32.3 51.4 114 -00010323.MEI 2 13.4 1148 -15 769 241 57.2 2.6 -10.0 226 6.1 38.8 71.2 288 -00010319.GWO 2 12.8 1168 -9 770 202 66.4 2.4 -13.0 223 7.5 47.3 75.1 246 -03050500.UMN 2 13.8 2392 -10 773 341 66.3 8.2 -13.4 237 7.7 49.1 93.8 411 -03050500.JBR 2 15.7 2713 -22 862 266 57.8 6.9 -10.7 240 7.1 50.5 82.9 440 -03050421.TUL 2 16.1 3621 -15 843 147 63.1 5.3 -11.7 230 7.3 45.6 100.2 160 -03050421.MKC 2 13.7 2002 -67 478 479 68.4 8.5 -14.6 224 7.9 48.1 89.8 508 -03050420.P#F 2 15.7 3397 -1 660 166 58.5 5.5 -12.7 230 7.8 34.3 100.9 195 -03050321.P#T 2 12.7 3156 -2 1967 61 36.2 0.0 -9.8 247 7.5 27.2 67.1 207 -03042503.JAN 2 13.5 2568 -27 924 257 44.3 4.9 -15.4 255 7.7 41.1 76.9 279 -03041922.PNC 2 11.5 1157 -40 665 212 87.9 2.5 -17.9 223 7.3 46.5 111.5 242 -03041523.CDS 2 10.7 1020 -106 1534 326 74.0 1.0 -12.4 234 7.5 56.1 83.8 531 -03041522.LBB 2 8.8 883 -53 1986 116 77.2 0.0 -11.7 243 7.5 48.5 87.4 276 -03040702.CLN 2 13.1 488 -133 780 363 62.7 0.8 -11.4 244 7.1 33.6 74.1 411 -03040623.ESF 2 15.8 1847 -29 621 166 51.8 2.6 -11.0 246 6.8 26.8 50.8 161 -03032722.MIA 2 12.4 299 -31 1074 187 48.8 0.4 -10.5 261 5.8 20.5 87.0 197 -01061900.ROS 2 13.6 2218 -30 1076 140 67.7 2.9 -11.1 250 8.2 40.5 73.6 279 -01061401.LNK 2 17.2 4665 -15 1190 173 39.2 4.3 -10.5 215 8.3 32.6 50.7 217 -01061120.ILL 2 14.7 3400 -120 1255 270 56.1 3.4 -10.8 259 8.6 41.9 54.8 448 -01060222.LOZ 2 9.7 164 -10 898 117 51.4 0.2 -13.4 270 5.3 39.8 66.8 189 -01053000.AMA 2 13.0 2887 -76 1322 166 48.4 2.2 -10.1 246 8.4 38.6 50.6 216 -01052902.LHX 2 10.9 1698 -120 1285 185 52.1 1.0 -10.0 251 8.2 38.9 60.5 365 -01052118.OZW 2 12.5 494 -2 775 133 33.4 0.4 -10.3 188 5.6 34.2 36.9 174 -01052022.MIN 2 16.9 3331 -2 711 122 47.8 3.2 -11.0 244 7.3 36.0 67.7 201 -01051022.MIW 2 12.8 2912 -24 1091 65 36.4 1.0 -16.0 255 7.9 28.8 43.0 141 -01051001.FBL 2 9.5 2106 -90 1776 330 50.0 1.0 -16.6 265 8.2 42.9 50.3 516 -01050200.AUM 2 11.2 1434 -74 1331 179 38.8 0.9 -13.3 251 7.5 36.0 52.3 237 -01042202.GBD 2 12.6 2145 -40 777 165 61.8 3.5 -13.6 229 7.8 41.6 62.6 328 -01041423.P28 2 12.3 2168 -54 827 145 76.4 3.1 -16.2 256 8.3 45.0 89.5 235 -01041117.LWD 2 11.9 968 -3 632 282 77.0 2.7 -15.1 208 7.5 38.2 81.4 327 -01040918.BVI 2 10.7 1326 -11 1210 102 57.2 1.0 -15.4 266 7.7 32.1 32.1 174 -01022422.SGT 2 11.8 1020 -15 967 335 52.8 3.0 -14.3 213 7.7 53.6 64.9 450 -00110820.HEZ 2 15.9 2158 -6 881 236 47.1 4.0 -8.5 204 6.2 29.0 68.5 266 -00103122.HLC 2 11.0 1274 -14 954 110 47.4 1.1 -14.1 202 7.4 32.6 74.4 169 -00092022.DAY 2 13.9 1299 -7 971 215 63.4 2.8 -8.2 237 6.1 37.5 61.0 237 -00072601.OTG 2 14.5 2869 -49 1055 88 42.5 1.7 -12.6 290 7.2 33.4 41.3 161 -00072523.RWF 2 14.6 2791 -13 1068 96 39.4 1.6 -12.0 275 7.0 29.2 35.8 163 -00071122.BKX 2 14.7 1167 -47 944 134 42.8 1.1 -7.8 261 6.8 27.2 67.9 205 -00070601.SNY 2 13.6 2847 -18 1681 52 57.5 0.5 -7.4 248 8.1 19.0 74.4 122 -00052319.BWG 2 13.7 2114 -41 1128 167 38.6 2.0 -11.4 294 6.9 36.9 62.8 278 -00051722.LXN 2 14.0 3552 -16 910 111 27.5 1.8 -13.9 169 8.4 28.1 44.5 170 -00051200.ALO 2 16.5 4382 -13 1110 168 51.1 5.6 -7.9 254 6.7 33.2 51.6 199 -00050101.MWL 2 13.0 2207 -103 1176 253 47.3 2.4 -12.4 227 8.2 40.3 37.8 297 -00042323.SHV 2 13.4 2001 -19 928 216 58.9 4.2 -13.0 261 6.7 41.9 60.0 296 -04051923.GFK 2 11.2 967 -44 828 233 54.9 2.1 -16.6 243 7.2 39.5 86.1 229 -04051302.ICT 2 15.9 3157 -12 538 223 36.4 4.3 -9.4 232 6.4 23.8 51.5 245 -04051101.LIC 2 9.0 1549 -59 1592 233 43.4 1.0 -11.5 244 8.4 35.1 46.6 395 -04042022.PIA 2 12.4 1852 -11 728 320 36.4 3.6 -14.7 235 6.2 38.5 40.1 488 -04032718.DDC 2 10.0 1332 -8 893 190 41.4 1.7 -16.6 206 7.5 30.8 47.5 198 -04030418.ABI 2 10.7 626 -20 1108 319 46.5 1.4 -13.7 196 7.0 40.3 84.2 350 -03111718.HOU 2 16.4 1980 -1 445 137 48.2 2.2 -12.4 207 6.6 24.0 77.0 158 -03111223.MFD 2 8.3 64 -56 890 219 99.1 0.1 -15.7 261 5.7 55.1 123.1 275 -03111220.MIE 2 9.7 388 -1 757 123 91.0 0.5 -15.6 258 5.7 47.1 117.3 205 -03082201.JXN 2 17.2 3046 -36 1091 255 31.0 3.6 -5.9 285 6.6 34.4 33.2 304 -03072122.AVP 2 14.3 1810 -16 1228 162 51.1 1.9 -7.9 239 5.6 45.7 49.9 148 -03072104.CID 2 17.8 2344 -22 462 187 48.9 3.6 -7.0 291 7.0 34.2 63.6 237 -03072101.ALO 2 15.0 1859 -107 921 156 49.6 1.5 -8.0 297 7.0 28.2 58.2 248 -03062500.HON 2 17.0 3737 -23 1021 335 52.2 10.7 -7.4 227 7.5 43.4 61.6 550 -03062422.MHE 2 19.5 5088 -22 717 256 55.5 12.1 -8.0 228 7.9 40.9 58.4 422 -03062421.MHE 2 17.5 3584 -16 768 252 56.0 8.4 -7.9 220 7.8 38.8 57.2 348 -03062302.P#8 2 16.8 3414 -169 1003 367 38.7 1.7 -6.8 227 7.6 30.2 57.1 437 -03062223.P#8 2 17.7 4366 -39 972 253 38.8 7.2 -8.3 246 8.6 34.3 54.7 387 -03061001.P#9 2 12.6 2103 -97 1467 421 51.0 2.8 -11.2 266 7.9 45.5 63.9 651 -03053103.CMI 2 12.6 701 -119 899 482 64.7 1.8 -11.6 292 6.3 36.9 85.1 523 -03053101.ILX 2 12.4 784 -55 1108 474 76.0 3.2 -8.5 294 5.0 45.0 90.9 524 -03051100.UIN 2 14.7 2093 -27 738 302 63.1 6.3 -11.7 240 7.7 43.7 97.9 354 -03051004.C34 2 17.3 3493 -14 749 452 53.6 14.1 -8.8 228 7.7 32.1 77.0 511 -03050923.HBR 2 11.1 1389 -64 2135 137 56.8 0.0 -9.1 231 7.7 35.8 78.1 219 -03050900.C30 2 14.6 1749 -112 819 321 69.8 3.3 -8.9 227 6.8 57.0 72.2 306 -03050823.C34 2 17.9 3605 -25 669 342 65.2 12.3 -7.2 233 7.1 42.3 72.0 318 -03050822.W#N 2 17.4 3730 -13 635 141 70.0 5.3 -10.1 228 7.6 45.5 81.3 173 -03050821.LW1 2 19.1 5309 -6 876 145 63.2 7.7 -8.7 235 7.4 31.6 71.3 182 -03050807.ADM 2 17.1 3114 -53 730 439 47.4 10.6 -9.3 253 8.0 50.2 61.5 608 -03050805.SPS 2 16.0 2409 -148 836 382 44.4 2.4 -9.1 262 7.9 43.1 59.0 798 -03050703.PAH 2 15.8 2873 -49 602 390 36.8 6.9 -13.6 237 7.9 35.3 70.1 454 -03050701.CGI 2 15.1 2935 -47 799 431 61.0 12.6 -14.4 269 7.8 32.8 83.2 580 -03050504.MKL 2 15.6 2334 -16 833 615 59.6 14.3 -9.9 251 7.1 62.0 77.1 842 -03050501.LZK 2 15.9 2390 -18 719 361 67.0 8.6 -11.0 237 7.4 41.7 97.3 397 -99120301.GOK 2 10.2 1811 -12 858 234 47.2 3.3 -21.1 202 8.2 32.4 63.0 262 -99081601.JMS 2 13.6 1255 -165 1044 130 48.5 0.3 -9.9 240 8.1 30.2 89.4 174 -99070900.ONA 2 18.4 3379 -18 992 385 46.0 10.0 -5.8 275 6.5 42.9 49.4 571 -99070400.OSC 2 15.9 1760 -27 1078 101 26.7 0.7 -6.7 320 6.2 28.3 31.6 163 -99060620.HCO 2 14.6 3241 -5 904 65 29.6 1.0 -16.1 175 8.1 26.8 70.8 115 -99060500.IEN 2 12.1 2533 -37 1323 70 52.4 1.0 -11.4 201 8.2 32.9 60.1 191 -99060400.HLC 2 15.7 4348 -16 1101 154 38.3 3.9 -9.3 240 7.5 36.9 40.6 277 -99060200.TBN 2 14.9 2338 -19 838 136 37.3 2.0 -10.3 259 6.5 40.0 21.6 223 -99060123.MKO 2 17.3 3739 0 888 68 38.1 1.6 -10.6 279 7.9 32.2 23.0 135 -99060100.LIC 2 9.1 1877 -49 1439 56 56.8 0.6 -13.7 249 9.2 34.3 62.4 140 -99051621.OMA 2 16.1 4691 0 824 102 38.6 3.1 -14.5 223 8.8 33.7 41.5 176 -99051122.BMQ 2 15.0 3545 -92 1026 40 35.1 0.6 -12.3 259 8.0 21.8 29.6 59 -99050408.JCT 2 13.0 2082 -218 838 355 55.0 0.0 -11.2 254 8.3 46.8 58.7 506 -99050402.GOK 2 13.9 3154 -61 723 366 51.4 9.2 -14.6 240 8.2 36.8 57.5 441 -99050401.ICT 2 12.6 2748 -7 1016 257 31.8 3.7 -14.7 227 7.9 40.5 70.4 415 -99050323.OKC 2 15.2 4117 -15 733 308 43.5 9.2 -13.2 243 7.8 43.2 70.1 401 -99050300.HSI 2 8.0 203 -4 845 168 41.5 0.2 -17.7 222 6.7 28.6 32.1 221 -99042200.END 2 12.7 3301 -34 1156 225 46.1 4.8 -15.4 236 8.1 35.1 48.2 242 -04082700.RDD 2 18.4 3706 -37 940 184 41.0 4.7 -6.9 255 7.1 28.7 60.7 258 -04071823.GFK 2 16.7 3575 -36 1246 117 45.4 2.4 -7.9 310 6.8 35.1 45.5 292 -04071302.GRI 2 15.9 3090 -197 1538 152 29.0 0.0 -7.9 298 8.5 13.8 50.5 173 -04062402.OSH 2 11.1 1428 -30 700 187 62.2 2.7 -16.7 257 6.5 50.9 79.3 234 -04061620.LAA 2 12.3 1494 -63 908 129 51.4 1.5 -9.4 252 7.7 34.1 57.1 369 -04061300.W#N 2 16.4 3866 -17 1255 231 34.6 3.8 -9.2 251 7.9 37.4 44.2 387 -04060701.MOT 2 10.4 295 -316 1541 461 68.3 0.0 -8.4 254 6.7 33.2 82.6 561 -04060621.C02 2 9.9 1824 -59 2285 83 55.5 0.0 -10.8 234 7.9 39.7 69.2 64 -04053023.IND 2 17.3 2618 -10 577 361 58.6 9.2 -9.1 248 6.9 35.7 45.1 369 -04053020.SDF 2 16.6 2653 -2 807 250 52.4 5.8 -9.4 245 6.8 37.1 41.1 317 -04053002.OKC 2 15.5 2559 -32 1162 314 55.7 6.2 -7.3 244 7.0 35.6 70.5 434 -04053002.ICT 2 16.1 3240 -98 992 315 44.2 5.1 -10.4 245 7.9 25.8 56.2 399 -04053000.MCI 2 16.0 3437 -5 863 239 36.5 5.0 -12.8 232 8.3 27.4 42.9 372 -04052922.C33 2 16.5 4081 -4 1356 126 51.4 2.8 -7.8 244 7.4 36.9 74.7 248 -04052921.TOP 2 16.1 3843 -13 936 78 32.5 1.6 -12.5 233 8.0 17.3 39.0 190 -04052421.STJ 2 15.6 3982 -40 991 76 40.4 2.0 -11.9 234 7.7 26.3 67.6 270 -04052300.P#8 2 15.0 3882 -47 1262 228 54.5 5.9 -10.5 233 7.9 34.1 69.9 334 -04052221.MCK 2 13.2 3453 -37 1185 103 72.0 2.9 -12.3 231 8.6 35.5 82.5 224 -04052219.GLD 2 9.9 1898 -54 1700 22 59.0 0.1 -12.7 233 8.4 12.6 69.5 76 -04052122.CID 2 15.4 2960 -48 971 309 36.6 5.6 -11.5 268 7.4 36.1 50.0 390 -53031321.FWH 2 10.8 727 -98 981 119 51.2 0.5 -16.3 248 8.1 30.6 80.9 266 V -55052521.LTS 2 15.0 4060 -25 1509 322 66.4 6.4 -12.3 225 8.6 37.0 53.5 355 V -56041521.GUN 2 11.7 1189 -11 1302 251 72.4 2.1 -13.6 230 7.3 55.7 66.8 370 V -57040221.FWH 2 13.2 3580 -3 942 94 35.8 2.0 -15.8 189 7.9 26.1 52.8 122 V -57052021.TOP 2 14.0 2801 -2 920 142 55.7 3.7 -13.8 207 7.7 48.0 77.2 228 V -57052121.BYH 2 15.7 2854 -5 1106 236 49.7 5.0 -10.9 230 7.2 33.0 92.5 240 V -57061418.PIA 2 15.9 2118 -6 986 394 50.0 7.0 -8.6 252 6.9 52.8 52.1 496 V -59040100.FWH 2 12.6 3068 -26 987 124 42.8 2.7 -17.6 247 9.0 28.0 61.5 142 V -61050800.FSM 2 14.5 2844 -7 1215 261 61.7 5.8 -11.4 240 7.5 42.2 65.9 323 V -61050600.FSM 2 14.3 2667 -12 1121 245 65.5 5.8 -13.1 240 8.3 61.7 43.1 430 V -62052600.OKC 2 14.3 4171 -76 1591 154 33.3 1.2 -12.0 264 8.6 25.3 43.2 228 V -62080700.TOP 2 20.6 6024 -12 1167 160 42.3 5.7 -7.3 250 7.7 32.4 60.6 243 V -64050600.OMA 2 12.7 2395 -61 1048 349 68.6 7.4 -13.8 224 8.8 54.6 89.3 498 V -65041200.FNT 2 11.2 1814 -1 974 166 91.0 3.0 -17.7 250 7.7 46.4 91.6 372 V -66042800.FWH 2 14.1 3342 -17 1291 148 38.0 2.2 -11.8 265 7.2 39.3 49.0 269 V -66030400.HKS 2 12.2 1434 -10 831 138 47.6 1.6 -14.0 234 7.6 49.0 77.8 142 V -67061100.OKC 2 14.4 3497 0 1569 144 32.2 1.2 -11.0 235 8.7 35.0 51.1 260 V -68110400.VPS 2 12.8 1596 -2 812 129 50.5 1.7 -13.4 251 5.9 30.3 72.0 184 V -69041806.VPS 2 15.2 1013 -8 445 370 55.8 3.5 -11.0 248 6.9 42.3 73.3 439 V -69062400.TIK 2 18.4 4403 -4 776 317 37.5 8.7 -9.4 240 7.5 45.3 56.2 431 V -70100600.TIK 2 13.7 1865 -3 772 241 41.1 3.1 -12.2 230 6.7 35.4 55.6 335 V -71022200.JAN 2 12.8 938 -4 930 470 74.7 4.4 -11.8 211 6.7 57.8 77.3 590 V -73052800.MGM 2 16.4 2337 -2 1017 293 53.5 6.0 -7.9 239 6.2 45.6 45.2 386 V -73041600.VCT 2 15.4 2861 -37 1272 385 48.1 6.4 -12.9 231 8.1 35.7 72.2 377 V -74040400.MGM 2 14.8 2955 -2 1017 161 52.0 4.1 -12.8 235 8.2 39.5 59.4 253 V -74040400.BNA 2 14.6 2744 -31 970 209 77.8 5.7 -13.3 238 7.8 57.0 80.2 301 V -74040400.DAY 2 12.8 2185 -7 986 619 90.8 13.5 -13.1 235 7.1 71.9 91.6 919 V -75042500.UMN 2 15.7 5306 -1 837 145 53.3 6.8 -13.8 255 7.3 41.6 61.8 185 V -74060900.UMN 2 17.0 3643 -2 987 363 37.0 8.1 -6.7 231 7.6 41.4 27.5 508 V -75063000.BIS 2 13.6 3158 -76 1566 198 41.8 1.6 -12.3 233 8.6 26.8 55.7 204 V -76042000.SEP 2 13.7 3326 0 1092 305 45.1 6.9 -14.1 240 7.6 33.7 48.9 358 V -77040418.CKL 2 14.1 1633 0 994 247 66.8 4.0 -9.8 231 6.0 52.7 80.0 333 V -78060100.TOP 2 16.2 4279 -1 1160 267 35.7 5.7 -12.7 233 7.6 36.3 57.0 349 V -79041021.SEP 2 12.8 2186 -9 912 345 48.2 6.1 -13.1 228 8.1 42.9 54.3 468 V -79050300.OKC 2 13.9 2775 -4 877 218 73.2 6.0 -12.3 246 7.2 57.7 103.2 279 V -79033000.OMA 2 10.1 1322 -24 1155 223 56.4 2.4 -15.8 232 7.1 49.1 52.9 345 V -80040800.UMN 2 10.2 2256 -3 1473 97 39.6 0.8 -18.5 236 8.4 39.7 92.1 247 V -84060800.TOP 2 16.2 2284 -16 918 560 74.0 12.8 -6.0 237 6.2 49.1 84.6 705 V -84031600.1M1 2 12.2 2339 -1 1056 250 47.1 4.3 -14.9 251 6.9 30.4 55.5 292 V -86072900.OMA 2 16.4 4252 -21 1667 112 48.4 1.3 -10.6 268 8.6 28.2 81.3 151 V -87111600.GGG 2 12.8 1593 -8 723 298 61.9 4.8 -15.3 178 7.9 43.3 65.2 326 V -90061600.LBF 2 16.1 3827 -1 1050 21 42.1 0.5 -10.6 185 8.5 24.5 74.1 95 V -90060300.PAH 2 15.6 2246 -3 1039 274 47.1 4.7 -7.6 251 7.0 57.8 49.8 384 V -91042700.OUN 2 15.8 4387 -8 898 195 50.3 7.2 -11.5 242 7.0 44.2 54.9 370 V -92062800.AMA 2 14.6 3148 -3 1020 83 44.3 1.9 -10.3 249 7.9 32.7 52.7 220 V -92061700.OVN 2 18.7 4878 -1 1119 262 50.4 9.5 -6.5 237 6.9 46.6 64.6 473 V -93042500.OUN 2 11.6 2675 0 1209 113 49.6 2.0 -14.6 235 6.9 35.5 65.5 168 V -93050700.TOP 2 13.7 2046 -7 666 484 58.8 9.7 -13.1 217 7.0 55.4 51.4 644 V -93060700.LBF 2 15.9 4738 0 930 328 59.3 15.3 -8.6 229 7.6 41.9 67.6 583 V -94042600.SEP 2 12.9 2562 -34 1365 201 51.9 2.8 -11.5 258 7.4 41.3 51.0 198 V -95051900.BMX 2 15.7 2868 -5 989 239 39.3 4.5 -9.9 247 6.7 31.9 49.1 230 V -98040900.BMX 2 14.6 2259 -18 642 136 77.9 3.1 -13.9 240 7.9 50.3 100.1 290 V -98041700.BMX 2 14.7 2038 0 704 263 73.4 5.4 -11.9 245 6.8 36.3 98.6 327 V -99050400.OUN 2 13.4 3644 -22 1050 271 41.4 6.5 -14.9 225 8.4 32.0 37.7 343 V -00121618.BMX 2 12.0 1369 -1 737 279 66.9 3.8 -14.1 220 6.7 51.3 90.8 339 V -00092100.ILN 2 12.5 747 -19 1280 611 75.3 3.3 -7.5 240 5.4 64.7 73.0 810 V -01061400.OAX 2 16.8 4639 -1 1278 127 38.6 2.8 -11.3 215 9.0 35.2 48.5 145 V -01112412.JAN 2 13.0 1392 -2 773 366 50.4 4.3 -10.1 225 5.7 52.4 48.8 504 V -01112418.BMX 2 13.4 1498 -1 655 227 52.0 3.0 -11.3 220 6.1 43.1 61.9 319 V -02111018.ILN 2 11.3 1239 0 734 385 54.4 4.3 -13.7 230 6.6 49.5 103.8 417 V -02062400.ABR 2 17.1 4378 0 1112 85 50.6 2.8 -10.5 245 8.2 29.8 57.9 153 V -03050900.OUN 2 17.0 3871 -32 990 336 62.0 13.0 -6.9 235 6.3 53.9 80.1 364 V -94032718.CKL 2 15.5 1965 0 743 344 72.9 6.8 -9.1 233 6.3 54.7 56.0 403 V -81052300.OKC 2 13.1 2411 -70 1142 203 49.1 3.0 -13.7 235 9.0 37.6 49.1 249 V -65041100.LIT 2 12.7 1815 -1 1365 140 52.3 1.4 -11.1 248 7.2 39.4 64.4 212 V -53051121.FWH 2 13.2 1452 -55 1150 122 53.0 1.3 -11.2 248 7.3 40.4 64.4 209 V -90082900.PIA 2 21.0 6470 -2 974 110 33.6 4.0 -7.3 297 7.1 23.3 54.6 147 V -55042411.GUN 2 13.1 1784 -7 917 345 68.7 6.2 -12.7 248 7.1 44.1 85.9 375 V -56040321.HKS 2 13.0 1491 -14 1212 173 82.1 2.0 -12.4 221 7.5 52.1 107.5 267 V -56051221.MTC 2 13.8 2444 -8 1001 124 69.2 3.0 -14.4 266 7.5 25.2 94.3 162 V -60052000.TOP 2 14.3 3120 -23 1112 167 43.1 3.3 -13.3 213 8.2 32.6 58.1 244 V -66060900.TOP 2 15.9 2226 -24 819 296 59.5 6.5 -8.6 223 7.1 47.3 69.8 397 V -68082000.GRB 2 16.1 2780 -11 1217 173 50.0 3.1 -7.3 258 6.4 27.0 43.6 195 V -74040318.BNA 2 13.0 2906 -5 1157 205 63.1 5.0 -15.5 229 8.2 48.6 76.4 333 V -61051500.PIA 2 12.4 1259 -2 817 196 68.7 2.5 -13.0 202 6.6 36.7 80.9 205 V -54050121.TIK 2 13.0 1988 -17 709 242 56.2 4.5 -13.5 203 8.0 39.2 73.2 282 V -55060421.SLN 2 13.4 3594 -5 1422 36 25.3 0.3 -12.7 225 7.9 23.8 30.4 152 V -70061300.COU 2 16.5 3499 -11 949 204 64.2 7.2 -7.8 246 5.5 49.6 57.1 318 V -76032700.1M1 2 11.8 1820 -17 961 187 41.8 2.4 -17.1 230 8.2 57.3 71.8 243 V -04071318.ILX 2 19.0 4958 -10 1102 117 37.5 3.3 -10.9 305 7.9 33.8 45.3 197 V -68051600.LIT 2 15.6 2612 -4 971 250 52.8 5.7 -11.7 260 8.6 45.5 72.5 337 V -65031700.OKC 2 11.1 1628 -3 687 269 91.0 4.4 -17.9 235 7.1 58.8 114.4 325 V -00050901.AIZ 0 13.1 1987 -68 1453 84 35.7 0.5 -11.3 241 8.5 41.9 28.1 204 -00050722.SNY 0 9.8 2015 -39 1845 23 56.1 0.1 -12.4 245 8.7 34.2 64.8 128 -00050707.OGA 0 11.6 1205 -190 787 34 39.5 0.0 -11.3 236 8.2 22.0 47.2 115 -00050323.RBD 0 11.2 940 -3 1077 54 42.9 0.3 -14.6 290 6.2 28.9 58.4 174 -00043001.ABI 0 11.9 2549 -66 1686 111 39.6 0.5 -11.8 268 8.4 26.8 40.5 228 -00042423.LAA 0 5.4 613 -132 2566 97 54.0 0.0 -16.3 278 8.9 29.1 72.7 192 -00042422.EHA 0 6.7 706 -56 2143 58 53.8 0.0 -15.2 295 8.1 25.8 83.4 159 -00042021.BWG 0 11.2 1126 -13 1162 167 52.1 1.4 -13.5 240 7.4 46.8 53.8 253 -00042021.BNA 0 11.2 989 -26 1114 165 53.6 1.3 -13.7 242 7.7 45.4 65.0 244 -00042001.MCI 0 12.4 2093 -43 1300 141 61.9 2.1 -12.3 226 7.0 33.4 81.4 163 -00042000.JCT 0 13.1 2950 -156 1701 170 51.7 0.4 -9.4 253 8.2 40.5 71.8 240 -00041822.SJT 0 7.1 414 -185 3169 -7 49.4 0.0 -9.5 243 8.2 32.3 60.6 45 -00041620.SUS 0 9.5 579 -1 968 46 41.8 0.2 -18.1 247 6.6 30.2 69.5 154 -00041602.GRA 0 10.2 901 -182 1269 251 56.8 0.2 -17.0 244 8.6 34.1 76.8 276 -00033000.SHV 0 12.6 1635 -14 797 147 57.7 2.3 -15.2 267 7.2 33.9 91.9 219 -00032900.HYI 0 15.8 2875 -10 771 106 60.6 3.0 -11.6 251 7.3 36.4 82.8 192 -00032522.BNA 0 8.3 268 -8 1461 34 37.5 0.0 -16.9 270 6.2 23.2 61.3 60 -00032207.MAF 0 11.5 1952 0 562 249 54.6 4.4 -16.4 196 8.3 45.0 77.8 468 -00031600.CSM 0 8.3 808 -99 1327 59 34.5 0.1 -17.7 251 7.6 25.7 34.3 101 -00031022.BHM 0 10.3 614 -95 1034 103 48.9 0.4 -15.8 238 7.0 33.1 49.4 179 -00030923.LRD 0 13.5 2701 -7 1360 -13 41.3 -0.2 -12.5 256 7.5 20.8 59.4 95 -00030920.GFL 0 7.1 1 -425 1416 88 63.6 0.0 -18.7 242 8.1 39.6 77.0 165 -00030900.UNU 0 9.9 1306 -11 1121 172 50.6 1.7 -17.3 203 6.6 39.6 44.1 206 -00030900.CLI 0 9.4 673 -29 1009 196 53.3 1.2 -16.9 202 6.6 39.4 53.8 226 -00030302.PWG 0 12.0 1469 -17 1106 252 60.9 3.3 -12.2 259 6.1 45.0 75.3 323 -00030222.AFW 0 11.1 999 -6 913 256 68.3 2.6 -13.5 238 6.5 36.9 80.1 345 -00022606.CRS 0 13.3 2158 -10 637 191 48.7 3.3 -14.8 239 6.9 25.4 69.2 184 -00022523.FSD 0 7.3 495 -2 929 82 38.3 0.3 -21.9 172 7.7 30.1 52.5 83 -00022405.FAM 0 9.2 437 -46 772 315 46.8 1.1 -18.0 235 6.3 29.2 42.2 331 -00072222.BBW 0 11.9 1462 -1 1218 36 35.2 0.2 -11.1 328 6.5 26.6 43.9 124 -00072220.GLD 0 10.6 1162 -15 1699 26 39.9 0.1 -10.2 319 7.4 19.8 55.8 82 -00072122.BFF 0 9.8 1738 -8 2036 34 42.0 0.0 -9.9 297 7.7 36.2 48.9 131 -00072022.AKO 0 14.0 3465 -7 1063 22 46.2 0.6 -10.2 278 8.3 29.1 64.7 106 -00072000.BVX 0 17.4 3847 -11 1674 30 36.4 0.2 -7.1 298 6.9 26.0 29.2 130 -00071022.RCA 0 13.2 1916 -28 1452 23 41.1 0.2 -9.2 238 7.6 21.4 68.1 95 -00071001.LBF 0 14.7 2947 -100 1740 24 28.1 0.1 -5.6 239 7.8 23.6 37.9 109 -00070922.MHE 0 16.8 3556 -34 1430 6 40.7 0.1 -6.1 258 6.7 18.8 41.5 109 -00070922.GGW 0 13.3 2242 -12 1039 31 46.6 0.5 -11.4 226 7.4 18.7 71.4 74 -00070901.LWT 0 8.7 874 -65 1998 38 58.4 0.0 -11.5 232 8.1 32.4 92.6 236 -00070805.LVN 0 18.2 2722 -69 530 388 37.6 5.8 -9.2 261 8.1 22.9 53.3 407 -00070803.JDN 0 7.6 57 -220 2275 33 69.9 0.0 -11.7 240 7.8 39.2 84.5 167 -00070601.CUT 0 11.7 2058 -14 1543 37 55.5 0.3 -9.9 245 8.5 28.5 78.8 136 -00070523.MCK 0 16.4 3979 -55 1631 151 45.4 1.6 -6.8 254 8.1 24.5 59.5 231 -00070521.RAP 0 14.5 3135 -2 1289 15 44.0 0.3 -10.0 233 8.0 19.5 68.5 93 -00070501.2WX 0 11.2 1574 -93 1339 -29 47.6 -0.2 -12.4 230 8.6 28.2 78.4 64 -00070421.JDN 0 8.1 1033 -47 1927 -17 41.2 0.0 -15.0 209 7.9 26.2 68.3 49 -00070302.GGW 0 10.6 1484 -86 1685 121 67.7 0.4 -12.6 252 7.9 36.1 78.0 267 -00070222.FOD 0 17.4 3585 -43 1097 53 23.7 0.0 -9.5 292 7.5 16.4 31.4 91 -00070201.ABR 0 14.2 3411 -108 1790 100 24.5 0.0 -10.0 259 8.3 16.6 39.9 145 -00070123.ELO 0 13.3 2835 -49 1339 117 57.8 2.1 -13.1 291 7.7 31.9 66.7 228 -00070122.ABI 0 13.9 1505 -15 1776 40 26.6 0.1 -5.4 261 5.7 21.4 25.5 120 -00070100.JLN 0 15.5 2255 -3 786 81 43.6 1.3 -7.6 313 5.9 25.5 56.4 208 -00062923.ELM 0 8.8 332 -11 1098 19 33.4 0.0 -16.5 253 6.2 19.9 82.5 60 -00062923.D07 0 9.6 1600 -26 1649 30 42.4 0.1 -15.7 295 7.7 30.2 50.5 90 -00062901.LAM 0 11.8 506 -57 1728 28 25.5 0.0 -6.5 268 6.3 18.5 25.2 126 -00062519.AIO 0 14.7 2632 -77 1269 122 38.0 1.2 -10.6 279 7.3 29.0 32.0 250 -00062402.RCA 0 11.5 1507 -76 1200 0 40.3 0.0 -11.0 273 7.9 29.4 67.6 159 -00062322.SDA 0 16.8 4294 -9 1398 56 28.6 0.7 -9.2 284 7.3 21.1 46.7 160 -00061522.OKV 0 14.5 746 -31 749 130 32.3 0.5 -8.8 240 6.0 35.1 29.5 198 -00061323.P28 0 14.3 3106 -53 1734 60 41.3 0.3 -10.0 260 8.0 15.7 31.7 91 -00061122.DFS 0 13.5 3143 -11 1597 67 28.6 0.4 -8.2 251 7.7 28.8 45.0 62 -00060400.GLD 0 9.0 1430 -74 2560 51 35.6 0.0 -10.7 313 8.7 29.0 38.3 146 -00060221.CEF 0 12.1 326 -141 1452 156 38.5 0.1 -9.8 279 6.6 44.9 47.0 277 -00052701.SZL 0 13.7 1477 -23 1157 198 50.0 2.1 -9.7 244 6.7 38.9 69.4 232 -00052501.PPA 0 15.2 3731 -83 1597 78 46.6 0.7 -8.0 249 8.4 33.0 60.7 288 -00052501.ADK 0 16.3 4569 -134 1861 108 40.3 0.2 -7.8 255 8.7 36.4 49.3 291 -00052219.AVC 0 10.1 628 -1 1000 2 52.8 0.0 -13.8 256 5.9 28.0 59.1 95 -00052021.VPC 0 13.0 805 -6 1196 15 39.2 0.1 -9.8 231 6.1 19.7 47.6 87 -00050922.IRS 0 12.0 729 -2 928 68 49.6 0.4 -13.6 230 6.9 46.6 41.5 178 -01041105.JCT 0 14.1 1545 -229 832 346 71.9 0.0 -9.7 230 8.5 44.0 97.0 386 -01041004.IND 0 11.4 1318 -107 1240 185 57.8 1.1 -13.8 292 7.2 35.6 68.3 216 -01040321.UNO 0 12.3 1279 -42 722 107 57.2 1.3 -13.7 270 7.4 36.3 60.7 225 -01040300.BFF 0 5.0 0 -9999 1708 161 63.5 0.0 -17.8 241 7.5 37.7 81.7 433 -01032404.ABI 0 10.8 1700 -61 813 65 27.5 0.5 -18.2 289 8.0 17.4 46.6 180 -01031202.FTW 0 11.7 1341 -9 490 161 53.1 1.9 -17.9 240 7.3 37.5 47.3 201 -01031123.BWD 0 10.1 846 -18 912 76 47.4 0.5 -17.4 245 7.7 31.1 69.7 133 -01022500.TOP 0 7.3 153 -15 715 148 78.6 0.2 -21.3 203 6.8 32.9 92.4 170 -00110907.GZH 0 15.4 1005 -3 768 172 47.3 1.4 -7.8 213 6.0 36.2 52.6 220 -00110906.EET 0 14.9 674 -3 539 277 52.5 1.6 -8.6 217 5.7 41.9 58.8 327 -00110121.CID 0 12.2 1537 -17 1087 164 40.8 1.6 -12.1 210 6.0 36.7 41.3 225 -00102323.ELP 0 9.8 1432 -3 1298 24 68.0 0.2 -14.2 201 7.5 36.8 65.9 132 -00102212.MWL 0 13.4 1016 -7 525 152 31.3 0.8 -11.5 208 6.2 22.4 43.6 149 -00101423.INK 0 8.5 757 -27 2381 63 29.5 0.0 -10.8 243 7.2 27.3 48.1 91 -00101408.CNM 0 11.5 1524 -124 1147 79 34.2 0.3 -10.4 246 7.2 29.4 55.6 119 -00101400.SLN 0 11.5 577 -49 879 26 58.0 0.1 -11.3 234 5.7 28.9 63.6 76 -00100401.GCK 0 8.5 341 -281 1869 -16 53.4 0.0 -11.5 263 8.5 38.0 70.8 124 -00090523.GTF 0 7.6 277 -43 1393 8 65.8 0.0 -15.8 219 7.4 34.7 93.3 112 -00090300.ISN 0 10.7 654 -10 754 62 42.1 0.3 -13.8 225 6.8 27.3 72.5 95 -00090120.SLC 0 5.7 78 -67 2129 29 41.1 0.0 -14.3 198 7.4 15.4 53.6 53 -00081820.BUY 0 15.3 1702 -37 1351 58 34.7 0.4 -8.2 275 6.5 38.7 13.2 134 -00081723.IND 0 19.2 4115 -13 791 158 47.3 5.1 -7.9 275 6.9 37.5 49.8 224 -00081720.LEX 0 16.6 2579 -6 1129 81 36.5 1.1 -6.7 284 5.9 24.9 42.3 141 -00081420.AIT 0 16.2 2299 -120 690 282 52.2 3.0 -9.8 267 8.0 37.9 69.5 368 -00080623.CDJ 0 14.7 1350 -119 1250 43 35.9 0.1 -6.8 272 6.3 24.5 54.6 88 -00080601.HNR 0 18.6 4073 -16 990 54 37.6 1.4 -7.0 271 7.3 25.9 55.8 92 -00080522.AIA 0 7.8 312 -3 2875 0 43.4 0.0 -8.3 272 7.7 22.1 49.4 52 -00080502.PIR 0 14.4 2629 -128 1844 202 48.0 0.3 -7.4 270 7.5 30.4 64.1 318 -00080502.ANW 0 11.5 1035 -228 2157 138 37.9 0.0 -6.3 276 7.6 25.6 46.8 227 -00080222.FKL 0 13.7 1168 -22 892 104 26.2 0.5 -9.1 253 5.9 27.0 55.7 145 -00080202.LWT 0 8.3 700 -130 2701 50 46.5 0.0 -8.4 286 8.6 19.4 78.7 94 -00080202.GGW 0 10.8 1193 -207 1955 94 51.1 0.0 -9.6 293 8.0 25.1 71.3 230 -00072622.AIO 0 16.7 3711 -2 964 67 44.8 1.9 -10.2 324 7.6 29.1 43.1 186 -00072501.HON 0 13.9 2463 -99 1314 85 29.5 0.5 -11.1 271 8.3 13.2 40.3 91 -01060123.LWC 0 11.2 1268 -25 1421 113 62.6 0.8 -13.2 305 6.4 37.6 79.8 249 -01060122.P28 0 11.4 1141 -69 1552 80 51.2 0.3 -9.7 308 6.6 21.4 62.5 156 -01053100.CVN 0 8.5 1309 -86 2195 -18 45.9 0.0 -10.8 289 8.3 24.1 38.5 138 -01052801.END 0 13.1 2369 -85 1258 150 47.1 1.6 -12.5 280 8.2 39.8 67.4 370 -01052400.OKF 0 7.6 314 -55 2200 85 59.2 0.0 -15.3 298 7.1 43.3 63.3 244 -01052022.GRK 0 15.6 2852 -21 1408 32 40.1 0.4 -7.9 242 6.8 30.2 75.1 60 -01051801.RUL 0 11.1 1624 -134 2428 24 25.8 0.0 -8.5 258 8.1 18.9 46.6 76 -01051623.BIE 0 13.4 3208 -41 1905 35 30.0 0.1 -10.4 274 7.5 20.5 32.1 103 -01051218.DDH 0 8.9 325 -25 1493 21 36.4 0.0 -16.2 229 6.4 25.9 46.8 102 -01051000.OLU 0 9.6 2423 -73 2081 70 30.6 0.0 -15.8 265 8.8 23.7 36.8 157 -01050823.GBD 0 8.1 447 -90 1828 55 44.5 0.0 -15.8 323 7.4 25.4 50.6 207 -01050701.COT 0 15.9 3113 -16 1068 4 34.1 0.1 -12.2 267 8.1 10.5 56.5 73 -01050700.ADS 0 14.6 2915 -5 1038 115 37.4 2.0 -13.7 248 7.3 23.1 63.5 148 -01050623.BMQ 0 16.4 4217 -12 955 48 38.2 1.3 -13.0 257 7.5 27.3 64.9 143 -01050501.COT 0 14.3 1453 -9 1075 113 48.9 1.2 -9.9 226 7.0 33.1 73.5 169 -01050200.AUD 0 10.0 1544 -80 1896 85 31.2 0.1 -14.7 266 8.2 22.1 40.9 170 -01050101.SLN 0 10.5 1695 -66 1383 122 37.1 0.7 -16.7 295 8.0 24.3 61.4 188 -01050100.P28 0 9.9 1422 -94 1553 70 45.7 0.2 -15.7 309 7.8 24.3 54.0 188 -01042317.STE 0 9.5 775 -5 970 86 55.4 0.6 -18.0 210 6.8 38.9 110.9 170 -01042304.JCT 0 14.1 2210 -11 659 190 53.5 3.8 -11.8 248 7.8 31.4 55.1 214 -01042222.MWL 0 11.8 1193 -8 1373 116 46.2 0.7 -10.2 212 6.2 33.4 58.0 105 -01042123.PIA 0 12.1 1857 -13 1175 79 41.0 0.8 -13.4 257 7.5 25.7 51.8 94 -01042123.CDS 0 10.3 2000 -70 2105 81 55.8 0.0 -11.8 230 7.9 27.2 70.8 141 -01042102.SLN 0 11.5 2072 -206 1218 280 50.2 0.0 -15.1 239 8.7 44.2 73.5 374 -01041702.SJT 0 13.0 1793 -30 989 96 38.8 1.1 -10.9 296 7.0 26.3 65.2 260 -01041700.LBB 0 8.1 406 -65 1861 42 46.3 0.0 -12.1 288 7.1 32.9 80.6 256 -01041500.ABI 0 12.6 2222 -121 1474 76 59.9 0.5 -13.2 249 8.7 28.8 78.5 130 -01041423.ADM 0 14.2 1613 -86 524 248 67.7 3.1 -14.2 254 8.6 38.9 90.8 310 -01041422.PCS 0 13.6 2872 -90 1455 5 57.7 0.1 -10.8 245 8.2 21.5 77.6 85 -01041422.EMP 0 8.9 652 -15 1486 57 59.4 0.2 -16.8 254 7.2 31.9 84.7 218 -01041421.HBR 0 13.9 2647 -29 786 167 70.6 4.4 -14.3 255 8.2 39.1 91.1 239 -03050100.BRL 0 12.7 2707 -10 1047 121 47.3 2.5 -15.8 247 8.2 27.0 50.9 270 -03043021.AIA 0 12.3 2247 -53 863 158 49.0 2.8 -15.7 243 8.1 37.1 49.5 276 -03043003.LIC 0 8.7 1228 -82 574 264 52.2 2.2 -15.9 216 8.8 43.9 59.2 676 -03042900.APA 0 6.3 1056 -56 1639 56 35.9 0.1 -15.6 239 8.3 10.6 65.7 63 -03042600.HRL 0 12.4 1634 -219 1994 5 43.7 0.0 -11.1 286 8.3 25.0 72.5 36 -03042522.FTY 0 11.2 645 -12 811 160 61.6 1.0 -14.4 253 6.7 33.8 66.6 259 -03042520.ANB 0 11.5 783 -1 777 164 64.0 1.3 -14.0 259 6.2 36.4 64.7 319 -03042400.SEP 0 14.4 2485 -6 558 393 62.4 9.8 -14.6 238 7.9 39.1 92.6 485 -03042022.MKL 0 12.5 1017 -22 789 92 57.6 0.9 -14.3 251 6.9 29.0 70.2 188 -03042019.MEM 0 13.1 1682 -6 857 78 50.6 1.1 -14.2 252 7.3 29.0 57.0 148 -03041922.P#0 0 11.7 1623 -17 730 127 72.6 2.1 -19.4 223 7.9 35.5 102.9 148 -03041920.END 0 10.6 1171 -12 629 144 57.4 1.6 -21.0 215 8.4 39.0 99.4 219 -03041907.FDR 0 12.6 1046 -418 613 365 65.8 0.0 -13.9 207 8.9 40.5 101.8 352 -03040720.HOU 0 16.5 2215 -1 373 67 57.9 1.4 -11.4 231 7.6 30.3 77.2 191 -03040718.BPT 0 13.8 933 -139 741 16 59.0 0.1 -12.1 226 7.4 26.5 91.0 110 -03040717.LFT 0 14.1 780 -168 559 29 50.5 0.0 -12.0 233 7.3 29.3 84.8 74 -03040605.C12 0 11.3 655 -128 639 328 69.4 1.0 -14.6 250 7.3 45.3 111.0 697 -03040601.C11 0 12.1 2056 -4 832 109 75.1 2.2 -15.3 251 7.6 26.4 93.3 198 -03040400.LW1 0 13.3 2761 -1 682 153 54.3 3.8 -15.1 242 7.6 32.9 52.2 224 -03040322.HBR 0 9.5 1315 -38 1655 57 42.4 0.2 -14.8 235 7.5 33.0 47.0 130 -03032821.MBS 0 7.7 95 -1 1423 199 68.1 0.1 -17.6 223 6.6 48.9 65.7 252 -03032819.AZO 0 8.9 146 -2 830 200 60.9 0.3 -17.3 225 6.7 54.5 64.3 255 -03031722.SPS 0 10.7 981 -38 1183 127 34.3 0.6 -15.4 236 7.3 19.3 95.8 139 -03031720.SPS 0 10.2 947 -44 1140 35 24.3 0.0 -16.7 216 7.4 15.4 100.9 42 -03031221.PBI 0 14.2 1790 -2 1215 21 36.5 0.2 -12.1 258 7.7 2.8 67.6 -23 -03031218.FPR 0 15.8 2760 -2 892 -28 38.6 -0.5 -14.1 256 8.0 11.8 71.6 86 -01062102.ICT 0 13.9 1917 -38 976 89 37.8 1.1 -11.3 291 7.3 26.8 48.8 202 -01061623.JMS 0 8.9 600 -4 1096 41 40.5 0.2 -18.1 283 7.1 25.4 84.9 82 -01061122.RGK 0 14.3 3269 -77 1618 201 51.8 1.8 -10.9 265 8.4 35.2 56.2 397 -01060502.CSM 0 15.8 3992 -79 1412 107 34.9 1.2 -8.4 251 8.1 28.3 40.7 227 -01060501.LHX 0 8.3 615 -248 1957 94 44.0 0.0 -11.2 243 9.0 29.0 49.3 127 -03062823.RST 0 8.8 203 -71 1471 26 40.8 0.0 -12.1 287 4.8 15.4 60.6 57 -03062822.BH4 0 6.7 253 -82 2374 15 53.7 0.0 -12.2 288 8.0 39.8 64.9 352 -03062820.WSC 0 9.5 432 -25 1288 24 38.2 0.1 -13.2 292 5.0 20.7 57.7 45 -03062800.C07 0 9.3 1323 -51 2202 29 36.5 0.0 -9.3 311 7.4 12.9 41.7 81 -03062800.8V7 0 10.5 2208 -13 2023 82 42.3 0.0 -8.2 320 7.8 44.3 44.0 293 -03062722.8V7 0 11.1 2543 -6 1821 66 38.6 0.2 -8.4 315 7.5 40.0 47.0 258 -03062721.C07 0 8.9 1146 -29 2232 32 35.4 0.0 -9.2 306 7.2 11.7 50.1 74 -03062401.CYS 0 10.5 1054 -23 891 146 67.4 1.5 -8.4 210 6.6 44.6 77.5 258 -03062022.ROW 0 10.0 1448 -1 2438 18 41.2 0.0 -8.3 220 7.9 29.6 51.3 74 -03062022.CVS 0 12.0 1680 -21 1220 96 32.9 0.7 -8.5 224 7.2 20.3 41.0 110 -03062020.CVS 0 12.3 2087 -2 1100 14 22.8 0.0 -9.4 233 7.4 10.8 35.9 48 -03061501.CNM 0 11.3 2677 -1 2178 -48 31.4 0.0 -11.2 338 8.5 17.4 38.2 109 -03061423.HOB 0 9.6 1525 -68 2132 7 32.6 0.0 -11.5 330 8.5 14.0 32.3 24 -03061223.C11 0 20.9 5150 -8 501 190 32.5 5.3 -8.9 269 8.0 41.4 58.8 339 -03061221.AGC 0 13.1 691 -9 1032 158 35.1 0.6 -8.8 227 5.9 34.2 44.2 256 -03060401.TCC 0 11.4 1746 -91 1622 -15 59.6 -0.1 -9.6 288 8.2 44.8 48.7 398 -03060322.LBB 0 13.6 2239 -128 1199 80 45.2 0.5 -9.1 302 7.9 31.8 57.3 316 -03060302.LRD 0 17.3 3023 -81 1418 -4 35.4 0.0 -5.0 285 7.3 27.3 67.7 -12 -03053121.ILM 0 13.5 1237 -102 1265 394 58.4 2.3 -10.4 275 6.3 47.7 74.8 576 -03052001.ADM 0 16.8 3033 -19 1155 81 33.3 1.2 -8.4 288 7.5 14.5 61.0 188 -03051922.FSI 0 15.9 2088 -80 836 131 37.4 1.4 -8.3 246 8.1 40.1 50.7 385 -03051409.C12 0 13.9 2056 -415 1151 505 44.5 0.0 -12.7 290 9.5 25.4 80.3 466 -03051406.LW1 0 15.8 3351 -219 819 259 50.4 0.0 -11.8 274 8.3 12.9 74.5 238 -03051401.C11 0 13.9 3239 -178 1774 132 58.3 0.1 -9.9 286 8.2 22.1 60.4 192 -03051322.CDS 0 12.4 3323 -92 2274 79 49.1 0.0 -10.1 280 8.6 18.1 68.8 98 -03051223.MRF 0 11.6 1914 -2 1612 41 42.7 0.2 -6.0 279 6.7 33.9 49.2 174 -03051019.MLC 0 14.5 849 -221 615 158 58.7 0.0 -8.7 240 7.6 34.0 74.3 199 -03051017.P#Q 0 16.5 2801 -34 619 97 68.4 2.7 -9.2 235 7.2 32.3 77.8 168 -03051000.P#J 0 16.2 3929 -21 888 74 55.8 2.7 -12.5 247 7.6 33.6 64.7 227 -03050922.LEX 0 15.5 2304 -3 715 119 55.3 2.5 -9.5 278 7.4 32.8 69.7 185 -03050921.COU 0 16.1 4338 -12 941 67 45.4 2.2 -11.8 246 7.4 35.8 73.5 264 -03050920.SDF 0 15.2 2300 -15 871 88 52.2 1.8 -10.2 268 7.2 36.6 70.7 247 -03050520.MKL 0 15.8 2332 -17 581 247 71.6 5.8 -11.9 263 7.3 40.2 88.1 300 -03050223.BMX 0 15.4 3487 -10 686 61 44.2 1.6 -13.2 283 6.8 21.9 38.7 114 -03050221.HSV 0 13.0 2237 -40 946 139 42.3 2.2 -13.8 264 7.0 27.8 33.8 201 -03050221.ABL 0 13.6 3056 -5 1063 81 40.9 1.6 -14.7 280 7.2 27.0 27.0 130 -03050219.SJT 0 15.1 4252 -2 1189 17 38.9 0.4 -12.5 277 8.1 4.7 61.7 18 -03050219.ABL 0 12.9 2572 -28 1072 45 27.2 0.5 -13.7 261 6.7 22.6 36.0 82 -03050218.MSL 0 13.0 2367 -24 912 19 25.5 0.2 -14.5 257 7.4 24.2 40.8 60 -03050201.ACT 0 13.6 2339 -88 1301 -44 31.1 -0.3 -11.9 280 8.3 21.3 53.8 -77 -03050102.END 0 14.0 3853 -58 1033 227 43.6 5.8 -13.5 250 7.4 27.5 43.5 247 -03071221.AVL 0 11.9 710 -2 1196 56 37.5 0.2 -8.5 266 5.6 31.7 43.3 103 -03071201.FOE 0 16.7 3598 -41 1289 -96 59.4 -2.4 -10.2 313 7.9 33.9 54.8 89 -03071200.FOE 0 16.2 3683 -11 1441 -16 63.8 -0.3 -11.0 315 7.7 31.9 59.2 109 -03071123.P#H 0 12.6 927 -26 1632 97 59.9 0.3 -9.9 322 7.2 45.3 55.0 319 -03070904.PHP 0 14.6 2161 -292 1066 549 72.4 0.0 -8.6 260 8.8 53.5 55.7 683 -03070900.BH3 0 8.3 1108 -106 2627 277 55.8 0.0 -7.9 250 8.4 55.7 68.2 568 -03070723.LVS 0 8.8 850 -179 2135 85 20.0 0.0 -6.4 329 8.7 24.3 27.9 305 -03070720.DSM 0 18.0 4261 -35 1012 20 39.2 0.6 -9.9 262 8.0 13.2 34.7 79 -03070719.LVS 0 9.9 1337 -68 1800 12 22.3 0.0 -7.2 336 8.0 27.0 21.0 98 -03070600.VTN 0 11.6 1572 -201 1584 157 52.8 0.0 -9.5 273 8.2 30.3 50.1 293 -03070521.RAP 0 8.7 803 -208 2327 67 22.6 0.0 -11.2 272 8.5 6.7 33.0 46 -03070521.P#7 0 10.3 1147 -137 2084 84 43.4 0.0 -10.3 249 8.1 22.9 55.2 239 -03070517.BH3 0 8.9 1171 -147 2263 -14 27.2 0.0 -12.5 293 9.1 15.8 39.6 51 -03070305.GDV 0 9.1 634 -206 1972 120 22.6 0.0 -13.9 250 8.7 30.3 58.1 255 -03063018.AUG 0 11.8 1327 -56 1152 60 42.9 0.5 -12.3 267 5.3 24.4 72.0 118 -03081800.BH5 0 9.0 725 -5 2392 -33 27.4 0.0 -9.3 180 7.6 12.2 31.3 76 -03081322.XRW 0 16.6 1031 -16 519 88 21.6 0.0 -6.2 187 5.5 23.7 39.1 164 -03081202.SEP 0 12.7 373 -104 1300 -113 55.9 -0.2 -8.4 345 6.8 38.0 68.0 -12 -03081200.FWD 0 12.2 1050 -51 2135 -30 50.2 0.0 -8.8 339 6.7 35.0 52.7 68 -03081023.P#9 0 13.9 1702 0 1195 30 41.7 0.3 -9.2 346 6.8 25.8 56.8 104 -03080902.P#C 0 15.5 3216 -71 1472 8 27.4 0.1 -6.4 277 7.9 17.3 40.8 199 -03080900.MIB 0 15.0 3325 -48 1477 39 33.2 0.4 -9.0 291 7.7 10.7 43.9 102 -03080900.P#C 0 14.4 3127 -1 1826 10 25.0 0.0 -5.8 262 7.5 12.2 42.3 64 -03080622.GLD 0 12.9 3132 -2 2338 21 28.1 0.0 -7.1 306 8.2 14.7 32.7 115 -03080601.CNU 0 15.8 2262 -28 1629 -18 34.6 -0.1 -5.1 317 6.6 25.1 42.1 49 -03080600.SUX 0 15.5 1945 -3 996 54 38.2 0.7 -8.6 321 7.0 35.9 44.6 171 -03080521.TOP 0 16.0 2857 -24 1592 -7 30.8 0.0 -6.8 308 6.3 19.6 40.9 101 -03080520.DAN 0 15.0 2224 -8 858 8 18.6 0.0 -10.1 275 6.4 27.6 30.4 121 -03080422.P#R 0 15.1 1771 -64 1131 59 51.1 0.7 -8.5 326 6.5 23.7 72.7 144 -03080401.BVX 0 16.9 2856 -38 1072 96 33.8 1.4 -8.7 308 6.7 18.2 47.9 100 -03080202.LUS 0 9.3 520 -170 1828 -21 47.7 0.0 -8.2 291 7.9 30.7 60.7 11 -03080123.CRL 0 13.5 2544 -8 1131 18 35.3 0.2 -12.9 299 7.9 26.6 36.1 109 -03080103.MCW 0 11.0 914 -111 1515 8 24.1 0.0 -12.2 281 7.0 26.6 47.8 60 -03073123.C31 0 8.6 251 -238 2988 79 50.4 0.0 -8.0 311 8.0 29.8 74.4 268 -03073120.TVL 0 10.6 1275 -24 1488 33 34.5 0.1 -7.4 90 7.8 32.3 17.1 170 -03072700.IWD 0 15.1 1598 -19 1386 149 42.6 1.0 -6.1 276 5.9 27.7 60.4 150 -03071802.BH1 0 13.9 2073 -132 1543 52 64.4 0.2 -6.9 291 7.8 47.0 77.9 171 -03071721.RAP 0 14.6 3713 -127 1972 107 39.2 0.0 -6.2 280 8.5 31.5 54.8 181 -03071320.MSL 0 16.4 2839 -21 1060 37 23.4 0.0 -9.3 310 7.1 4.1 36.8 35 -03071320.DIK 0 9.2 2113 -26 3189 -19 27.9 0.0 -9.3 266 9.0 11.0 36.6 31 -04040721.P#U 0 11.2 1509 -10 1060 103 47.1 1.2 -15.7 268 6.4 35.8 60.8 191 -04040702.SPS 0 8.6 230 -53 980 110 36.0 0.2 -17.3 236 6.3 19.0 53.3 110 -04040700.FTW 0 10.4 641 -8 948 43 57.7 0.3 -14.3 228 6.4 22.9 60.1 83 -04040422.LRD 0 13.8 2148 -1 827 171 49.4 3.0 -12.9 244 7.0 31.5 38.8 217 -04040421.ALI 0 13.2 1124 -3 718 10 40.8 0.1 -13.2 238 7.0 18.0 35.9 100 -04032701.DHT 0 9.5 1004 -128 1142 153 30.2 0.3 -13.4 233 8.2 31.2 63.3 235 -04032623.RAP 0 8.7 1651 -52 1568 172 42.5 0.9 -15.5 205 8.0 26.0 46.8 264 -04031802.FSM 0 8.0 442 -99 1939 211 48.0 0.0 -17.1 278 7.5 37.8 72.5 338 -04031800.P#P 0 9.4 1357 -30 1585 127 45.0 0.5 -17.4 288 7.7 34.4 66.4 269 -04030121.ORD 0 7.2 534 -1 908 208 58.9 1.1 -23.3 222 6.6 37.3 72.6 297 -04030120.RFD 0 6.8 505 -7 892 172 55.3 0.8 -24.3 220 6.8 34.8 71.1 256 -04022416.MCO 0 13.1 534 -37 687 121 47.0 0.5 -10.8 255 5.0 28.8 81.9 156 -04022407.G#5 0 10.5 962 -124 801 -16 47.4 -0.1 -18.2 218 7.7 31.4 83.7 14 -04022316.MSY 0 11.3 0 -9999 417 436 51.3 0.0 -11.2 240 6.1 44.9 86.2 531 -04020601.BTR 0 11.7 57 -172 540 186 69.9 0.0 -13.3 214 7.0 48.1 87.1 199 -04020514.LFT 0 11.1 165 -244 1109 583 49.0 0.0 -11.7 217 6.5 46.0 63.5 611 -04020512.LCH 0 13.6 1421 -64 497 282 49.1 3.0 -12.5 222 6.8 41.7 68.1 319 -04011921.VRB 0 10.3 196 -20 878 -16 82.2 0.0 -14.0 242 5.1 46.9 123.3 207 -03112718.RUE 0 10.5 681 0 396 4 92.3 0.0 -20.1 238 7.0 35.8 100.8 153 -03110923.SAC 0 6.9 156 -14 892 38 24.7 0.0 -25.3 234 7.5 14.4 91.8 77 -03102818.CTY 0 16.5 1074 -53 594 181 37.6 1.2 -7.8 217 6.3 23.6 51.5 193 -03100822.VAD 0 14.1 1355 -7 765 -4 27.1 0.0 -11.2 277 6.4 13.9 52.0 68 -03092718.CBE 0 11.6 969 -2 1256 109 40.4 0.5 -12.3 213 6.1 33.1 58.2 137 -03092620.UIN 0 12.7 1139 -3 844 177 50.2 1.7 -14.6 266 7.9 42.7 77.1 266 -03092619.BRL 0 11.1 906 -34 824 125 50.2 1.0 -14.9 256 6.9 40.9 76.6 149 -03091200.MRF 0 9.8 747 -2 1645 9 36.3 0.0 -6.8 276 6.2 25.5 49.1 163 -03090900.MAF 0 9.9 1214 -1 2565 13 32.3 0.0 -8.4 313 7.4 22.4 35.6 163 -03083123.HUF 0 14.8 27 -163 471 268 39.8 0.0 -6.8 243 6.3 41.6 43.2 340 -03082601.P#4 0 12.9 980 -231 1606 140 42.5 0.0 -9.4 277 7.1 39.4 44.3 283 -03082600.ABR 0 14.2 3471 -76 1925 104 37.8 0.1 -11.4 289 8.6 27.8 43.9 143 -03082221.LOL 0 9.6 944 -94 1467 89 64.9 0.3 -12.3 188 8.3 46.4 77.0 299 -03082119.APX 0 14.4 2077 -120 1359 80 36.1 0.3 -8.3 255 7.1 34.1 35.4 132 -03082100.DLH 0 16.1 2503 -11 1009 166 39.5 2.7 -8.1 226 6.2 24.3 46.3 201 -04051501.PUB 0 3.9 204 -85 2585 153 55.2 0.0 -18.2 268 8.8 42.0 78.8 355 -04051423.COS 0 4.6 230 -87 1664 52 57.1 0.0 -18.0 274 8.2 45.2 68.4 179 -04051300.HBR 0 14.0 4148 -28 1710 172 41.2 1.4 -11.1 244 7.8 44.0 46.5 333 -04051100.LUS 0 8.3 917 -69 1429 204 53.5 0.8 -11.5 237 7.4 28.1 44.2 323 -04050923.CVS 0 5.9 554 -61 3040 -32 23.7 0.0 -12.6 309 9.6 17.1 15.5 78 -04050921.STC 0 9.9 1302 -52 1737 185 49.7 0.5 -14.2 264 7.5 46.1 49.8 400 -04050900.P#A 0 13.8 2438 -42 1008 193 29.0 2.3 -12.7 278 7.7 19.9 36.2 251 -04050822.BH3 0 5.3 996 -6 3054 49 48.0 0.0 -15.0 280 9.6 8.9 60.8 58 -04050522.RIC 0 8.3 824 -38 1493 133 43.8 0.4 -20.4 310 7.1 34.9 60.9 251 -04050101.FWD 0 13.9 2471 -39 907 158 44.9 2.9 -14.8 225 8.3 23.0 58.2 185 -04043021.C12 0 13.3 2483 -8 1029 37 45.1 0.7 -14.1 236 7.9 32.8 46.0 48 -04043020.DYS 0 14.1 2950 -10 638 71 52.3 1.8 -14.3 236 7.8 34.1 51.0 143 -04043018.ABI 0 12.0 2372 -1 1211 -3 32.6 0.0 -13.6 230 7.7 22.8 40.3 -22 -04042920.MLU 0 12.9 972 0 744 72 46.0 0.5 -14.5 232 6.6 29.2 45.8 176 -04042821.G#2 0 10.1 747 -3 1175 139 56.7 0.8 -14.7 252 7.4 32.3 53.8 179 -04042521.CDS 0 7.1 679 -5 2042 20 45.4 0.0 -17.7 276 7.7 27.7 76.8 88 -04042300.SGF 0 9.8 113 -134 794 263 69.4 0.1 -15.2 267 7.5 51.1 79.0 572 -04042300.P#P 0 14.6 2114 -9 448 155 49.9 2.7 -13.6 245 7.2 26.3 46.7 258 -04042223.C12 0 12.6 1615 -11 1173 56 54.8 0.7 -10.8 266 6.6 36.5 68.7 191 -04042222.UMN 0 10.5 412 -29 663 220 60.2 0.9 -17.5 254 8.2 45.7 67.6 357 -04042221.C34 0 11.2 1504 -22 1170 72 53.8 0.8 -15.5 265 7.8 38.9 55.3 252 -04042200.ADM 0 11.7 1347 -25 1310 194 51.9 1.6 -13.2 269 6.8 28.4 68.1 339 -04042122.C12 0 11.5 1550 -3 1449 83 53.3 0.6 -13.2 261 6.6 30.3 65.8 168 -04041921.HOB 0 11.3 2173 -1 1395 86 53.9 1.0 -10.9 235 6.7 32.7 83.0 143 -04041801.MFD 0 10.8 1224 -65 1060 185 23.7 0.0 -16.5 288 8.0 29.7 50.0 245 -04041723.MFD 0 11.9 2519 -15 1046 104 26.5 1.1 -15.5 303 7.2 29.2 37.6 184 -04041105.MFE 0 15.8 2222 -37 402 26 39.9 0.4 -11.6 248 7.5 2.1 69.3 23 -04041019.ILM 0 9.2 180 -45 1165 111 41.2 0.1 -16.1 267 6.0 29.7 69.5 345 -04041001.PRX 0 8.8 516 -75 1780 210 42.3 0.1 -14.1 270 6.7 37.6 59.1 314 -04040818.DAB 0 13.2 1058 -19 810 73 56.2 0.7 -15.8 264 7.7 33.6 94.9 186 -04040815.DHN 0 11.9 877 -2 522 78 53.9 0.6 -15.8 257 6.5 30.9 87.6 111 -04071305.CHE 0 17.6 3151 -107 771 181 49.7 2.9 -8.9 301 7.9 29.7 60.2 300 -04070104.HBR 0 15.7 1988 -45 801 174 24.0 0.0 -8.2 259 7.0 25.9 23.7 276 -04062402.FNT 0 10.0 608 -67 1046 219 50.4 1.0 -15.3 260 6.5 32.1 72.4 270 -04062222.BIS 0 7.2 504 -14 1518 9 56.3 0.0 -18.7 301 6.3 28.7 75.6 88 -04062023.DHT 0 8.4 905 -127 2633 107 47.8 0.0 -9.3 270 8.8 36.3 67.8 192 -04061902.G#1 0 13.2 1631 -27 1122 144 35.1 1.2 -8.6 284 7.3 37.4 58.3 408 -04061900.HDN 0 6.4 316 -26 1668 -40 51.4 0.0 -13.3 257 8.3 36.5 73.3 29 -04061820.FAM 0 15.9 1842 -13 923 65 31.0 0.6 -7.0 271 5.7 23.9 35.7 131 -04061800.LHX 0 12.7 2059 -86 777 206 47.3 2.5 -11.2 235 8.4 37.4 49.6 651 -04052700.CHE 0 8.9 347 -4 1255 145 31.1 0.2 -14.7 268 6.1 31.0 44.9 228 -04052623.TYS 0 14.7 1654 -44 919 199 50.1 2.8 -9.7 275 5.9 37.8 71.9 255 -04052623.OKC 0 15.9 3047 -69 1198 124 56.8 2.5 -7.9 261 6.8 24.4 82.9 79 -04052622.FSD 0 9.4 835 -34 1187 143 35.4 0.6 -17.3 267 7.3 33.1 47.2 271 -04052621.CSV 0 14.4 1608 -15 870 176 59.8 2.8 -9.3 268 6.2 35.9 58.7 237 -04052621.C33 0 13.6 2405 -23 1847 104 55.5 0.4 -9.6 256 7.5 30.4 80.9 72 -04052603.CAI 0 15.4 1463 -14 609 129 47.0 1.5 -11.0 277 7.2 31.6 59.9 153 -04052402.P#7 0 7.8 400 -213 1358 246 41.2 0.0 -15.5 247 8.2 35.3 62.4 412 -04052400.STL 0 16.1 3087 -3 604 162 45.4 3.8 -12.7 253 8.0 28.6 58.7 195 -04052400.CDR 0 5.8 117 -187 2181 178 56.7 0.0 -14.5 256 8.0 30.8 66.1 338 -04052323.BGM 0 14.6 2244 0 781 156 41.1 2.4 -11.9 272 7.8 30.1 44.7 249 -04052320.PIN 0 12.0 1300 -3 1376 120 33.7 0.6 -11.8 267 6.7 36.9 31.3 199 -04052300.ELM 0 12.4 1089 -41 1163 226 43.8 1.5 -9.7 281 5.7 46.2 46.0 359 -04052201.G#1 0 12.3 2404 -84 1771 261 33.8 0.6 -8.2 246 7.9 36.9 50.5 385 -04052201.SNY 0 7.0 484 -214 2287 78 62.8 0.0 -12.7 227 9.0 42.4 81.2 214 -04052123.HYS 0 12.7 3460 -27 2109 75 39.7 0.0 -10.8 236 8.6 29.0 45.1 157 -04052100.FKL 0 14.7 2440 -9 772 269 42.7 4.7 -10.6 299 6.4 28.6 49.2 346 -04052100.DEN 0 9.0 1781 -3 1934 76 49.3 0.1 -11.5 231 8.4 30.6 60.1 225 -04051723.DSM 0 13.3 1669 -24 854 23 36.8 0.2 -11.5 251 6.5 26.2 51.1 132 -04051723.PUB 0 9.2 546 -83 1212 147 55.3 0.5 -11.9 251 7.8 44.9 72.1 222 -04051601.9V9 0 7.5 608 -65 1315 120 61.8 0.5 -19.3 286 7.0 35.7 85.8 189 -04051521.PIR 0 6.8 724 -30 1545 91 60.8 0.3 -21.3 289 7.3 36.7 70.4 224 -04051520.Y26 0 7.0 965 -32 1206 89 60.4 0.7 -23.7 287 7.8 40.0 67.1 217 -99053023.P07 0 12.1 2286 -113 1897 53 39.7 0.1 -8.5 315 7.8 22.5 45.3 165 -99052800.FTW 0 12.2 1104 -4 954 41 33.8 0.3 -12.6 256 6.8 24.6 36.5 103 -99052503.FST 0 10.3 1116 -185 1882 122 53.5 0.0 -9.7 271 8.3 44.1 67.4 157 -99052502.INK 0 11.4 1576 -110 1665 119 56.3 0.4 -10.0 270 7.8 39.9 60.4 191 -99052420.ABQ 0 8.1 781 -71 1338 71 34.2 0.2 -13.9 212 8.5 24.7 44.7 132 -99052220.TUL 0 16.0 3471 -3 869 32 31.1 0.6 -12.1 269 7.3 20.4 36.1 91 -99052200.SNY 0 8.7 1439 -7 1674 53 48.7 0.2 -12.8 266 7.7 28.2 65.4 147 -99052123.RAP 0 8.6 1729 -70 1711 131 43.6 0.4 -16.2 256 8.7 23.0 67.0 178 -99052001.MOT 0 8.0 903 -1 1506 2 27.5 0.0 -17.4 240 7.0 14.4 59.7 47 -99051700.LAA 0 7.5 817 -141 1731 124 65.0 0.1 -15.0 234 8.6 43.8 78.0 361 -99050519.MVN 0 12.9 1777 -10 790 108 57.7 1.8 -14.1 237 6.6 41.0 44.8 194 -99043001.INK 0 12.4 2333 -60 967 95 52.8 1.8 -11.4 237 8.1 32.9 71.8 280 -99042900.BIL 0 6.5 60 -143 1109 133 46.8 0.0 -17.8 182 7.5 39.8 84.0 324 -99042800.EVV 0 9.5 305 -3 1146 22 26.2 0.0 -15.6 225 6.4 18.9 38.1 56 -99042701.OKC 0 8.9 873 -24 1056 47 27.4 0.2 -20.3 275 7.9 23.0 44.2 88 -99042322.LOZ 0 12.8 1995 -5 979 77 37.3 1.0 -11.6 287 6.9 30.4 44.4 71 -99042319.EZF 0 10.2 1142 -51 1722 106 57.2 0.3 -14.2 276 6.9 38.0 68.5 172 -99042203.GOK 0 12.3 2307 -132 894 364 53.9 3.4 -16.0 254 8.5 31.2 54.6 401 -99042123.BMI 0 11.6 1687 -24 839 261 53.4 3.9 -16.4 252 7.8 45.9 57.4 408 -04083002.GCK 0 10.7 1029 -108 1687 204 32.5 0.2 -8.1 315 6.8 29.0 26.2 278 -04083000.SUX 0 10.7 779 -7 1471 199 42.6 0.6 -12.9 289 6.7 36.3 45.9 296 -04082622.C23 0 10.2 983 -43 1349 25 41.1 0.1 -15.8 254 7.2 17.8 70.6 46 -04082621.MCW 0 15.4 2478 -27 1087 26 46.1 0.5 -9.9 239 7.0 37.9 68.9 181 -04082522.FSM 0 18.2 3688 -45 1240 101 33.9 1.6 -6.7 244 6.2 16.5 39.6 113 -04082522.BIS 0 10.2 2077 -41 1811 74 38.1 0.2 -15.2 230 8.4 22.8 43.2 103 -04082503.MHK 0 19.2 4217 -59 627 274 31.2 5.7 -7.9 224 7.5 31.4 51.8 392 -04082501.MHK 0 18.9 4262 -45 721 150 29.9 3.2 -7.4 240 7.1 28.3 50.9 241 -04082020.BGM 0 14.6 1425 -21 712 95 53.2 1.2 -9.5 238 5.9 38.1 53.7 106 -04082018.ORH 0 15.1 2067 -19 1051 47 40.0 0.6 -8.9 256 6.1 29.0 39.9 132 -04081918.LBE 0 14.4 1183 -7 597 105 39.9 0.8 -8.7 270 5.6 40.5 44.4 152 -04081901.PIA 0 13.9 1294 -107 1203 377 40.4 1.6 -7.9 277 5.6 39.8 43.3 465 -04081822.BRL 0 15.3 2600 -41 963 377 41.3 6.8 -9.4 276 6.6 42.5 42.9 508 -04081421.LIC 0 9.9 1288 -66 1242 15 32.2 0.1 -10.2 333 7.8 25.5 42.7 65 -04080321.OAX 0 18.7 4816 -44 1389 92 36.9 1.7 -5.9 259 7.0 23.6 38.1 189 -04080202.Y26 0 15.4 3187 -169 1209 336 55.2 1.6 -9.3 291 8.1 28.5 83.2 385 -04080123.Y22 0 8.5 1290 -28 3011 -1 45.9 0.0 -10.5 298 8.6 30.2 71.2 158 -04073101.GAG 0 14.4 2006 -116 1300 54 42.0 0.3 -6.2 308 6.7 14.8 44.7 98 -04072102.FSD 0 19.9 4659 -49 869 261 26.0 5.3 -5.9 278 7.3 28.0 37.4 426 -99081101.HLC 0 17.4 3928 -33 1289 71 38.3 1.3 -5.1 243 6.7 21.0 34.5 152 -99081023.AKO 0 14.9 2910 -32 1271 87 33.9 1.0 -6.5 232 7.6 22.7 45.7 163 -99080901.DIK 0 12.0 2409 -98 1891 48 58.5 0.1 -10.8 267 8.5 29.7 54.5 94 -99080822.2WX 0 10.3 1972 -32 2526 39 44.1 0.0 -8.8 262 8.3 27.2 41.0 117 -99080702.RAP 0 12.7 921 -36 1200 35 33.6 0.1 -6.6 268 6.3 20.0 48.7 72 -99080301.LWT 0 8.5 449 -155 1772 53 48.3 0.0 -10.3 278 7.8 29.4 70.4 131 -99073100.JKL 0 15.8 3605 -30 1833 89 22.3 0.0 -5.9 355 6.7 22.8 19.6 158 -99073020.IPT 0 15.0 2685 -12 1238 32 34.0 0.4 -8.7 319 6.3 16.0 50.7 72 -99072922.FVX 0 14.5 1431 -13 1556 81 34.3 0.3 -6.0 327 5.6 22.6 48.0 117 -99072902.XVG 0 12.7 1459 -186 1710 319 58.3 0.1 -9.5 302 7.7 41.9 73.8 381 -99072900.ADG 0 14.8 1974 -6 1415 63 37.3 0.5 -9.4 298 7.1 21.7 66.3 118 -99072420.MHT 0 14.8 1594 -17 1088 66 27.8 0.5 -9.7 275 6.5 25.2 56.1 134 -99072319.RAP 0 10.6 1320 -19 2145 52 38.7 0.0 -7.5 263 7.3 22.5 54.0 87 -99072300.FAR 0 16.2 2819 -34 1355 81 35.4 0.9 -8.5 247 7.6 27.9 55.9 137 -99071923.GDV 0 11.9 1807 -31 1654 21 41.3 0.1 -11.2 254 7.9 18.9 69.4 67 -99071302.FAR 0 12.1 1948 -48 1552 125 38.2 0.7 -12.5 297 7.2 27.2 61.0 158 -99071302.DVL 0 10.4 1453 -76 1761 69 42.5 0.1 -13.5 288 7.5 28.3 62.4 124 -99071300.OLF 0 9.2 1101 -38 2374 25 49.7 0.0 -10.3 281 7.3 26.5 65.7 106 -99071202.AIA 0 9.4 1094 -73 1844 -8 27.8 0.0 -11.3 327 8.0 26.7 47.0 79 -99070804.GDV 0 14.2 2058 -209 1364 472 61.7 0.0 -7.6 251 8.0 40.8 78.6 551 -99070421.ERY 0 19.1 3756 -61 791 95 32.9 1.8 -6.7 267 8.2 22.2 36.6 98 -99070207.SFD 0 9.5 32 -374 1535 254 82.4 0.0 -10.7 263 7.4 45.0 92.7 464 -99070103.SWO 0 18.3 2994 -18 703 229 51.1 5.8 -4.6 303 6.4 25.9 51.9 297 -99070103.GCK 0 15.2 2113 -124 873 95 73.0 1.0 -6.5 294 7.5 37.6 74.8 319 -99063023.LBF 0 9.7 291 -114 1136 0 76.3 0.0 -12.3 289 6.9 54.3 115.6 214 -99062801.BGD 0 13.8 2864 -63 2251 73 37.7 0.0 -5.0 266 8.5 22.5 43.1 130 -99062522.DIK 0 12.8 2775 -1 1732 -52 57.7 -0.4 -10.3 230 8.2 35.4 58.9 132 -99062501.VTN 0 11.7 1035 -41 1545 55 41.3 0.2 -8.2 282 6.6 23.6 41.7 120 -99062400.BGD 0 12.2 2544 -17 2195 10 13.6 0.0 -6.5 288 7.8 22.6 35.1 91 -99060601.P07 0 11.8 1543 -130 1771 -31 45.2 0.0 -8.7 243 7.9 18.4 58.3 32 -99060523.LBF 0 10.7 2070 -28 1957 91 62.6 0.1 -12.9 197 8.5 25.9 90.4 131 -99060302.IML 0 10.0 869 -198 1657 237 43.7 0.0 -11.0 225 8.5 39.8 66.5 421 -99060202.GCC 0 6.3 226 -83 1883 18 41.3 0.0 -15.4 262 8.3 26.0 42.6 126 -99060200.FTW 0 16.8 3982 -31 1338 62 35.0 1.0 -11.1 275 8.5 25.7 60.3 144 -99053102.MHK 0 11.6 903 -51 1360 108 32.8 0.3 -11.3 270 6.9 30.0 24.5 179 -99120303.ADM 0 9.7 1355 -50 974 250 42.8 2.4 -22.1 217 8.5 35.9 65.7 332 -99112303.RBD 0 13.2 1077 -16 789 138 48.1 1.2 -13.6 235 6.4 25.1 60.9 176 -99112302.HBR 0 8.7 124 -124 660 53 47.7 0.0 -17.1 219 6.7 41.5 75.7 132 -99100823.FSI 0 10.1 649 -14 1313 5 36.2 0.0 -13.6 219 6.3 14.3 67.9 56 -99092600.GKY 0 13.1 1483 -15 1429 43 28.0 0.2 -9.4 340 6.3 21.5 55.3 182 -99092522.D07 0 6.4 163 -199 2219 136 65.7 0.0 -15.8 242 8.3 31.8 105.7 206 -99092004.RRC 0 11.2 292 -200 1044 70 37.2 0.0 -11.2 270 6.7 28.8 60.6 216 -99092000.OKC 0 11.1 1068 -42 1896 56 39.5 0.0 -10.1 290 6.8 29.0 60.9 190 -99091923.CSM 0 11.9 1645 -3 1885 18 41.3 0.0 -9.8 280 7.0 27.5 64.0 178 -99091920.CGZ 0 11.2 802 -16 1905 19 39.1 0.0 -8.7 245 6.5 16.0 60.3 61 -99091207.SLP 0 15.6 2094 -69 507 92 45.4 1.3 -10.8 271 8.2 16.8 55.8 121 -99091200.LBL 0 11.9 1180 -121 1590 31 43.2 0.1 -9.0 275 7.8 25.7 65.5 84 -99091122.HLC 0 12.4 1517 -36 1221 59 37.8 0.4 -11.3 253 7.4 21.0 66.2 94 -99091101.AFW 0 13.1 1250 -24 1970 21 29.5 0.0 -7.4 297 6.2 21.7 52.8 139 -99082300.ABR 0 11.7 1432 -38 1851 61 40.1 0.1 -9.6 289 6.9 20.3 45.5 101 -99082104.HON 0 13.3 1187 -244 1155 197 38.1 0.0 -8.9 281 7.4 31.4 54.2 238 -99082100.LBF 0 9.8 20 -311 1794 44 34.8 0.0 -7.8 321 7.1 19.7 46.1 126 -99082022.DIK 0 11.7 1445 -10 1669 21 33.6 0.1 -7.8 298 6.3 17.8 36.0 58 -99081922.MLS 0 7.1 393 -105 3278 19 33.8 0.0 -10.0 244 8.6 22.0 37.3 120 -99081800.RRT 0 11.4 1524 -26 847 90 49.2 1.1 -17.7 268 7.3 32.2 62.0 126 -99081400.ALB 0 16.8 1843 -4 701 196 38.5 2.3 -6.3 249 5.8 29.9 48.4 252 -99081202.GCC 0 10.6 877 -99 1162 63 34.5 0.2 -10.2 218 7.5 17.7 54.6 98 +FILENAME CAT MLMIXR ML CAPE ML CIN MLCL(MAGL) 0-1SRH 0-6KT STPC 500 T (C) 500DIR 7-5 LR 0-3(KT) 0-9(KT) 0-3 KM SRH (M2/S2) +00042320.TXK 2 12.9 1702 -1 657 134 61.7 2.3 -14.0 250 6.5 32.8 76.6 166 +00042001.PPF 2 13.5 2614 -50 1216 227 59.9 4.7 -12.9 234 7.5 39.7 73.5 244 +00032900.FTW 2 13.1 2058 -42 1069 83 49.7 1.3 -15.2 245 8.0 21.9 87.1 126 +00032304.SJT 2 11.9 1680 -119 896 119 61.1 1.1 -15.5 212 9.1 38.4 66.9 217 +00031622.ATT 2 9.4 1019 -7 1566 12 45.8 0.0 -17.5 249 8.0 34.4 53.7 159 +00021323.LRF 2 9.2 1256 -9 1066 82 46.9 0.8 -21.2 249 7.5 32.3 51.4 114 +00010323.MEI 2 13.4 1148 -15 769 241 57.2 2.6 -10.0 226 6.1 38.8 71.2 288 +00010319.GWO 2 12.8 1168 -9 770 202 66.4 2.4 -13.0 223 7.5 47.3 75.1 246 +03050500.UMN 2 13.8 2392 -10 773 341 66.3 8.2 -13.4 237 7.7 49.1 93.8 411 +03050500.JBR 2 15.7 2713 -22 862 266 57.8 6.9 -10.7 240 7.1 50.5 82.9 440 +03050421.TUL 2 16.1 3621 -15 843 147 63.1 5.3 -11.7 230 7.3 45.6 100.2 160 +03050421.MKC 2 13.7 2002 -67 478 479 68.4 8.5 -14.6 224 7.9 48.1 89.8 508 +03050420.P#F 2 15.7 3397 -1 660 166 58.5 5.5 -12.7 230 7.8 34.3 100.9 195 +03050321.P#T 2 12.7 3156 -2 1967 61 36.2 0.0 -9.8 247 7.5 27.2 67.1 207 +03042503.JAN 2 13.5 2568 -27 924 257 44.3 4.9 -15.4 255 7.7 41.1 76.9 279 +03041922.PNC 2 11.5 1157 -40 665 212 87.9 2.5 -17.9 223 7.3 46.5 111.5 242 +03041523.CDS 2 10.7 1020 -106 1534 326 74.0 1.0 -12.4 234 7.5 56.1 83.8 531 +03041522.LBB 2 8.8 883 -53 1986 116 77.2 0.0 -11.7 243 7.5 48.5 87.4 276 +03040702.CLN 2 13.1 488 -133 780 363 62.7 0.8 -11.4 244 7.1 33.6 74.1 411 +03040623.ESF 2 15.8 1847 -29 621 166 51.8 2.6 -11.0 246 6.8 26.8 50.8 161 +03032722.MIA 2 12.4 299 -31 1074 187 48.8 0.4 -10.5 261 5.8 20.5 87.0 197 +01061900.ROS 2 13.6 2218 -30 1076 140 67.7 2.9 -11.1 250 8.2 40.5 73.6 279 +01061401.LNK 2 17.2 4665 -15 1190 173 39.2 4.3 -10.5 215 8.3 32.6 50.7 217 +01061120.ILL 2 14.7 3400 -120 1255 270 56.1 3.4 -10.8 259 8.6 41.9 54.8 448 +01060222.LOZ 2 9.7 164 -10 898 117 51.4 0.2 -13.4 270 5.3 39.8 66.8 189 +01053000.AMA 2 13.0 2887 -76 1322 166 48.4 2.2 -10.1 246 8.4 38.6 50.6 216 +01052902.LHX 2 10.9 1698 -120 1285 185 52.1 1.0 -10.0 251 8.2 38.9 60.5 365 +01052118.OZW 2 12.5 494 -2 775 133 33.4 0.4 -10.3 188 5.6 34.2 36.9 174 +01052022.MIN 2 16.9 3331 -2 711 122 47.8 3.2 -11.0 244 7.3 36.0 67.7 201 +01051022.MIW 2 12.8 2912 -24 1091 65 36.4 1.0 -16.0 255 7.9 28.8 43.0 141 +01051001.FBL 2 9.5 2106 -90 1776 330 50.0 1.0 -16.6 265 8.2 42.9 50.3 516 +01050200.AUM 2 11.2 1434 -74 1331 179 38.8 0.9 -13.3 251 7.5 36.0 52.3 237 +01042202.GBD 2 12.6 2145 -40 777 165 61.8 3.5 -13.6 229 7.8 41.6 62.6 328 +01041423.P28 2 12.3 2168 -54 827 145 76.4 3.1 -16.2 256 8.3 45.0 89.5 235 +01041117.LWD 2 11.9 968 -3 632 282 77.0 2.7 -15.1 208 7.5 38.2 81.4 327 +01040918.BVI 2 10.7 1326 -11 1210 102 57.2 1.0 -15.4 266 7.7 32.1 32.1 174 +01022422.SGT 2 11.8 1020 -15 967 335 52.8 3.0 -14.3 213 7.7 53.6 64.9 450 +00110820.HEZ 2 15.9 2158 -6 881 236 47.1 4.0 -8.5 204 6.2 29.0 68.5 266 +00103122.HLC 2 11.0 1274 -14 954 110 47.4 1.1 -14.1 202 7.4 32.6 74.4 169 +00092022.DAY 2 13.9 1299 -7 971 215 63.4 2.8 -8.2 237 6.1 37.5 61.0 237 +00072601.OTG 2 14.5 2869 -49 1055 88 42.5 1.7 -12.6 290 7.2 33.4 41.3 161 +00072523.RWF 2 14.6 2791 -13 1068 96 39.4 1.6 -12.0 275 7.0 29.2 35.8 163 +00071122.BKX 2 14.7 1167 -47 944 134 42.8 1.1 -7.8 261 6.8 27.2 67.9 205 +00070601.SNY 2 13.6 2847 -18 1681 52 57.5 0.5 -7.4 248 8.1 19.0 74.4 122 +00052319.BWG 2 13.7 2114 -41 1128 167 38.6 2.0 -11.4 294 6.9 36.9 62.8 278 +00051722.LXN 2 14.0 3552 -16 910 111 27.5 1.8 -13.9 169 8.4 28.1 44.5 170 +00051200.ALO 2 16.5 4382 -13 1110 168 51.1 5.6 -7.9 254 6.7 33.2 51.6 199 +00050101.MWL 2 13.0 2207 -103 1176 253 47.3 2.4 -12.4 227 8.2 40.3 37.8 297 +00042323.SHV 2 13.4 2001 -19 928 216 58.9 4.2 -13.0 261 6.7 41.9 60.0 296 +04051923.GFK 2 11.2 967 -44 828 233 54.9 2.1 -16.6 243 7.2 39.5 86.1 229 +04051302.ICT 2 15.9 3157 -12 538 223 36.4 4.3 -9.4 232 6.4 23.8 51.5 245 +04051101.LIC 2 9.0 1549 -59 1592 233 43.4 1.0 -11.5 244 8.4 35.1 46.6 395 +04042022.PIA 2 12.4 1852 -11 728 320 36.4 3.6 -14.7 235 6.2 38.5 40.1 488 +04032718.DDC 2 10.0 1332 -8 893 190 41.4 1.7 -16.6 206 7.5 30.8 47.5 198 +04030418.ABI 2 10.7 626 -20 1108 319 46.5 1.4 -13.7 196 7.0 40.3 84.2 350 +03111718.HOU 2 16.4 1980 -1 445 137 48.2 2.2 -12.4 207 6.6 24.0 77.0 158 +03111223.MFD 2 8.3 64 -56 890 219 99.1 0.1 -15.7 261 5.7 55.1 123.1 275 +03111220.MIE 2 9.7 388 -1 757 123 91.0 0.5 -15.6 258 5.7 47.1 117.3 205 +03082201.JXN 2 17.2 3046 -36 1091 255 31.0 3.6 -5.9 285 6.6 34.4 33.2 304 +03072122.AVP 2 14.3 1810 -16 1228 162 51.1 1.9 -7.9 239 5.6 45.7 49.9 148 +03072104.CID 2 17.8 2344 -22 462 187 48.9 3.6 -7.0 291 7.0 34.2 63.6 237 +03072101.ALO 2 15.0 1859 -107 921 156 49.6 1.5 -8.0 297 7.0 28.2 58.2 248 +03062500.HON 2 17.0 3737 -23 1021 335 52.2 10.7 -7.4 227 7.5 43.4 61.6 550 +03062422.MHE 2 19.5 5088 -22 717 256 55.5 12.1 -8.0 228 7.9 40.9 58.4 422 +03062421.MHE 2 17.5 3584 -16 768 252 56.0 8.4 -7.9 220 7.8 38.8 57.2 348 +03062302.P#8 2 16.8 3414 -169 1003 367 38.7 1.7 -6.8 227 7.6 30.2 57.1 437 +03062223.P#8 2 17.7 4366 -39 972 253 38.8 7.2 -8.3 246 8.6 34.3 54.7 387 +03061001.P#9 2 12.6 2103 -97 1467 421 51.0 2.8 -11.2 266 7.9 45.5 63.9 651 +03053103.CMI 2 12.6 701 -119 899 482 64.7 1.8 -11.6 292 6.3 36.9 85.1 523 +03053101.ILX 2 12.4 784 -55 1108 474 76.0 3.2 -8.5 294 5.0 45.0 90.9 524 +03051100.UIN 2 14.7 2093 -27 738 302 63.1 6.3 -11.7 240 7.7 43.7 97.9 354 +03051004.C34 2 17.3 3493 -14 749 452 53.6 14.1 -8.8 228 7.7 32.1 77.0 511 +03050923.HBR 2 11.1 1389 -64 2135 137 56.8 0.0 -9.1 231 7.7 35.8 78.1 219 +03050900.C30 2 14.6 1749 -112 819 321 69.8 3.3 -8.9 227 6.8 57.0 72.2 306 +03050823.C34 2 17.9 3605 -25 669 342 65.2 12.3 -7.2 233 7.1 42.3 72.0 318 +03050822.W#N 2 17.4 3730 -13 635 141 70.0 5.3 -10.1 228 7.6 45.5 81.3 173 +03050821.LW1 2 19.1 5309 -6 876 145 63.2 7.7 -8.7 235 7.4 31.6 71.3 182 +03050807.ADM 2 17.1 3114 -53 730 439 47.4 10.6 -9.3 253 8.0 50.2 61.5 608 +03050805.SPS 2 16.0 2409 -148 836 382 44.4 2.4 -9.1 262 7.9 43.1 59.0 798 +03050703.PAH 2 15.8 2873 -49 602 390 36.8 6.9 -13.6 237 7.9 35.3 70.1 454 +03050701.CGI 2 15.1 2935 -47 799 431 61.0 12.6 -14.4 269 7.8 32.8 83.2 580 +03050504.MKL 2 15.6 2334 -16 833 615 59.6 14.3 -9.9 251 7.1 62.0 77.1 842 +03050501.LZK 2 15.9 2390 -18 719 361 67.0 8.6 -11.0 237 7.4 41.7 97.3 397 +99120301.GOK 2 10.2 1811 -12 858 234 47.2 3.3 -21.1 202 8.2 32.4 63.0 262 +99081601.JMS 2 13.6 1255 -165 1044 130 48.5 0.3 -9.9 240 8.1 30.2 89.4 174 +99070900.ONA 2 18.4 3379 -18 992 385 46.0 10.0 -5.8 275 6.5 42.9 49.4 571 +99070400.OSC 2 15.9 1760 -27 1078 101 26.7 0.7 -6.7 320 6.2 28.3 31.6 163 +99060620.HCO 2 14.6 3241 -5 904 65 29.6 1.0 -16.1 175 8.1 26.8 70.8 115 +99060500.IEN 2 12.1 2533 -37 1323 70 52.4 1.0 -11.4 201 8.2 32.9 60.1 191 +99060400.HLC 2 15.7 4348 -16 1101 154 38.3 3.9 -9.3 240 7.5 36.9 40.6 277 +99060200.TBN 2 14.9 2338 -19 838 136 37.3 2.0 -10.3 259 6.5 40.0 21.6 223 +99060123.MKO 2 17.3 3739 0 888 68 38.1 1.6 -10.6 279 7.9 32.2 23.0 135 +99060100.LIC 2 9.1 1877 -49 1439 56 56.8 0.6 -13.7 249 9.2 34.3 62.4 140 +99051621.OMA 2 16.1 4691 0 824 102 38.6 3.1 -14.5 223 8.8 33.7 41.5 176 +99051122.BMQ 2 15.0 3545 -92 1026 40 35.1 0.6 -12.3 259 8.0 21.8 29.6 59 +99050408.JCT 2 13.0 2082 -218 838 355 55.0 0.0 -11.2 254 8.3 46.8 58.7 506 +99050402.GOK 2 13.9 3154 -61 723 366 51.4 9.2 -14.6 240 8.2 36.8 57.5 441 +99050401.ICT 2 12.6 2748 -7 1016 257 31.8 3.7 -14.7 227 7.9 40.5 70.4 415 +99050323.OKC 2 15.2 4117 -15 733 308 43.5 9.2 -13.2 243 7.8 43.2 70.1 401 +99050300.HSI 2 8.0 203 -4 845 168 41.5 0.2 -17.7 222 6.7 28.6 32.1 221 +99042200.END 2 12.7 3301 -34 1156 225 46.1 4.8 -15.4 236 8.1 35.1 48.2 242 +04082700.RDD 2 18.4 3706 -37 940 184 41.0 4.7 -6.9 255 7.1 28.7 60.7 258 +04071823.GFK 2 16.7 3575 -36 1246 117 45.4 2.4 -7.9 310 6.8 35.1 45.5 292 +04071302.GRI 2 15.9 3090 -197 1538 152 29.0 0.0 -7.9 298 8.5 13.8 50.5 173 +04062402.OSH 2 11.1 1428 -30 700 187 62.2 2.7 -16.7 257 6.5 50.9 79.3 234 +04061620.LAA 2 12.3 1494 -63 908 129 51.4 1.5 -9.4 252 7.7 34.1 57.1 369 +04061300.W#N 2 16.4 3866 -17 1255 231 34.6 3.8 -9.2 251 7.9 37.4 44.2 387 +04060701.MOT 2 10.4 295 -316 1541 461 68.3 0.0 -8.4 254 6.7 33.2 82.6 561 +04060621.C02 2 9.9 1824 -59 2285 83 55.5 0.0 -10.8 234 7.9 39.7 69.2 64 +04053023.IND 2 17.3 2618 -10 577 361 58.6 9.2 -9.1 248 6.9 35.7 45.1 369 +04053020.SDF 2 16.6 2653 -2 807 250 52.4 5.8 -9.4 245 6.8 37.1 41.1 317 +04053002.OKC 2 15.5 2559 -32 1162 314 55.7 6.2 -7.3 244 7.0 35.6 70.5 434 +04053002.ICT 2 16.1 3240 -98 992 315 44.2 5.1 -10.4 245 7.9 25.8 56.2 399 +04053000.MCI 2 16.0 3437 -5 863 239 36.5 5.0 -12.8 232 8.3 27.4 42.9 372 +04052922.C33 2 16.5 4081 -4 1356 126 51.4 2.8 -7.8 244 7.4 36.9 74.7 248 +04052921.TOP 2 16.1 3843 -13 936 78 32.5 1.6 -12.5 233 8.0 17.3 39.0 190 +04052421.STJ 2 15.6 3982 -40 991 76 40.4 2.0 -11.9 234 7.7 26.3 67.6 270 +04052300.P#8 2 15.0 3882 -47 1262 228 54.5 5.9 -10.5 233 7.9 34.1 69.9 334 +04052221.MCK 2 13.2 3453 -37 1185 103 72.0 2.9 -12.3 231 8.6 35.5 82.5 224 +04052219.GLD 2 9.9 1898 -54 1700 22 59.0 0.1 -12.7 233 8.4 12.6 69.5 76 +04052122.CID 2 15.4 2960 -48 971 309 36.6 5.6 -11.5 268 7.4 36.1 50.0 390 +53031321.FWH 2 10.8 727 -98 981 119 51.2 0.5 -16.3 248 8.1 30.6 80.9 266 V +55052521.LTS 2 15.0 4060 -25 1509 322 66.4 6.4 -12.3 225 8.6 37.0 53.5 355 V +56041521.GUN 2 11.7 1189 -11 1302 251 72.4 2.1 -13.6 230 7.3 55.7 66.8 370 V +57040221.FWH 2 13.2 3580 -3 942 94 35.8 2.0 -15.8 189 7.9 26.1 52.8 122 V +57052021.TOP 2 14.0 2801 -2 920 142 55.7 3.7 -13.8 207 7.7 48.0 77.2 228 V +57052121.BYH 2 15.7 2854 -5 1106 236 49.7 5.0 -10.9 230 7.2 33.0 92.5 240 V +57061418.PIA 2 15.9 2118 -6 986 394 50.0 7.0 -8.6 252 6.9 52.8 52.1 496 V +59040100.FWH 2 12.6 3068 -26 987 124 42.8 2.7 -17.6 247 9.0 28.0 61.5 142 V +61050800.FSM 2 14.5 2844 -7 1215 261 61.7 5.8 -11.4 240 7.5 42.2 65.9 323 V +61050600.FSM 2 14.3 2667 -12 1121 245 65.5 5.8 -13.1 240 8.3 61.7 43.1 430 V +62052600.OKC 2 14.3 4171 -76 1591 154 33.3 1.2 -12.0 264 8.6 25.3 43.2 228 V +62080700.TOP 2 20.6 6024 -12 1167 160 42.3 5.7 -7.3 250 7.7 32.4 60.6 243 V +64050600.OMA 2 12.7 2395 -61 1048 349 68.6 7.4 -13.8 224 8.8 54.6 89.3 498 V +65041200.FNT 2 11.2 1814 -1 974 166 91.0 3.0 -17.7 250 7.7 46.4 91.6 372 V +66042800.FWH 2 14.1 3342 -17 1291 148 38.0 2.2 -11.8 265 7.2 39.3 49.0 269 V +66030400.HKS 2 12.2 1434 -10 831 138 47.6 1.6 -14.0 234 7.6 49.0 77.8 142 V +67061100.OKC 2 14.4 3497 0 1569 144 32.2 1.2 -11.0 235 8.7 35.0 51.1 260 V +68110400.VPS 2 12.8 1596 -2 812 129 50.5 1.7 -13.4 251 5.9 30.3 72.0 184 V +69041806.VPS 2 15.2 1013 -8 445 370 55.8 3.5 -11.0 248 6.9 42.3 73.3 439 V +69062400.TIK 2 18.4 4403 -4 776 317 37.5 8.7 -9.4 240 7.5 45.3 56.2 431 V +70100600.TIK 2 13.7 1865 -3 772 241 41.1 3.1 -12.2 230 6.7 35.4 55.6 335 V +71022200.JAN 2 12.8 938 -4 930 470 74.7 4.4 -11.8 211 6.7 57.8 77.3 590 V +73052800.MGM 2 16.4 2337 -2 1017 293 53.5 6.0 -7.9 239 6.2 45.6 45.2 386 V +73041600.VCT 2 15.4 2861 -37 1272 385 48.1 6.4 -12.9 231 8.1 35.7 72.2 377 V +74040400.MGM 2 14.8 2955 -2 1017 161 52.0 4.1 -12.8 235 8.2 39.5 59.4 253 V +74040400.BNA 2 14.6 2744 -31 970 209 77.8 5.7 -13.3 238 7.8 57.0 80.2 301 V +74040400.DAY 2 12.8 2185 -7 986 619 90.8 13.5 -13.1 235 7.1 71.9 91.6 919 V +75042500.UMN 2 15.7 5306 -1 837 145 53.3 6.8 -13.8 255 7.3 41.6 61.8 185 V +74060900.UMN 2 17.0 3643 -2 987 363 37.0 8.1 -6.7 231 7.6 41.4 27.5 508 V +75063000.BIS 2 13.6 3158 -76 1566 198 41.8 1.6 -12.3 233 8.6 26.8 55.7 204 V +76042000.SEP 2 13.7 3326 0 1092 305 45.1 6.9 -14.1 240 7.6 33.7 48.9 358 V +77040418.CKL 2 14.1 1633 0 994 247 66.8 4.0 -9.8 231 6.0 52.7 80.0 333 V +78060100.TOP 2 16.2 4279 -1 1160 267 35.7 5.7 -12.7 233 7.6 36.3 57.0 349 V +79041021.SEP 2 12.8 2186 -9 912 345 48.2 6.1 -13.1 228 8.1 42.9 54.3 468 V +79050300.OKC 2 13.9 2775 -4 877 218 73.2 6.0 -12.3 246 7.2 57.7 103.2 279 V +79033000.OMA 2 10.1 1322 -24 1155 223 56.4 2.4 -15.8 232 7.1 49.1 52.9 345 V +80040800.UMN 2 10.2 2256 -3 1473 97 39.6 0.8 -18.5 236 8.4 39.7 92.1 247 V +84060800.TOP 2 16.2 2284 -16 918 560 74.0 12.8 -6.0 237 6.2 49.1 84.6 705 V +84031600.1M1 2 12.2 2339 -1 1056 250 47.1 4.3 -14.9 251 6.9 30.4 55.5 292 V +86072900.OMA 2 16.4 4252 -21 1667 112 48.4 1.3 -10.6 268 8.6 28.2 81.3 151 V +87111600.GGG 2 12.8 1593 -8 723 298 61.9 4.8 -15.3 178 7.9 43.3 65.2 326 V +90061600.LBF 2 16.1 3827 -1 1050 21 42.1 0.5 -10.6 185 8.5 24.5 74.1 95 V +90060300.PAH 2 15.6 2246 -3 1039 274 47.1 4.7 -7.6 251 7.0 57.8 49.8 384 V +91042700.OUN 2 15.8 4387 -8 898 195 50.3 7.2 -11.5 242 7.0 44.2 54.9 370 V +92062800.AMA 2 14.6 3148 -3 1020 83 44.3 1.9 -10.3 249 7.9 32.7 52.7 220 V +92061700.OVN 2 18.7 4878 -1 1119 262 50.4 9.5 -6.5 237 6.9 46.6 64.6 473 V +93042500.OUN 2 11.6 2675 0 1209 113 49.6 2.0 -14.6 235 6.9 35.5 65.5 168 V +93050700.TOP 2 13.7 2046 -7 666 484 58.8 9.7 -13.1 217 7.0 55.4 51.4 644 V +93060700.LBF 2 15.9 4738 0 930 328 59.3 15.3 -8.6 229 7.6 41.9 67.6 583 V +94042600.SEP 2 12.9 2562 -34 1365 201 51.9 2.8 -11.5 258 7.4 41.3 51.0 198 V +95051900.BMX 2 15.7 2868 -5 989 239 39.3 4.5 -9.9 247 6.7 31.9 49.1 230 V +98040900.BMX 2 14.6 2259 -18 642 136 77.9 3.1 -13.9 240 7.9 50.3 100.1 290 V +98041700.BMX 2 14.7 2038 0 704 263 73.4 5.4 -11.9 245 6.8 36.3 98.6 327 V +99050400.OUN 2 13.4 3644 -22 1050 271 41.4 6.5 -14.9 225 8.4 32.0 37.7 343 V +00121618.BMX 2 12.0 1369 -1 737 279 66.9 3.8 -14.1 220 6.7 51.3 90.8 339 V +00092100.ILN 2 12.5 747 -19 1280 611 75.3 3.3 -7.5 240 5.4 64.7 73.0 810 V +01061400.OAX 2 16.8 4639 -1 1278 127 38.6 2.8 -11.3 215 9.0 35.2 48.5 145 V +01112412.JAN 2 13.0 1392 -2 773 366 50.4 4.3 -10.1 225 5.7 52.4 48.8 504 V +01112418.BMX 2 13.4 1498 -1 655 227 52.0 3.0 -11.3 220 6.1 43.1 61.9 319 V +02111018.ILN 2 11.3 1239 0 734 385 54.4 4.3 -13.7 230 6.6 49.5 103.8 417 V +02062400.ABR 2 17.1 4378 0 1112 85 50.6 2.8 -10.5 245 8.2 29.8 57.9 153 V +03050900.OUN 2 17.0 3871 -32 990 336 62.0 13.0 -6.9 235 6.3 53.9 80.1 364 V +94032718.CKL 2 15.5 1965 0 743 344 72.9 6.8 -9.1 233 6.3 54.7 56.0 403 V +81052300.OKC 2 13.1 2411 -70 1142 203 49.1 3.0 -13.7 235 9.0 37.6 49.1 249 V +65041100.LIT 2 12.7 1815 -1 1365 140 52.3 1.4 -11.1 248 7.2 39.4 64.4 212 V +53051121.FWH 2 13.2 1452 -55 1150 122 53.0 1.3 -11.2 248 7.3 40.4 64.4 209 V +90082900.PIA 2 21.0 6470 -2 974 110 33.6 4.0 -7.3 297 7.1 23.3 54.6 147 V +55042411.GUN 2 13.1 1784 -7 917 345 68.7 6.2 -12.7 248 7.1 44.1 85.9 375 V +56040321.HKS 2 13.0 1491 -14 1212 173 82.1 2.0 -12.4 221 7.5 52.1 107.5 267 V +56051221.MTC 2 13.8 2444 -8 1001 124 69.2 3.0 -14.4 266 7.5 25.2 94.3 162 V +60052000.TOP 2 14.3 3120 -23 1112 167 43.1 3.3 -13.3 213 8.2 32.6 58.1 244 V +66060900.TOP 2 15.9 2226 -24 819 296 59.5 6.5 -8.6 223 7.1 47.3 69.8 397 V +68082000.GRB 2 16.1 2780 -11 1217 173 50.0 3.1 -7.3 258 6.4 27.0 43.6 195 V +74040318.BNA 2 13.0 2906 -5 1157 205 63.1 5.0 -15.5 229 8.2 48.6 76.4 333 V +61051500.PIA 2 12.4 1259 -2 817 196 68.7 2.5 -13.0 202 6.6 36.7 80.9 205 V +54050121.TIK 2 13.0 1988 -17 709 242 56.2 4.5 -13.5 203 8.0 39.2 73.2 282 V +55060421.SLN 2 13.4 3594 -5 1422 36 25.3 0.3 -12.7 225 7.9 23.8 30.4 152 V +70061300.COU 2 16.5 3499 -11 949 204 64.2 7.2 -7.8 246 5.5 49.6 57.1 318 V +76032700.1M1 2 11.8 1820 -17 961 187 41.8 2.4 -17.1 230 8.2 57.3 71.8 243 V +04071318.ILX 2 19.0 4958 -10 1102 117 37.5 3.3 -10.9 305 7.9 33.8 45.3 197 V +68051600.LIT 2 15.6 2612 -4 971 250 52.8 5.7 -11.7 260 8.6 45.5 72.5 337 V +65031700.OKC 2 11.1 1628 -3 687 269 91.0 4.4 -17.9 235 7.1 58.8 114.4 325 V +00050901.AIZ 0 13.1 1987 -68 1453 84 35.7 0.5 -11.3 241 8.5 41.9 28.1 204 +00050722.SNY 0 9.8 2015 -39 1845 23 56.1 0.1 -12.4 245 8.7 34.2 64.8 128 +00050707.OGA 0 11.6 1205 -190 787 34 39.5 0.0 -11.3 236 8.2 22.0 47.2 115 +00050323.RBD 0 11.2 940 -3 1077 54 42.9 0.3 -14.6 290 6.2 28.9 58.4 174 +00043001.ABI 0 11.9 2549 -66 1686 111 39.6 0.5 -11.8 268 8.4 26.8 40.5 228 +00042423.LAA 0 5.4 613 -132 2566 97 54.0 0.0 -16.3 278 8.9 29.1 72.7 192 +00042422.EHA 0 6.7 706 -56 2143 58 53.8 0.0 -15.2 295 8.1 25.8 83.4 159 +00042021.BWG 0 11.2 1126 -13 1162 167 52.1 1.4 -13.5 240 7.4 46.8 53.8 253 +00042021.BNA 0 11.2 989 -26 1114 165 53.6 1.3 -13.7 242 7.7 45.4 65.0 244 +00042001.MCI 0 12.4 2093 -43 1300 141 61.9 2.1 -12.3 226 7.0 33.4 81.4 163 +00042000.JCT 0 13.1 2950 -156 1701 170 51.7 0.4 -9.4 253 8.2 40.5 71.8 240 +00041822.SJT 0 7.1 414 -185 3169 -7 49.4 0.0 -9.5 243 8.2 32.3 60.6 45 +00041620.SUS 0 9.5 579 -1 968 46 41.8 0.2 -18.1 247 6.6 30.2 69.5 154 +00041602.GRA 0 10.2 901 -182 1269 251 56.8 0.2 -17.0 244 8.6 34.1 76.8 276 +00033000.SHV 0 12.6 1635 -14 797 147 57.7 2.3 -15.2 267 7.2 33.9 91.9 219 +00032900.HYI 0 15.8 2875 -10 771 106 60.6 3.0 -11.6 251 7.3 36.4 82.8 192 +00032522.BNA 0 8.3 268 -8 1461 34 37.5 0.0 -16.9 270 6.2 23.2 61.3 60 +00032207.MAF 0 11.5 1952 0 562 249 54.6 4.4 -16.4 196 8.3 45.0 77.8 468 +00031600.CSM 0 8.3 808 -99 1327 59 34.5 0.1 -17.7 251 7.6 25.7 34.3 101 +00031022.BHM 0 10.3 614 -95 1034 103 48.9 0.4 -15.8 238 7.0 33.1 49.4 179 +00030923.LRD 0 13.5 2701 -7 1360 -13 41.3 -0.2 -12.5 256 7.5 20.8 59.4 95 +00030920.GFL 0 7.1 1 -425 1416 88 63.6 0.0 -18.7 242 8.1 39.6 77.0 165 +00030900.UNU 0 9.9 1306 -11 1121 172 50.6 1.7 -17.3 203 6.6 39.6 44.1 206 +00030900.CLI 0 9.4 673 -29 1009 196 53.3 1.2 -16.9 202 6.6 39.4 53.8 226 +00030302.PWG 0 12.0 1469 -17 1106 252 60.9 3.3 -12.2 259 6.1 45.0 75.3 323 +00030222.AFW 0 11.1 999 -6 913 256 68.3 2.6 -13.5 238 6.5 36.9 80.1 345 +00022606.CRS 0 13.3 2158 -10 637 191 48.7 3.3 -14.8 239 6.9 25.4 69.2 184 +00022523.FSD 0 7.3 495 -2 929 82 38.3 0.3 -21.9 172 7.7 30.1 52.5 83 +00022405.FAM 0 9.2 437 -46 772 315 46.8 1.1 -18.0 235 6.3 29.2 42.2 331 +00072222.BBW 0 11.9 1462 -1 1218 36 35.2 0.2 -11.1 328 6.5 26.6 43.9 124 +00072220.GLD 0 10.6 1162 -15 1699 26 39.9 0.1 -10.2 319 7.4 19.8 55.8 82 +00072122.BFF 0 9.8 1738 -8 2036 34 42.0 0.0 -9.9 297 7.7 36.2 48.9 131 +00072022.AKO 0 14.0 3465 -7 1063 22 46.2 0.6 -10.2 278 8.3 29.1 64.7 106 +00072000.BVX 0 17.4 3847 -11 1674 30 36.4 0.2 -7.1 298 6.9 26.0 29.2 130 +00071022.RCA 0 13.2 1916 -28 1452 23 41.1 0.2 -9.2 238 7.6 21.4 68.1 95 +00071001.LBF 0 14.7 2947 -100 1740 24 28.1 0.1 -5.6 239 7.8 23.6 37.9 109 +00070922.MHE 0 16.8 3556 -34 1430 6 40.7 0.1 -6.1 258 6.7 18.8 41.5 109 +00070922.GGW 0 13.3 2242 -12 1039 31 46.6 0.5 -11.4 226 7.4 18.7 71.4 74 +00070901.LWT 0 8.7 874 -65 1998 38 58.4 0.0 -11.5 232 8.1 32.4 92.6 236 +00070805.LVN 0 18.2 2722 -69 530 388 37.6 5.8 -9.2 261 8.1 22.9 53.3 407 +00070803.JDN 0 7.6 57 -220 2275 33 69.9 0.0 -11.7 240 7.8 39.2 84.5 167 +00070601.CUT 0 11.7 2058 -14 1543 37 55.5 0.3 -9.9 245 8.5 28.5 78.8 136 +00070523.MCK 0 16.4 3979 -55 1631 151 45.4 1.6 -6.8 254 8.1 24.5 59.5 231 +00070521.RAP 0 14.5 3135 -2 1289 15 44.0 0.3 -10.0 233 8.0 19.5 68.5 93 +00070501.2WX 0 11.2 1574 -93 1339 -29 47.6 -0.2 -12.4 230 8.6 28.2 78.4 64 +00070421.JDN 0 8.1 1033 -47 1927 -17 41.2 0.0 -15.0 209 7.9 26.2 68.3 49 +00070302.GGW 0 10.6 1484 -86 1685 121 67.7 0.4 -12.6 252 7.9 36.1 78.0 267 +00070222.FOD 0 17.4 3585 -43 1097 53 23.7 0.0 -9.5 292 7.5 16.4 31.4 91 +00070201.ABR 0 14.2 3411 -108 1790 100 24.5 0.0 -10.0 259 8.3 16.6 39.9 145 +00070123.ELO 0 13.3 2835 -49 1339 117 57.8 2.1 -13.1 291 7.7 31.9 66.7 228 +00070122.ABI 0 13.9 1505 -15 1776 40 26.6 0.1 -5.4 261 5.7 21.4 25.5 120 +00070100.JLN 0 15.5 2255 -3 786 81 43.6 1.3 -7.6 313 5.9 25.5 56.4 208 +00062923.ELM 0 8.8 332 -11 1098 19 33.4 0.0 -16.5 253 6.2 19.9 82.5 60 +00062923.D07 0 9.6 1600 -26 1649 30 42.4 0.1 -15.7 295 7.7 30.2 50.5 90 +00062901.LAM 0 11.8 506 -57 1728 28 25.5 0.0 -6.5 268 6.3 18.5 25.2 126 +00062519.AIO 0 14.7 2632 -77 1269 122 38.0 1.2 -10.6 279 7.3 29.0 32.0 250 +00062402.RCA 0 11.5 1507 -76 1200 0 40.3 0.0 -11.0 273 7.9 29.4 67.6 159 +00062322.SDA 0 16.8 4294 -9 1398 56 28.6 0.7 -9.2 284 7.3 21.1 46.7 160 +00061522.OKV 0 14.5 746 -31 749 130 32.3 0.5 -8.8 240 6.0 35.1 29.5 198 +00061323.P28 0 14.3 3106 -53 1734 60 41.3 0.3 -10.0 260 8.0 15.7 31.7 91 +00061122.DFS 0 13.5 3143 -11 1597 67 28.6 0.4 -8.2 251 7.7 28.8 45.0 62 +00060400.GLD 0 9.0 1430 -74 2560 51 35.6 0.0 -10.7 313 8.7 29.0 38.3 146 +00060221.CEF 0 12.1 326 -141 1452 156 38.5 0.1 -9.8 279 6.6 44.9 47.0 277 +00052701.SZL 0 13.7 1477 -23 1157 198 50.0 2.1 -9.7 244 6.7 38.9 69.4 232 +00052501.PPA 0 15.2 3731 -83 1597 78 46.6 0.7 -8.0 249 8.4 33.0 60.7 288 +00052501.ADK 0 16.3 4569 -134 1861 108 40.3 0.2 -7.8 255 8.7 36.4 49.3 291 +00052219.AVC 0 10.1 628 -1 1000 2 52.8 0.0 -13.8 256 5.9 28.0 59.1 95 +00052021.VPC 0 13.0 805 -6 1196 15 39.2 0.1 -9.8 231 6.1 19.7 47.6 87 +00050922.IRS 0 12.0 729 -2 928 68 49.6 0.4 -13.6 230 6.9 46.6 41.5 178 +01041105.JCT 0 14.1 1545 -229 832 346 71.9 0.0 -9.7 230 8.5 44.0 97.0 386 +01041004.IND 0 11.4 1318 -107 1240 185 57.8 1.1 -13.8 292 7.2 35.6 68.3 216 +01040321.UNO 0 12.3 1279 -42 722 107 57.2 1.3 -13.7 270 7.4 36.3 60.7 225 +01040300.BFF 0 5.0 0 -9999 1708 161 63.5 0.0 -17.8 241 7.5 37.7 81.7 433 +01032404.ABI 0 10.8 1700 -61 813 65 27.5 0.5 -18.2 289 8.0 17.4 46.6 180 +01031202.FTW 0 11.7 1341 -9 490 161 53.1 1.9 -17.9 240 7.3 37.5 47.3 201 +01031123.BWD 0 10.1 846 -18 912 76 47.4 0.5 -17.4 245 7.7 31.1 69.7 133 +01022500.TOP 0 7.3 153 -15 715 148 78.6 0.2 -21.3 203 6.8 32.9 92.4 170 +00110907.GZH 0 15.4 1005 -3 768 172 47.3 1.4 -7.8 213 6.0 36.2 52.6 220 +00110906.EET 0 14.9 674 -3 539 277 52.5 1.6 -8.6 217 5.7 41.9 58.8 327 +00110121.CID 0 12.2 1537 -17 1087 164 40.8 1.6 -12.1 210 6.0 36.7 41.3 225 +00102323.ELP 0 9.8 1432 -3 1298 24 68.0 0.2 -14.2 201 7.5 36.8 65.9 132 +00102212.MWL 0 13.4 1016 -7 525 152 31.3 0.8 -11.5 208 6.2 22.4 43.6 149 +00101423.INK 0 8.5 757 -27 2381 63 29.5 0.0 -10.8 243 7.2 27.3 48.1 91 +00101408.CNM 0 11.5 1524 -124 1147 79 34.2 0.3 -10.4 246 7.2 29.4 55.6 119 +00101400.SLN 0 11.5 577 -49 879 26 58.0 0.1 -11.3 234 5.7 28.9 63.6 76 +00100401.GCK 0 8.5 341 -281 1869 -16 53.4 0.0 -11.5 263 8.5 38.0 70.8 124 +00090523.GTF 0 7.6 277 -43 1393 8 65.8 0.0 -15.8 219 7.4 34.7 93.3 112 +00090300.ISN 0 10.7 654 -10 754 62 42.1 0.3 -13.8 225 6.8 27.3 72.5 95 +00090120.SLC 0 5.7 78 -67 2129 29 41.1 0.0 -14.3 198 7.4 15.4 53.6 53 +00081820.BUY 0 15.3 1702 -37 1351 58 34.7 0.4 -8.2 275 6.5 38.7 13.2 134 +00081723.IND 0 19.2 4115 -13 791 158 47.3 5.1 -7.9 275 6.9 37.5 49.8 224 +00081720.LEX 0 16.6 2579 -6 1129 81 36.5 1.1 -6.7 284 5.9 24.9 42.3 141 +00081420.AIT 0 16.2 2299 -120 690 282 52.2 3.0 -9.8 267 8.0 37.9 69.5 368 +00080623.CDJ 0 14.7 1350 -119 1250 43 35.9 0.1 -6.8 272 6.3 24.5 54.6 88 +00080601.HNR 0 18.6 4073 -16 990 54 37.6 1.4 -7.0 271 7.3 25.9 55.8 92 +00080522.AIA 0 7.8 312 -3 2875 0 43.4 0.0 -8.3 272 7.7 22.1 49.4 52 +00080502.PIR 0 14.4 2629 -128 1844 202 48.0 0.3 -7.4 270 7.5 30.4 64.1 318 +00080502.ANW 0 11.5 1035 -228 2157 138 37.9 0.0 -6.3 276 7.6 25.6 46.8 227 +00080222.FKL 0 13.7 1168 -22 892 104 26.2 0.5 -9.1 253 5.9 27.0 55.7 145 +00080202.LWT 0 8.3 700 -130 2701 50 46.5 0.0 -8.4 286 8.6 19.4 78.7 94 +00080202.GGW 0 10.8 1193 -207 1955 94 51.1 0.0 -9.6 293 8.0 25.1 71.3 230 +00072622.AIO 0 16.7 3711 -2 964 67 44.8 1.9 -10.2 324 7.6 29.1 43.1 186 +00072501.HON 0 13.9 2463 -99 1314 85 29.5 0.5 -11.1 271 8.3 13.2 40.3 91 +01060123.LWC 0 11.2 1268 -25 1421 113 62.6 0.8 -13.2 305 6.4 37.6 79.8 249 +01060122.P28 0 11.4 1141 -69 1552 80 51.2 0.3 -9.7 308 6.6 21.4 62.5 156 +01053100.CVN 0 8.5 1309 -86 2195 -18 45.9 0.0 -10.8 289 8.3 24.1 38.5 138 +01052801.END 0 13.1 2369 -85 1258 150 47.1 1.6 -12.5 280 8.2 39.8 67.4 370 +01052400.OKF 0 7.6 314 -55 2200 85 59.2 0.0 -15.3 298 7.1 43.3 63.3 244 +01052022.GRK 0 15.6 2852 -21 1408 32 40.1 0.4 -7.9 242 6.8 30.2 75.1 60 +01051801.RUL 0 11.1 1624 -134 2428 24 25.8 0.0 -8.5 258 8.1 18.9 46.6 76 +01051623.BIE 0 13.4 3208 -41 1905 35 30.0 0.1 -10.4 274 7.5 20.5 32.1 103 +01051218.DDH 0 8.9 325 -25 1493 21 36.4 0.0 -16.2 229 6.4 25.9 46.8 102 +01051000.OLU 0 9.6 2423 -73 2081 70 30.6 0.0 -15.8 265 8.8 23.7 36.8 157 +01050823.GBD 0 8.1 447 -90 1828 55 44.5 0.0 -15.8 323 7.4 25.4 50.6 207 +01050701.COT 0 15.9 3113 -16 1068 4 34.1 0.1 -12.2 267 8.1 10.5 56.5 73 +01050700.ADS 0 14.6 2915 -5 1038 115 37.4 2.0 -13.7 248 7.3 23.1 63.5 148 +01050623.BMQ 0 16.4 4217 -12 955 48 38.2 1.3 -13.0 257 7.5 27.3 64.9 143 +01050501.COT 0 14.3 1453 -9 1075 113 48.9 1.2 -9.9 226 7.0 33.1 73.5 169 +01050200.AUD 0 10.0 1544 -80 1896 85 31.2 0.1 -14.7 266 8.2 22.1 40.9 170 +01050101.SLN 0 10.5 1695 -66 1383 122 37.1 0.7 -16.7 295 8.0 24.3 61.4 188 +01050100.P28 0 9.9 1422 -94 1553 70 45.7 0.2 -15.7 309 7.8 24.3 54.0 188 +01042317.STE 0 9.5 775 -5 970 86 55.4 0.6 -18.0 210 6.8 38.9 110.9 170 +01042304.JCT 0 14.1 2210 -11 659 190 53.5 3.8 -11.8 248 7.8 31.4 55.1 214 +01042222.MWL 0 11.8 1193 -8 1373 116 46.2 0.7 -10.2 212 6.2 33.4 58.0 105 +01042123.PIA 0 12.1 1857 -13 1175 79 41.0 0.8 -13.4 257 7.5 25.7 51.8 94 +01042123.CDS 0 10.3 2000 -70 2105 81 55.8 0.0 -11.8 230 7.9 27.2 70.8 141 +01042102.SLN 0 11.5 2072 -206 1218 280 50.2 0.0 -15.1 239 8.7 44.2 73.5 374 +01041702.SJT 0 13.0 1793 -30 989 96 38.8 1.1 -10.9 296 7.0 26.3 65.2 260 +01041700.LBB 0 8.1 406 -65 1861 42 46.3 0.0 -12.1 288 7.1 32.9 80.6 256 +01041500.ABI 0 12.6 2222 -121 1474 76 59.9 0.5 -13.2 249 8.7 28.8 78.5 130 +01041423.ADM 0 14.2 1613 -86 524 248 67.7 3.1 -14.2 254 8.6 38.9 90.8 310 +01041422.PCS 0 13.6 2872 -90 1455 5 57.7 0.1 -10.8 245 8.2 21.5 77.6 85 +01041422.EMP 0 8.9 652 -15 1486 57 59.4 0.2 -16.8 254 7.2 31.9 84.7 218 +01041421.HBR 0 13.9 2647 -29 786 167 70.6 4.4 -14.3 255 8.2 39.1 91.1 239 +03050100.BRL 0 12.7 2707 -10 1047 121 47.3 2.5 -15.8 247 8.2 27.0 50.9 270 +03043021.AIA 0 12.3 2247 -53 863 158 49.0 2.8 -15.7 243 8.1 37.1 49.5 276 +03043003.LIC 0 8.7 1228 -82 574 264 52.2 2.2 -15.9 216 8.8 43.9 59.2 676 +03042900.APA 0 6.3 1056 -56 1639 56 35.9 0.1 -15.6 239 8.3 10.6 65.7 63 +03042600.HRL 0 12.4 1634 -219 1994 5 43.7 0.0 -11.1 286 8.3 25.0 72.5 36 +03042522.FTY 0 11.2 645 -12 811 160 61.6 1.0 -14.4 253 6.7 33.8 66.6 259 +03042520.ANB 0 11.5 783 -1 777 164 64.0 1.3 -14.0 259 6.2 36.4 64.7 319 +03042400.SEP 0 14.4 2485 -6 558 393 62.4 9.8 -14.6 238 7.9 39.1 92.6 485 +03042022.MKL 0 12.5 1017 -22 789 92 57.6 0.9 -14.3 251 6.9 29.0 70.2 188 +03042019.MEM 0 13.1 1682 -6 857 78 50.6 1.1 -14.2 252 7.3 29.0 57.0 148 +03041922.P#0 0 11.7 1623 -17 730 127 72.6 2.1 -19.4 223 7.9 35.5 102.9 148 +03041920.END 0 10.6 1171 -12 629 144 57.4 1.6 -21.0 215 8.4 39.0 99.4 219 +03041907.FDR 0 12.6 1046 -418 613 365 65.8 0.0 -13.9 207 8.9 40.5 101.8 352 +03040720.HOU 0 16.5 2215 -1 373 67 57.9 1.4 -11.4 231 7.6 30.3 77.2 191 +03040718.BPT 0 13.8 933 -139 741 16 59.0 0.1 -12.1 226 7.4 26.5 91.0 110 +03040717.LFT 0 14.1 780 -168 559 29 50.5 0.0 -12.0 233 7.3 29.3 84.8 74 +03040605.C12 0 11.3 655 -128 639 328 69.4 1.0 -14.6 250 7.3 45.3 111.0 697 +03040601.C11 0 12.1 2056 -4 832 109 75.1 2.2 -15.3 251 7.6 26.4 93.3 198 +03040400.LW1 0 13.3 2761 -1 682 153 54.3 3.8 -15.1 242 7.6 32.9 52.2 224 +03040322.HBR 0 9.5 1315 -38 1655 57 42.4 0.2 -14.8 235 7.5 33.0 47.0 130 +03032821.MBS 0 7.7 95 -1 1423 199 68.1 0.1 -17.6 223 6.6 48.9 65.7 252 +03032819.AZO 0 8.9 146 -2 830 200 60.9 0.3 -17.3 225 6.7 54.5 64.3 255 +03031722.SPS 0 10.7 981 -38 1183 127 34.3 0.6 -15.4 236 7.3 19.3 95.8 139 +03031720.SPS 0 10.2 947 -44 1140 35 24.3 0.0 -16.7 216 7.4 15.4 100.9 42 +03031221.PBI 0 14.2 1790 -2 1215 21 36.5 0.2 -12.1 258 7.7 2.8 67.6 -23 +03031218.FPR 0 15.8 2760 -2 892 -28 38.6 -0.5 -14.1 256 8.0 11.8 71.6 86 +01062102.ICT 0 13.9 1917 -38 976 89 37.8 1.1 -11.3 291 7.3 26.8 48.8 202 +01061623.JMS 0 8.9 600 -4 1096 41 40.5 0.2 -18.1 283 7.1 25.4 84.9 82 +01061122.RGK 0 14.3 3269 -77 1618 201 51.8 1.8 -10.9 265 8.4 35.2 56.2 397 +01060502.CSM 0 15.8 3992 -79 1412 107 34.9 1.2 -8.4 251 8.1 28.3 40.7 227 +01060501.LHX 0 8.3 615 -248 1957 94 44.0 0.0 -11.2 243 9.0 29.0 49.3 127 +03062823.RST 0 8.8 203 -71 1471 26 40.8 0.0 -12.1 287 4.8 15.4 60.6 57 +03062822.BH4 0 6.7 253 -82 2374 15 53.7 0.0 -12.2 288 8.0 39.8 64.9 352 +03062820.WSC 0 9.5 432 -25 1288 24 38.2 0.1 -13.2 292 5.0 20.7 57.7 45 +03062800.C07 0 9.3 1323 -51 2202 29 36.5 0.0 -9.3 311 7.4 12.9 41.7 81 +03062800.8V7 0 10.5 2208 -13 2023 82 42.3 0.0 -8.2 320 7.8 44.3 44.0 293 +03062722.8V7 0 11.1 2543 -6 1821 66 38.6 0.2 -8.4 315 7.5 40.0 47.0 258 +03062721.C07 0 8.9 1146 -29 2232 32 35.4 0.0 -9.2 306 7.2 11.7 50.1 74 +03062401.CYS 0 10.5 1054 -23 891 146 67.4 1.5 -8.4 210 6.6 44.6 77.5 258 +03062022.ROW 0 10.0 1448 -1 2438 18 41.2 0.0 -8.3 220 7.9 29.6 51.3 74 +03062022.CVS 0 12.0 1680 -21 1220 96 32.9 0.7 -8.5 224 7.2 20.3 41.0 110 +03062020.CVS 0 12.3 2087 -2 1100 14 22.8 0.0 -9.4 233 7.4 10.8 35.9 48 +03061501.CNM 0 11.3 2677 -1 2178 -48 31.4 0.0 -11.2 338 8.5 17.4 38.2 109 +03061423.HOB 0 9.6 1525 -68 2132 7 32.6 0.0 -11.5 330 8.5 14.0 32.3 24 +03061223.C11 0 20.9 5150 -8 501 190 32.5 5.3 -8.9 269 8.0 41.4 58.8 339 +03061221.AGC 0 13.1 691 -9 1032 158 35.1 0.6 -8.8 227 5.9 34.2 44.2 256 +03060401.TCC 0 11.4 1746 -91 1622 -15 59.6 -0.1 -9.6 288 8.2 44.8 48.7 398 +03060322.LBB 0 13.6 2239 -128 1199 80 45.2 0.5 -9.1 302 7.9 31.8 57.3 316 +03060302.LRD 0 17.3 3023 -81 1418 -4 35.4 0.0 -5.0 285 7.3 27.3 67.7 -12 +03053121.ILM 0 13.5 1237 -102 1265 394 58.4 2.3 -10.4 275 6.3 47.7 74.8 576 +03052001.ADM 0 16.8 3033 -19 1155 81 33.3 1.2 -8.4 288 7.5 14.5 61.0 188 +03051922.FSI 0 15.9 2088 -80 836 131 37.4 1.4 -8.3 246 8.1 40.1 50.7 385 +03051409.C12 0 13.9 2056 -415 1151 505 44.5 0.0 -12.7 290 9.5 25.4 80.3 466 +03051406.LW1 0 15.8 3351 -219 819 259 50.4 0.0 -11.8 274 8.3 12.9 74.5 238 +03051401.C11 0 13.9 3239 -178 1774 132 58.3 0.1 -9.9 286 8.2 22.1 60.4 192 +03051322.CDS 0 12.4 3323 -92 2274 79 49.1 0.0 -10.1 280 8.6 18.1 68.8 98 +03051223.MRF 0 11.6 1914 -2 1612 41 42.7 0.2 -6.0 279 6.7 33.9 49.2 174 +03051019.MLC 0 14.5 849 -221 615 158 58.7 0.0 -8.7 240 7.6 34.0 74.3 199 +03051017.P#Q 0 16.5 2801 -34 619 97 68.4 2.7 -9.2 235 7.2 32.3 77.8 168 +03051000.P#J 0 16.2 3929 -21 888 74 55.8 2.7 -12.5 247 7.6 33.6 64.7 227 +03050922.LEX 0 15.5 2304 -3 715 119 55.3 2.5 -9.5 278 7.4 32.8 69.7 185 +03050921.COU 0 16.1 4338 -12 941 67 45.4 2.2 -11.8 246 7.4 35.8 73.5 264 +03050920.SDF 0 15.2 2300 -15 871 88 52.2 1.8 -10.2 268 7.2 36.6 70.7 247 +03050520.MKL 0 15.8 2332 -17 581 247 71.6 5.8 -11.9 263 7.3 40.2 88.1 300 +03050223.BMX 0 15.4 3487 -10 686 61 44.2 1.6 -13.2 283 6.8 21.9 38.7 114 +03050221.HSV 0 13.0 2237 -40 946 139 42.3 2.2 -13.8 264 7.0 27.8 33.8 201 +03050221.ABL 0 13.6 3056 -5 1063 81 40.9 1.6 -14.7 280 7.2 27.0 27.0 130 +03050219.SJT 0 15.1 4252 -2 1189 17 38.9 0.4 -12.5 277 8.1 4.7 61.7 18 +03050219.ABL 0 12.9 2572 -28 1072 45 27.2 0.5 -13.7 261 6.7 22.6 36.0 82 +03050218.MSL 0 13.0 2367 -24 912 19 25.5 0.2 -14.5 257 7.4 24.2 40.8 60 +03050201.ACT 0 13.6 2339 -88 1301 -44 31.1 -0.3 -11.9 280 8.3 21.3 53.8 -77 +03050102.END 0 14.0 3853 -58 1033 227 43.6 5.8 -13.5 250 7.4 27.5 43.5 247 +03071221.AVL 0 11.9 710 -2 1196 56 37.5 0.2 -8.5 266 5.6 31.7 43.3 103 +03071201.FOE 0 16.7 3598 -41 1289 -96 59.4 -2.4 -10.2 313 7.9 33.9 54.8 89 +03071200.FOE 0 16.2 3683 -11 1441 -16 63.8 -0.3 -11.0 315 7.7 31.9 59.2 109 +03071123.P#H 0 12.6 927 -26 1632 97 59.9 0.3 -9.9 322 7.2 45.3 55.0 319 +03070904.PHP 0 14.6 2161 -292 1066 549 72.4 0.0 -8.6 260 8.8 53.5 55.7 683 +03070900.BH3 0 8.3 1108 -106 2627 277 55.8 0.0 -7.9 250 8.4 55.7 68.2 568 +03070723.LVS 0 8.8 850 -179 2135 85 20.0 0.0 -6.4 329 8.7 24.3 27.9 305 +03070720.DSM 0 18.0 4261 -35 1012 20 39.2 0.6 -9.9 262 8.0 13.2 34.7 79 +03070719.LVS 0 9.9 1337 -68 1800 12 22.3 0.0 -7.2 336 8.0 27.0 21.0 98 +03070600.VTN 0 11.6 1572 -201 1584 157 52.8 0.0 -9.5 273 8.2 30.3 50.1 293 +03070521.RAP 0 8.7 803 -208 2327 67 22.6 0.0 -11.2 272 8.5 6.7 33.0 46 +03070521.P#7 0 10.3 1147 -137 2084 84 43.4 0.0 -10.3 249 8.1 22.9 55.2 239 +03070517.BH3 0 8.9 1171 -147 2263 -14 27.2 0.0 -12.5 293 9.1 15.8 39.6 51 +03070305.GDV 0 9.1 634 -206 1972 120 22.6 0.0 -13.9 250 8.7 30.3 58.1 255 +03063018.AUG 0 11.8 1327 -56 1152 60 42.9 0.5 -12.3 267 5.3 24.4 72.0 118 +03081800.BH5 0 9.0 725 -5 2392 -33 27.4 0.0 -9.3 180 7.6 12.2 31.3 76 +03081322.XRW 0 16.6 1031 -16 519 88 21.6 0.0 -6.2 187 5.5 23.7 39.1 164 +03081202.SEP 0 12.7 373 -104 1300 -113 55.9 -0.2 -8.4 345 6.8 38.0 68.0 -12 +03081200.FWD 0 12.2 1050 -51 2135 -30 50.2 0.0 -8.8 339 6.7 35.0 52.7 68 +03081023.P#9 0 13.9 1702 0 1195 30 41.7 0.3 -9.2 346 6.8 25.8 56.8 104 +03080902.P#C 0 15.5 3216 -71 1472 8 27.4 0.1 -6.4 277 7.9 17.3 40.8 199 +03080900.MIB 0 15.0 3325 -48 1477 39 33.2 0.4 -9.0 291 7.7 10.7 43.9 102 +03080900.P#C 0 14.4 3127 -1 1826 10 25.0 0.0 -5.8 262 7.5 12.2 42.3 64 +03080622.GLD 0 12.9 3132 -2 2338 21 28.1 0.0 -7.1 306 8.2 14.7 32.7 115 +03080601.CNU 0 15.8 2262 -28 1629 -18 34.6 -0.1 -5.1 317 6.6 25.1 42.1 49 +03080600.SUX 0 15.5 1945 -3 996 54 38.2 0.7 -8.6 321 7.0 35.9 44.6 171 +03080521.TOP 0 16.0 2857 -24 1592 -7 30.8 0.0 -6.8 308 6.3 19.6 40.9 101 +03080520.DAN 0 15.0 2224 -8 858 8 18.6 0.0 -10.1 275 6.4 27.6 30.4 121 +03080422.P#R 0 15.1 1771 -64 1131 59 51.1 0.7 -8.5 326 6.5 23.7 72.7 144 +03080401.BVX 0 16.9 2856 -38 1072 96 33.8 1.4 -8.7 308 6.7 18.2 47.9 100 +03080202.LUS 0 9.3 520 -170 1828 -21 47.7 0.0 -8.2 291 7.9 30.7 60.7 11 +03080123.CRL 0 13.5 2544 -8 1131 18 35.3 0.2 -12.9 299 7.9 26.6 36.1 109 +03080103.MCW 0 11.0 914 -111 1515 8 24.1 0.0 -12.2 281 7.0 26.6 47.8 60 +03073123.C31 0 8.6 251 -238 2988 79 50.4 0.0 -8.0 311 8.0 29.8 74.4 268 +03073120.TVL 0 10.6 1275 -24 1488 33 34.5 0.1 -7.4 90 7.8 32.3 17.1 170 +03072700.IWD 0 15.1 1598 -19 1386 149 42.6 1.0 -6.1 276 5.9 27.7 60.4 150 +03071802.BH1 0 13.9 2073 -132 1543 52 64.4 0.2 -6.9 291 7.8 47.0 77.9 171 +03071721.RAP 0 14.6 3713 -127 1972 107 39.2 0.0 -6.2 280 8.5 31.5 54.8 181 +03071320.MSL 0 16.4 2839 -21 1060 37 23.4 0.0 -9.3 310 7.1 4.1 36.8 35 +03071320.DIK 0 9.2 2113 -26 3189 -19 27.9 0.0 -9.3 266 9.0 11.0 36.6 31 +04040721.P#U 0 11.2 1509 -10 1060 103 47.1 1.2 -15.7 268 6.4 35.8 60.8 191 +04040702.SPS 0 8.6 230 -53 980 110 36.0 0.2 -17.3 236 6.3 19.0 53.3 110 +04040700.FTW 0 10.4 641 -8 948 43 57.7 0.3 -14.3 228 6.4 22.9 60.1 83 +04040422.LRD 0 13.8 2148 -1 827 171 49.4 3.0 -12.9 244 7.0 31.5 38.8 217 +04040421.ALI 0 13.2 1124 -3 718 10 40.8 0.1 -13.2 238 7.0 18.0 35.9 100 +04032701.DHT 0 9.5 1004 -128 1142 153 30.2 0.3 -13.4 233 8.2 31.2 63.3 235 +04032623.RAP 0 8.7 1651 -52 1568 172 42.5 0.9 -15.5 205 8.0 26.0 46.8 264 +04031802.FSM 0 8.0 442 -99 1939 211 48.0 0.0 -17.1 278 7.5 37.8 72.5 338 +04031800.P#P 0 9.4 1357 -30 1585 127 45.0 0.5 -17.4 288 7.7 34.4 66.4 269 +04030121.ORD 0 7.2 534 -1 908 208 58.9 1.1 -23.3 222 6.6 37.3 72.6 297 +04030120.RFD 0 6.8 505 -7 892 172 55.3 0.8 -24.3 220 6.8 34.8 71.1 256 +04022416.MCO 0 13.1 534 -37 687 121 47.0 0.5 -10.8 255 5.0 28.8 81.9 156 +04022407.G#5 0 10.5 962 -124 801 -16 47.4 -0.1 -18.2 218 7.7 31.4 83.7 14 +04022316.MSY 0 11.3 0 -9999 417 436 51.3 0.0 -11.2 240 6.1 44.9 86.2 531 +04020601.BTR 0 11.7 57 -172 540 186 69.9 0.0 -13.3 214 7.0 48.1 87.1 199 +04020514.LFT 0 11.1 165 -244 1109 583 49.0 0.0 -11.7 217 6.5 46.0 63.5 611 +04020512.LCH 0 13.6 1421 -64 497 282 49.1 3.0 -12.5 222 6.8 41.7 68.1 319 +04011921.VRB 0 10.3 196 -20 878 -16 82.2 0.0 -14.0 242 5.1 46.9 123.3 207 +03112718.RUE 0 10.5 681 0 396 4 92.3 0.0 -20.1 238 7.0 35.8 100.8 153 +03110923.SAC 0 6.9 156 -14 892 38 24.7 0.0 -25.3 234 7.5 14.4 91.8 77 +03102818.CTY 0 16.5 1074 -53 594 181 37.6 1.2 -7.8 217 6.3 23.6 51.5 193 +03100822.VAD 0 14.1 1355 -7 765 -4 27.1 0.0 -11.2 277 6.4 13.9 52.0 68 +03092718.CBE 0 11.6 969 -2 1256 109 40.4 0.5 -12.3 213 6.1 33.1 58.2 137 +03092620.UIN 0 12.7 1139 -3 844 177 50.2 1.7 -14.6 266 7.9 42.7 77.1 266 +03092619.BRL 0 11.1 906 -34 824 125 50.2 1.0 -14.9 256 6.9 40.9 76.6 149 +03091200.MRF 0 9.8 747 -2 1645 9 36.3 0.0 -6.8 276 6.2 25.5 49.1 163 +03090900.MAF 0 9.9 1214 -1 2565 13 32.3 0.0 -8.4 313 7.4 22.4 35.6 163 +03083123.HUF 0 14.8 27 -163 471 268 39.8 0.0 -6.8 243 6.3 41.6 43.2 340 +03082601.P#4 0 12.9 980 -231 1606 140 42.5 0.0 -9.4 277 7.1 39.4 44.3 283 +03082600.ABR 0 14.2 3471 -76 1925 104 37.8 0.1 -11.4 289 8.6 27.8 43.9 143 +03082221.LOL 0 9.6 944 -94 1467 89 64.9 0.3 -12.3 188 8.3 46.4 77.0 299 +03082119.APX 0 14.4 2077 -120 1359 80 36.1 0.3 -8.3 255 7.1 34.1 35.4 132 +03082100.DLH 0 16.1 2503 -11 1009 166 39.5 2.7 -8.1 226 6.2 24.3 46.3 201 +04051501.PUB 0 3.9 204 -85 2585 153 55.2 0.0 -18.2 268 8.8 42.0 78.8 355 +04051423.COS 0 4.6 230 -87 1664 52 57.1 0.0 -18.0 274 8.2 45.2 68.4 179 +04051300.HBR 0 14.0 4148 -28 1710 172 41.2 1.4 -11.1 244 7.8 44.0 46.5 333 +04051100.LUS 0 8.3 917 -69 1429 204 53.5 0.8 -11.5 237 7.4 28.1 44.2 323 +04050923.CVS 0 5.9 554 -61 3040 -32 23.7 0.0 -12.6 309 9.6 17.1 15.5 78 +04050921.STC 0 9.9 1302 -52 1737 185 49.7 0.5 -14.2 264 7.5 46.1 49.8 400 +04050900.P#A 0 13.8 2438 -42 1008 193 29.0 2.3 -12.7 278 7.7 19.9 36.2 251 +04050822.BH3 0 5.3 996 -6 3054 49 48.0 0.0 -15.0 280 9.6 8.9 60.8 58 +04050522.RIC 0 8.3 824 -38 1493 133 43.8 0.4 -20.4 310 7.1 34.9 60.9 251 +04050101.FWD 0 13.9 2471 -39 907 158 44.9 2.9 -14.8 225 8.3 23.0 58.2 185 +04043021.C12 0 13.3 2483 -8 1029 37 45.1 0.7 -14.1 236 7.9 32.8 46.0 48 +04043020.DYS 0 14.1 2950 -10 638 71 52.3 1.8 -14.3 236 7.8 34.1 51.0 143 +04043018.ABI 0 12.0 2372 -1 1211 -3 32.6 0.0 -13.6 230 7.7 22.8 40.3 -22 +04042920.MLU 0 12.9 972 0 744 72 46.0 0.5 -14.5 232 6.6 29.2 45.8 176 +04042821.G#2 0 10.1 747 -3 1175 139 56.7 0.8 -14.7 252 7.4 32.3 53.8 179 +04042521.CDS 0 7.1 679 -5 2042 20 45.4 0.0 -17.7 276 7.7 27.7 76.8 88 +04042300.SGF 0 9.8 113 -134 794 263 69.4 0.1 -15.2 267 7.5 51.1 79.0 572 +04042300.P#P 0 14.6 2114 -9 448 155 49.9 2.7 -13.6 245 7.2 26.3 46.7 258 +04042223.C12 0 12.6 1615 -11 1173 56 54.8 0.7 -10.8 266 6.6 36.5 68.7 191 +04042222.UMN 0 10.5 412 -29 663 220 60.2 0.9 -17.5 254 8.2 45.7 67.6 357 +04042221.C34 0 11.2 1504 -22 1170 72 53.8 0.8 -15.5 265 7.8 38.9 55.3 252 +04042200.ADM 0 11.7 1347 -25 1310 194 51.9 1.6 -13.2 269 6.8 28.4 68.1 339 +04042122.C12 0 11.5 1550 -3 1449 83 53.3 0.6 -13.2 261 6.6 30.3 65.8 168 +04041921.HOB 0 11.3 2173 -1 1395 86 53.9 1.0 -10.9 235 6.7 32.7 83.0 143 +04041801.MFD 0 10.8 1224 -65 1060 185 23.7 0.0 -16.5 288 8.0 29.7 50.0 245 +04041723.MFD 0 11.9 2519 -15 1046 104 26.5 1.1 -15.5 303 7.2 29.2 37.6 184 +04041105.MFE 0 15.8 2222 -37 402 26 39.9 0.4 -11.6 248 7.5 2.1 69.3 23 +04041019.ILM 0 9.2 180 -45 1165 111 41.2 0.1 -16.1 267 6.0 29.7 69.5 345 +04041001.PRX 0 8.8 516 -75 1780 210 42.3 0.1 -14.1 270 6.7 37.6 59.1 314 +04040818.DAB 0 13.2 1058 -19 810 73 56.2 0.7 -15.8 264 7.7 33.6 94.9 186 +04040815.DHN 0 11.9 877 -2 522 78 53.9 0.6 -15.8 257 6.5 30.9 87.6 111 +04071305.CHE 0 17.6 3151 -107 771 181 49.7 2.9 -8.9 301 7.9 29.7 60.2 300 +04070104.HBR 0 15.7 1988 -45 801 174 24.0 0.0 -8.2 259 7.0 25.9 23.7 276 +04062402.FNT 0 10.0 608 -67 1046 219 50.4 1.0 -15.3 260 6.5 32.1 72.4 270 +04062222.BIS 0 7.2 504 -14 1518 9 56.3 0.0 -18.7 301 6.3 28.7 75.6 88 +04062023.DHT 0 8.4 905 -127 2633 107 47.8 0.0 -9.3 270 8.8 36.3 67.8 192 +04061902.G#1 0 13.2 1631 -27 1122 144 35.1 1.2 -8.6 284 7.3 37.4 58.3 408 +04061900.HDN 0 6.4 316 -26 1668 -40 51.4 0.0 -13.3 257 8.3 36.5 73.3 29 +04061820.FAM 0 15.9 1842 -13 923 65 31.0 0.6 -7.0 271 5.7 23.9 35.7 131 +04061800.LHX 0 12.7 2059 -86 777 206 47.3 2.5 -11.2 235 8.4 37.4 49.6 651 +04052700.CHE 0 8.9 347 -4 1255 145 31.1 0.2 -14.7 268 6.1 31.0 44.9 228 +04052623.TYS 0 14.7 1654 -44 919 199 50.1 2.8 -9.7 275 5.9 37.8 71.9 255 +04052623.OKC 0 15.9 3047 -69 1198 124 56.8 2.5 -7.9 261 6.8 24.4 82.9 79 +04052622.FSD 0 9.4 835 -34 1187 143 35.4 0.6 -17.3 267 7.3 33.1 47.2 271 +04052621.CSV 0 14.4 1608 -15 870 176 59.8 2.8 -9.3 268 6.2 35.9 58.7 237 +04052621.C33 0 13.6 2405 -23 1847 104 55.5 0.4 -9.6 256 7.5 30.4 80.9 72 +04052603.CAI 0 15.4 1463 -14 609 129 47.0 1.5 -11.0 277 7.2 31.6 59.9 153 +04052402.P#7 0 7.8 400 -213 1358 246 41.2 0.0 -15.5 247 8.2 35.3 62.4 412 +04052400.STL 0 16.1 3087 -3 604 162 45.4 3.8 -12.7 253 8.0 28.6 58.7 195 +04052400.CDR 0 5.8 117 -187 2181 178 56.7 0.0 -14.5 256 8.0 30.8 66.1 338 +04052323.BGM 0 14.6 2244 0 781 156 41.1 2.4 -11.9 272 7.8 30.1 44.7 249 +04052320.PIN 0 12.0 1300 -3 1376 120 33.7 0.6 -11.8 267 6.7 36.9 31.3 199 +04052300.ELM 0 12.4 1089 -41 1163 226 43.8 1.5 -9.7 281 5.7 46.2 46.0 359 +04052201.G#1 0 12.3 2404 -84 1771 261 33.8 0.6 -8.2 246 7.9 36.9 50.5 385 +04052201.SNY 0 7.0 484 -214 2287 78 62.8 0.0 -12.7 227 9.0 42.4 81.2 214 +04052123.HYS 0 12.7 3460 -27 2109 75 39.7 0.0 -10.8 236 8.6 29.0 45.1 157 +04052100.FKL 0 14.7 2440 -9 772 269 42.7 4.7 -10.6 299 6.4 28.6 49.2 346 +04052100.DEN 0 9.0 1781 -3 1934 76 49.3 0.1 -11.5 231 8.4 30.6 60.1 225 +04051723.DSM 0 13.3 1669 -24 854 23 36.8 0.2 -11.5 251 6.5 26.2 51.1 132 +04051723.PUB 0 9.2 546 -83 1212 147 55.3 0.5 -11.9 251 7.8 44.9 72.1 222 +04051601.9V9 0 7.5 608 -65 1315 120 61.8 0.5 -19.3 286 7.0 35.7 85.8 189 +04051521.PIR 0 6.8 724 -30 1545 91 60.8 0.3 -21.3 289 7.3 36.7 70.4 224 +04051520.Y26 0 7.0 965 -32 1206 89 60.4 0.7 -23.7 287 7.8 40.0 67.1 217 +99053023.P07 0 12.1 2286 -113 1897 53 39.7 0.1 -8.5 315 7.8 22.5 45.3 165 +99052800.FTW 0 12.2 1104 -4 954 41 33.8 0.3 -12.6 256 6.8 24.6 36.5 103 +99052503.FST 0 10.3 1116 -185 1882 122 53.5 0.0 -9.7 271 8.3 44.1 67.4 157 +99052502.INK 0 11.4 1576 -110 1665 119 56.3 0.4 -10.0 270 7.8 39.9 60.4 191 +99052420.ABQ 0 8.1 781 -71 1338 71 34.2 0.2 -13.9 212 8.5 24.7 44.7 132 +99052220.TUL 0 16.0 3471 -3 869 32 31.1 0.6 -12.1 269 7.3 20.4 36.1 91 +99052200.SNY 0 8.7 1439 -7 1674 53 48.7 0.2 -12.8 266 7.7 28.2 65.4 147 +99052123.RAP 0 8.6 1729 -70 1711 131 43.6 0.4 -16.2 256 8.7 23.0 67.0 178 +99052001.MOT 0 8.0 903 -1 1506 2 27.5 0.0 -17.4 240 7.0 14.4 59.7 47 +99051700.LAA 0 7.5 817 -141 1731 124 65.0 0.1 -15.0 234 8.6 43.8 78.0 361 +99050519.MVN 0 12.9 1777 -10 790 108 57.7 1.8 -14.1 237 6.6 41.0 44.8 194 +99043001.INK 0 12.4 2333 -60 967 95 52.8 1.8 -11.4 237 8.1 32.9 71.8 280 +99042900.BIL 0 6.5 60 -143 1109 133 46.8 0.0 -17.8 182 7.5 39.8 84.0 324 +99042800.EVV 0 9.5 305 -3 1146 22 26.2 0.0 -15.6 225 6.4 18.9 38.1 56 +99042701.OKC 0 8.9 873 -24 1056 47 27.4 0.2 -20.3 275 7.9 23.0 44.2 88 +99042322.LOZ 0 12.8 1995 -5 979 77 37.3 1.0 -11.6 287 6.9 30.4 44.4 71 +99042319.EZF 0 10.2 1142 -51 1722 106 57.2 0.3 -14.2 276 6.9 38.0 68.5 172 +99042203.GOK 0 12.3 2307 -132 894 364 53.9 3.4 -16.0 254 8.5 31.2 54.6 401 +99042123.BMI 0 11.6 1687 -24 839 261 53.4 3.9 -16.4 252 7.8 45.9 57.4 408 +04083002.GCK 0 10.7 1029 -108 1687 204 32.5 0.2 -8.1 315 6.8 29.0 26.2 278 +04083000.SUX 0 10.7 779 -7 1471 199 42.6 0.6 -12.9 289 6.7 36.3 45.9 296 +04082622.C23 0 10.2 983 -43 1349 25 41.1 0.1 -15.8 254 7.2 17.8 70.6 46 +04082621.MCW 0 15.4 2478 -27 1087 26 46.1 0.5 -9.9 239 7.0 37.9 68.9 181 +04082522.FSM 0 18.2 3688 -45 1240 101 33.9 1.6 -6.7 244 6.2 16.5 39.6 113 +04082522.BIS 0 10.2 2077 -41 1811 74 38.1 0.2 -15.2 230 8.4 22.8 43.2 103 +04082503.MHK 0 19.2 4217 -59 627 274 31.2 5.7 -7.9 224 7.5 31.4 51.8 392 +04082501.MHK 0 18.9 4262 -45 721 150 29.9 3.2 -7.4 240 7.1 28.3 50.9 241 +04082020.BGM 0 14.6 1425 -21 712 95 53.2 1.2 -9.5 238 5.9 38.1 53.7 106 +04082018.ORH 0 15.1 2067 -19 1051 47 40.0 0.6 -8.9 256 6.1 29.0 39.9 132 +04081918.LBE 0 14.4 1183 -7 597 105 39.9 0.8 -8.7 270 5.6 40.5 44.4 152 +04081901.PIA 0 13.9 1294 -107 1203 377 40.4 1.6 -7.9 277 5.6 39.8 43.3 465 +04081822.BRL 0 15.3 2600 -41 963 377 41.3 6.8 -9.4 276 6.6 42.5 42.9 508 +04081421.LIC 0 9.9 1288 -66 1242 15 32.2 0.1 -10.2 333 7.8 25.5 42.7 65 +04080321.OAX 0 18.7 4816 -44 1389 92 36.9 1.7 -5.9 259 7.0 23.6 38.1 189 +04080202.Y26 0 15.4 3187 -169 1209 336 55.2 1.6 -9.3 291 8.1 28.5 83.2 385 +04080123.Y22 0 8.5 1290 -28 3011 -1 45.9 0.0 -10.5 298 8.6 30.2 71.2 158 +04073101.GAG 0 14.4 2006 -116 1300 54 42.0 0.3 -6.2 308 6.7 14.8 44.7 98 +04072102.FSD 0 19.9 4659 -49 869 261 26.0 5.3 -5.9 278 7.3 28.0 37.4 426 +99081101.HLC 0 17.4 3928 -33 1289 71 38.3 1.3 -5.1 243 6.7 21.0 34.5 152 +99081023.AKO 0 14.9 2910 -32 1271 87 33.9 1.0 -6.5 232 7.6 22.7 45.7 163 +99080901.DIK 0 12.0 2409 -98 1891 48 58.5 0.1 -10.8 267 8.5 29.7 54.5 94 +99080822.2WX 0 10.3 1972 -32 2526 39 44.1 0.0 -8.8 262 8.3 27.2 41.0 117 +99080702.RAP 0 12.7 921 -36 1200 35 33.6 0.1 -6.6 268 6.3 20.0 48.7 72 +99080301.LWT 0 8.5 449 -155 1772 53 48.3 0.0 -10.3 278 7.8 29.4 70.4 131 +99073100.JKL 0 15.8 3605 -30 1833 89 22.3 0.0 -5.9 355 6.7 22.8 19.6 158 +99073020.IPT 0 15.0 2685 -12 1238 32 34.0 0.4 -8.7 319 6.3 16.0 50.7 72 +99072922.FVX 0 14.5 1431 -13 1556 81 34.3 0.3 -6.0 327 5.6 22.6 48.0 117 +99072902.XVG 0 12.7 1459 -186 1710 319 58.3 0.1 -9.5 302 7.7 41.9 73.8 381 +99072900.ADG 0 14.8 1974 -6 1415 63 37.3 0.5 -9.4 298 7.1 21.7 66.3 118 +99072420.MHT 0 14.8 1594 -17 1088 66 27.8 0.5 -9.7 275 6.5 25.2 56.1 134 +99072319.RAP 0 10.6 1320 -19 2145 52 38.7 0.0 -7.5 263 7.3 22.5 54.0 87 +99072300.FAR 0 16.2 2819 -34 1355 81 35.4 0.9 -8.5 247 7.6 27.9 55.9 137 +99071923.GDV 0 11.9 1807 -31 1654 21 41.3 0.1 -11.2 254 7.9 18.9 69.4 67 +99071302.FAR 0 12.1 1948 -48 1552 125 38.2 0.7 -12.5 297 7.2 27.2 61.0 158 +99071302.DVL 0 10.4 1453 -76 1761 69 42.5 0.1 -13.5 288 7.5 28.3 62.4 124 +99071300.OLF 0 9.2 1101 -38 2374 25 49.7 0.0 -10.3 281 7.3 26.5 65.7 106 +99071202.AIA 0 9.4 1094 -73 1844 -8 27.8 0.0 -11.3 327 8.0 26.7 47.0 79 +99070804.GDV 0 14.2 2058 -209 1364 472 61.7 0.0 -7.6 251 8.0 40.8 78.6 551 +99070421.ERY 0 19.1 3756 -61 791 95 32.9 1.8 -6.7 267 8.2 22.2 36.6 98 +99070207.SFD 0 9.5 32 -374 1535 254 82.4 0.0 -10.7 263 7.4 45.0 92.7 464 +99070103.SWO 0 18.3 2994 -18 703 229 51.1 5.8 -4.6 303 6.4 25.9 51.9 297 +99070103.GCK 0 15.2 2113 -124 873 95 73.0 1.0 -6.5 294 7.5 37.6 74.8 319 +99063023.LBF 0 9.7 291 -114 1136 0 76.3 0.0 -12.3 289 6.9 54.3 115.6 214 +99062801.BGD 0 13.8 2864 -63 2251 73 37.7 0.0 -5.0 266 8.5 22.5 43.1 130 +99062522.DIK 0 12.8 2775 -1 1732 -52 57.7 -0.4 -10.3 230 8.2 35.4 58.9 132 +99062501.VTN 0 11.7 1035 -41 1545 55 41.3 0.2 -8.2 282 6.6 23.6 41.7 120 +99062400.BGD 0 12.2 2544 -17 2195 10 13.6 0.0 -6.5 288 7.8 22.6 35.1 91 +99060601.P07 0 11.8 1543 -130 1771 -31 45.2 0.0 -8.7 243 7.9 18.4 58.3 32 +99060523.LBF 0 10.7 2070 -28 1957 91 62.6 0.1 -12.9 197 8.5 25.9 90.4 131 +99060302.IML 0 10.0 869 -198 1657 237 43.7 0.0 -11.0 225 8.5 39.8 66.5 421 +99060202.GCC 0 6.3 226 -83 1883 18 41.3 0.0 -15.4 262 8.3 26.0 42.6 126 +99060200.FTW 0 16.8 3982 -31 1338 62 35.0 1.0 -11.1 275 8.5 25.7 60.3 144 +99053102.MHK 0 11.6 903 -51 1360 108 32.8 0.3 -11.3 270 6.9 30.0 24.5 179 +99120303.ADM 0 9.7 1355 -50 974 250 42.8 2.4 -22.1 217 8.5 35.9 65.7 332 +99112303.RBD 0 13.2 1077 -16 789 138 48.1 1.2 -13.6 235 6.4 25.1 60.9 176 +99112302.HBR 0 8.7 124 -124 660 53 47.7 0.0 -17.1 219 6.7 41.5 75.7 132 +99100823.FSI 0 10.1 649 -14 1313 5 36.2 0.0 -13.6 219 6.3 14.3 67.9 56 +99092600.GKY 0 13.1 1483 -15 1429 43 28.0 0.2 -9.4 340 6.3 21.5 55.3 182 +99092522.D07 0 6.4 163 -199 2219 136 65.7 0.0 -15.8 242 8.3 31.8 105.7 206 +99092004.RRC 0 11.2 292 -200 1044 70 37.2 0.0 -11.2 270 6.7 28.8 60.6 216 +99092000.OKC 0 11.1 1068 -42 1896 56 39.5 0.0 -10.1 290 6.8 29.0 60.9 190 +99091923.CSM 0 11.9 1645 -3 1885 18 41.3 0.0 -9.8 280 7.0 27.5 64.0 178 +99091920.CGZ 0 11.2 802 -16 1905 19 39.1 0.0 -8.7 245 6.5 16.0 60.3 61 +99091207.SLP 0 15.6 2094 -69 507 92 45.4 1.3 -10.8 271 8.2 16.8 55.8 121 +99091200.LBL 0 11.9 1180 -121 1590 31 43.2 0.1 -9.0 275 7.8 25.7 65.5 84 +99091122.HLC 0 12.4 1517 -36 1221 59 37.8 0.4 -11.3 253 7.4 21.0 66.2 94 +99091101.AFW 0 13.1 1250 -24 1970 21 29.5 0.0 -7.4 297 6.2 21.7 52.8 139 +99082300.ABR 0 11.7 1432 -38 1851 61 40.1 0.1 -9.6 289 6.9 20.3 45.5 101 +99082104.HON 0 13.3 1187 -244 1155 197 38.1 0.0 -8.9 281 7.4 31.4 54.2 238 +99082100.LBF 0 9.8 20 -311 1794 44 34.8 0.0 -7.8 321 7.1 19.7 46.1 126 +99082022.DIK 0 11.7 1445 -10 1669 21 33.6 0.1 -7.8 298 6.3 17.8 36.0 58 +99081922.MLS 0 7.1 393 -105 3278 19 33.8 0.0 -10.0 244 8.6 22.0 37.3 120 +99081800.RRT 0 11.4 1524 -26 847 90 49.2 1.1 -17.7 268 7.3 32.2 62.0 126 +99081400.ALB 0 16.8 1843 -4 701 196 38.5 2.3 -6.3 249 5.8 29.9 48.4 252 +99081202.GCC 0 10.6 877 -99 1162 63 34.5 0.2 -10.2 218 7.5 17.7 54.6 98 diff --git a/ncep/gov.noaa.nws.ncep.ui.nsharp/gov.noaa.nws.ncep.ui.nsharp.ecl b/ncep/gov.noaa.nws.ncep.ui.nsharp/gov.noaa.nws.ncep.ui.nsharp.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/ncep/gov.noaa.nws.ncep.ui.nsharp/localization/ncep/nsharp/nlist.txt b/ncep/gov.noaa.nws.ncep.ui.nsharp/localization/ncep/nsharp/nlist.txt index 5c7d200395..1eada9d84f 100755 --- a/ncep/gov.noaa.nws.ncep.ui.nsharp/localization/ncep/nsharp/nlist.txt +++ b/ncep/gov.noaa.nws.ncep.ui.nsharp/localization/ncep/nsharp/nlist.txt @@ -1,1149 +1,1149 @@ -DATE / RAOB ELEV REPORT MUCAPE MUMR 500TEMP 300 T 7-5 LR 5-3 LR 0-3SH 0-6SH 0-9SH SRH3 SHIP MODELb -95052300.DDC 791 6.00 4181 15.3 -9.6 -36.2 7.5 7.1 23.4 19.4 26.8 325 1.9 3.0 -91051100.MAF 873 6.00 4692 14.9 -10.8 -37.3 8.8 7.2 14.2 13.2 18.1 -37 1.9 2.7 -97061700.OUN 357 5.50 5751 18.8 -9.5 -36.1 7.4 7.1 14.5 23.6 45.9 116 3.1 3.5 -99012200.LZK 165 5.00 2240 12.3 -17.3 -41.7 7.6 6.8 23.0 26.3 32.1 294 2.3 3.0 -96061200.DDC 791 5.00 2820 13.7 -8.3 -34.7 7.6 7.1 12.9 20.3 15.8 142 1.2 2.5 -92072600.DDC 791 5.00 4794 17.4 -4.6 -31.2 6.8 7.0 18.2 17.4 14.6 176 1.0 0.8 -91052900.HON 392 5.00 3892 15.2 -12.3 -38.0 8.0 7.0 25.0 40.7 36.0 269 3.4 3.5 -90070800.BIS 504 5.00 3717 16.6 -9.8 -33.6 7.7 6.4 12.5 29.8 42.2 202 2.4 2.4 -57070300.RAP 966 5.00 4359 15.8 -6.7 -36.0 7.7 7.8 13.9 22.9 39.3 130 1.7 3.4 -06040300.LZK 78 5.00 3819 13.7 -14.9 -44.7 8.0 8.2 20.9 26.6 32.6 251 3.9 3.4 -99060100.DDC 790 4.75 4387 15.9 -11.3 -38.7 8.0 7.4 15.3 27.7 38.0 209 3.5 3.5 -96102100.OUN 362 4.50 2995 12.7 -12.9 -42.6 7.5 8.1 15.6 20.3 28.4 71 1.8 3.0 -96081100.LBF 847 4.50 2360 13.3 -8.4 -34.4 6.2 7.0 26.5 26.1 22.0 326 1.0 2.6 -96062700.TFX 1130 4.50 3835 13.9 -10.9 -37.2 8.3 7.1 21.8 37.1 44.3 297 3.0 1.6 -96051000.TOP 268 4.50 3884 15.6 -11.1 -40.4 8.8 8.0 22.1 18.3 22.3 234 2.2 3.3 -96050500.IAD 85 4.50 2432 12.1 -15.2 -41.7 7.2 7.3 15.9 25.0 25.5 36 1.9 1.9 -96030700.JAN 91 4.50 2362 14.0 -12.5 -38.9 6.8 7.2 16.8 34.9 36.9 196 1.8 0.6 -95060900.MAF 873 4.50 5653 17.8 -8.1 -37.7 8.1 8.0 12.8 18.7 33.5 83 2.2 2.9 -95060500.MAF 873 4.50 4358 14.9 -8.6 -40.7 7.6 8.7 16.0 23.2 32.0 181 2.1 2.9 -95051700.DDC 791 4.50 4878 15.6 -10.8 -39.2 8.5 7.7 8.9 26.6 40.7 43 3.8 2.6 -94060800.LBF 847 4.50 3400 13.0 -9.5 -37.5 7.8 7.6 8.1 18.7 18.4 109 1.5 2.4 -94042600.SEP 399 4.50 4409 16.3 -11.5 -41.9 7.4 8.3 21.2 26.7 26.2 138 3.3 3.3 -94040300.OUN 362 4.50 2075 10.1 -17.0 -44.2 7.6 7.5 18.7 31.2 39.3 163 1.9 2.1 -93101800.SEP 428 4.50 3958 15.7 -10.6 -34.9 7.0 6.5 23.2 31.7 30.5 441 2.6 2.2 -93101300.SEP 428 4.50 3151 14.2 -13.1 -36.5 8.0 6.3 15.0 22.3 31.8 307 2.4 2.9 -93092200.TOP 270 4.50 3665 16.8 -8.1 -37.9 6.5 8.0 21.3 21.3 37.9 502 1.3 1.3 -93092200.OVN 486 4.50 3685 15.4 -11.1 -40.4 8.1 7.9 23.5 31.9 33.2 492 2.9 4.0 -93072400.BIS 505 4.50 3597 15.3 -9.8 -38.4 5.8 7.7 14.9 21.0 33.2 263 1.4 2.3 -93062700.OVN 400 4.50 3720 15.0 -10.0 -38.2 6.3 7.6 9.4 22.3 28.9 140 1.7 3.1 -93060800.OUN 431 4.50 4917 17.0 -9.1 -34.9 7.1 6.9 9.7 30.6 26.7 195 2.8 2.6 -93050100.DDC 790 4.50 3206 11.1 -16.5 -44.2 8.0 7.7 15.4 24.0 29.9 194 2.7 3.7 -92073000.TOP 268 4.50 4074 16.6 -10.0 -37.8 7.5 7.5 11.8 22.5 22.1 164 2.2 2.4 -92073000.OVN 400 4.50 4366 16.6 -11.4 -38.3 7.4 7.3 13.9 22.3 23.7 216 2.7 3.2 -92062900.SEP 399 4.50 3761 17.4 -9.6 -33.8 7.8 6.6 13.7 21.8 15.6 248 2.0 2.8 -92062800.DDC 791 4.50 2750 13.8 -11.3 -34.2 7.8 6.2 15.2 20.6 41.3 315 1.6 2.9 -92062800.AMA 1095 4.50 4069 16.0 -10.3 -36.1 7.9 6.9 16.9 22.8 27.5 150 2.4 3.2 -91081400.GTF 1118 4.50 2524 11.5 -13.2 -37.4 8.5 6.6 15.3 25.8 28.9 213 2.0 2.0 -91072100.HON 392 4.50 5826 20.1 -6.1 -32.2 6.8 6.9 14.3 22.8 33.9 180 1.8 1.9 -91042912.BRO 7 4.50 4471 19.5 -9.8 -38.2 7.7 7.6 13.7 23.1 24.2 254 2.5 -999.0 -91032800.FNT 236 4.50 1860 11.3 -17.3 -44.0 7.6 7.4 26.8 47.0 45.4 431 1.8 2.9 -90051600.OUN 357 4.50 4398 16.7 -9.0 -36.4 7.6 7.3 23.2 25.5 44.9 180 2.5 3.1 -89080400.INL 359 4.50 3953 17.4 -11.5 -30.6 8.3 5.1 7.3 18.6 29.2 36 2.3 1.0 -89070300.SEP 399 4.50 5261 18.5 -7.6 -28.8 8.4 5.6 12.9 22.6 1.2 222 2.5 2.9 -89062700.GSO 277 4.50 4349 17.6 -7.3 -33.8 6.3 7.1 7.8 14.2 6.4 52 0.9 0.9 -89060700.SEP 399 4.50 3510 15.6 -7.9 -33.9 7.0 7.0 9.0 24.8 47.4 130 1.6 2.4 -89060400.MAF 873 4.50 3939 14.0 -10.0 -36.2 8.5 7.1 6.6 20.6 33.6 58 2.2 2.2 -02043000.FWD 171 4.50 5853 19.4 -10.9 -33.7 8.0 6.1 14.6 29.7 37.1 151 4.4 3.1 -02042900.IAD 93 4.50 2553 13.6 -16.7 -41.9 7.3 6.9 24.9 21.1 33.9 373 2.1 2.9 -08020600.SHV 79 4.25 2312 13.5 -14.1 -42.1 7.3 7.7 25.8 32.4 43.7 212 2.1 1.8 -07080400.RAP 1029 4.25 2983 15.6 -4.1 -30.9 6.2 7.1 18.3 22.7 35.8 270 0.7 0.9 -05042200.SGF 387 4.25 2944 12.6 -13.3 -42.7 6.8 8.0 15.1 21.3 15.6 193 1.7 2.2 -05042000.LBF 849 4.25 2460 10.1 -15.7 -43.9 8.9 7.8 16.6 15.3 22.3 255 1.4 2.9 -05031400.JAN 101 4.25 1382 11.1 -15.7 -40.7 7.6 6.8 19.2 25.5 49.7 161 1.1 2.8 -04081000.DNR 1625 4.25 3415 12.9 -9.1 -38.9 8.0 8.1 16.2 15.0 15.4 270 1.2 3.2 -04071318.ILX 178 4.25 6811 22.1 -10.9 -36.3 7.9 6.8 15.5 18.7 21.9 131 3.6 2.6 -04071300.LBF 849 4.25 7183 19.5 -7.3 -35.7 8.6 7.5 10.3 14.7 20.5 68 2.1 3.7 -04071200.GGW 700 4.25 2390 11.0 -13.7 -41.1 8.6 7.5 17.1 22.3 32.0 99 1.7 1.9 -04062200.AMA 1099 4.25 3828 13.8 -8.9 -36.5 8.0 7.4 17.8 26.2 40.5 141 2.3 2.3 -04053000.OUN 357 4.25 4526 16.8 -7.5 -36.5 7.8 7.7 15.8 24.4 40.4 224 2.1 -999.0 -04052200.AMA 1099 4.25 4265 13.7 -8.7 -36.3 7.9 7.4 13.6 21.5 23.9 176 2.0 2.1 -04040400.MAF 872 4.25 2746 12.0 -14.7 -43.1 7.0 7.8 14.4 19.5 31.1 262 1.6 2.7 -03051000.MHX 11 4.25 4373 17.1 -10.5 -35.1 7.3 6.6 14.1 22.7 23.2 146 2.5 2.1 -03050518.BNA 210 4.25 2730 16.0 -12.9 -36.4 7.1 6.5 18.3 37.0 37.2 239 2.2 -999.0 -03050500.SGF 387 4.25 5169 15.7 -13.5 -40.7 7.6 7.4 30.0 38.4 50.7 348 4.6 2.9 -03040600.FWD 171 4.25 2487 12.4 -14.3 -41.7 7.3 7.5 17.1 31.5 51.8 341 2.1 2.9 -01070300.LBF 849 4.25 5584 16.7 -8.7 -37.3 8.5 7.8 14.2 18.0 24.7 154 2.4 4.2 -98063000.TOP 270 4.00 6490 21.8 -5.3 -30.5 7.2 6.6 18.1 24.4 32.6 230 2.0 1.7 -98050800.FFC 244 4.00 4120 17.3 -12.3 -36.1 7.7 6.4 17.1 31.0 51.6 172 3.4 2.2 -97082200.LBF 849 4.00 3974 15.7 -9.7 -35.9 7.4 7.1 17.4 26.4 37.5 321 2.4 3.3 -96052300.LBF 847 4.00 2915 13.5 -11.1 -38.2 8.0 7.3 18.5 27.8 43.7 303 2.3 2.9 -95102700.SGF 394 4.00 2166 12.5 -13.8 -41.6 6.9 7.6 25.7 21.9 29.4 267 1.3 1.6 -95072600.DDC 791 4.00 5696 18.3 -10.1 -32.2 8.8 5.9 17.1 21.3 19.2 238 3.5 3.3 -95072500.FTD 196 4.00 2897 15.4 -10.0 -30.5 9.2 5.5 12.8 19.1 19.8 168 1.7 -999.0 -95051600.JAN 91 4.00 4861 17.9 -10.9 -37.6 7.8 7.2 8.6 14.9 18.5 -35 2.0 2.5 -95050600.FTD 196 4.00 2036 15.1 -11.1 -34.7 7.1 6.4 20.8 21.2 37.5 304 1.1 0.6 -93072300.HON 443 4.00 3720 15.7 -8.1 -37.4 6.0 7.8 15.4 19.1 22.5 130 1.1 1.5 -93071600.RAP 966 4.00 3230 14.1 -7.5 -34.9 7.7 7.3 18.6 25.0 35.8 97 1.5 3.2 -91041300.SEP 399 4.00 5008 16.9 -10.6 -40.5 6.8 8.1 12.2 21.8 27.4 137 2.6 3.4 -90090200.RAP 966 4.00 1762 11.3 -7.4 -33.9 7.5 7.0 14.1 23.6 32.7 181 0.6 2.1 -90070100.DAY 298 4.00 3541 16.6 -9.4 -33.6 7.1 6.5 8.6 19.9 24.5 154 1.5 1.8 -90060900.TOP 268 4.00 5571 18.5 -10.1 -39.2 7.3 7.8 14.8 22.6 16.4 252 3.0 2.7 -90051900.AMA 1095 4.00 2732 11.5 -9.3 -38.2 7.7 7.8 18.5 26.1 30.4 301 1.4 2.1 -90051500.AMA 1095 4.00 4543 14.8 -9.9 -36.2 8.2 7.1 19.2 24.7 33.8 473 2.9 2.2 -89071800.LBF 847 4.00 3622 15.4 -9.4 -35.6 8.1 7.0 22.9 38.9 37.6 361 2.4 2.9 -89062700.DDC 791 4.00 2840 14.3 -8.4 -36.6 7.6 7.5 12.7 19.4 19.2 167 1.1 2.2 -89061100.AMA 1095 4.00 3666 15.8 -8.7 -35.4 7.6 7.2 11.1 11.0 19.2 87 0.9 -999.0 -06092221.SGF 387 4.00 5071 17.6 -6.7 -36.1 5.3 7.9 21.0 31.6 37.0 202 1.6 1.1 -06071700.INL 361 4.00 3719 14.1 -11.1 -38.3 8.4 7.4 19.9 26.3 29.8 328 3.0 2.4 -06050600.MAF 872 4.00 3533 12.4 -12.3 -40.1 8.2 7.5 19.3 33.6 48.0 174 2.8 2.0 -04071318.DVN 229 4.00 6090 20.8 -11.1 -37.3 8.4 7.1 22.5 25.9 22.3 191 4.7 2.8 -03050300.BMX 178 4.00 4593 15.2 -15.7 -40.1 7.9 6.7 8.1 32.4 30.5 51 5.0 2.9 -02061300.DDC 790 4.00 6234 19.5 -6.9 -31.9 7.6 6.6 17.2 19.8 32.7 126 2.1 3.7 -02042000.MAF 872 4.00 2974 12.9 -8.1 -36.7 6.9 7.6 19.0 24.3 41.7 133 1.2 2.5 -95051900.BMX 178 3.75 3370 16.5 -9.9 -35.7 6.6 7.0 16.9 20.6 25.5 246 1.5 0.6 -03040400.OUN 357 3.75 2640 11.9 -15.1 -42.7 7.3 7.6 13.4 24.0 23.9 187 2.0 2.3 -99072600.LBF 849 3.65 4375 16.4 -6.7 -30.5 7.9 6.4 9.5 12.9 16.1 60 1.0 2.6 -99050400.OUN 357 3.65 5195 15.6 -14.9 -44.1 8.4 8.0 16.5 21.3 22.0 343 4.5 4.7 -99030600.LZK 165 3.65 1922 11.7 -18.5 -46.3 8.2 7.7 21.4 22.8 39.2 360 1.9 2.1 -98052200.SGF 387 3.65 4719 17.1 -9.9 -36.5 7.8 7.2 13.8 22.4 23.1 232 2.6 2.3 -98040800.ILX 178 3.65 1354 10.2 -19.7 -46.5 7.2 7.5 20.1 21.2 25.1 180 1.1 2.6 -03062300.OAX 350 3.65 6203 18.7 -9.3 -36.9 8.6 7.5 12.3 13.6 22.9 237 2.2 4.2 -02091900.OUN 357 3.65 4268 15.7 -6.1 -36.9 6.7 8.2 17.8 20.8 23.4 308 1.2 3.0 -02062400.ABR 396 3.65 5093 17.2 -10.5 -35.7 8.2 6.8 16.9 26.3 30.9 187 3.7 3.5 -02060500.RNK 654 3.65 5399 17.9 -9.7 -34.9 6.9 6.7 8.7 4.0 7.3 54 0.8 3.2 -02051200.TOP 270 3.65 4489 15.8 -11.9 -38.9 8.1 7.3 13.7 26.0 26.5 224 3.6 3.3 -02051100.MAF 872 3.65 4658 14.5 -9.3 -35.9 8.4 7.2 14.8 23.1 40.3 132 2.7 2.2 -01072100.GGW 700 3.65 3114 13.5 -10.7 -38.5 7.7 7.5 15.8 28.3 30.5 354 2.2 2.8 -01071800.ABR 396 3.65 5177 17.5 -9.9 -36.7 8.4 7.2 9.6 19.5 28.2 136 2.7 3.9 -01062100.DDC 790 3.65 4428 15.2 -10.7 -37.5 7.8 7.3 13.4 19.0 25.2 400 2.3 3.2 -01061400.DDC 790 3.65 5244 15.7 -8.9 -36.7 8.0 7.5 19.8 28.1 28.2 384 3.2 2.5 -01052500.JAN 101 3.65 3446 13.5 -15.1 -42.5 7.5 7.5 17.4 21.8 31.4 240 2.7 2.7 -01051800.AMA 1099 3.65 4695 13.9 -10.5 -38.9 8.6 7.7 16.1 13.2 22.8 86 1.8 2.1 -01050700.SHV 79 3.65 2945 14.8 -12.5 -39.3 6.5 7.3 9.0 15.7 22.1 110 1.2 1.7 -01050700.LZK 78 3.65 3512 14.7 -12.9 -40.5 5.9 7.5 7.3 18.7 26.3 77 1.6 3.4 -01041500.DDC 790 3.65 3892 13.1 -18.3 -43.1 9.0 6.9 24.4 43.1 54.7 233 5.4 2.5 -01040400.SGF 387 3.65 3277 12.8 -15.1 -43.1 8.3 7.7 17.2 22.4 28.9 310 2.8 3.1 -98062000.OUN 357 3.50 6048 19.0 -7.1 -35.9 7.8 7.7 13.7 15.4 11.2 209 1.7 3.9 -98052500.OUN 357 3.50 5688 18.0 -10.7 -39.7 8.1 7.8 9.9 21.9 28.7 172 3.5 4.2 -98052100.TOP 270 3.50 4680 16.5 -12.5 -38.1 8.4 7.0 9.8 10.5 23.7 100 1.7 3.8 -97062100.LBF 849 3.50 6058 17.3 -9.3 -35.7 8.8 7.2 13.9 23.1 25.1 129 3.7 3.7 -96062000.OAX 350 3.50 4081 16.3 -9.8 -37.1 8.6 7.4 18.9 19.0 24.4 271 2.1 -999.0 -90061900.BIS 504 3.50 1968 11.1 -13.5 -40.9 8.2 7.5 17.4 28.4 38.0 257 1.5 2.9 -90060900.IAD 85 3.50 3994 17.2 -10.9 -35.5 7.1 6.7 18.3 23.7 20.0 203 2.4 0.9 -90040600.SEP 399 3.50 3764 12.4 -14.9 -45.3 7.8 8.4 15.4 25.2 36.8 305 3.3 2.3 -90031400.OUN 357 3.50 3950 14.6 -16.1 -39.5 7.2 6.4 12.3 20.2 49.4 169 3.0 2.9 -89070300.STC 315 3.50 3556 15.6 -8.2 -35.9 7.0 7.4 8.5 15.8 21.4 128 1.1 1.4 -02081200.DDC 790 3.50 3415 14.0 -8.7 -34.3 8.0 6.9 10.7 15.7 27.7 157 1.2 3.1 -01061500.FWD 171 3.50 4260 17.3 -9.7 -33.7 7.9 6.5 11.1 15.1 9.7 74 1.6 2.2 -01041000.SGF 387 3.50 3476 13.0 -14.5 -41.3 7.9 7.4 12.5 21.6 30.3 141 2.7 2.6 -91060500.DDC 791 3.25 4631 16.9 -7.9 -35.5 6.5 7.4 11.0 15.3 15.4 74 1.2 3.5 -06070200.GRB 214 3.25 3255 15.4 -9.3 -35.9 6.6 7.1 14.7 17.0 24.9 99 1.1 1.5 -99060200.FWD 196 3.00 4928 17.3 -11.5 -37.3 8.8 7.0 15.3 15.0 30.3 171 2.4 4.5 -98062900.TOP 270 3.00 6895 22.0 -7.7 -33.1 7.0 6.8 19.3 20.6 27.3 335 2.5 2.4 -98062500.BIS 506 3.00 4591 15.5 -13.3 -41.3 8.1 7.7 15.5 15.9 15.4 89 2.5 3.0 -98062500.ABR 396 3.00 4448 16.3 -13.7 -40.5 8.8 7.3 11.2 17.4 28.7 42 3.0 3.7 -98061400.OAX 350 3.00 2830 13.3 -10.5 -39.5 7.7 7.9 15.3 24.4 45.4 219 1.8 3.4 -98052400.DDC 790 3.00 2630 11.6 -12.9 -41.5 6.7 7.8 9.8 22.0 27.7 101 1.4 2.3 -97061000.FWD 196 3.00 2699 15.6 -9.9 -34.9 7.0 6.7 10.9 18.7 24.1 98 1.1 1.3 -97052600.OUN 357 3.00 5143 17.2 -7.7 -38.5 5.9 8.3 15.0 30.4 32.4 148 2.0 2.6 -96070800.LBF 847 3.00 3341 15.3 -6.4 -32.5 7.0 6.9 20.6 30.0 41.5 390 1.3 2.2 -96062012.LBF 847 3.00 3418 15.2 -8.6 -35.4 7.9 7.3 16.5 22.6 25.0 380 1.7 3.3 -96061400.UNR 1037 3.00 3801 13.1 -11.0 -37.6 8.4 7.2 12.4 18.0 14.8 63 2.0 2.0 -96052700.OUN 362 3.00 3034 15.2 -9.4 -36.2 6.9 7.2 22.5 29.8 33.6 330 1.7 2.0 -96042000.ILX 178 3.00 2394 12.9 -14.6 -41.1 7.1 7.3 16.4 27.0 39.5 249 2.1 -999.0 -96033100.SHV 84 3.00 2891 12.7 -17.1 -46.6 7.6 8.2 20.1 27.4 35.5 163 3.0 3.1 -95082700.GGW 696 3.00 3094 11.7 -12.6 -38.7 8.3 7.1 13.6 26.8 41.0 162 2.4 1.7 -95082300.INL 359 3.00 3023 15.4 -11.6 -36.2 8.0 6.7 25.4 30.9 26.5 694 2.5 2.1 -95072400.DDC 791 3.00 3645 15.9 -9.9 -33.5 8.2 6.3 11.8 18.2 32.6 31 1.7 3.6 -95071500.LBF 847 3.00 3052 14.4 -7.0 -32.9 6.5 6.9 13.9 15.9 24.7 159 0.7 2.1 -95062300.LBF 847 3.00 2962 12.9 -11.1 -36.7 7.9 7.0 15.3 21.0 19.8 220 1.7 2.8 -95043000.FTD 196 3.00 4416 15.0 -13.3 -43.2 8.1 8.2 15.6 21.9 31.7 166 3.4 3.4 -95021400.PBI 6 3.00 2433 16.5 -11.0 -41.1 5.9 8.1 13.8 27.1 33.4 117 1.4 0.6 -94060600.DDC 791 3.00 4882 14.8 -8.8 -37.2 8.7 7.6 13.1 15.6 18.6 248 1.9 2.1 -94052600.FNT 236 3.00 2240 10.8 -16.3 -46.6 6.1 8.4 12.8 17.8 25.8 113 1.0 2.4 -94032800.CKL 140 3.00 2066 15.3 -9.6 -33.7 6.3 6.4 30.5 38.6 36.3 429 1.1 0.6 -93091900.DDC 824 3.00 1954 12.4 -10.4 -35.2 7.2 6.7 16.8 29.5 46.6 233 1.2 2.8 -93091900.AMA 1094 3.00 1911 12.4 -9.0 -33.5 7.7 6.5 16.5 32.7 35.4 264 1.1 2.4 -93082300.DDC 790 3.00 2608 13.3 -7.8 -33.0 7.7 6.8 13.1 19.5 27.0 83 1.0 2.0 -93070900.OVN 487 3.00 5546 19.7 -6.8 -30.3 6.9 6.2 16.9 29.4 24.3 345 2.3 0.6 -93070200.DDC 816 3.00 4895 17.1 -5.2 -33.2 7.2 7.4 13.3 16.4 21.4 237 1.0 2.8 -93060600.HAT 4 3.00 4948 16.0 -13.5 -38.7 8.3 6.9 12.6 15.5 17.2 70 2.8 3.9 -93050600.MAF 873 3.00 3784 13.9 -9.6 -37.2 7.2 7.4 18.6 27.0 25.4 149 2.3 2.5 -92070500.OVN 400 3.00 5051 17.3 -9.3 -36.1 7.4 7.2 16.1 21.8 33.3 243 2.5 3.5 -92062700.MAF 873 3.00 3224 13.9 -8.2 -32.9 7.7 6.6 13.0 23.7 38.8 253 1.6 2.5 -92032600.TBW 13 3.00 2104 12.6 -14.0 -43.1 6.5 8.0 18.6 32.2 37.0 195 1.5 1.1 -91052700.DDC 791 3.00 5493 17.0 -10.5 -38.1 8.4 7.4 13.3 21.7 29.3 81 3.4 2.9 -91040912.1M1 172 3.00 3450 14.2 -15.2 -42.3 8.0 7.5 11.5 19.7 20.8 134 2.7 -999.0 -91032700.TOP 268 3.00 2763 12.7 -12.3 -39.3 6.8 7.4 21.6 27.7 31.7 279 1.9 2.5 -90052700.OUN 357 3.00 4621 17.5 -8.8 -37.3 7.6 7.7 20.4 23.8 25.1 255 2.4 3.2 -90051500.OUN 357 3.00 4798 16.8 -10.7 -38.4 7.8 7.5 12.5 19.8 29.7 186 2.6 4.2 -89060700.AMA 1095 3.00 4752 15.4 -9.5 -33.5 8.5 6.4 21.7 30.5 55.6 303 3.3 2.4 -89060500.OUN 357 3.00 1640 12.5 -11.6 -39.9 7.0 7.7 8.8 15.7 23.9 53 0.6 0.7 -72081200.YRM 988 3.00 1989 10.9 -14.2 -40.4 8.3 7.1 14.0 24.6 35.0 132 1.5 2.4 -06052800.BIS 506 3.00 3434 12.5 -11.1 -38.7 8.1 7.5 10.5 11.3 12.7 74 1.0 1.8 -06052700.BNA 210 3.00 3535 16.1 -8.3 -35.3 5.9 7.2 17.7 12.8 17.2 196 0.7 0.7 -06052500.SGF 387 3.00 3470 15.6 -11.1 -37.1 7.6 7.0 13.6 14.3 7.3 162 1.4 2.0 -06042500.OUN 357 3.00 4007 15.5 -12.3 -39.3 8.6 7.3 15.4 20.1 21.2 105 2.8 3.3 -06042412.LMN 317 3.00 3248 14.1 -12.9 -39.7 8.2 7.3 16.6 25.4 28.7 413 2.8 3.2 -04081000.DDC 790 3.00 3147 14.6 -9.7 -36.3 7.7 7.1 13.0 21.0 22.0 222 1.6 3.0 -04070200.AMA 1099 3.00 5137 16.9 -8.1 -37.7 7.4 7.9 18.0 14.0 16.6 80 1.4 3.0 -04052300.OAX 350 3.00 4333 15.6 -12.3 -40.7 7.6 7.8 19.6 32.4 28.9 289 3.6 3.0 -04051700.DDC 790 3.00 2200 10.0 -11.9 -41.3 8.4 8.0 20.5 31.7 30.2 390 1.6 1.5 -04042200.OUN 357 3.00 2363 12.2 -13.5 -39.5 7.0 7.1 16.9 24.3 33.8 385 1.6 2.7 -04041900.OAX 350 3.00 3136 11.9 -15.1 -40.5 8.2 7.0 20.5 33.8 44.9 394 3.0 1.9 -03062800.DDC 790 3.00 2329 11.4 -9.3 -38.9 6.7 8.0 10.8 16.9 26.8 138 0.7 2.2 -03062400.LBF 849 3.00 6189 18.6 -8.7 -38.9 8.1 8.1 21.7 30.8 31.6 381 3.8 4.8 -03050420.SGF 387 3.00 4524 15.8 -11.9 -40.7 7.1 7.8 25.2 35.4 47.9 480 3.3 3.2 -03042100.SHV 79 3.00 2947 15.5 -13.5 -38.7 7.5 6.8 14.3 24.0 38.0 110 2.3 0.9 -01090900.FWD 171 3.00 4304 17.1 -8.9 -35.7 8.2 7.1 7.7 14.1 12.0 97 1.4 2.7 -01053000.AMA 1099 3.00 5827 16.4 -9.7 -38.5 8.2 7.7 25.0 26.1 29.7 268 3.9 2.8 -01051900.LZK 78 3.00 4269 16.6 -12.5 -37.3 8.1 6.7 9.9 18.5 25.8 98 2.6 2.7 -00080600.OAX 350 3.00 5525 19.0 -7.1 -33.1 7.5 6.9 9.4 15.0 22.8 56 1.4 3.1 -00062900.MAF 872 3.00 3565 14.8 -6.3 -31.1 6.3 6.6 9.6 10.5 16.7 29 0.5 1.8 -00050400.FWD 196 3.00 2731 13.2 -14.3 -40.3 6.3 7.1 19.0 21.7 28.5 327 1.7 3.0 -99081800.LBF 849 2.75 5554 18.3 -8.9 -32.5 7.8 6.4 10.7 23.7 25.1 143 2.9 3.4 -99070100.MAF 872 2.75 3989 13.7 -2.5 -33.9 7.5 8.3 10.5 14.9 13.7 146 0.8 2.0 -99061900.DDC 790 2.75 4141 13.9 -11.3 -40.3 7.3 7.9 13.4 22.5 29.0 346 2.5 2.4 -99061200.AMA 1099 2.75 4400 14.7 -10.3 -36.3 7.7 7.0 18.8 26.2 36.6 210 3.0 2.4 -99060300.AMA 1099 2.75 5087 15.6 -10.3 -36.5 8.7 7.1 15.5 18.6 49.2 289 2.7 2.5 -98061400.OUN 357 2.75 6689 20.5 -6.5 -32.5 7.7 6.9 17.9 32.8 42.7 262 2.9 4.0 -98052500.DDC 790 2.75 2688 12.5 -12.1 -40.7 7.2 7.8 13.7 27.9 32.0 180 1.9 2.7 -98040900.BMX 178 2.75 3341 15.8 -13.9 -39.5 7.9 7.0 25.9 40.1 51.5 296 3.2 2.0 -97061600.DDC 790 2.75 3187 13.5 -10.9 -36.5 7.7 6.9 11.9 23.3 39.3 26 2.0 2.7 -97061200.TOP 270 2.75 1552 12.6 -11.7 -38.7 7.1 7.3 11.6 23.5 30.2 141 0.9 0.9 -97052700.SGF 387 2.75 4440 16.3 -9.9 -38.1 7.0 7.6 16.3 22.6 25.0 276 2.3 2.6 -97052700.OUN 357 2.75 5907 18.0 -8.7 -37.7 6.4 7.8 17.6 17.5 23.9 271 1.9 3.7 -97042100.SGF 387 2.75 1773 9.4 -16.5 -45.7 7.4 8.1 23.3 25.4 23.9 405 1.4 2.0 -97041100.MAF 873 2.75 4076 11.9 -15.0 -45.9 8.2 8.5 20.8 23.7 30.7 260 3.3 2.1 -97032900.BNA 180 2.75 1618 11.1 -15.6 -42.6 7.4 7.4 18.1 25.2 15.3 389 1.3 3.0 -97012500.SIL 8 2.75 2563 13.0 -16.5 -46.0 7.5 8.2 18.3 18.3 25.8 145 1.8 2.8 -96092100.FTD 196 2.75 2870 16.4 -9.4 -37.2 6.5 7.4 15.7 26.4 32.6 136 1.5 -999.0 -96083000.DEN 1611 2.75 2478 11.7 -9.1 -36.2 7.8 7.3 17.6 26.2 28.9 86 1.3 2.3 -96080100.DEN 1611 2.75 3920 13.5 -7.8 -34.9 8.5 7.3 15.0 22.6 26.3 276 1.9 2.1 -96072400.DDC 791 2.75 3068 14.3 -11.1 -36.0 8.6 6.7 16.8 27.6 36.6 203 2.6 2.7 -96062500.AMA 1095 2.75 3778 13.9 -9.4 -33.2 8.5 6.4 7.0 22.9 28.2 123 2.2 1.9 -96061400.LBF 847 2.75 2384 12.4 -8.6 -36.2 6.5 7.4 12.0 15.4 25.0 102 0.6 2.2 -96061300.FFC 246 2.75 2727 13.7 -9.1 -36.5 5.7 7.4 12.9 12.9 13.1 152 0.6 1.0 -96061200.AMA 1095 2.75 3079 11.9 -8.8 -38.1 8.0 7.9 18.3 24.3 30.2 373 1.5 1.9 -96060300.SGF 394 2.75 2739 11.7 -15.9 -42.2 7.1 7.2 14.8 26.4 35.9 90 2.3 2.1 -96060200.JAN 91 2.75 1863 16.1 -7.5 -32.6 5.5 6.8 11.3 12.7 20.3 168 0.3 0.6 -96060100.ABR 397 2.75 2276 12.6 -13.4 -40.4 6.2 7.4 24.6 22.4 27.2 370 1.3 2.2 -96053000.MAF 873 2.75 3675 14.9 -7.0 -32.9 7.7 6.9 19.0 35.1 40.6 321 1.7 2.5 -96052600.MAF 873 2.75 3464 14.1 -6.2 -36.5 7.7 8.1 22.5 28.7 42.1 240 1.4 2.9 -96052500.AMA 1095 2.75 3927 13.5 -11.3 -36.6 9.1 6.9 16.4 20.3 4.9 101 2.6 1.9 -96051800.OAX 350 2.75 4523 15.3 -11.1 -39.7 8.8 7.8 12.9 16.0 21.2 68 2.3 -999.0 -96051700.UNR 1037 2.75 4365 14.8 -8.1 -37.0 8.0 7.8 15.0 25.5 28.7 219 2.3 2.5 -96042200.TOP 268 2.75 1574 10.9 -16.6 -42.6 7.3 7.2 14.6 45.6 54.3 145 1.3 2.3 -96042200.OUN 362 2.75 2260 12.7 -10.9 -36.6 5.9 7.0 18.5 38.3 48.8 500 1.2 2.3 -96031600.FFC 246 2.75 890 9.6 -19.2 -39.7 7.8 5.7 20.5 28.8 55.2 353 0.9 2.2 -95081800.BIS 503 2.75 5585 18.4 -7.0 -34.2 7.7 7.3 10.6 10.6 17.3 142 1.0 3.3 -95072400.AMA 1095 2.75 2225 13.3 -7.8 -30.1 8.5 6.0 13.1 21.6 25.1 124 1.0 2.9 -95071500.GRB 210 2.75 5409 19.0 -8.5 -30.8 8.1 5.9 8.0 12.1 9.0 69 1.5 3.0 -95071200.OKX 20 2.75 2900 13.9 -15.6 -43.2 6.9 7.6 8.1 12.7 13.6 48 1.3 2.4 -95070300.DDC 791 2.75 2905 14.2 -9.6 -38.9 6.8 7.9 12.3 18.2 21.4 111 1.1 2.3 -95070300.AMA 1095 2.75 3838 14.7 -11.5 -36.5 8.8 6.8 8.2 22.8 29.0 115 2.9 2.5 -95062800.LBF 847 2.75 2880 12.4 -10.1 -37.2 7.7 7.3 13.9 22.0 19.7 208 1.5 2.5 -95062100.OKX 20 2.75 3918 17.1 -9.8 -34.9 7.1 6.7 11.4 18.4 25.8 18 1.6 1.0 -95060300.AMA 1095 2.75 3024 12.4 -9.6 -36.5 8.2 7.2 15.7 22.4 37.2 346 1.6 2.0 -95052200.LBF 847 2.75 2027 10.4 -14.9 -42.1 7.4 7.4 18.7 28.3 33.3 221 1.6 2.1 -95051400.UMN 438 2.75 5278 16.5 -10.3 -38.0 6.9 7.5 22.3 28.0 26.2 211 3.3 3.2 -95042000.FTD 196 2.75 2621 14.6 -13.3 -38.5 7.7 6.8 25.8 39.5 59.2 498 2.3 2.4 -95040900.TOP 268 2.75 2836 10.7 -17.5 -44.5 9.2 7.5 16.5 21.4 31.9 120 2.6 1.9 -94070700.HON 392 2.75 3051 16.5 -8.8 -35.7 7.2 7.2 10.2 20.5 18.6 159 1.3 0.6 -94070200.OAX 350 2.75 5257 18.5 -10.1 -33.0 8.0 6.2 15.5 26.5 25.4 416 3.6 3.2 -94070100.STC 315 2.75 3701 14.3 -11.6 -39.6 7.3 7.6 19.0 27.2 25.1 399 2.7 2.7 -94062600.JAN 106 2.75 2842 16.1 -9.5 -35.0 6.4 6.8 12.4 24.0 32.8 130 1.3 0.9 -94062500.HON 392 2.75 1962 11.8 -10.8 -39.7 6.4 7.8 15.4 27.8 33.5 211 1.0 2.2 -94061900.JAN 91 2.75 3177 16.8 -7.5 -32.7 5.9 6.7 3.8 11.5 12.4 42 0.5 0.6 -94061800.AMA 1095 2.75 2676 11.9 -7.0 -33.1 8.2 6.9 10.7 11.0 11.3 171 0.5 1.6 -94061200.TOP 268 2.75 2320 13.9 -9.5 -36.5 6.6 7.3 15.8 23.9 24.4 117 1.1 0.9 -94061200.AMA 1095 2.75 4015 14.7 -8.0 -33.7 7.8 6.9 18.4 26.7 19.9 302 2.2 2.7 -94061100.AMA 1095 2.75 2164 12.3 -8.3 -36.1 7.3 7.5 16.6 19.5 20.3 229 0.7 2.8 -94060600.TOP 268 2.75 3953 16.5 -9.3 -35.1 8.1 6.9 15.4 16.1 27.7 394 1.5 2.5 -94060500.HON 392 2.75 3871 14.2 -11.6 -38.7 8.5 7.4 12.0 21.4 19.2 202 2.6 2.4 -94053000.SEP 399 2.75 5032 17.5 -10.6 -36.6 8.2 7.0 16.1 27.0 23.8 291 3.8 3.9 -94052500.OUN 362 2.75 3912 15.0 -11.5 -38.1 7.4 7.2 13.2 22.0 36.2 122 2.4 3.0 -94041100.UMN 438 2.75 2040 12.6 -16.5 -41.0 7.6 6.7 19.9 37.8 45.4 486 2.1 2.5 -94012700.GGG 124 2.75 2167 13.2 -15.9 -42.4 6.8 7.3 17.5 31.0 32.3 306 2.0 0.7 -93102000.DRT 313 2.75 3433 15.5 -8.9 -36.3 6.4 7.4 13.4 25.4 34.0 35 1.6 1.6 -93101900.GGG 124 2.75 3105 15.7 -9.8 -36.9 6.9 7.3 10.3 23.5 33.9 105 1.6 0.7 -93101300.CRP 14 2.75 4367 17.3 -8.6 -37.2 6.3 7.7 14.8 20.2 29.8 227 1.5 1.5 -93090400.IAD 85 2.75 2779 15.6 -5.9 -32.6 5.7 7.1 12.4 15.2 15.6 149 0.5 0.6 -93070700.DDC 790 2.75 5334 17.0 -6.0 -36.1 7.2 8.0 16.5 27.9 28.2 154 2.0 3.1 -93070700.AMA 1094 2.75 5327 17.0 -4.7 -32.2 7.8 7.3 11.4 21.3 20.0 127 1.6 3.8 -93070500.DDC 790 2.75 4186 17.1 -5.4 -31.1 6.7 6.8 16.6 30.6 34.9 146 1.3 1.2 -93062400.LBF 849 2.75 3944 16.0 -8.6 -37.5 8.1 7.7 18.1 21.9 33.8 178 2.0 2.8 -93062400.DEN 1611 2.75 3442 11.7 -9.6 -38.0 8.8 7.8 15.8 32.0 42.3 211 2.2 1.8 -93061900.AMA 1094 2.75 2140 12.8 -7.8 -33.2 7.0 6.7 14.4 22.7 23.3 146 0.8 1.9 -93051600.DDC 790 2.75 3614 12.8 -9.8 -40.4 6.6 8.3 12.6 19.4 23.7 161 1.4 2.5 -93050600.AMA 1094 2.75 4478 13.2 -13.6 -38.2 8.6 6.7 16.6 34.6 38.4 340 4.5 2.0 -93050100.AMA 1095 2.75 4085 11.6 -14.5 -42.9 8.1 7.8 15.3 25.7 15.8 234 3.4 1.9 -93042900.MAF 873 2.75 2435 11.7 -10.9 -36.0 7.1 6.8 20.8 29.3 37.4 551 1.4 2.2 -93042800.MAF 873 2.75 1494 10.4 -10.6 -38.7 6.9 7.6 12.9 19.6 25.8 150 0.6 1.8 -93042500.UMN 438 2.75 2317 11.4 -14.6 -42.2 6.9 7.6 18.2 25.2 33.1 198 1.6 2.4 -93042000.GGG 168 2.75 2342 12.4 -13.3 -42.9 8.0 8.1 17.5 26.7 28.4 156 2.0 2.7 -93040200.WAL 13 2.75 1625 10.9 -18.5 -46.2 7.3 7.7 26.8 30.7 48.4 200 1.5 2.4 -93033100.UMN 440 2.75 2598 11.1 -16.5 -43.6 6.4 7.5 19.7 29.7 28.9 117 2.0 2.1 -93033100.1M1 204 2.75 2471 11.9 -15.1 -43.9 7.2 8.0 17.8 30.2 27.1 54 2.1 2.8 -92101600.SEP 399 2.75 3654 14.6 -12.1 -37.5 7.7 6.9 12.6 16.4 22.7 227 1.8 2.9 -92073000.LBF 847 2.75 3544 15.0 -10.3 -38.2 7.9 7.5 22.0 25.7 33.8 335 2.4 3.0 -92062700.AMA 1095 2.75 3165 14.1 -10.0 -34.2 7.7 6.5 12.4 16.6 29.9 191 1.3 2.9 -92061900.DDC 791 2.75 2598 12.8 -8.3 -34.7 7.9 7.1 15.7 25.1 40.5 114 1.3 2.7 -92061900.BIS 504 2.75 1791 11.0 -14.4 -39.4 6.9 6.9 13.0 27.4 24.4 106 1.3 2.5 -92061300.AMA 1095 2.75 2821 14.7 -8.8 -34.4 7.2 6.9 12.0 19.1 36.4 165 1.1 2.7 -92061200.MAF 873 2.75 2387 13.8 -8.2 -32.3 7.4 6.4 13.3 26.7 34.6 178 1.3 2.0 -92060500.AMA 1095 2.75 2870 13.4 -9.4 -37.0 7.5 7.4 12.2 17.5 25.9 249 1.1 2.6 -92030600.1M1 172 2.75 2572 11.5 -21.1 -44.4 7.2 6.5 17.3 22.5 26.7 194 2.4 2.3 -92021500.UMN 438 2.75 1724 10.2 -16.9 -44.0 6.4 7.5 24.2 33.2 28.2 289 1.3 2.2 -91072200.HON 392 2.75 4474 19.3 -6.8 -31.8 7.2 6.7 11.1 17.3 24.1 198 1.2 -999.0 -91070500.GGW 696 2.75 2308 11.4 -9.9 -38.5 7.0 7.7 6.7 17.5 23.9 144 0.8 2.2 -91070500.BIS 504 2.75 2941 13.3 -9.3 -37.6 6.4 7.6 19.3 21.4 26.6 206 1.2 2.4 -91062000.HON 392 2.75 2691 13.9 -10.5 -37.0 7.0 7.2 16.1 22.1 20.0 282 1.4 1.2 -91061900.LBF 847 2.75 3600 13.0 -12.0 -40.0 8.6 7.6 13.5 15.2 20.9 219 1.7 2.6 -91061500.GRB 210 2.75 3430 17.6 -8.7 -32.3 6.7 6.3 21.7 13.9 17.0 161 0.9 0.6 -91061500.BIS 504 2.75 2379 13.0 -11.9 -35.8 6.6 6.5 13.2 22.5 25.2 152 1.3 2.6 -91060500.OVN 400 2.75 2813 14.6 -10.1 -31.5 6.5 5.7 8.4 17.1 19.6 177 1.0 3.1 -91053000.RAP 966 2.75 2814 10.9 -15.7 -43.2 8.1 7.6 13.0 14.5 28.4 159 1.4 2.0 -91053000.OVN 400 2.75 4446 16.8 -10.2 -36.3 6.8 7.0 14.3 18.2 19.0 31 1.8 2.7 -91052500.AMA 1095 2.75 3416 13.7 -10.5 -37.1 7.0 7.2 17.0 17.4 13.8 124 1.4 2.5 -91051800.UMN 438 2.75 3444 15.1 -11.0 -34.2 7.4 6.2 9.4 11.9 21.0 59 1.1 1.2 -91051700.UMN 438 2.75 3299 15.9 -10.6 -35.6 7.6 6.7 14.4 16.1 11.8 174 1.4 1.9 -91051200.RAP 966 2.75 4430 14.1 -11.0 -39.1 7.9 7.6 26.6 23.5 33.5 437 2.9 2.5 -91051100.AMA 1095 2.75 5629 15.6 -10.7 -37.8 9.0 7.3 14.5 16.5 21.5 314 2.9 2.5 -91042800.GGG 124 2.75 4554 18.9 -10.5 -37.7 7.2 7.3 15.4 29.5 19.6 140 3.0 2.2 -91042700.OUN 357 2.75 4751 16.6 -11.5 -41.7 7.0 8.2 20.6 23.6 26.4 376 2.9 3.7 -91042700.GGG 124 2.75 5164 18.9 -10.7 -38.1 8.2 7.5 12.4 18.9 27.6 209 2.8 2.7 -91041300.OUN 357 2.75 4063 14.1 -13.7 -42.3 8.0 7.8 17.1 22.0 25.1 205 3.2 2.9 -91040300.OUN 357 2.75 1560 10.1 -19.8 -43.3 7.3 6.6 15.1 22.6 41.7 275 1.3 1.5 -91032700.DDC 791 2.75 3132 12.4 -14.2 -40.5 8.2 7.2 18.9 40.7 44.0 160 2.9 2.1 -91032200.UMN 438 2.75 2632 11.5 -15.3 -44.0 7.0 7.9 18.8 33.0 35.3 371 2.1 2.5 -90090600.STC 315 2.75 4899 19.5 -6.8 -33.9 6.2 7.2 14.7 21.0 17.1 294 1.4 1.0 -90082800.SSM 221 2.75 5115 18.2 -8.5 -36.7 6.2 7.5 20.5 31.6 29.9 334 2.4 1.1 -90081100.LBF 847 2.75 3971 14.8 -9.0 -36.8 7.5 7.5 14.3 25.6 21.5 282 2.2 2.9 -90070700.BIS 504 2.75 3274 14.9 -7.5 -34.7 6.9 7.3 12.9 19.0 25.7 316 1.0 2.2 -90070300.BIS 504 2.75 6982 21.3 -6.3 -31.9 8.2 6.8 14.9 23.0 29.6 172 2.7 4.6 -90061900.LBF 847 2.75 7070 19.2 -6.1 -35.5 8.4 7.9 18.5 30.2 38.1 266 3.2 3.6 -90060200.STC 315 2.75 2697 13.4 -13.3 -39.7 8.5 7.2 10.4 18.6 17.2 132 1.8 2.2 -90060200.LBF 847 2.75 3719 13.6 -10.8 -39.9 7.9 7.9 16.4 15.6 29.4 89 1.6 2.4 -90053100.GGG 124 2.75 4743 19.3 -5.7 -33.3 6.1 7.3 21.5 27.2 25.7 317 1.4 0.7 -90052000.OUN 357 2.75 4565 15.3 -10.8 -39.0 7.1 7.6 12.1 13.7 14.7 94 1.6 3.1 -90051900.LBF 847 2.75 3954 12.1 -13.9 -42.1 8.6 7.8 16.2 25.1 24.6 398 3.4 2.0 -90051700.GGG 124 2.75 3234 17.5 -8.3 -36.2 7.2 7.4 17.6 24.7 35.1 304 1.5 0.6 -90050100.AHN 246 2.75 4557 14.9 -12.6 -41.5 7.7 7.9 19.7 14.7 9.3 92 2.1 3.4 -90042800.GGG 124 2.75 2263 12.9 -14.9 -41.0 6.6 7.1 12.8 14.1 25.3 84 1.0 2.8 -90041700.OUN 357 2.75 3717 13.6 -15.0 -44.3 8.3 8.1 17.2 11.5 20.5 152 1.7 3.8 -90031400.PIA 200 2.75 2115 12.4 -14.4 -41.2 6.9 7.4 15.3 18.1 24.1 206 1.1 2.6 -90021600.JAN 91 2.75 2047 15.2 -10.9 -40.4 6.6 8.0 18.9 20.9 34.6 124 1.0 -999.0 -89090400.LBF 847 2.75 4599 17.3 -8.6 -36.0 8.3 7.3 8.6 29.6 38.8 223 2.9 3.3 -89082900.STC 315 2.75 1959 14.6 -10.0 -35.2 6.8 6.8 18.0 26.3 44.7 147 1.1 1.1 -89082200.STC 315 2.75 3346 16.2 -11.1 -35.6 6.9 6.7 11.9 20.6 30.6 173 1.7 1.2 -89082200.OMA 400 2.75 4223 17.9 -8.3 -30.9 7.0 6.0 15.0 22.2 45.4 138 1.8 0.9 -89082200.HON 392 2.75 4160 15.6 -9.4 -38.2 6.9 7.8 14.8 22.9 28.9 107 2.0 3.3 -89081600.AMA 1095 2.75 2669 12.8 -7.1 -34.8 6.9 7.4 10.5 17.0 24.9 158 0.7 2.5 -89062600.RAP 966 2.75 2246 11.5 -13.8 -40.7 7.8 7.4 20.0 31.3 30.4 301 1.8 2.6 -89061300.AMA 1095 2.75 3611 14.4 -10.8 -36.6 8.1 7.0 9.9 15.8 22.1 79 1.6 3.0 -89060300.TOP 268 2.75 2623 13.7 -12.6 -38.3 7.0 7.0 12.4 19.5 39.7 118 1.5 2.0 -89060300.MAF 873 2.75 2291 11.9 -8.4 -34.6 7.6 7.0 13.3 19.3 32.2 147 0.8 2.2 -89060200.MAF 873 2.75 3193 14.1 -10.4 -34.9 7.9 6.6 8.5 24.5 27.4 104 2.1 2.8 -58042200.FWH 180 2.75 3338 13.3 -16.1 -39.0 7.8 6.3 25.5 37.0 49.4 276 3.6 2.4 -07021400.BMX 178 2.75 1032 9.9 -19.1 -44.7 7.0 7.1 19.5 20.7 36.3 245 0.7 2.4 -06082600.DDC 790 2.75 3488 16.5 -5.5 -31.7 6.5 6.9 17.6 20.2 26.5 141 0.8 0.8 -06081000.BIS 506 2.75 2589 13.0 -8.9 -35.7 7.5 7.2 8.8 19.1 18.8 147 1.0 2.6 -06062200.DDC 790 2.75 2406 12.7 -8.7 -34.9 8.1 7.0 11.0 21.1 24.9 175 1.1 2.4 -06050800.MAF 872 2.75 2440 11.9 -12.5 -36.9 8.0 6.6 22.1 33.3 51.2 327 1.9 2.3 -06050718.CHS 15 2.75 2580 12.9 -12.5 -40.1 6.0 7.5 15.9 17.7 18.8 177 1.1 2.0 -06050500.MAF 872 2.75 3709 11.5 -12.1 -42.7 8.1 8.4 21.7 27.6 34.4 372 2.7 1.7 -06050300.DRT 313 2.75 3549 13.7 -12.1 -37.1 8.5 6.8 5.1 14.2 19.0 74 1.7 2.1 -06042000.BMX 178 2.75 2242 13.1 -11.9 -37.1 7.1 6.8 11.3 21.7 27.0 122 1.3 2.1 -06041400.DVN 229 2.75 1524 11.2 -15.7 -35.1 8.3 5.6 15.8 30.6 30.3 263 1.4 3.4 -06031218.TOP 270 2.75 2814 12.6 -17.9 -44.3 8.5 7.3 33.9 44.8 54.9 723 3.5 2.7 -05092300.ILX 178 2.75 1858 14.1 -8.1 -33.3 6.9 6.7 11.5 21.5 16.8 121 0.7 0.8 -05051000.FWD 171 2.75 4841 15.5 -11.5 -42.1 6.7 8.3 9.5 18.0 25.9 152 2.2 2.9 -05042300.JAN 101 2.75 2558 13.6 -14.7 -39.7 7.1 6.9 19.9 28.5 34.1 183 2.3 2.7 -05042100.DDC 790 2.75 4722 13.2 -15.3 -43.5 8.6 7.7 15.2 16.1 14.9 174 3.1 2.1 -05041800.AMA 1099 2.75 1767 9.4 -17.3 -43.3 8.7 7.2 15.5 19.6 22.9 211 1.4 1.9 -05022200.FFC 244 2.75 1389 11.4 -16.3 -43.1 7.0 7.4 20.7 28.5 35.4 225 1.2 1.7 -04070500.DDC 790 2.75 3819 14.3 -10.3 -37.7 8.3 7.4 14.4 18.6 30.5 161 2.0 2.5 -04060300.FWD 171 2.75 4767 16.9 -11.1 -36.5 8.7 6.9 14.1 19.1 24.1 157 2.9 -999.0 -04053000.TOP 270 2.75 3882 15.9 -12.9 -39.3 8.7 7.1 14.8 22.4 15.3 295 3.2 3.2 -04051300.OUN 357 2.75 5740 16.8 -11.5 -40.5 8.2 7.9 12.4 15.2 20.9 131 2.7 3.6 -04051223.LMN 317 2.75 4076 15.9 -10.5 -40.3 7.4 8.1 21.9 22.7 30.4 304 2.3 2.4 -04051100.DNR 1625 2.75 3995 10.6 -12.9 -41.1 9.2 7.8 18.2 28.3 16.6 379 3.4 1.5 -04050600.WAL 12 2.75 1861 9.3 -21.3 -47.5 7.2 7.4 21.3 20.2 28.3 239 1.5 1.4 -04040500.CRP 13 2.75 2478 14.9 -12.1 -39.1 6.7 7.3 7.0 22.4 20.6 184 1.5 0.6 -04032800.OUN 357 2.75 2904 12.6 -15.9 -44.3 7.8 7.8 16.4 23.3 31.1 315 2.5 2.8 -04032718.DDC 790 2.75 4133 13.2 -17.3 -42.1 8.0 6.9 14.4 24.6 26.6 143 4.4 2.3 -03100600.AMA 1099 2.75 2542 12.2 -10.3 -39.3 6.4 7.8 12.9 24.1 30.2 50 1.2 2.5 -03091100.MAF 872 2.75 2808 13.3 -6.5 -32.5 6.8 6.9 7.4 10.3 9.0 80 0.4 1.4 -03091000.DDC 790 2.75 3620 14.8 -7.7 -34.7 7.5 7.2 11.3 12.1 15.8 233 0.8 3.0 -03061400.AMA 1099 2.75 3153 12.3 -13.3 -39.3 8.3 7.1 13.7 21.7 24.7 35 2.2 2.1 -03060500.AMA 1099 2.75 2647 11.9 -11.9 -36.9 7.6 6.8 13.1 23.0 28.5 167 1.5 2.1 -03051700.SHV 79 2.75 3995 16.3 -10.9 -37.3 7.4 7.2 19.6 23.2 13.9 242 2.4 2.7 -03051600.AMA 1099 2.75 3706 14.1 -10.3 -37.5 8.9 7.4 34.9 42.9 37.7 632 3.0 -999.0 -03051400.SHV 79 2.75 3920 16.7 -9.5 -38.5 7.2 7.8 19.3 27.2 37.0 389 2.3 0.8 -03051000.OUN 357 2.75 5328 16.8 -11.1 -38.1 8.3 7.3 16.8 27.5 34.8 182 4.3 3.6 -03050700.FWD 171 2.75 5303 17.8 -9.7 -37.7 7.1 7.5 8.4 30.4 36.2 126 3.2 3.5 -03050618.SGF 387 2.75 5492 15.6 -14.7 -43.9 7.7 8.0 17.8 32.0 40.6 313 5.5 2.8 -03050100.TOP 270 2.75 3922 13.0 -14.1 -43.5 7.8 8.1 13.9 17.2 19.6 117 2.3 2.7 -03042900.SGF 387 2.75 3399 13.1 -16.7 -43.3 8.5 7.3 4.8 5.0 19.6 53 1.1 2.8 -03042600.BMX 178 2.75 3921 14.2 -13.3 -41.1 6.2 7.6 26.6 35.8 33.5 89 2.8 2.7 -03042500.LZK 78 2.75 3423 13.8 -15.7 -43.1 7.6 7.6 20.0 20.9 31.0 212 2.8 3.3 -03040618.LZK 78 2.75 2556 13.1 -15.9 -41.3 7.6 7.0 28.4 35.1 38.9 600 2.6 3.1 -03031300.SHV 79 2.75 2901 13.5 -15.3 -43.1 7.1 7.7 11.0 17.1 24.1 162 1.7 2.0 -02081200.LBF 849 2.75 3735 13.3 -9.9 -37.1 8.7 7.3 10.5 13.1 11.8 222 1.3 2.1 -02072700.TOP 270 2.75 6406 19.3 -5.3 -32.5 6.9 7.1 9.1 18.2 19.3 131 1.4 2.6 -02072000.TOP 270 2.75 4986 17.5 -7.5 -32.9 7.3 6.8 8.5 10.0 12.7 197 0.9 2.7 -02062500.ABR 396 2.75 4208 15.1 -7.1 -37.7 6.8 8.2 11.1 19.1 19.3 20 1.3 3.1 -02062400.BIS 506 2.75 3559 16.0 -9.7 -34.1 6.8 6.6 25.2 28.0 24.8 298 2.1 2.4 -02061300.AMA 1099 2.75 3027 13.7 -8.5 -31.9 8.4 6.3 18.7 29.6 33.0 65 1.9 2.5 -02060500.AMA 1099 2.75 2947 13.2 -11.5 -38.3 7.6 7.3 17.9 32.1 45.0 309 2.2 2.7 -02052400.AMA 1099 2.75 4729 13.8 -13.3 -39.9 8.3 7.2 18.5 28.8 21.8 258 4.5 2.3 -02051800.DRT 313 2.75 5077 16.0 -10.5 -37.1 8.1 7.2 5.2 8.8 6.3 15 1.2 2.6 -01112418.BMX 178 2.75 2902 15.1 -11.3 -39.7 6.1 7.7 22.2 26.9 31.9 328 1.7 0.8 -01072500.GGW 700 2.75 1714 11.5 -11.3 -36.3 6.9 6.8 18.2 26.7 32.1 350 1.0 2.2 -01071900.BIS 506 2.75 5738 17.8 -9.9 -36.1 8.6 7.1 14.1 21.8 28.8 183 3.4 2.9 -01071900.ABR 396 2.75 5356 17.5 -10.5 -35.1 8.8 6.6 3.4 18.1 22.7 35 2.9 2.7 -01071800.INL 361 2.75 4580 17.0 -12.9 -37.7 7.8 6.7 11.8 11.9 12.8 154 1.8 0.8 -01070100.RAP 1029 2.75 3235 14.3 -10.7 -35.7 7.7 6.8 12.9 30.8 40.7 114 2.3 2.6 -01061900.MPX 287 2.75 5114 15.6 -11.9 -39.3 9.2 7.5 19.0 33.1 31.9 154 4.9 3.4 -01061700.TOP 270 2.75 4594 15.7 -13.7 -41.9 8.5 7.8 15.7 22.1 26.6 214 3.8 3.4 -01061700.LMN 317 2.75 4093 14.1 -10.7 -37.9 8.0 7.3 9.3 19.4 26.9 195 2.2 3.5 -01061400.OAX 350 2.75 4956 17.2 -11.3 -38.5 9.0 7.4 18.5 20.4 25.5 153 3.3 3.8 -01061000.ABR 396 2.75 3453 13.8 -12.1 -39.9 7.8 7.5 16.6 24.6 32.3 158 2.6 3.6 -01060800.DNR 1625 2.75 3440 13.9 -8.7 -36.7 7.2 7.6 7.4 25.3 21.9 -26 1.8 3.1 -01060600.AMA 1099 2.75 4665 14.9 -8.9 -36.7 7.2 7.5 11.9 15.8 15.6 191 1.5 2.3 -01052500.FFC 244 2.75 2338 11.7 -14.5 -43.1 6.4 7.9 19.6 18.1 21.4 240 1.1 2.5 -01050620.LMN 317 2.75 4496 15.4 -16.1 -43.1 7.3 7.5 7.3 11.5 20.9 60 2.0 3.1 -01042100.OAX 350 2.75 3283 12.4 -15.3 -43.1 7.7 7.7 23.5 28.1 32.7 282 3.1 2.4 -01040400.LZK 78 2.75 4223 15.2 -15.1 -42.1 8.5 7.4 11.9 18.1 24.8 105 3.2 3.1 -00121618.BMX 178 2.75 2219 13.2 -14.1 -42.7 6.7 7.9 25.0 32.9 45.8 266 1.8 0.9 -00072700.OAX 350 2.75 5048 18.5 -9.7 -35.3 8.0 6.9 16.7 21.8 23.2 215 2.8 2.6 -00072500.LBF 849 2.75 5901 17.1 -8.9 -38.1 8.5 7.8 22.2 24.5 29.4 162 3.5 2.9 -00072100.LBF 849 2.75 3073 15.3 -11.3 -37.5 7.8 7.1 16.9 26.5 39.4 223 2.3 2.0 -00071700.MHX 11 2.75 2929 15.1 -12.3 -36.1 7.2 6.4 7.9 18.2 29.9 81 1.5 2.3 -00071000.LBF 849 2.75 5871 18.1 -5.5 -32.5 7.8 7.2 10.7 14.3 19.9 146 1.2 3.5 -00071000.GGW 700 2.75 3180 15.6 -10.9 -35.1 7.0 6.5 23.2 18.4 13.5 248 1.5 2.6 -00062000.LBF 849 2.75 4028 14.9 -8.5 -37.9 6.8 7.9 11.9 18.8 23.9 96 1.4 3.0 -00061400.AMA 1099 2.75 5758 16.5 -4.9 -34.9 7.6 7.9 19.9 23.8 32.0 244 1.8 2.5 -00061200.BIS 506 2.75 2000 11.3 -13.1 -39.9 7.5 7.4 10.2 22.0 28.0 306 1.2 2.5 -00052700.OUN 357 2.75 5870 18.3 -10.1 -37.9 8.4 7.5 12.8 21.5 32.8 117 3.5 4.0 -00051300.DTX 329 2.75 4524 16.9 -8.5 -37.3 7.7 7.7 20.2 24.1 18.5 328 2.3 2.4 -00022500.AMA 1099 2.75 3614 10.3 -18.5 -46.1 8.5 7.7 13.1 26.8 48.5 107 4.0 1.7 -98071100.DDC 790 2.50 4323 18.9 -4.3 -29.9 6.2 6.8 16.0 12.7 15.2 230 0.6 0.6 -96072200.LBF 847 2.50 4756 18.4 -6.5 -34.7 7.2 7.5 19.0 20.0 29.4 94 1.4 2.1 -96071900.GRB 210 2.50 4746 20.7 -7.5 -31.3 6.4 6.3 20.0 26.3 26.2 164 1.9 0.7 -96062100.DEN 1611 2.50 5603 15.2 -8.1 -36.1 9.6 7.6 8.8 27.5 33.4 155 3.8 2.2 -96061200.LBF 847 2.50 2310 11.7 -9.9 -37.5 7.5 7.4 12.7 16.7 22.2 122 0.8 2.4 -96060300.AMA 1095 2.50 2356 11.0 -10.5 -39.7 6.9 7.9 18.0 27.6 31.6 256 1.2 2.0 -96060100.DDC 791 2.50 2888 13.3 -10.9 -38.5 8.3 7.4 13.9 13.3 19.3 111 1.1 2.5 -96051800.MPX 287 2.50 4406 16.3 -8.9 -38.5 8.2 8.0 20.7 13.0 23.4 259 1.4 3.4 -96042200.FTD 196 2.50 1872 12.0 -12.6 -38.7 8.2 7.1 18.3 27.1 34.0 298 1.5 -999.0 -96030700.TLH 26 2.50 2615 15.4 -10.4 -39.0 6.0 7.7 20.7 20.9 23.7 320 1.1 0.6 -95081212.MPX 287 2.50 3361 19.1 -6.3 -31.3 7.2 6.7 23.0 20.6 36.8 164 1.0 -999.0 -95061600.TFX 1130 2.50 3142 13.0 -12.0 -37.7 8.4 7.0 23.8 27.7 35.6 277 2.7 2.3 -95060700.DEN 1611 2.50 3137 12.3 -10.8 -35.7 9.2 6.8 20.7 37.2 35.9 284 2.4 2.0 -95052912.MAF 873 2.50 1617 13.0 -11.3 -37.2 7.5 7.0 13.7 27.6 22.0 284 1.1 1.9 -95051900.GSO 277 2.50 1758 13.4 -11.8 -35.2 7.9 6.3 23.6 25.3 27.1 83 1.3 -999.0 -95051600.MAF 873 2.50 3261 13.6 -7.8 -34.0 8.4 7.1 10.3 21.7 28.8 134 1.5 1.8 -95050900.TOP 268 2.50 1495 10.0 -19.3 -39.2 6.9 5.6 21.2 19.3 22.8 126 1.0 1.2 -95050800.LCH 5 2.50 3259 17.9 -9.9 -35.6 7.1 6.9 10.2 16.7 31.1 119 1.2 0.6 -95050800.FTD 196 2.50 2700 16.5 -10.4 -38.9 7.7 7.7 24.5 30.8 30.8 407 1.9 0.8 -94062600.TOP 268 2.50 4265 16.4 -8.6 -35.2 8.4 7.1 21.6 25.2 45.9 418 2.5 2.9 -94032800.AHN 246 2.50 2627 14.4 -10.5 -35.7 6.2 6.8 30.4 34.5 24.7 518 1.5 0.7 -93070300.TOP 270 2.50 4019 18.5 -7.2 -31.5 7.1 6.5 15.2 15.8 16.4 202 1.0 0.7 -93070200.HON 392 2.50 2619 14.6 -11.3 -39.6 7.0 7.7 12.6 28.3 40.3 143 1.8 0.8 -93061400.TOP 270 2.50 4195 16.5 -8.5 -35.1 7.7 7.1 10.7 12.5 17.8 65 1.1 2.8 -93033000.DRT 314 2.50 2680 12.7 -13.4 -39.4 8.2 7.1 26.0 39.6 44.0 411 2.4 2.8 -92070200.DEN 1611 2.50 2313 11.7 -11.2 -35.2 8.0 6.5 20.0 27.6 29.9 362 1.6 2.5 -92041600.AMA 1095 2.50 3362 11.1 -13.4 -40.9 7.6 7.5 12.0 16.0 17.8 127 1.5 1.7 -92030400.SEP 399 2.50 2676 12.7 -15.3 -44.8 7.7 8.1 9.2 20.1 27.2 133 1.9 2.3 -91080200.CAR 191 2.50 1891 12.3 -13.7 -41.6 6.3 7.6 11.9 19.6 33.3 223 0.9 1.8 -91071800.STC 315 2.50 4956 18.2 -8.7 -32.0 7.3 6.3 21.9 18.7 20.1 104 1.9 2.5 -91053100.DEN 1611 2.50 3551 12.0 -12.1 -39.1 9.5 7.4 10.7 27.3 45.8 149 3.1 1.9 -91052700.LBF 847 2.50 2669 11.9 -13.4 -38.4 7.9 6.8 13.0 13.9 32.3 35 1.1 2.1 -91051200.AMA 1095 2.50 4539 14.3 -10.8 -37.8 8.5 7.3 16.7 12.4 14.9 208 1.7 2.3 -91050800.MAF 873 2.50 3415 11.2 -14.8 -41.4 8.4 7.3 25.4 31.1 36.7 280 3.1 1.6 -91042100.AYS 44 2.50 2563 11.8 -16.9 -41.9 7.4 6.9 10.3 13.4 30.0 76 1.2 1.7 -91041900.SEP 399 2.50 5996 17.6 -13.2 -38.3 7.4 6.8 13.0 13.5 44.8 24 2.6 3.1 -90083100.CHS 13 2.50 2477 16.0 -8.5 -33.3 6.5 6.6 8.3 17.0 17.7 67 0.8 0.6 -90070200.GSO 277 2.50 3963 14.8 -10.0 -35.9 7.2 7.0 10.7 26.0 16.3 100 2.4 2.2 -90062200.ALB 86 2.50 1833 12.6 -14.1 -41.8 6.7 7.6 20.6 32.5 29.1 203 1.4 1.6 -90061500.DDC 791 2.50 4667 16.0 -6.5 -35.9 7.9 7.8 15.7 28.4 30.1 306 2.1 2.7 -90060700.DEN 1611 2.50 2393 10.9 -8.2 -36.5 9.0 7.6 19.6 26.3 23.9 170 1.2 1.6 -90060300.PAH 126 2.50 3663 17.8 -7.6 -36.2 7.0 7.6 29.8 24.0 25.9 367 1.5 0.6 -08110600.OUN 357 2.50 1623 11.4 -12.5 -39.9 6.9 7.5 24.8 29.8 32.7 317 1.0 2.4 -06071123.LMN 317 2.50 2996 16.5 -5.9 -29.5 6.7 6.2 9.4 12.6 11.2 110 0.5 0.6 -06062500.DNR 1625 2.50 987 7.1 -11.5 -38.9 8.9 7.4 12.5 26.1 26.5 -172 0.7 0.9 -06061400.RAP 1029 2.50 2691 11.5 -7.7 -35.5 8.3 7.5 15.3 17.3 24.5 248 0.8 1.6 -06052600.SGF 387 2.50 3409 13.9 -9.5 -39.1 6.5 8.0 18.8 18.9 23.2 262 1.3 2.5 -06050900.JAN 101 2.50 3303 16.1 -13.3 -38.7 7.3 6.9 14.9 28.4 39.9 170 2.8 1.9 -05050700.MAF 872 2.50 3257 10.7 -12.3 -41.3 8.0 7.9 11.2 20.3 24.6 48 1.7 1.6 -05050322.XMR 3 2.50 2165 13.4 -13.9 -38.9 7.6 6.8 21.5 23.3 41.5 82 1.7 1.2 -04102400.JAN 101 2.50 1938 15.8 -6.9 -33.5 5.3 7.1 19.3 30.8 27.8 328 0.6 0.6 -04091500.LBF 849 2.50 1474 12.8 -10.7 -38.3 8.0 7.4 20.5 35.4 39.8 306 1.0 -999.0 -04080700.ABR 396 2.50 2792 13.1 -9.3 -36.7 6.7 7.4 12.1 21.0 25.9 240 1.1 2.5 -04040400.EPZ 1252 2.50 4482 12.1 -17.9 -46.3 8.2 7.9 11.6 29.1 25.4 203 5.1 2.1 -04032718.OUN 357 2.50 2825 12.6 -14.9 -42.3 7.3 7.6 11.5 21.1 32.3 199 2.0 2.1 -03062200.RAP 1029 2.50 3380 10.6 -13.7 -39.5 8.0 7.1 18.7 27.5 42.2 189 2.6 1.5 -03051500.SHV 79 2.50 4260 16.8 -9.9 -36.1 6.8 7.1 16.3 33.7 42.9 246 2.5 0.8 -02072500.ABR 396 2.50 3995 15.0 -11.5 -38.9 7.9 7.5 13.8 28.3 28.6 207 3.2 3.0 -02051700.AMA 1099 2.50 5036 13.8 -12.7 -40.5 8.7 7.6 17.4 21.9 26.5 216 3.9 2.2 -02041900.DVN 229 2.50 2861 12.3 -14.5 -39.9 8.2 7.0 15.9 14.1 20.0 213 1.4 2.5 -02041212.AMA 1099 2.50 2907 12.2 -13.7 -42.7 7.5 7.9 14.6 20.4 25.1 184 1.8 2.8 -02040300.JAX 9 2.50 3327 14.8 -14.3 -41.7 7.2 7.4 11.8 11.5 30.9 80 1.3 1.5 -01101000.DDC 790 2.50 3299 12.9 -9.7 -40.3 6.4 8.3 16.4 18.8 18.3 275 1.2 2.5 -01082400.AMA 1099 2.50 4318 15.4 -6.7 -34.3 7.4 7.4 21.0 24.0 28.1 158 1.7 2.8 -01070500.LBF 849 2.50 3571 14.5 -7.7 -36.3 7.7 7.6 17.1 26.0 27.0 313 1.8 2.9 -01070400.RAP 1029 2.50 3145 13.2 -11.1 -37.9 8.3 7.3 12.9 25.2 26.1 144 2.3 2.6 -01052620.LMN 317 2.50 4355 14.1 -13.5 -40.9 6.4 7.5 20.2 27.3 33.2 233 3.3 2.9 -01052500.BMX 178 2.50 2388 11.9 -14.9 -43.1 6.7 7.7 23.5 29.2 27.4 436 1.8 2.7 -01050400.MAF 872 2.50 3866 13.7 -11.3 -36.7 7.2 6.9 11.4 12.8 33.8 101 1.3 2.7 -01050100.OAX 350 2.50 2265 10.4 -16.9 -44.5 7.7 7.7 19.2 17.4 17.0 226 1.3 2.2 -01042200.DDC 790 2.50 3749 13.3 -12.1 -41.1 7.3 7.9 24.2 33.4 45.3 510 2.8 2.7 -01041700.MAF 872 2.50 4552 13.9 -12.1 -39.1 7.5 7.3 8.0 16.2 30.6 100 2.2 2.2 -00091100.MPX 287 2.50 4554 16.6 -10.3 -39.5 7.0 7.9 18.4 22.0 24.0 271 2.4 3.2 -00080500.BIS 506 2.50 4830 17.0 -8.7 -35.1 6.9 7.2 4.0 17.2 22.9 86 1.6 3.3 -00070600.LBF 849 2.50 5506 18.2 -7.1 -32.3 8.3 6.6 11.8 25.3 35.5 155 2.6 3.5 -00070200.ABR 396 2.50 5952 17.8 -10.3 -38.1 8.4 7.5 8.1 12.2 23.4 147 2.0 3.9 -00062400.OAX 350 2.50 4783 17.5 -8.7 -35.5 7.2 7.2 14.9 18.7 28.2 195 1.8 2.3 -00061000.RAP 966 2.50 3610 13.2 -8.1 -37.9 7.8 8.0 11.9 14.3 21.1 70 1.0 2.1 -00052300.MHX 11 2.50 3613 15.1 -13.5 -41.7 6.5 7.7 10.5 15.3 26.5 79 1.6 2.4 -00051200.DVN 229 2.50 4865 15.6 -8.1 -39.3 7.4 8.4 19.3 24.8 24.9 225 2.3 3.4 -00050100.FWD 196 2.50 3593 14.3 -13.1 -41.5 7.2 7.8 19.0 17.3 18.5 401 1.9 1.7 -00032700.SGF 387 2.50 1766 9.8 -18.3 -45.1 7.5 7.4 21.4 34.3 43.9 350 1.7 2.2 -00021400.LZK 165 2.50 2091 10.7 -20.3 -45.7 6.4 7.1 22.2 21.1 24.5 245 1.5 2.1 -00061300.OAX 350 2.25 5453 17.7 -11.5 -38.7 8.5 7.3 12.9 15.8 19.3 206 2.7 4.0 -99053100.TOP 270 2.00 2215 13.1 -10.9 -39.7 6.8 7.8 14.7 18.6 12.2 189 1.0 1.4 -99050400.DRT 307 2.00 5609 17.4 -10.1 -40.7 7.5 8.3 21.2 40.5 38.9 342 3.7 4.6 -98063000.BUF 215 2.00 2615 14.5 -10.5 -38.3 6.1 7.5 8.5 23.6 28.2 86 1.3 1.7 -98062500.APX 448 2.00 3453 15.8 -11.3 -34.3 7.3 6.2 21.9 28.9 35.4 348 2.5 3.3 -98033100.FWD 196 2.00 2873 13.3 -14.3 -40.7 7.2 7.2 17.6 29.6 57.5 93 2.5 2.9 -90091400.STC 315 2.00 2123 13.1 -10.9 -38.5 7.4 7.5 23.2 27.8 39.0 564 1.4 -999.0 -90072600.TBW 13 2.00 4330 18.4 -6.3 -31.8 5.7 6.8 6.3 3.5 8.5 7 0.4 0.6 -90061400.PIA 200 2.00 3570 18.1 -7.0 -32.9 7.0 6.9 9.5 16.5 23.4 134 0.9 0.6 -90060900.PIT 360 2.00 4095 16.7 -9.5 -35.8 6.7 7.0 18.8 18.1 13.6 236 1.5 1.0 -89103000.OUN 357 2.00 2163 12.5 -14.7 -42.6 6.6 7.6 13.1 18.0 18.1 195 1.1 1.6 -89082100.LBF 847 2.00 3307 14.8 -9.1 -35.7 7.1 7.1 8.0 28.0 44.7 83 1.9 3.0 -89071100.HON 392 2.00 3126 15.7 -7.0 -31.9 6.9 6.6 12.3 14.6 18.6 151 0.7 1.2 -89052800.ELP 1199 2.00 2569 11.2 -6.8 -34.2 8.0 7.3 14.9 11.3 17.1 232 0.4 1.4 -06090100.DDC 790 2.00 1972 12.2 -7.7 -34.9 7.1 7.2 13.9 15.6 27.4 363 0.5 1.6 -06062700.ILX 178 2.00 2025 12.2 -15.7 -43.1 6.4 7.6 5.2 3.5 11.7 15 0.4 1.2 -06061400.TFX 1131 2.00 2827 12.3 -9.7 -36.9 8.1 7.3 14.3 15.9 28.9 65 1.0 2.1 -06052400.DDC 790 2.00 1607 10.2 -8.7 -36.9 7.6 7.6 17.0 22.4 19.3 189 0.6 1.8 -06051600.MFL 5 2.00 2473 15.8 -11.1 -35.3 6.8 6.6 18.7 26.6 21.2 227 1.6 0.6 -06050800.DDC 790 2.00 1674 9.5 -17.1 -43.7 8.9 7.4 16.1 16.8 27.8 248 1.1 2.6 -06041600.TOP 270 2.00 2191 12.2 -12.9 -37.7 8.2 6.7 28.5 37.2 42.6 533 1.8 2.9 -06040700.TOP 270 2.00 2249 11.0 -15.1 -41.9 7.4 7.4 15.8 35.7 27.3 206 1.8 2.1 -05050900.LMN 317 2.00 2971 12.0 -16.1 -42.3 7.8 7.2 15.9 15.1 29.6 290 1.6 2.2 -05050700.LBF 849 2.00 3058 9.7 -14.3 -42.7 8.2 7.9 6.1 12.5 21.7 135 1.2 1.4 -05022100.SGF 387 2.00 1128 9.1 -18.9 -48.7 6.8 8.3 17.1 27.7 36.6 97 1.0 1.9 -04091200.GRB 214 2.00 2256 12.3 -14.9 -39.7 7.2 6.8 11.6 14.7 24.8 64 1.0 1.0 -04082400.BIS 506 2.00 2596 13.4 -11.1 -36.5 7.6 6.9 16.4 21.3 22.3 208 1.5 2.2 -04072300.TOP 270 2.00 3276 16.0 -7.7 -31.5 6.4 6.3 11.4 15.8 19.6 158 0.8 0.7 -04062400.GRB 214 2.00 1604 10.4 -16.9 -45.3 6.3 7.9 16.4 25.3 36.9 128 1.1 2.4 -04052200.DDC 790 2.00 3809 13.5 -9.7 -37.9 8.1 7.6 20.3 21.0 27.0 297 2.0 2.2 -04043000.JAN 101 2.00 1469 13.6 -12.7 -38.7 6.5 7.0 18.1 27.4 22.8 184 1.1 0.6 -03051900.TBW 13 2.00 3797 17.1 -10.9 -35.3 6.8 6.6 4.0 5.9 5.0 -4 0.6 1.0 -02062600.MPX 287 2.00 6228 19.6 -9.7 -37.1 7.1 7.4 9.2 18.6 21.8 120 2.6 3.2 -02061300.DVN 229 2.00 3501 17.3 -11.9 -35.7 7.4 6.5 10.0 26.3 38.7 100 2.6 1.1 -02052800.LZK 78 2.00 3284 15.1 -12.3 -37.7 6.5 6.9 2.6 4.4 12.3 13 0.6 0.6 -02041800.OAX 350 2.00 2113 11.4 -14.5 -43.5 7.6 8.0 24.0 33.9 35.5 376 1.7 2.2 -01101000.OUN 357 2.00 3485 15.6 -12.9 -39.9 7.9 7.3 23.9 24.4 28.2 447 2.8 2.5 -01090800.TOP 270 2.00 4174 17.8 -11.3 -34.9 8.1 6.4 24.5 26.2 26.7 274 3.2 1.7 -01090800.OUN 357 2.00 4351 17.6 -8.7 -33.7 7.8 6.7 21.8 26.1 21.2 151 2.5 2.3 -01082400.DDC 790 2.00 4283 16.4 -7.5 -33.9 7.7 7.0 11.9 14.7 16.3 77 1.2 3.1 -01082300.TOP 270 2.00 4361 16.7 -9.7 -33.7 7.6 6.5 13.6 9.9 23.0 192 1.0 2.3 -01072000.RAP 1029 2.00 4486 15.1 -8.7 -35.5 8.4 7.2 10.9 15.4 26.3 71 1.6 2.4 -01071300.GGW 700 2.00 3042 14.5 -10.1 -36.3 8.1 7.1 7.9 16.5 34.2 19 1.3 3.5 -01063000.FWD 171 2.00 4122 16.8 -9.7 -36.7 6.9 7.3 9.2 11.2 19.2 133 1.0 1.6 -01062100.DNR 1625 2.00 2544 10.8 -11.5 -39.3 7.5 7.5 20.5 21.4 23.2 192 1.2 2.1 -01053100.LCH 10 2.00 3988 17.4 -8.3 -37.7 7.0 7.9 0.8 8.3 13.9 8 0.6 2.4 -01053100.FWD 171 2.00 4571 15.8 -12.3 -40.5 8.7 7.7 13.7 12.4 20.6 106 2.0 3.9 -01053000.DDC 790 2.00 2892 15.2 -12.1 -35.1 8.0 6.2 14.8 19.5 26.6 388 1.8 1.8 -01052800.OUN 357 2.00 4910 16.5 -10.7 -40.3 7.6 8.0 16.9 29.7 38.8 113 3.5 3.1 -01052700.DDC 790 2.00 2853 11.3 -12.1 -40.1 6.7 7.6 19.3 30.6 37.1 184 1.7 1.8 -01051200.OUN 357 2.00 3098 13.2 -13.9 -40.5 7.1 7.3 8.7 10.0 10.8 132 1.0 2.1 -01050702.LZK 78 2.00 2759 14.2 -12.9 -40.5 5.9 7.5 7.3 18.7 26.3 77 1.3 2.0 -01050700.SGF 387 2.00 4025 14.5 -13.7 -42.3 6.1 7.9 10.5 8.8 17.0 202 1.0 3.1 -01050600.FWD 171 2.00 3092 15.4 -12.7 -38.7 6.8 7.1 19.4 32.7 34.4 170 2.3 2.1 -01042200.MAF 872 2.00 4543 13.7 -12.3 -39.7 8.4 7.5 12.3 27.4 36.2 164 4.1 2.2 -01042200.AMA 1099 2.00 6059 14.1 -15.3 -41.1 9.2 5.4 16.6 35.7 38.3 320 7.4 3.3 -00072300.LBF 849 2.00 2926 13.2 -11.5 -38.1 7.1 7.2 13.6 25.2 27.3 91 1.9 2.8 -00071500.BIS 506 2.00 5132 16.5 -9.5 -35.1 8.1 6.9 14.6 27.6 34.1 152 3.4 2.7 -00071100.GGW 700 2.00 3230 14.2 -11.3 -38.9 6.9 7.5 16.9 30.1 48.1 88 2.2 3.0 -00061500.JAX 9 2.00 4801 17.9 -8.7 -34.3 6.4 6.9 3.6 6.2 13.3 55 0.6 1.1 -00061300.LBF 849 2.00 4790 13.9 -9.9 -37.9 8.3 7.5 9.9 16.6 18.6 159 2.1 2.0 -00061200.AMA 1099 2.00 5720 16.8 -10.3 -34.7 8.3 6.6 15.7 16.1 28.7 88 2.6 2.7 -00032800.JAX 9 2.00 2135 12.5 -14.5 -43.3 6.3 7.9 25.7 29.1 24.7 268 1.6 0.9 -00031600.LMN 317 2.00 1478 9.5 -17.3 -45.5 7.1 7.8 12.9 22.1 10.9 164 1.0 2.2 -00030300.FWD 196 2.00 2589 12.3 -14.3 -41.7 6.2 7.5 20.2 33.4 29.1 239 1.8 2.7 -98062500.FFC 244 1.75 3224 15.8 -8.9 -34.3 7.3 6.8 5.6 4.2 9.9 54 0.5 0.6 -97100900.OUN 357 1.75 3628 16.5 -7.5 -35.9 6.0 7.5 16.6 20.0 29.9 205 1.1 0.8 -94071700.HAT 4 1.75 2973 16.5 -6.0 -31.3 5.7 6.7 4.4 5.9 3.1 33 0.2 0.6 -94071700.1M1 172 1.75 3339 17.7 -6.4 -31.8 5.8 6.7 19.1 12.5 11.3 164 0.5 0.6 -94070100.1M1 172 1.75 4820 18.6 -8.1 -33.0 6.1 6.7 12.6 20.0 18.5 342 1.5 1.0 -94062600.PBI 6 1.75 4199 17.7 -9.1 -34.2 6.6 6.7 5.2 4.9 6.6 10 0.6 1.8 -92051500.1M1 172 1.75 2877 13.3 -11.3 -39.9 6.4 7.8 7.9 11.4 16.3 54 0.7 1.5 -91060600.RAP 966 1.75 2001 13.1 -11.5 -36.7 7.1 6.8 11.9 13.2 19.7 170 0.7 1.4 -91060600.JAN 91 1.75 3344 16.3 -9.1 -33.5 6.8 6.5 3.1 9.5 9.6 12 0.6 0.6 -91053100.AHN 246 1.75 3505 16.3 -6.9 -32.1 5.9 6.7 3.2 3.9 4.1 15 0.3 0.6 -91051700.GGG 124 1.75 5081 18.4 -10.4 -36.4 7.5 7.0 10.5 7.9 11.2 157 1.0 0.9 -91051300.HON 392 1.75 3615 14.7 -9.5 -38.2 7.2 7.7 13.0 14.2 22.7 97 1.1 2.8 -91051300.BIS 504 1.75 1867 13.8 -11.5 -36.7 6.8 6.8 15.8 26.9 19.8 -79 1.3 0.7 -91032700.DAY 298 1.75 1310 10.7 -13.1 -42.1 6.4 7.9 24.3 30.2 30.6 531 0.8 1.8 -90091100.AHN 246 1.75 2857 15.1 -8.6 -34.0 5.9 6.8 6.3 7.9 7.6 80 0.4 0.6 -90090200.MAF 873 1.75 3597 14.9 -6.2 -32.1 6.8 6.8 7.5 17.2 18.3 58 0.8 2.5 -90082600.HON 392 1.75 5529 17.9 -11.5 -38.5 9.1 7.4 9.9 14.7 28.6 156 2.7 -999.0 -90082600.BIS 504 1.75 3187 13.7 -13.2 -42.0 8.6 7.9 13.2 22.2 23.1 190 2.6 2.5 -90082400.OVN 400 1.75 5016 18.7 -7.4 -31.7 6.8 6.5 9.4 7.4 14.7 100 0.6 0.7 -90082100.AMA 1095 1.75 2833 14.6 -5.7 -30.1 6.6 6.5 10.6 11.7 11.3 75 0.4 1.2 -90081500.DDC 791 1.75 3012 15.1 -6.6 -32.5 5.6 6.9 9.9 9.0 15.8 59 0.3 0.6 -90081000.AHN 246 1.75 2234 14.9 -9.4 -35.2 6.2 6.9 6.4 13.3 26.7 33 0.6 0.8 -90080200.LCH 5 1.75 3223 18.4 -7.3 -32.2 6.4 6.6 3.1 6.5 2.0 14 0.3 0.6 -90073100.GGG 124 1.75 3254 16.1 -7.5 -31.9 6.4 6.5 1.2 7.9 5.4 3 0.4 0.6 -90072700.AMA 1095 1.75 3104 14.3 -5.8 -31.4 7.3 6.8 11.1 7.7 7.9 117 0.3 2.2 -90072600.OUN 357 1.75 3546 16.6 -6.8 -32.6 6.2 6.8 11.1 10.8 14.7 206 0.5 0.7 -90072100.ABQ 1619 1.75 1327 10.9 -5.9 -28.5 8.3 6.1 9.8 7.9 14.5 145 0.1 1.3 -90071800.LBF 847 1.75 3138 12.3 -7.7 -36.8 8.2 7.8 10.0 17.7 16.6 115 1.0 1.6 -90071700.FNT 236 1.75 1393 11.9 -12.5 -40.9 6.5 7.7 13.2 15.5 25.3 176 0.5 0.6 -90071400.ABQ 1619 1.75 1588 10.4 -9.4 -32.2 8.7 6.2 4.4 18.9 32.6 70 0.6 1.2 -90071300.CRP 12 1.75 1658 13.3 -6.5 -31.6 6.5 6.7 14.6 12.8 9.3 121 0.3 0.6 -90071100.CKL 145 1.75 2544 15.4 -8.1 -32.3 6.4 6.4 2.1 5.1 4.6 9 0.3 0.6 -90070900.GRB 210 1.75 2962 16.9 -6.5 -31.5 6.5 6.6 12.1 18.2 22.7 82 0.7 0.6 -90070500.LCH 5 1.75 3315 17.6 -8.5 -32.0 6.6 6.3 11.6 15.3 2.5 58 0.9 0.6 -90061800.PIA 200 1.75 4567 19.5 -8.1 -33.4 7.4 6.7 14.1 17.0 25.7 94 1.5 1.0 -90061300.STC 315 1.75 2789 16.2 -10.4 -33.4 7.2 6.2 14.2 36.6 42.0 139 1.8 0.7 -90061100.CHS 13 1.75 4050 17.7 -8.1 -33.2 6.6 6.7 6.4 8.1 19.1 102 0.6 0.6 -90061000.OUN 357 1.75 3242 15.1 -8.5 -33.0 7.8 6.6 10.9 10.1 1.3 21 0.7 2.5 -90061000.IAD 85 1.75 2818 14.9 -9.2 -34.3 6.5 6.7 18.0 16.4 19.3 175 0.9 0.6 -90052800.SIL 8 1.75 3916 18.0 -10.0 -34.5 6.8 6.6 10.4 19.3 10.6 48 1.7 0.8 -90052300.HON 392 1.75 1984 10.9 -14.0 -42.8 7.2 7.9 15.0 22.3 33.6 107 1.2 2.4 -90052100.UMN 438 1.75 3661 14.8 -13.1 -43.5 7.6 8.3 15.3 15.4 23.7 181 1.8 3.4 -90052100.HAT 4 1.75 2891 15.8 -9.7 -37.4 5.6 7.5 12.4 13.8 19.5 182 0.7 0.6 -90051900.SEP 399 1.75 3246 17.0 -9.1 -34.7 6.6 6.8 15.6 20.9 27.2 387 1.3 0.6 -90051600.IAD 85 1.75 2004 13.4 -14.0 -39.9 7.0 7.1 12.7 16.7 27.7 102 1.0 -999.0 -90051200.SEP 399 1.75 2282 13.6 -9.2 -37.7 6.9 7.7 14.5 34.8 47.4 134 1.3 -999.0 -90050600.OUN 357 1.75 836 7.6 -20.1 -41.8 7.2 6.0 5.8 18.3 48.8 30 0.6 1.4 -90042900.AYS 44 1.75 2333 13.0 -12.2 -40.9 6.2 7.8 19.1 30.6 23.2 243 1.5 2.3 -90042600.DRT 314 1.75 3699 14.6 -13.8 -39.4 8.1 7.0 11.1 25.7 33.2 101 3.4 4.3 -90042200.OUN 357 1.75 2748 11.1 -13.3 -46.8 6.6 9.3 7.3 12.2 14.9 48 0.8 2.0 -90040200.BRO 7 1.75 3494 16.2 -9.3 -36.7 7.1 7.4 15.2 25.7 37.2 65 1.9 0.9 -90031300.OUN 357 1.75 3211 12.7 -13.6 -43.5 7.8 8.2 19.4 24.2 18.1 286 2.5 2.8 -90031000.AMA 1095 1.75 2468 11.1 -16.0 -40.7 8.6 6.8 9.9 13.1 18.2 106 1.2 1.9 -90022800.MAF 873 1.75 607 9.7 -16.2 -42.9 6.6 7.4 5.1 16.4 23.8 55 0.3 1.2 -89090800.DEN 1611 1.75 1350 10.1 -6.8 -33.1 8.3 7.1 15.4 24.1 24.0 366 0.5 2.0 -89090200.1M1 172 1.75 3818 18.3 -4.8 -29.4 6.1 6.5 8.2 16.2 14.1 64 0.7 0.6 -89083100.DDC 791 1.75 2956 16.5 -5.7 -31.4 6.6 6.9 13.3 13.6 22.5 346 0.5 0.8 -89083000.OUN 357 1.75 3864 17.3 -5.6 -30.2 6.0 6.5 11.8 13.1 24.2 112 0.6 0.6 -89082900.TOP 268 1.75 4842 19.8 -6.3 -32.1 6.6 6.8 13.2 15.4 21.1 156 1.0 0.6 -89082800.UMN 438 1.75 3603 17.3 -6.1 -30.3 6.5 6.4 2.6 7.8 5.6 28 0.4 0.6 -89082700.OMA 400 1.75 3452 17.8 -6.6 -33.4 6.1 7.1 15.2 19.5 33.1 142 0.9 0.6 -89082500.RAP 966 1.75 1899 10.6 -7.1 -34.2 7.6 7.2 2.7 7.7 7.6 55 0.2 1.0 -89081300.TBW 13 1.75 2617 16.4 -8.6 -33.3 6.0 6.6 10.1 18.1 18.2 65 0.8 0.6 -89080600.UMN 438 1.75 5563 19.0 -6.9 -31.4 7.0 6.5 8.8 11.7 11.3 99 1.0 0.8 -89073000.JAN 91 1.75 3940 18.0 -7.7 -34.5 6.7 7.2 2.1 1.9 3.1 9 0.5 0.6 -89072900.HON 392 1.75 2092 14.0 -5.9 -34.4 6.0 7.6 6.4 12.0 17.9 105 0.3 0.8 -89071500.LBF 847 1.75 2675 14.3 -6.9 -33.4 6.1 7.0 5.5 6.1 8.4 27 0.3 0.6 -89071300.OUN 357 1.75 4127 19.0 -5.4 -31.1 6.9 6.8 13.0 13.8 19.1 196 0.7 -999.0 -89071300.DDC 791 1.75 3239 15.1 -4.9 -31.6 6.9 7.1 7.9 5.1 7.2 81 0.3 1.2 -89070800.PIT 360 1.75 2732 15.4 -9.1 -36.1 6.8 7.3 12.8 17.5 15.7 81 1.0 1.5 -89062800.BUF 218 1.75 2385 15.2 -8.2 -33.3 5.3 6.8 9.8 20.1 22.3 82 0.7 0.6 -89062700.PIA 200 1.75 2460 15.7 -7.9 -33.9 6.6 6.9 5.3 13.2 12.4 87 0.5 0.7 -89062600.IAD 85 1.75 3138 16.2 -8.6 -36.4 6.1 7.4 12.1 14.3 23.0 108 0.8 0.7 -89062200.AHN 246 1.75 1517 15.5 -7.6 -33.7 5.8 6.9 14.9 12.6 15.8 112 0.3 0.6 -89061900.BNA 180 1.75 1755 13.9 -10.2 -36.1 6.3 6.9 6.8 9.7 7.8 86 0.4 0.6 -89061400.GGG 124 1.75 3674 17.2 -11.0 -35.3 6.9 6.6 4.3 15.4 23.3 61 1.4 -999.0 -89060600.JAN 91 1.75 3336 16.3 -11.3 -37.4 6.7 7.0 10.4 20.8 25.3 103 1.7 0.8 -89060600.GSO 277 1.75 2078 14.8 -9.1 -34.5 5.9 6.8 10.0 8.1 6.7 93 0.3 0.6 -89060100.TOP 268 1.75 2810 15.8 -10.9 -35.3 7.9 6.6 7.9 10.6 26.9 90 0.8 -999.0 -06100400.MPX 287 1.75 3011 13.7 -12.1 -41.5 7.4 8.1 23.9 34.0 30.2 514 2.4 2.9 -06091600.DDC 790 1.75 2738 14.4 -6.9 -34.5 6.6 7.4 21.6 29.7 39.0 378 1.1 2.2 -06091400.EPZ 1252 1.75 1589 11.7 -10.3 -32.9 7.6 6.1 13.1 17.4 23.7 167 0.6 2.0 -06091100.AMA 1099 1.75 1812 12.5 -8.9 -37.1 7.1 7.6 13.7 14.9 33.3 51 0.5 2.1 -06082300.RAP 1029 1.75 1757 8.3 -9.5 -39.1 9.1 8.0 12.7 21.3 28.7 108 0.8 0.8 -06082100.ABR 396 1.75 1851 12.5 -9.9 -36.9 6.8 7.3 15.5 21.9 39.5 257 0.8 2.1 -06080900.TUS 779 1.75 1640 11.9 -4.7 -30.5 6.6 6.8 6.6 5.1 8.2 25 0.1 0.6 -06080700.TOP 270 1.75 1693 12.5 -6.7 -31.1 7.0 6.4 3.2 7.6 6.8 35 0.2 0.6 -06072600.TUS 779 1.75 1725 11.2 -5.7 -31.7 7.4 7.0 8.5 15.0 18.3 36 0.3 0.9 -06072200.LZK 78 1.75 2480 14.1 -8.1 -31.3 7.3 6.2 7.7 6.9 5.8 67 0.3 0.6 -06071900.JAN 101 1.75 2280 15.2 -6.9 -33.5 6.5 7.1 9.0 11.1 11.1 88 0.4 0.6 -06071300.DDC 790 1.75 1575 12.8 -5.9 -30.5 6.9 6.5 7.4 12.7 13.7 99 0.2 0.8 -06071200.DDC 790 1.75 1068 11.8 -8.7 -29.3 8.0 5.5 11.8 15.4 21.8 12 0.3 1.0 -06070100.BNA 210 1.75 2750 13.5 -11.5 -39.1 6.7 7.5 11.5 10.8 7.8 41 0.7 1.5 -06062900.DDC 790 1.75 919 7.7 -10.1 -38.7 7.7 7.7 1.9 17.9 17.9 16 0.3 0.8 -06062400.LBF 849 1.75 1400 10.7 -12.1 -38.5 7.4 7.2 13.6 26.6 25.0 272 0.9 2.1 -06062400.BIS 506 1.75 942 8.3 -15.3 -41.9 7.0 7.3 16.7 22.7 27.2 167 0.6 1.6 -06062100.CHS 15 1.75 4007 17.0 -10.1 -35.5 6.4 6.9 7.1 12.9 19.3 66 1.1 0.7 -06061800.FWD 171 1.75 2286 14.3 -10.9 -34.3 8.2 6.2 11.6 13.9 24.6 134 0.9 2.3 -06052700.GSO 270 1.75 2136 12.7 -9.9 -37.3 5.8 7.4 17.1 17.4 21.2 217 0.6 1.5 -06052500.TLH 53 1.75 2619 14.8 -10.5 -36.5 6.4 7.0 9.2 7.3 7.5 56 0.4 0.6 -06052300.SGF 387 1.75 3032 14.4 -11.9 -37.7 7.1 7.0 8.3 9.0 15.5 91 0.7 1.6 -06051800.ILX 178 1.75 713 8.0 -17.5 -46.5 6.9 8.1 16.9 28.8 29.6 226 0.6 2.1 -06051412.SHV 79 1.75 2270 12.4 -14.9 -41.3 7.8 7.2 15.5 16.8 26.2 84 1.3 2.8 -06051100.LCH 10 1.75 4564 18.5 -12.3 -35.7 8.9 6.4 12.2 22.9 22.0 38 3.7 1.7 -06050912.SGF 387 1.75 2144 12.9 -12.9 -39.7 6.7 7.3 10.1 20.3 18.4 144 1.2 1.8 -06050900.DDC 790 1.75 1630 9.6 -13.3 -40.5 7.9 7.4 15.1 27.2 27.8 179 1.2 2.0 -06050600.LCH 10 1.75 2655 14.9 -10.3 -39.3 5.8 7.8 15.8 23.1 25.2 64 1.2 0.6 -06050400.SHV 79 1.75 3310 15.0 -12.1 -39.1 6.7 7.3 5.8 8.0 14.3 85 0.7 0.6 -06042300.DTX 329 1.75 609 6.7 -24.1 -43.7 7.4 5.5 14.0 17.7 27.4 50 0.5 1.8 -06041900.BMX 178 1.75 1805 12.0 -11.1 -39.9 6.3 7.7 5.4 14.2 22.0 62 0.5 0.7 -06041600.WAL 12 1.75 2234 10.9 -16.5 -44.7 7.2 7.8 17.2 17.7 48.2 81 1.2 2.3 -06041600.IAD 93 1.75 2181 10.2 -16.7 -43.9 7.0 7.5 16.6 27.7 43.3 48 1.8 1.8 -06041300.LZK 78 1.75 1294 11.0 -13.5 -41.1 7.2 7.6 6.0 12.6 20.8 34 0.4 -999.0 -06040900.JAX 9 1.75 2254 13.6 -13.7 -38.1 6.6 6.6 19.5 20.4 22.0 178 1.3 2.1 -06040400.CHS 15 1.75 2165 11.6 -16.9 -42.5 8.1 7.0 26.6 31.6 39.3 207 2.2 2.6 -05082700.AMA 1099 1.75 2765 13.6 -5.5 -32.3 7.4 7.1 10.0 11.5 11.5 31 0.4 2.0 -05082400.RAP 1029 1.75 2040 11.3 -11.3 -38.9 8.6 7.5 13.6 11.6 19.1 116 0.6 -999.0 -05031500.TLH 53 1.75 1338 12.4 -14.1 -38.5 7.1 6.6 12.7 28.4 53.2 41 1.1 1.1 -05030400.AMA 1099 1.75 697 4.3 -23.3 -51.5 8.7 8.0 13.1 22.7 36.0 142 0.8 1.3 -04092500.AMA 1099 1.75 2465 11.2 -11.9 -40.7 6.9 7.8 12.0 15.1 24.9 38 0.8 2.0 -04092300.AMA 1099 1.75 1887 12.8 -10.1 -35.5 6.7 6.9 19.6 23.5 21.8 374 0.9 1.3 -04082600.BIS 506 1.75 3083 12.5 -13.1 -41.7 7.1 7.8 13.9 16.6 18.9 101 1.4 2.4 -04081900.ILX 178 1.75 3685 15.1 -9.1 -36.3 5.9 7.3 19.7 19.9 28.2 371 1.3 1.3 -04071200.TOP 270 1.75 3709 17.7 -7.3 -32.5 6.8 6.7 11.9 13.6 9.1 204 0.8 0.6 -04051600.EPZ 1252 1.75 2888 10.4 -11.5 -39.9 8.7 7.8 4.1 12.2 7.0 93 0.9 1.6 -04051000.LBF 849 1.75 4026 11.6 -13.9 -41.1 9.0 7.5 3.0 13.9 17.5 38 1.9 1.6 -04042900.DRT 313 1.75 1834 12.4 -12.9 -40.9 6.4 7.7 16.1 20.0 31.6 217 0.9 1.3 -04040700.FWD 171 1.75 835 10.4 -16.3 -40.1 6.7 6.6 11.8 28.3 27.2 87 0.6 1.0 -04032100.MAF 872 1.75 2053 10.0 -12.9 -41.3 7.9 7.7 5.5 9.6 21.3 39 0.5 1.5 -04032100.FFC 244 1.75 942 7.9 -17.3 -44.1 7.5 7.4 11.3 12.0 13.4 154 0.4 1.1 -04030100.TOP 270 1.75 487 6.3 -28.7 -42.5 8.7 3.9 20.1 32.0 35.0 171 0.9 1.6 -04022512.LIX 8 1.75 837 10.3 -17.7 -40.5 6.7 6.3 25.2 31.9 48.7 340 0.7 2.4 -03092100.DDC 790 1.75 1784 10.2 -10.9 -38.5 7.3 7.5 21.8 20.1 23.8 257 0.7 2.0 -03091100.DDC 790 1.75 3112 14.8 -7.5 -31.9 6.9 6.6 15.7 22.3 30.8 259 1.2 2.2 -03091000.MAF 872 1.75 3038 12.9 -7.3 -34.1 7.4 7.1 8.6 8.3 12.7 79 0.4 2.1 -03090500.DRA 1009 1.75 1966 11.3 -8.3 -34.1 8.1 6.9 5.0 3.7 9.2 33 0.2 1.2 -03062500.MAF 872 1.75 4621 16.5 -6.7 -29.9 7.7 6.2 11.9 8.7 16.8 45 0.7 2.1 -03062100.MAF 872 1.75 1489 10.7 -7.7 -33.7 7.0 6.9 6.5 14.5 29.4 74 0.3 1.9 -03061700.RAP 1029 1.75 1501 10.1 -11.1 -38.5 7.1 7.4 2.9 5.7 17.5 92 0.2 1.9 -03061700.FFC 244 1.75 2826 16.3 -8.5 -33.7 6.2 6.8 5.5 7.0 13.0 32 0.3 0.6 -03061500.LBF 849 1.75 1717 10.7 -11.3 -39.3 6.3 7.6 6.6 10.6 12.0 51 0.3 1.7 -03061500.FWD 171 1.75 2433 14.3 -11.3 -37.9 6.9 7.2 5.3 12.1 2.8 32 0.7 1.7 -03061300.LBF 849 1.75 2759 12.0 -11.3 -40.9 7.2 8.0 13.0 15.4 16.3 179 1.0 2.6 -03061100.OUN 357 1.75 3045 14.5 -9.3 -35.7 7.2 7.1 12.1 17.8 13.1 135 1.2 2.0 -03060400.LCH 10 1.75 4988 19.7 -6.7 -34.5 5.8 7.4 7.3 13.3 17.2 44 0.8 0.6 -03051312.FWD 171 1.75 1814 12.6 -10.3 -36.9 7.3 7.1 16.8 17.7 24.7 205 0.7 1.2 -03050700.BMX 178 1.75 4489 17.4 -10.5 -36.9 7.0 7.1 12.2 26.5 28.4 101 2.8 2.1 -03050200.FFC 244 1.75 3289 13.7 -13.5 -41.1 6.5 7.5 7.5 9.8 9.5 55 0.9 0.9 -03043000.BNA 210 1.75 3359 12.4 -15.3 -42.5 7.2 7.5 4.1 4.3 5.5 30 0.8 1.3 -03042900.MAF 872 1.75 2325 9.8 -13.5 -39.1 8.4 7.0 15.5 23.4 21.0 165 1.6 1.4 -03042900.AMA 1099 1.75 2549 9.6 -14.5 -41.5 8.3 7.4 16.5 25.3 33.7 237 2.0 1.6 -03032600.SHV 79 1.75 1723 11.3 -18.3 -45.5 8.5 7.6 8.0 17.7 18.0 108 1.3 1.4 -03032600.LZK 78 1.75 2073 11.3 -18.5 -46.3 6.7 7.8 9.5 14.3 15.4 67 1.0 2.2 -03031500.BMX 178 1.75 1555 10.9 -19.1 -43.3 7.4 6.8 12.3 8.5 21.2 94 0.5 1.3 -02082300.LBF 849 1.75 6193 17.8 -10.1 -38.1 8.0 7.5 3.8 12.9 28.1 10 2.1 3.1 -02072800.DDC 790 1.75 2480 12.9 -5.3 -31.3 7.4 6.8 10.7 10.6 11.1 155 0.3 1.4 -02072518.TBW 13 1.75 4523 18.9 -8.5 -34.7 6.7 7.0 2.0 7.8 6.3 7 0.7 0.6 -02070200.AMA 1099 1.75 2393 12.2 -6.5 -35.3 7.3 7.6 20.8 18.4 11.3 353 0.6 1.6 -02062600.DTX 329 1.75 3079 14.5 -8.9 -34.7 6.1 7.0 1.4 1.9 7.2 -1 0.4 0.7 -02061200.TOP 270 1.75 5029 19.6 -8.9 -32.9 7.6 6.4 15.6 21.1 24.7 224 2.3 0.7 -02060700.MPX 287 1.75 1952 9.2 -15.1 -43.7 7.7 7.9 16.2 22.8 25.3 758 1.4 1.5 -02060402.CHS 15 1.75 2637 13.7 -10.1 -34.9 7.6 6.7 11.7 9.7 10.8 33 0.6 0.8 -02052900.TOP 270 1.75 2661 12.8 -13.7 -40.1 6.8 7.2 7.3 4.2 10.7 48 0.5 1.3 -02052800.MAF 872 1.75 3115 12.7 -11.1 -37.5 8.0 7.1 16.4 20.6 24.7 103 1.7 2.1 -02052800.LBF 849 1.75 3387 11.3 -15.1 -41.3 9.0 7.2 11.6 18.8 30.1 184 2.3 1.9 -02050400.CHS 15 1.75 3255 15.9 -10.7 -35.7 6.6 6.7 16.6 21.1 29.5 19 1.6 0.9 -02041800.FWD 171 1.75 3343 15.9 -9.9 -35.9 6.4 7.0 5.6 12.4 34.6 61 0.9 -999.0 -02041600.PIT 357 1.75 1856 11.5 -14.9 -41.7 7.3 7.4 15.8 17.9 18.1 245 1.0 1.6 -01062000.DTX 329 1.75 3813 14.9 -12.5 -37.3 6.9 6.7 15.0 8.4 17.6 -45 0.9 2.8 -01061800.TBW 13 1.75 3469 15.9 -9.7 -34.9 5.9 6.8 1.5 4.6 6.6 23 0.5 0.8 -00090400.LBF 849 1.75 2441 11.2 -9.5 -35.5 7.8 7.0 18.5 21.4 24.1 309 1.0 1.5 -00080800.OAX 350 1.75 4679 16.3 -8.1 -32.7 7.8 6.5 10.8 16.4 25.1 185 1.6 3.0 -00080200.GGW 700 1.75 2057 10.8 -8.9 -37.9 8.0 7.8 15.0 24.6 35.3 148 0.9 1.8 -00073100.JAX 9 1.75 3581 17.6 -8.9 -33.5 6.0 6.6 4.7 6.6 5.5 27 0.4 0.6 -00072900.GSO 270 1.75 2081 14.3 -9.7 -35.1 6.2 6.8 6.5 6.2 16.1 43 0.3 0.6 -00072700.LBF 849 1.75 5178 18.1 -8.9 -36.7 8.7 7.5 12.2 17.5 26.1 351 2.3 2.2 -00072600.MPX 287 1.75 3240 15.3 -13.1 -36.3 7.6 6.4 10.1 21.4 12.4 139 2.2 3.0 -00072600.MFL 5 1.75 4079 18.3 -8.5 -33.5 6.6 6.7 2.4 5.2 5.6 18 0.5 0.6 -00072500.ABR 396 1.75 4195 15.6 -12.3 -38.3 8.9 7.1 10.9 15.3 19.8 113 2.3 3.1 -00072200.LBF 849 1.75 3031 12.8 -11.5 -38.5 7.6 7.3 14.5 27.5 23.7 247 2.2 2.6 -00072100.FFC 244 1.75 2149 14.3 -6.9 -30.5 6.4 6.2 9.1 9.2 10.4 63 0.3 0.6 -00071800.AMA 1099 1.75 3660 14.4 -4.7 -32.7 6.9 7.4 5.9 9.1 7.7 79 0.4 1.5 -00071500.IAD 98 1.75 2186 13.9 -12.3 -36.3 6.8 6.5 9.3 17.8 17.7 118 1.1 2.0 -00071300.ABR 396 1.75 2305 13.6 -8.7 -36.1 6.7 7.3 21.7 29.3 44.3 278 1.2 2.0 -00070600.GGW 700 1.75 2743 11.7 -14.1 -40.7 8.5 7.3 13.0 29.6 40.4 165 2.4 1.9 -00062400.LBF 849 1.75 4723 14.8 -9.7 -37.3 8.6 7.4 9.8 17.4 29.6 126 2.2 2.0 -00062400.DDC 790 1.75 3499 14.8 -7.3 -33.9 7.7 7.2 12.0 23.2 30.2 237 1.5 2.7 -00062200.DDC 790 1.75 3602 14.3 -8.7 -37.5 7.0 7.7 16.2 15.4 23.4 157 1.1 2.9 -00061100.AMA 1099 1.75 3932 14.0 -7.9 -33.5 7.8 6.8 9.4 14.8 19.1 128 1.2 2.1 -00060300.ABQ 1620 1.75 1267 9.4 -8.7 -34.3 8.2 6.9 7.6 10.3 17.5 70 0.2 1.4 -00052900.GSO 270 1.75 1988 14.3 -11.1 -37.1 6.2 7.0 17.6 28.7 35.1 139 1.2 1.2 -00051900.FWD 196 1.75 3610 16.2 -10.9 -37.7 7.4 7.2 6.7 25.2 32.9 75 2.4 0.6 -00051200.TOP 270 1.75 5329 16.7 -7.3 -39.3 6.5 8.6 21.0 25.1 29.2 216 2.1 3.7 -00033000.SHV 79 1.75 3548 15.4 -15.9 -44.1 7.6 7.8 23.8 31.6 50.3 323 3.8 2.8 -94070100.GSO 277 1.50 2296 13.8 -10.3 -38.7 5.4 7.7 6.6 8.1 14.3 40 0.3 0.6 -90082200.OUN 357 1.50 3350 16.6 -5.5 -30.6 6.1 6.6 3.1 3.3 5.7 -7 0.3 0.6 -90082200.AHN 246 1.50 3275 16.5 -6.8 -30.8 6.5 6.3 6.0 8.7 15.8 48 0.4 0.6 -90071000.DEN 1611 1.50 3504 13.5 -8.2 -34.3 8.0 7.0 16.7 25.4 20.1 41 1.9 2.5 -90041100.AHN 246 1.50 1096 11.5 -14.0 -40.0 6.4 7.1 19.0 25.4 25.8 343 0.7 0.6 -90040200.GSO 277 1.50 984 8.7 -17.4 -45.5 6.8 7.8 19.9 29.7 37.4 210 0.8 2.0 -89060200.AHN 246 1.50 1996 13.2 -7.3 -34.8 6.1 7.3 3.2 2.6 1.6 18 0.2 -999.0 -06071100.DNR 1625 1.50 1192 10.1 -7.9 -33.7 7.6 6.9 12.2 16.2 27.0 79 0.3 1.7 -06053000.SGF 387 1.50 2988 15.0 -9.3 -34.7 6.5 6.9 4.0 2.7 12.8 27 0.4 0.6 -06052200.LBF 849 1.50 1420 8.2 -11.1 -41.1 7.7 8.1 14.8 15.2 22.6 199 0.5 1.3 -06042117.JAN 101 1.50 1486 13.4 -12.9 -37.5 6.5 6.7 6.4 17.4 11.7 58 0.7 0.6 -03091800.INL 361 1.50 1863 13.7 -13.5 -38.9 7.5 7.0 15.3 24.7 29.2 384 1.5 -999.0 -03031700.MHX 11 1.50 1241 12.1 -13.1 -39.9 5.4 7.3 11.5 19.1 32.8 37 0.5 0.7 -02072500.LCH 10 1.50 5453 20.2 -7.3 -31.7 5.9 6.4 5.5 8.5 11.3 66 0.6 0.6 -02042200.ILN 317 1.50 623 10.3 -13.3 -37.4 6.8 6.6 31.2 36.0 43.5 525 0.4 2.1 -01062600.RNK 654 1.50 1653 11.1 -11.9 -39.7 5.7 7.5 8.3 13.7 30.3 88 0.4 2.1 -01062600.GSO 270 1.50 929 11.9 -11.7 -40.1 6.0 7.7 10.4 17.8 25.6 106 0.3 0.6 -00090200.SLC 1288 1.50 1641 9.1 -14.7 -41.9 8.4 7.4 20.1 16.1 24.8 101 0.9 1.7 -00051800.GSO 270 1.50 1767 11.9 -13.7 -40.9 6.5 7.4 7.6 16.4 31.1 124 0.7 1.6 -94062500.GSO 277 1.25 2334 15.9 -5.4 -31.3 5.6 6.9 12.9 9.9 5.2 103 0.2 0.6 -90041400.OUN 357 1.25 1408 10.8 -18.2 -46.0 7.9 7.7 17.5 23.5 33.0 146 1.2 2.0 -06072800.FGZ 2192 1.25 3100 13.5 -5.3 -30.7 8.1 6.7 14.1 22.7 18.3 193 1.0 2.7 -06072700.ILX 178 1.25 4385 20.7 -4.3 -31.7 5.7 7.2 14.7 12.7 19.1 318 0.6 0.6 -06070400.GRB 214 1.25 1881 14.1 -10.1 -36.5 6.6 7.1 14.0 22.8 40.7 132 0.9 0.6 -06061200.DNR 1625 1.25 942 6.0 -9.9 -38.5 9.4 7.8 7.4 17.1 22.2 130 0.4 0.6 -06060312.LBF 849 1.25 988 7.7 -11.9 -40.5 9.0 7.9 10.8 19.5 17.8 699 0.5 1.0 -06060300.ILX 178 1.25 1218 10.0 -14.5 -42.9 5.9 7.8 14.1 20.0 22.7 87 0.5 1.5 -06052600.FFC 244 1.25 1711 12.1 -12.1 -36.7 7.1 6.6 4.1 8.7 3.3 46 0.4 1.1 -06052000.BOI 874 1.25 1070 7.4 -13.5 -39.9 8.4 7.2 9.2 15.9 25.9 95 0.5 0.8 -06051500.TLH 53 1.25 1279 10.8 -13.7 -41.5 7.1 7.6 18.5 24.7 23.2 104 0.8 1.7 -05100123.LMN 317 1.25 2672 15.9 -9.9 -36.7 7.0 7.2 14.1 21.4 26.0 276 1.3 -999.0 -05090600.LBF 849 1.25 2252 13.0 -9.1 -33.7 8.1 6.7 6.3 14.1 27.2 28 0.7 2.9 -05030700.MAF 872 1.25 547 8.0 -16.7 -46.3 6.9 8.2 16.9 34.3 40.4 177 0.4 1.9 -04100400.AMA 1099 1.25 1672 10.5 -13.5 -40.1 7.6 7.2 10.7 23.5 31.9 28 1.1 2.4 -04032700.RAP 1029 1.25 2052 8.5 -15.5 -43.5 8.0 7.7 12.6 19.0 17.5 161 1.3 1.5 -03090800.PHX 384 1.25 2268 12.1 -6.7 -35.1 6.7 7.5 8.2 10.7 16.8 90 0.3 1.2 -03090800.FGZ 2192 1.25 663 8.3 -8.3 -35.1 7.7 7.1 11.2 15.0 17.0 130 0.2 1.2 -03090300.NKX 128 1.25 940 10.8 -5.9 -32.3 6.6 7.0 4.2 7.0 5.9 9 0.1 0.7 -03040500.ILN 317 1.25 1856 10.4 -15.7 -44.1 6.5 7.8 17.7 20.8 25.6 233 1.0 2.2 -02041200.TOP 270 1.25 1084 9.8 -16.5 -44.3 7.1 7.7 16.2 9.4 27.2 99 0.3 1.6 -00072000.LZK 165 1.25 3973 16.4 -6.7 -30.7 6.8 6.3 8.3 12.6 12.7 102 0.7 1.1 -00071100.DDC 790 1.25 4707 16.4 -4.1 -31.5 6.8 7.2 6.0 4.6 8.7 136 0.4 2.6 -00030400.BMX 178 1.25 1311 11.4 -14.9 -42.9 5.7 7.7 21.1 42.9 54.3 205 0.8 1.4 -99061200.ILN 317 1.00 3299 14.7 -8.3 -35.5 5.8 7.3 8.2 4.6 4.0 32 0.4 1.1 -98052200.BNA 180 1.00 3709 15.2 -10.7 -36.9 6.4 7.0 10.4 9.2 7.9 83 0.8 0.9 -97081800.FFC 244 1.00 3564 18.4 -6.1 -31.1 6.1 6.6 4.4 2.5 2.0 37 0.3 0.6 -97081700.PIT 373 1.00 3951 18.3 -7.9 -31.9 6.9 6.4 15.4 12.7 23.0 224 0.9 0.6 -97081700.DVN 229 1.00 5790 20.8 -8.3 -34.9 7.5 7.1 12.3 14.3 11.8 137 1.7 1.0 -93092500.OUN 381 1.00 2895 16.1 -6.7 -32.0 6.2 6.8 16.0 24.5 27.2 264 1.0 0.6 -91060500.CKL 140 1.00 3345 16.9 -7.5 -32.0 6.3 6.5 9.2 5.0 4.8 52 0.4 0.6 -91060500.AHN 246 1.00 3036 15.3 -8.1 -31.7 6.7 6.3 11.6 5.7 13.0 72 0.4 0.6 -90101800.GGG 124 1.00 1619 14.2 -10.6 -37.1 6.4 7.1 12.5 20.0 27.9 114 0.7 0.6 -90100800.GGG 124 1.00 2689 16.8 -6.0 -32.5 5.8 7.0 8.9 14.2 17.2 70 0.4 0.6 -90092900.MAF 873 1.00 1606 12.2 -8.0 -36.1 6.0 7.5 11.3 15.0 28.7 35 0.3 0.8 -90083000.GSO 277 1.00 3552 16.4 -9.3 -33.8 6.0 6.6 14.1 20.1 18.2 37 1.3 0.6 -90082300.HTS 246 1.00 707 15.2 -7.7 -33.3 6.2 6.8 3.6 7.0 8.5 -4 0.1 0.6 -90082100.OUN 357 1.00 5290 19.2 -6.7 -31.0 6.9 6.4 6.2 8.3 3.4 38 0.7 0.6 -90081900.AMA 1095 1.00 2596 13.6 -7.9 -32.0 7.0 6.5 3.8 5.1 5.1 45 0.3 0.8 -90080200.MAF 873 1.00 1702 14.4 -6.2 -31.8 6.1 6.8 2.8 9.7 12.2 27 0.2 0.6 -90072600.GGW 696 1.00 1514 10.2 -10.6 -37.7 7.0 7.3 7.9 15.6 16.6 55 0.5 1.8 -90072500.DDC 791 1.00 1703 11.9 -8.0 -34.0 6.8 7.0 10.1 14.0 17.5 208 0.4 1.4 -90072200.TBW 13 1.00 3409 17.8 -5.7 -31.9 6.0 6.9 3.6 4.6 7.8 35 0.3 0.6 -90072000.DEN 1611 1.00 1698 11.7 -7.2 -32.2 7.4 6.7 14.0 16.1 20.8 182 0.4 2.1 -90071800.AMA 1095 1.00 1482 11.4 -6.5 -33.5 6.7 7.2 8.4 14.8 26.1 98 0.3 1.1 -90071100.GSO 277 1.00 3487 15.2 -6.6 -32.6 5.9 6.9 7.5 3.5 9.1 38 0.3 0.6 -90070900.GSO 277 1.00 4051 17.6 -5.3 -32.6 5.6 7.2 6.1 10.2 10.5 73 0.4 0.8 -90062400.OUN 357 1.00 1571 11.9 -10.8 -34.1 8.2 6.3 14.1 26.8 24.9 186 1.1 1.9 -90062300.HTS 246 1.00 1346 14.5 -8.5 -33.5 5.8 6.6 19.1 27.1 36.9 231 0.6 0.6 -90061000.GSO 277 1.00 2409 15.3 -8.8 -32.8 6.1 6.4 11.1 9.7 14.5 145 0.4 0.6 -90050400.CKL 140 1.00 1534 14.0 -10.6 -33.4 6.4 6.0 10.8 20.1 25.8 141 0.7 0.6 -89082700.DDC 791 1.00 4549 16.9 -7.4 -32.1 7.6 6.6 1.4 11.3 24.3 11 0.9 2.1 -89082000.UMN 438 1.00 3524 17.3 -6.0 -31.1 6.2 6.6 13.6 20.6 14.9 350 0.9 0.8 -89080600.OUN 357 1.00 3439 16.3 -5.4 -31.1 6.8 6.8 9.7 10.2 12.1 101 0.4 0.8 -89073100.GTF 1118 1.00 1858 9.5 -9.3 -36.7 8.9 7.4 10.3 10.8 21.7 106 0.4 1.2 -89072800.DAY 298 1.00 2617 16.4 -7.8 -34.6 5.7 7.2 7.5 13.5 11.3 83 0.5 0.6 -89072400.VCT 33 1.00 2953 14.8 -9.6 -37.2 6.2 7.4 9.5 7.7 13.3 120 0.4 0.6 -89071200.TOP 268 1.00 3182 16.6 -8.1 -30.9 7.6 6.1 13.2 12.6 8.2 157 0.8 1.6 -89070600.OUN 357 1.00 1373 12.9 -6.0 -34.0 6.2 7.4 11.3 6.0 12.2 64 0.1 0.6 -89062900.AMA 1095 1.00 2035 12.6 -8.2 -31.3 8.6 6.2 13.0 14.8 26.0 165 0.6 2.3 -89062800.HTS 246 1.00 3659 17.6 -8.0 -31.7 5.8 6.4 7.4 15.4 21.4 62 0.8 0.6 -89061900.CKL 140 1.00 3363 16.7 -9.6 -36.6 6.4 7.3 12.2 14.5 12.2 103 1.0 0.6 -89061600.TBW 13 1.00 3463 16.4 -7.6 -32.3 5.7 6.5 5.9 10.2 6.4 36 0.5 0.6 -89061400.JAN 91 1.00 3274 16.0 -11.5 -35.2 7.1 6.4 9.4 11.3 8.2 57 1.0 1.0 -89061200.JAN 91 1.00 3616 17.7 -9.1 -31.2 6.5 5.9 7.5 15.3 5.8 84 1.1 0.6 -89060500.1M1 172 1.00 2493 15.8 -8.2 -35.8 6.0 7.4 10.3 14.7 13.0 19 0.6 0.6 -06092900.FFC 244 1.00 705 10.8 -11.1 -40.1 4.6 7.9 18.9 19.1 33.4 85 0.2 0.6 -06091200.ILX 178 1.00 1642 13.6 -11.1 -38.9 6.4 7.5 8.6 12.9 23.9 56 0.5 0.6 -06090800.LBF 849 1.00 880 7.9 -14.1 -40.7 7.5 7.3 6.9 11.1 19.9 20 0.3 0.9 -06090800.ABR 396 1.00 1406 9.5 -14.3 -42.3 7.5 7.7 10.6 9.4 9.1 163 0.4 1.7 -06081000.TUS 779 1.00 1913 13.4 -6.3 -29.9 7.3 6.3 1.2 3.1 6.2 12 0.2 0.6 -06080100.PIT 357 1.00 3456 18.6 -4.5 -30.1 5.8 6.8 10.1 12.7 7.9 104 0.5 0.6 -06072800.OAX 350 1.00 2714 15.6 -5.3 -34.3 6.0 7.7 9.3 16.8 22.8 92 0.5 0.6 -06072800.ABR 396 1.00 1956 12.7 -6.1 -34.7 6.4 7.6 16.1 23.5 29.4 149 0.5 1.4 -06072700.RAP 1029 1.00 694 8.7 -8.7 -33.7 8.3 6.7 13.4 16.3 21.8 157 0.2 0.9 -06072300.ABQ 1620 1.00 1267 9.6 -4.9 -32.1 7.8 7.2 2.8 5.7 11.2 -9 0.1 1.0 -06072200.RNK 654 1.00 3249 16.5 -6.1 -31.1 6.0 6.6 7.2 7.0 9.1 100 0.3 0.6 -06072000.RNK 654 1.00 2160 14.2 -8.5 -31.1 5.9 6.1 11.1 9.1 3.0 113 0.3 1.0 -06071800.DNR 1625 1.00 1197 9.1 -6.9 -32.3 8.0 6.9 3.5 7.7 6.2 83 0.1 1.1 -06071300.BIS 506 1.00 966 9.0 -8.7 -35.3 8.1 7.1 5.9 7.7 14.5 108 0.1 0.7 -06070500.GSO 270 1.00 2335 15.2 -7.3 -33.1 6.1 6.8 7.6 9.6 6.1 96 0.3 0.6 -06070300.IAD 93 1.00 3195 14.8 -9.3 -36.5 5.9 7.3 10.7 10.7 13.6 60 0.6 0.9 -06070200.LBF 849 1.00 2554 12.2 -8.5 -35.5 8.0 7.3 17.1 20.5 17.9 223 1.0 2.0 -06070200.FWD 171 1.00 1806 12.8 -9.9 -36.5 7.2 7.2 1.6 6.1 11.2 20 0.3 0.6 -06070200.FFC 244 1.00 1552 11.2 -9.7 -38.3 6.3 7.7 1.2 6.5 9.5 4 0.2 0.9 -06062900.TOP 270 1.00 959 8.5 -12.3 -40.9 7.1 7.8 8.1 12.7 14.7 120 0.3 1.0 -06062900.PIT 357 1.00 925 10.9 -13.7 -38.3 6.4 6.7 7.1 21.3 35.7 17 0.5 1.6 -06062800.GRB 214 1.00 1049 9.4 -15.5 -44.5 6.1 8.0 8.1 13.8 20.6 34 0.4 1.6 -06062700.FFC 244 1.00 2376 15.4 -6.9 -33.5 5.6 7.0 9.3 12.6 21.6 23 0.4 0.6 -06062300.DDC 790 1.00 987 11.0 -11.1 -33.3 7.2 6.0 9.3 17.7 17.5 78 0.4 1.3 -06062300.BNA 210 1.00 3023 15.6 -10.1 -34.7 7.3 6.6 8.0 10.6 3.6 71 0.8 0.6 -06062300.BMX 178 1.00 1595 12.5 -7.1 -34.3 6.2 7.2 1.9 5.1 4.3 -10 0.1 0.6 -06062200.JAN 101 1.00 2595 15.3 -8.7 -34.7 7.0 7.0 4.6 3.0 2.5 -15 0.4 0.6 -06062100.BNA 210 1.00 2387 14.1 -9.3 -35.3 6.8 6.9 6.8 6.7 3.3 43 0.3 0.6 -06061900.GRB 214 1.00 2397 14.0 -11.7 -38.1 6.2 7.2 12.4 15.9 20.9 74 0.9 1.9 -06061200.BNA 210 1.00 1539 13.6 -6.7 -34.3 5.6 7.4 9.1 15.2 7.0 107 0.3 0.6 -06060800.LBF 849 1.00 2368 10.8 -6.9 -36.5 7.7 7.9 11.2 20.5 22.3 244 0.7 1.7 -06060712.RAP 1029 1.00 1110 7.9 -10.3 -38.1 8.7 7.6 9.9 12.3 19.2 131 0.3 1.3 -06060700.SHV 79 1.00 2252 14.6 -10.3 -34.3 7.4 6.4 15.1 25.4 14.5 164 1.4 0.6 -06060500.FFC 244 1.00 1475 11.0 -12.5 -39.5 5.9 7.4 5.7 11.7 22.4 18 0.3 2.1 -06060400.ILN 317 1.00 1032 8.3 -18.1 -46.9 6.5 8.0 6.7 8.5 11.1 35 0.3 1.2 -06060300.GRB 214 1.00 1314 8.8 -18.9 -45.5 7.1 7.4 12.0 16.3 19.5 77 0.7 1.6 -06060200.BNA 210 1.00 2055 14.2 -7.9 -34.3 5.4 7.1 8.6 5.5 12.6 -2 0.2 0.6 -06053100.GGW 700 1.00 570 5.6 -21.1 -50.3 7.4 8.3 2.8 5.0 8.1 30 0.2 0.9 -06052700.JAX 9 1.00 2879 15.0 -9.9 -36.5 6.1 7.2 11.0 13.7 13.1 117 0.8 0.8 -06052700.BIS 506 1.00 2274 9.4 -11.9 -40.3 8.5 7.7 20.2 22.0 21.3 198 1.3 1.3 -06052600.JAX 9 1.00 1856 13.3 -10.7 -37.3 6.6 7.2 10.5 15.3 20.8 70 0.6 0.6 -06052600.GSO 270 1.00 1743 11.9 -10.1 -36.3 6.1 7.0 8.4 14.4 11.4 82 0.4 0.8 -06052600.AMA 1099 1.00 1911 7.9 -11.3 -38.3 9.9 7.3 11.8 16.9 12.6 262 0.9 0.7 -06052300.RAP 1029 1.00 2536 9.6 -10.3 -39.5 8.5 7.9 5.6 9.7 18.1 43 0.6 1.3 -06051800.IAD 93 1.00 1009 8.4 -20.5 -45.9 6.7 7.2 11.9 16.0 20.3 66 0.6 1.3 -06051600.DTX 329 1.00 519 8.7 -20.5 -49.7 6.1 8.2 7.2 5.0 17.9 -7 0.1 0.7 -06041400.PIT 357 1.00 390 6.2 -20.1 -48.7 7.0 8.1 18.8 18.6 40.0 220 0.3 0.9 -06041400.BUF 215 1.00 383 6.2 -23.3 -49.9 7.6 7.6 21.6 26.8 55.7 237 0.5 1.4 -06011200.GSO 270 1.00 1374 9.5 -19.1 -46.5 7.5 7.7 21.9 15.6 28.9 253 0.8 2.5 -06010300.ILN 317 1.00 791 9.0 -19.3 -46.1 7.5 7.5 7.8 16.0 23.8 140 0.5 1.4 -05092900.FWD 171 1.00 1553 12.7 -5.9 -29.7 6.4 6.3 8.5 10.1 13.0 39 0.2 0.6 -05082700.EPZ 1252 1.00 2162 11.1 -6.5 -31.9 8.5 6.8 4.0 4.9 6.7 21 0.2 1.0 -05081800.LMN 317 1.00 3655 17.7 -4.1 -30.3 6.0 6.8 13.3 22.3 17.3 221 0.9 0.6 -05081700.GGW 700 1.00 1042 9.2 -11.1 -36.7 7.8 6.9 16.7 27.6 40.5 265 0.6 1.7 -05081100.GGW 700 1.00 805 10.1 -13.7 -37.9 7.4 6.5 15.6 30.5 38.9 170 0.6 2.1 -05050600.EPZ 1252 1.00 1672 8.0 -12.7 -40.3 8.6 7.5 15.0 27.7 28.8 178 1.3 1.2 -05050412.TBW 13 1.00 1839 14.1 -13.5 -39.3 7.3 7.0 10.0 15.8 33.3 187 0.9 1.0 -05030400.SGF 387 1.00 823 5.9 -25.9 -52.1 7.1 7.5 13.0 24.2 27.9 151 1.0 0.7 -04082800.OUN 357 1.00 4225 16.0 -7.1 -32.5 7.4 6.7 7.0 3.8 3.0 101 0.5 1.5 -04081700.TUS 779 1.00 2027 13.1 -8.9 -34.5 7.1 6.9 8.8 13.2 13.3 96 0.5 1.0 -04080900.TOP 270 1.00 2676 14.3 -11.5 -36.3 7.4 6.7 5.9 11.9 15.6 82 0.9 0.9 -04051200.AMA 1099 1.00 1922 9.7 -11.5 -38.7 8.0 7.4 19.1 15.0 8.4 282 0.7 1.6 -04051000.FFC 244 1.00 2006 11.4 -11.1 -38.3 5.4 7.4 4.0 4.7 11.0 -15 0.2 1.9 -04032100.FWD 171 1.00 2648 13.1 -15.5 -42.9 8.2 7.5 4.9 12.9 20.8 29 1.4 2.8 -04031500.DRT 313 1.00 1498 11.6 -15.5 -43.1 7.0 7.6 6.6 16.8 24.5 123 0.8 1.4 -03111712.TOP 270 1.00 1641 11.5 -17.3 -45.7 7.3 7.9 17.8 25.6 32.6 329 1.4 2.7 -03090900.TUS 779 1.00 2363 11.5 -8.3 -34.9 7.3 7.1 2.8 7.9 11.8 12 0.3 1.1 -03060900.RNK 654 1.00 2965 15.0 -9.1 -36.7 6.2 7.4 18.9 24.1 29.2 134 1.3 1.2 -03060200.DDC 790 1.00 1960 11.1 -9.5 -35.3 7.9 6.9 11.9 17.5 20.6 222 0.7 2.0 -03052700.ABQ 1620 1.00 713 7.1 -9.9 -37.1 8.3 7.3 3.1 14.7 20.6 12 0.2 0.6 -03052600.TFX 1131 1.00 994 8.3 -10.9 -37.7 8.0 7.3 9.1 16.0 15.9 59 0.4 1.3 -03051800.XMR 3 1.00 3602 16.0 -9.5 -35.9 7.0 7.1 5.6 8.6 10.7 -7 0.7 0.9 -03051800.TBW 13 1.00 3839 16.1 -8.7 -36.5 6.5 7.5 6.2 5.7 11.9 3 0.5 1.1 -03051200.JAX 9 1.00 3060 15.9 -7.9 -33.5 6.9 6.8 10.1 13.2 20.0 48 0.7 -999.0 -03051100.MHX 11 1.00 3585 16.0 -9.3 -37.7 7.3 7.6 11.9 16.2 15.0 104 1.3 0.9 -03050312.BMX 178 1.00 1402 9.7 -16.1 -41.9 7.5 7.1 7.9 13.8 38.5 72 0.6 1.8 -03050212.BNA 210 1.00 1865 10.3 -15.3 -44.9 7.0 8.2 12.1 13.0 18.0 55 0.7 2.2 -03050100.FFC 244 1.00 1429 11.1 -13.5 -40.1 6.6 7.2 1.0 6.9 6.4 5 0.2 1.6 -03043000.OAX 350 1.00 1064 8.9 -16.3 -44.3 7.4 7.8 18.4 29.1 32.0 353 0.9 1.9 -03042800.MFL 5 1.00 2735 16.7 -10.7 -35.7 6.4 6.7 12.3 11.7 25.5 83 0.7 0.6 -03042400.SHV 79 1.00 1456 13.1 -12.9 -38.9 7.2 7.1 15.2 26.1 36.8 278 1.1 0.6 -03041800.DNR 1625 1.00 1063 5.3 -18.1 -47.9 8.6 8.3 5.9 11.0 43.9 41 0.5 0.6 -03040500.LZK 78 1.00 1751 10.7 -14.9 -42.5 6.6 7.6 12.6 27.4 33.1 65 1.2 2.3 -03032100.DTX 329 1.00 1602 8.7 -21.3 -48.3 6.6 7.7 7.7 13.3 27.1 80 0.8 1.1 -03032000.ILX 178 1.00 713 8.0 -21.9 -36.7 6.9 4.2 5.4 3.5 11.4 -26 0.2 1.4 -03031500.TBW 13 1.00 3398 15.9 -13.7 -38.1 7.0 6.6 3.9 18.6 27.3 32 1.9 0.9 -02080400.SGF 387 1.00 4328 17.7 -5.5 -34.5 6.5 7.7 3.8 1.1 7.6 -11 0.3 1.5 -02080300.BMX 178 1.00 5098 18.4 -6.5 -35.1 5.8 7.6 11.5 9.6 10.8 33 0.6 1.4 -02072900.AMA 1099 1.00 3610 13.6 -6.5 -32.3 7.8 6.9 13.6 12.5 12.2 164 0.7 2.0 -02072700.RAP 1029 1.00 1688 9.4 -9.3 -37.5 7.5 7.6 14.5 21.0 28.6 139 0.7 1.3 -02072600.TOP 270 1.00 3390 13.8 -5.9 -33.9 7.5 7.4 11.9 16.9 16.9 168 0.8 2.2 -02072000.JAN 133 1.00 3501 17.6 -6.7 -31.9 6.1 6.7 5.7 6.1 7.9 58 0.3 0.6 -02070300.LBF 849 1.00 3367 14.1 -5.9 -35.3 7.5 7.8 11.5 14.0 6.2 158 0.7 1.2 -02070200.FFC 244 1.00 4268 16.3 -9.7 -36.1 6.6 7.1 7.3 7.8 4.3 46 0.7 0.6 -02060700.ABR 396 1.00 2252 9.0 -14.7 -43.9 8.1 8.1 8.2 12.4 18.1 118 0.9 1.2 -02060400.CHS 15 1.00 3170 15.2 -10.1 -34.9 7.6 6.7 11.7 9.7 10.8 33 0.8 0.6 -02052700.AMA 1099 1.00 2332 9.7 -11.1 -37.9 7.2 7.3 13.0 14.5 11.8 198 0.7 1.4 -02051800.CRP 13 1.00 5902 20.3 -10.5 -36.9 7.4 7.1 10.7 22.6 23.2 86 3.4 1.6 -02042300.OAX 350 1.00 614 6.4 -23.3 -46.3 7.9 6.5 15.2 26.3 36.6 133 0.8 1.4 -02012400.LZK 78 1.00 1343 13.1 -12.7 -41.1 6.6 7.8 20.2 32.5 40.7 290 0.9 0.6 -01062600.LBF 849 1.00 3931 12.7 -8.1 -35.3 8.1 7.3 8.1 9.3 8.1 119 0.7 1.5 -01062100.ABR 396 1.00 1118 8.1 -19.3 -47.7 7.0 7.9 3.6 4.2 12.4 14 0.3 1.3 -01061900.JAX 9 1.00 2584 17.2 -9.5 -35.5 6.1 7.0 5.0 4.8 8.3 13 0.3 0.6 -00080700.TOP 270 1.00 4476 17.3 -7.5 -33.1 7.2 6.7 11.7 17.8 22.9 72 1.4 1.8 -00072900.ILN 317 1.00 2735 14.3 -11.5 -37.7 6.7 7.1 8.0 13.4 21.0 68 0.9 0.6 -00072900.CHS 15 1.00 2462 16.1 -7.5 -34.9 5.6 7.3 3.3 9.3 13.2 4 0.3 0.6 -00072800.TOP 270 1.00 3666 15.3 -10.3 -35.3 7.6 6.8 9.1 22.0 26.4 115 2.1 2.6 -00072800.LBF 849 1.00 5581 17.1 -7.7 -35.5 8.1 7.5 9.6 25.0 21.1 187 2.8 3.1 -00072700.JAN 101 1.00 2066 12.5 -10.7 -35.7 6.4 6.7 4.2 8.0 8.4 -50 0.3 1.0 -00072300.OTX 728 1.00 2088 9.0 -12.3 -42.7 8.2 8.3 7.8 17.2 21.1 43 0.9 1.2 -00071900.GYX 125 1.00 997 11.4 -13.3 -37.7 6.0 6.6 18.8 27.0 36.1 107 0.6 1.0 -00071700.TOP 270 1.00 3927 15.9 -8.7 -31.7 7.9 6.1 14.5 8.9 14.1 198 0.8 2.4 -00071500.SHV 79 1.00 4004 17.2 -5.9 -31.1 6.0 6.7 6.2 4.6 8.6 46 0.3 0.6 -00071400.GRB 214 1.00 1743 12.0 -12.3 -37.9 6.9 6.9 13.4 21.5 42.9 195 0.9 1.7 -00071200.DDC 790 1.00 2941 14.4 -5.5 -30.7 7.2 6.7 10.8 11.3 11.7 196 0.4 1.4 -00070700.RAP 966 1.00 4065 14.2 -7.7 -35.3 8.6 7.3 10.8 29.4 33.3 111 2.3 2.1 -00070400.DDC 790 1.00 5142 18.1 -7.1 -30.7 7.6 6.4 11.4 9.7 19.2 114 0.9 2.4 -00070300.OAX 350 1.00 4633 18.5 -6.3 -32.3 6.9 6.9 9.9 10.6 19.6 133 0.7 1.9 -00070300.DDC 790 1.00 4558 17.2 -5.9 -30.9 7.5 6.7 11.7 13.6 22.7 66 0.9 2.4 -00070200.RAP 966 1.00 5621 15.6 -9.7 -36.3 8.7 7.3 15.9 21.5 22.7 263 3.3 2.2 -00070200.DDC 790 1.00 3566 16.2 -5.7 -34.7 6.6 7.7 5.5 14.2 21.9 38 0.6 1.3 -00063000.PIT 373 1.00 1086 9.9 -15.9 -40.5 5.5 6.8 8.1 22.0 37.9 77 0.5 1.8 -00062600.TOP 270 1.00 4052 17.8 -8.9 -32.7 7.6 6.4 2.4 1.3 23.9 26 0.6 2.3 -00062600.DDC 790 1.00 2618 13.5 -6.1 -32.3 6.7 6.9 14.3 15.8 16.9 51 0.5 1.6 -00062300.MHX 11 1.00 4167 18.6 -8.7 -34.1 6.1 6.8 9.7 6.0 6.1 89 0.5 0.6 -00062100.TBW 13 1.00 3180 17.1 -8.5 -32.1 6.4 6.4 8.9 12.2 19.0 49 0.7 0.6 -00060200.TOP 270 1.00 3517 16.1 -9.3 -34.5 6.9 6.7 4.9 10.4 16.3 39 0.8 0.8 -00060200.DVN 229 1.00 3451 16.4 -9.3 -35.5 7.3 7.0 14.2 14.1 11.0 175 1.1 0.6 -00060100.ILX 178 1.00 3208 16.1 -9.1 -37.7 7.0 7.7 20.7 17.9 15.6 163 1.2 1.8 -00053000.LBF 849 1.00 2258 9.9 -9.7 -37.9 9.2 7.6 16.9 27.2 31.9 294 1.4 1.1 -00051400.TLH 21 1.00 3542 15.9 -9.9 -37.7 6.9 7.5 5.4 4.2 4.2 -4 0.5 1.0 -00021800.JAN 101 0.88 1866 12.5 -14.9 -43.1 6.7 7.8 16.2 27.5 38.9 270 1.5 0.7 -00061100.DDC 790 0.88 3471 14.3 -7.9 -33.9 6.9 6.9 14.0 11.0 20.2 53 0.7 2.4 -00061800.RAP 966 0.88 1396 7.4 -18.9 -44.5 7.1 7.2 7.4 14.0 34.9 270 0.7 1.4 -00070600.DDC 790 0.88 2581 12.3 -7.5 -31.7 8.5 6.4 10.7 9.4 10.0 97 0.5 1.8 -00072800.BMX 178 0.88 2147 13.2 -9.5 -36.3 6.2 7.2 6.0 8.0 11.4 35 0.3 0.7 -00080200.DVN 229 0.88 4183 16.6 -9.7 -38.1 6.6 7.6 13.3 11.2 16.4 169 1.0 1.1 -00080300.PIT 373 0.88 2780 14.9 -9.7 -37.1 6.2 7.3 9.1 15.5 29.2 81 0.8 0.6 -00080400.BNA 180 0.88 3453 16.3 -9.9 -35.1 6.8 6.8 9.1 10.9 16.0 83 0.8 0.6 -00080500.LZK 165 0.88 3872 16.1 -6.3 -33.3 5.6 7.3 7.3 9.4 14.6 6 0.4 0.8 -00080700.DTX 329 0.88 4231 19.4 -7.3 -31.9 6.0 6.6 10.6 16.6 31.6 78 1.0 0.6 -00090300.OAX 350 0.88 3099 12.6 -10.1 -36.3 8.7 7.0 9.5 16.9 21.6 126 1.4 1.4 -01062200.DVN 229 0.88 1285 10.3 -18.1 -44.9 6.5 7.5 8.7 10.8 11.8 66 0.4 1.0 -01062600.CRP 13 0.88 3837 16.6 -8.5 -35.7 6.4 7.3 7.1 4.0 8.9 53 0.5 0.6 -02031000.GSO 270 0.88 819 11.0 -15.3 -41.3 5.8 7.2 19.8 24.6 29.7 236 0.5 1.2 -02052900.OAX 350 0.88 2754 13.0 -13.3 -40.9 7.1 7.5 10.0 7.5 7.0 127 0.6 2.6 -03031400.TLH 53 0.88 2141 11.6 -13.1 -43.3 6.3 8.3 5.7 10.5 9.0 39 0.5 1.1 -03042912.TOP 270 0.88 1617 10.6 -16.9 -43.9 7.8 7.5 11.0 16.7 22.5 238 0.9 2.8 -03050400.BIS 506 0.88 1467 8.2 -18.7 -47.3 7.4 8.0 8.8 15.4 16.1 86 0.8 1.6 -03060300.JAX 9 0.88 3513 16.1 -10.1 -36.5 7.6 7.1 11.4 11.1 10.3 111 1.0 0.6 -03060600.ABR 396 0.88 888 8.1 -19.9 -46.5 6.8 7.5 9.2 17.3 14.2 47 0.5 1.5 -03061600.TOP 270 0.88 1944 12.4 -11.9 -38.7 6.4 7.3 5.8 0.8 4.2 3 0.3 1.0 -03062000.GGW 700 0.88 1032 9.2 -9.7 -37.5 8.1 7.5 8.3 9.8 17.1 76 0.2 1.3 -03101712.JAN 101 0.88 1891 12.8 -11.5 -43.1 6.3 8.6 16.9 25.4 33.9 246 1.1 1.2 -03102600.CRP 13 0.88 3408 17.9 -9.9 -35.3 6.3 6.8 9.8 15.2 34.5 17 1.0 0.6 -03111800.OAX 350 0.88 957 10.0 -18.3 -43.3 6.8 6.9 20.0 41.2 58.6 88 0.8 2.5 -04040900.AMA 1099 0.88 1515 8.2 -16.7 -45.5 7.0 8.0 14.7 17.9 23.0 139 0.8 1.6 -04081800.PHX 384 0.88 1709 10.5 -9.1 -35.5 7.3 7.1 6.0 4.8 9.2 15 0.2 0.8 -04082700.ABR 396 0.88 1433 10.2 -15.1 -41.5 6.7 7.3 5.3 14.4 40.5 28 0.5 1.5 -04091900.LCH 10 0.88 2433 15.9 -6.9 -31.9 5.8 6.6 7.7 4.4 15.6 6 0.2 0.6 -04092000.OAK 3 0.88 242 7.3 -17.9 -36.7 5.5 5.2 6.5 27.4 30.4 56 0.2 0.7 -04100400.GSO 270 0.88 1385 13.2 -14.9 -40.1 6.5 6.9 10.4 15.2 26.8 101 0.6 1.4 -05081300.MAF 872 0.88 1568 12.8 -6.3 -31.7 6.5 6.8 6.9 11.8 13.7 82 0.2 0.6 -06013012.JAN 101 0.88 1058 10.0 -20.9 -45.9 7.1 7.0 18.9 38.7 46.0 71 1.1 2.6 -06032100.OUN 357 0.88 579 5.4 -25.5 -40.9 7.4 4.4 5.7 16.6 26.7 53 0.5 0.9 -06040700.FWD 171 0.88 2831 12.5 -12.5 -42.1 6.2 8.1 20.1 33.5 41.5 40 1.8 2.8 -06041200.TOP 270 0.88 726 8.4 -14.3 -42.9 7.0 7.9 23.1 33.2 37.2 232 0.5 2.0 -06043000.OTX 728 0.88 499 6.4 -17.9 -44.3 7.3 7.4 8.3 17.3 23.3 75 0.3 0.8 -89061200.AMA 1095 0.88 3301 13.2 -11.7 -39.3 8.7 7.5 9.2 12.9 25.2 167 1.4 2.3 -89062600.UMN 438 0.88 3812 16.2 -6.9 -33.3 6.3 7.0 2.0 0.7 10.8 -14 0.4 0.6 -89062700.DEN 1611 0.88 931 8.6 -11.1 -38.5 7.6 7.5 10.8 14.3 14.3 122 0.3 1.8 -89072700.AHN 246 0.88 3996 17.5 -6.9 -33.6 6.5 7.1 7.1 3.5 6.8 66 0.4 0.6 -89082500.AHN 246 0.88 3533 16.9 -5.1 -30.7 6.1 6.8 2.7 3.3 8.1 5 0.3 0.6 -89082600.AHN 246 0.88 3463 17.1 -5.6 -31.0 5.8 6.7 4.0 11.3 8.6 41 0.4 0.6 -89082900.GGG 124 0.88 3979 18.5 -4.6 -29.9 6.0 6.7 1.6 4.1 2.2 3 0.3 0.6 -90071000.PIT 360 0.88 3362 16.6 -6.7 -31.4 6.3 6.6 14.3 19.7 14.7 124 0.9 0.6 -90073000.AMA 1095 0.88 943 12.2 -7.5 -32.1 6.3 6.5 8.4 12.7 18.1 14 0.2 0.6 -90091900.OUN 357 0.88 3878 18.0 -6.7 -31.3 6.2 6.6 12.1 11.9 20.5 119 0.6 0.6 -97010900.SIL 8 0.88 909 13.1 -13.6 -37.2 6.7 6.4 33.7 39.7 37.0 511 0.7 -999.0 -98062500.DDC 790 0.88 2667 11.9 -7.3 -34.1 8.7 7.2 12.4 25.1 34.7 224 1.2 1.4 -90052100.SIL 8 0.85 3505 16.6 -10.6 -35.6 6.7 6.7 10.9 8.4 13.0 70 0.7 0.6 -03052100.TBW 13 0.80 2941 15.8 -9.5 -35.9 6.2 7.1 7.1 2.7 5.4 27 0.4 0.6 -91051700.JAN 91 0.80 2890 15.5 -8.9 -36.0 6.5 7.3 0.6 1.1 7.8 1 0.4 0.6 -00022400.LZK 165 0.75 1590 10.6 -18.1 -45.7 7.0 7.7 17.2 25.0 34.2 270 1.3 2.5 -00050300.JAN 101 0.75 1438 12.8 -12.9 -38.5 5.9 7.0 13.9 12.8 7.2 120 0.4 0.6 -00052200.LZK 165 0.75 2062 12.1 -13.5 -44.1 6.2 8.4 17.7 22.6 32.5 162 1.1 1.4 -00061800.JAX 9 0.75 2677 15.7 -7.9 -34.1 5.7 7.0 7.9 6.0 10.5 61 0.3 0.6 -00061900.WAL 41 0.75 2940 17.4 -7.9 -33.5 6.3 6.9 11.6 11.3 9.5 134 0.5 0.6 -00062500.JAX 9 0.75 2442 15.6 -10.1 -34.9 6.2 6.6 9.3 9.4 21.8 104 0.5 0.6 -00062900.GRB 214 0.75 860 8.9 -18.9 -47.9 6.4 8.1 14.1 17.0 24.4 108 0.5 1.1 -00071300.DDC 790 0.75 3064 15.1 -3.7 -31.1 6.1 7.2 9.2 6.2 10.6 0 0.2 0.6 -00071300.FWD 196 0.75 3103 14.9 -5.7 -31.9 6.5 6.9 13.9 10.6 11.4 120 0.4 0.8 -00071800.JAN 101 0.75 3305 15.8 -5.5 -29.7 6.0 6.3 13.1 13.9 14.4 -56 0.5 0.6 -00071900.JAN 101 0.75 3841 17.3 -6.1 -31.7 6.1 6.8 5.7 7.5 6.9 32 0.3 0.6 -00072100.TBW 13 0.75 4845 18.9 -6.9 -31.9 6.4 6.6 7.4 7.0 10.7 56 0.5 0.9 -00072300.GSO 270 0.75 2443 16.5 -9.1 -32.3 5.7 6.1 6.6 20.6 22.2 88 0.9 0.6 -00072400.GGW 700 0.75 3240 10.9 -11.1 -40.3 8.5 7.9 12.5 26.1 22.5 54 2.1 1.4 -00080400.LCH 10 0.75 3045 15.7 -7.5 -32.7 5.6 6.7 4.7 2.8 12.8 28 0.3 0.6 -00090200.SHV 79 0.75 1896 12.1 -7.5 -32.5 7.0 6.6 5.2 3.2 2.0 15 0.2 0.7 -01062400.BIS 506 0.75 4781 13.7 -10.9 -38.3 9.0 7.4 15.0 18.7 27.1 249 2.8 1.7 -02030812.ILX 178 0.75 533 7.2 -19.7 -48.7 6.9 8.2 16.1 31.5 49.1 599 0.5 1.3 -02051500.PIT 357 0.75 521 5.9 -27.9 -45.7 7.9 5.1 17.3 14.7 14.3 74 0.4 1.1 -02060400.JAX 9 0.75 3128 15.3 -8.1 -33.3 6.5 6.7 0.3 3.7 6.5 15 0.4 0.6 -02062500.LBF 849 0.75 3690 11.7 -10.3 -37.1 9.2 7.2 5.0 7.2 9.1 45 0.7 1.3 -02072000.LZK 78 0.75 6551 21.6 -8.5 -32.7 6.9 6.6 8.7 10.2 6.8 145 1.3 0.9 -03031500.OTX 728 0.75 801 6.3 -26.3 -49.9 7.5 6.8 18.3 24.9 28.7 240 1.0 1.5 -03032000.SGF 387 0.75 909 7.6 -22.1 -40.1 6.7 5.1 18.2 10.5 8.6 205 0.4 1.4 -03040922.XMR 3 0.75 2570 15.5 -10.3 -37.3 5.6 7.3 12.7 31.0 38.3 34 1.3 0.6 -03042300.DNR 1625 0.75 1183 6.7 -16.1 -46.5 7.9 8.5 12.2 19.1 35.2 265 0.7 1.2 -03050100.DNR 1625 0.75 1011 6.7 -20.1 -46.3 8.0 7.4 12.5 33.5 27.3 108 1.1 1.2 -03050200.BMX 178 0.75 2216 12.4 -12.9 -40.7 6.6 7.5 4.6 6.7 7.6 9 0.4 0.7 -03052400.PIT 357 0.75 707 10.0 -16.7 -44.5 6.5 7.7 12.1 26.5 23.6 65 0.5 1.0 -03060700.MFL 5 0.75 3041 18.2 -6.7 -31.3 5.6 6.5 0.9 2.8 9.3 5 0.3 0.6 -03061000.JAX 53 0.75 2482 16.0 -8.7 -33.9 6.7 6.7 10.8 11.3 22.4 13 0.5 0.6 -03061222.XMR 3 0.75 2144 17.1 -7.9 -32.5 6.1 6.5 5.2 4.6 6.1 65 0.2 0.6 -03061500.SHV 79 0.75 2511 16.2 -9.9 -33.9 6.3 6.4 13.5 21.1 32.8 91 1.1 0.6 -03061900.TFX 1131 0.75 1802 8.6 -9.3 -37.5 8.2 7.6 13.1 10.8 13.4 178 0.4 1.0 -03062000.BOI 874 0.75 491 7.0 -12.5 -39.7 8.2 7.4 17.9 23.3 18.1 141 0.3 1.0 -03062100.RAP 1029 0.75 2338 11.9 -10.3 -36.1 7.2 7.0 15.0 8.1 14.4 137 0.4 2.4 -03062200.IAD 93 0.75 1215 10.5 -17.1 -38.3 5.8 5.9 9.3 15.1 9.7 79 0.5 1.1 -03090900.GJT 1475 0.75 996 6.8 -12.3 -39.5 9.1 7.4 8.5 17.7 28.1 199 0.5 0.7 -03090900.MAF 872 0.75 2389 12.1 -7.9 -36.1 7.0 7.6 12.1 18.1 17.8 222 0.7 2.2 -03091000.JAN 101 0.75 1929 15.0 -9.5 -35.3 6.0 6.9 8.1 10.8 22.1 83 0.4 0.6 -03111300.BUF 215 0.75 418 8.1 -20.5 -44.7 6.7 6.8 18.0 46.9 65.5 335 0.4 1.5 -04030500.LZK 78 0.75 745 12.4 -10.1 -37.1 5.8 7.2 27.8 39.6 53.2 468 0.4 0.6 -04051300.OAX 350 0.75 1193 10.5 -13.7 -40.5 6.9 7.3 16.7 24.2 28.7 133 0.7 2.2 -04051700.FFC 244 0.75 2077 12.2 -12.1 -39.3 6.4 7.4 2.9 2.0 11.6 0 0.3 0.8 -04052300.BUF 215 0.75 1807 13.8 -10.6 -36.5 5.8 7.0 18.8 22.4 24.0 239 0.8 0.6 -04081700.PHX 384 0.75 2729 12.6 -7.9 -35.3 7.1 7.3 6.2 8.0 6.2 60 0.4 1.3 -04081900.DDC 790 0.75 2146 11.7 -6.3 -34.7 6.2 7.5 10.2 4.3 11.0 15 0.2 0.7 -04081900.OTX 728 0.75 1929 9.8 -11.3 -38.9 7.4 7.4 6.2 9.9 15.1 43 0.4 1.5 -04082800.JAN 101 0.75 3714 18.0 -7.5 -33.7 6.4 7.0 1.0 2.6 3.6 12 0.4 0.6 -04082800.PIT 357 0.75 3258 18.3 -6.1 -31.3 5.6 6.7 10.4 7.8 6.8 106 0.3 0.6 -04092800.DNR 1625 0.75 698 7.9 -13.9 -38.7 7.1 6.8 12.4 17.7 21.0 112 0.3 1.0 -04100400.CHS 15 0.75 1850 15.3 -10.7 -36.1 6.0 6.9 13.4 22.1 32.7 81 0.9 0.6 -05022200.BMX 178 0.75 1749 11.8 -15.9 -43.5 6.8 7.6 19.0 26.1 36.8 174 1.4 1.2 -05030700.OAX 350 0.75 324 5.7 -21.9 -50.1 7.4 7.9 13.6 14.9 9.6 156 0.2 0.9 -05042612.JAN 101 0.75 993 9.2 -17.3 -43.3 6.9 7.2 15.7 27.2 35.7 336 0.8 2.2 -05050500.OTX 728 0.75 1601 7.7 -19.1 -46.9 7.3 7.8 8.5 15.7 22.0 35 0.9 1.4 -05082100.OAX 350 0.75 2617 15.5 -6.9 -34.3 6.0 7.3 15.0 14.8 30.9 159 0.5 0.6 -05082400.SHV 79 0.75 3397 16.6 -5.3 -30.5 6.1 6.8 11.1 9.2 4.4 72 0.3 0.6 -06011400.JAX 9 0.75 1223 12.1 -15.1 -42.3 6.5 7.5 19.7 19.6 26.7 233 0.7 0.7 -89052800.CKL 140 0.75 2098 15.4 -8.1 -34.6 6.2 7.1 8.0 11.8 13.5 43 0.4 0.6 -89060400.PAH 126 0.75 3338 16.4 -9.7 -37.6 5.8 7.5 15.5 14.2 14.7 90 0.9 0.6 -89060700.AHN 246 0.75 2402 14.2 -13.0 -38.1 6.6 6.8 2.7 12.3 18.6 37 0.8 0.6 -89061300.CKL 140 0.75 2677 16.1 -8.6 -32.8 6.1 6.4 11.5 15.9 7.3 102 0.7 0.6 -89061500.AHN 246 0.75 1717 14.7 -7.5 -31.3 5.5 6.3 11.8 10.0 9.8 91 0.2 0.6 -89061600.ACY 23 0.75 2243 16.5 -7.6 -34.5 5.9 7.2 19.5 18.8 19.1 217 0.6 0.6 -89062200.CKL 140 0.75 2986 16.1 -10.1 -37.3 6.7 7.3 6.8 10.0 8.5 76 0.7 0.6 -89062300.GRB 210 0.75 1729 14.6 -8.4 -34.6 6.2 7.0 10.0 10.7 10.8 139 0.3 -999.0 -89062300.OUN 357 0.75 3217 16.0 -7.1 -34.1 5.9 7.2 6.9 12.8 14.9 113 0.6 0.6 -89062700.PIT 360 0.75 2924 16.0 -9.1 -33.7 6.8 6.6 7.9 8.1 4.9 69 0.5 0.6 -89070800.AHN 246 0.75 2876 16.8 -6.5 -32.3 5.8 6.8 4.3 4.1 4.8 33 0.2 0.6 -89071100.DDC 791 0.75 1858 11.9 -8.1 -35.3 7.6 7.3 12.4 8.5 14.0 249 0.3 2.1 -89072900.SIL 8 0.75 4031 18.8 -6.8 -31.8 6.3 6.6 3.9 4.1 4.4 37 0.4 0.6 -89073000.PAH 126 0.75 3630 17.9 -7.0 -33.2 6.4 7.0 7.4 11.4 9.0 58 0.6 0.6 -89073100.TOP 268 0.75 2685 14.5 -6.4 -31.4 6.7 6.7 12.0 9.8 13.0 117 0.4 0.6 -89081200.GRB 210 0.75 1782 11.3 -14.8 -41.6 6.7 7.3 3.9 4.1 9.5 39 0.3 0.6 -89081900.HON 392 0.75 984 13.1 -7.6 -33.3 7.1 6.8 12.1 14.0 17.9 244 0.2 -999.0 -89102800.OUN 357 0.75 1679 12.0 -12.7 -39.4 6.8 7.3 8.3 10.1 27.1 115 0.4 1.0 -90033100.TBW 13 0.75 2515 14.8 -10.0 -38.4 5.6 7.7 12.0 14.0 15.0 135 0.6 0.6 -90042100.OUN 362 0.75 1915 12.4 -14.1 -40.9 6.5 7.3 13.1 25.3 31.9 138 1.3 1.7 -90042200.SEP 399 0.75 2775 13.3 -11.7 -40.8 6.5 7.9 8.1 10.2 20.8 98 0.7 1.0 -90042400.1M1 172 0.75 2374 12.8 -12.6 -40.0 6.7 7.5 6.6 14.0 8.3 56 0.9 0.9 -90052500.MAF 873 0.75 3262 13.1 -7.2 -34.0 7.9 7.2 12.4 22.0 30.6 97 1.3 1.8 -90060400.PIT 360 0.75 390 9.5 -12.5 -36.7 5.6 6.5 14.6 26.0 37.7 57 0.2 0.6 -90060700.TBW 13 0.75 3262 17.0 -8.6 -34.5 6.0 6.9 4.1 1.6 7.3 8 0.4 0.6 -90061000.AHN 246 0.75 2847 14.8 -8.2 -33.4 5.9 6.7 5.6 8.6 9.9 50 0.4 0.6 -90070300.SLI 8 0.75 3250 18.4 -5.7 -32.8 5.8 7.2 7.5 11.8 14.5 79 0.4 0.6 -90070800.TBW 13 0.75 5452 20.0 -8.1 -31.6 6.5 6.2 5.9 7.8 15.4 11 0.7 0.6 -90072200.CHS 13 0.75 3537 18.4 -7.5 -32.4 6.2 6.7 7.1 8.3 10.2 88 0.4 0.6 -90072200.PAH 126 0.75 2541 16.9 -5.6 -30.4 5.7 6.6 11.4 13.3 15.3 80 0.4 0.6 -90072700.DDC 791 0.75 3550 14.7 -7.0 -32.7 7.6 6.8 6.0 7.6 7.2 84 0.5 2.2 -90072800.TOP 268 0.75 3231 16.5 -7.8 -32.8 6.7 6.6 9.8 8.8 11.3 281 0.5 0.9 -90073100.JAN 91 0.75 2834 14.6 -7.3 -33.8 6.1 7.0 0.7 5.1 4.3 -3 0.3 0.6 -90080400.STC 315 0.75 2284 13.1 -12.5 -34.8 7.3 6.0 8.7 5.3 20.0 45 0.5 1.4 -90081400.ALB 86 0.75 1251 14.6 -7.6 -33.8 5.7 7.0 20.7 31.1 21.6 261 0.5 0.6 -90081400.MAF 873 0.75 1598 13.7 -7.1 -32.0 6.2 6.6 2.3 4.4 16.6 35 0.2 0.6 -90081700.CHS 13 0.75 3949 19.5 -6.9 -32.2 5.7 6.7 11.2 14.2 20.9 101 0.7 0.6 -90081900.DEN 1611 0.75 1982 11.7 -7.8 -35.3 7.6 7.4 6.4 10.2 22.1 25 0.3 1.7 -90082000.PIA 200 0.75 4350 19.3 -6.5 -31.2 6.2 6.5 9.4 12.0 9.9 67 0.7 0.6 -90082200.BNA 180 0.75 2619 15.5 -6.1 -32.3 6.1 6.9 8.7 9.1 12.7 -10 0.3 0.6 -90082300.GGG 124 0.75 3016 16.2 -5.9 -30.3 6.0 6.4 5.3 1.3 5.5 35 0.2 0.6 -90082500.OUN 357 0.75 2800 15.7 -6.4 -31.1 6.6 6.6 5.3 5.0 11.9 63 0.3 0.6 -90082500.OVN 400 0.75 3418 17.2 -7.1 -33.6 6.4 7.0 10.0 12.0 21.9 181 0.6 0.7 -90083000.ACY 23 0.75 2413 15.2 -9.3 -34.4 5.8 6.8 9.0 13.9 22.7 62 0.6 0.6 -90101700.MAF 873 0.75 2870 12.3 -12.5 -40.6 8.0 7.7 7.7 14.9 16.2 78 1.3 2.3 -91051700.TBW 13 0.75 3306 16.1 -7.5 -34.7 5.4 7.2 3.8 4.0 0.9 -5 0.3 0.6 -91060600.CKL 140 0.75 2864 16.3 -8.6 -33.4 6.4 6.6 6.2 8.9 11.4 21 0.5 0.6 -94062400.GGG 124 0.75 3754 18.0 -5.5 -30.6 6.3 6.6 8.2 11.0 14.2 98 0.5 0.6 -94062400.HTS 246 0.75 2798 16.5 -5.5 -30.1 5.3 6.5 4.7 8.5 15.0 39 0.2 0.6 -94070200.LCH 5 0.75 2754 17.0 -6.8 -32.4 6.4 6.8 12.4 10.7 11.0 84 0.4 0.6 -97061700.BMX 178 0.75 3829 18.2 -6.9 -31.5 5.9 6.5 6.9 12.4 13.0 48 0.6 0.6 -97062400.MAF 872 0.75 3310 14.1 -9.9 -32.7 8.9 6.1 13.0 11.5 8.6 108 1.1 1.6 -97081700.TBW 13 0.75 3152 17.4 -7.3 -32.7 6.2 6.8 1.8 2.6 4.4 8 0.3 0.6 -97081800.SLC 1288 0.75 931 8.3 -10.3 -36.9 8.5 7.2 13.6 16.1 22.9 203 0.3 1.4 -97082200.ILN 317 0.75 520 9.6 -16.3 -41.3 5.8 6.9 3.9 17.5 30.9 50 0.2 0.7 -98062500.JAN 101 0.75 3507 17.3 -6.1 -32.3 6.0 7.0 7.1 2.3 8.6 -1 0.3 0.7 -98081000.SHV 79 0.75 3464 16.8 -6.5 -33.5 5.9 7.2 4.2 4.8 1.1 42 0.3 0.6 +DATE / RAOB ELEV REPORT MUCAPE MUMR 500TEMP 300 T 7-5 LR 5-3 LR 0-3SH 0-6SH 0-9SH SRH3 SHIP MODELb +95052300.DDC 791 6.00 4181 15.3 -9.6 -36.2 7.5 7.1 23.4 19.4 26.8 325 1.9 3.0 +91051100.MAF 873 6.00 4692 14.9 -10.8 -37.3 8.8 7.2 14.2 13.2 18.1 -37 1.9 2.7 +97061700.OUN 357 5.50 5751 18.8 -9.5 -36.1 7.4 7.1 14.5 23.6 45.9 116 3.1 3.5 +99012200.LZK 165 5.00 2240 12.3 -17.3 -41.7 7.6 6.8 23.0 26.3 32.1 294 2.3 3.0 +96061200.DDC 791 5.00 2820 13.7 -8.3 -34.7 7.6 7.1 12.9 20.3 15.8 142 1.2 2.5 +92072600.DDC 791 5.00 4794 17.4 -4.6 -31.2 6.8 7.0 18.2 17.4 14.6 176 1.0 0.8 +91052900.HON 392 5.00 3892 15.2 -12.3 -38.0 8.0 7.0 25.0 40.7 36.0 269 3.4 3.5 +90070800.BIS 504 5.00 3717 16.6 -9.8 -33.6 7.7 6.4 12.5 29.8 42.2 202 2.4 2.4 +57070300.RAP 966 5.00 4359 15.8 -6.7 -36.0 7.7 7.8 13.9 22.9 39.3 130 1.7 3.4 +06040300.LZK 78 5.00 3819 13.7 -14.9 -44.7 8.0 8.2 20.9 26.6 32.6 251 3.9 3.4 +99060100.DDC 790 4.75 4387 15.9 -11.3 -38.7 8.0 7.4 15.3 27.7 38.0 209 3.5 3.5 +96102100.OUN 362 4.50 2995 12.7 -12.9 -42.6 7.5 8.1 15.6 20.3 28.4 71 1.8 3.0 +96081100.LBF 847 4.50 2360 13.3 -8.4 -34.4 6.2 7.0 26.5 26.1 22.0 326 1.0 2.6 +96062700.TFX 1130 4.50 3835 13.9 -10.9 -37.2 8.3 7.1 21.8 37.1 44.3 297 3.0 1.6 +96051000.TOP 268 4.50 3884 15.6 -11.1 -40.4 8.8 8.0 22.1 18.3 22.3 234 2.2 3.3 +96050500.IAD 85 4.50 2432 12.1 -15.2 -41.7 7.2 7.3 15.9 25.0 25.5 36 1.9 1.9 +96030700.JAN 91 4.50 2362 14.0 -12.5 -38.9 6.8 7.2 16.8 34.9 36.9 196 1.8 0.6 +95060900.MAF 873 4.50 5653 17.8 -8.1 -37.7 8.1 8.0 12.8 18.7 33.5 83 2.2 2.9 +95060500.MAF 873 4.50 4358 14.9 -8.6 -40.7 7.6 8.7 16.0 23.2 32.0 181 2.1 2.9 +95051700.DDC 791 4.50 4878 15.6 -10.8 -39.2 8.5 7.7 8.9 26.6 40.7 43 3.8 2.6 +94060800.LBF 847 4.50 3400 13.0 -9.5 -37.5 7.8 7.6 8.1 18.7 18.4 109 1.5 2.4 +94042600.SEP 399 4.50 4409 16.3 -11.5 -41.9 7.4 8.3 21.2 26.7 26.2 138 3.3 3.3 +94040300.OUN 362 4.50 2075 10.1 -17.0 -44.2 7.6 7.5 18.7 31.2 39.3 163 1.9 2.1 +93101800.SEP 428 4.50 3958 15.7 -10.6 -34.9 7.0 6.5 23.2 31.7 30.5 441 2.6 2.2 +93101300.SEP 428 4.50 3151 14.2 -13.1 -36.5 8.0 6.3 15.0 22.3 31.8 307 2.4 2.9 +93092200.TOP 270 4.50 3665 16.8 -8.1 -37.9 6.5 8.0 21.3 21.3 37.9 502 1.3 1.3 +93092200.OVN 486 4.50 3685 15.4 -11.1 -40.4 8.1 7.9 23.5 31.9 33.2 492 2.9 4.0 +93072400.BIS 505 4.50 3597 15.3 -9.8 -38.4 5.8 7.7 14.9 21.0 33.2 263 1.4 2.3 +93062700.OVN 400 4.50 3720 15.0 -10.0 -38.2 6.3 7.6 9.4 22.3 28.9 140 1.7 3.1 +93060800.OUN 431 4.50 4917 17.0 -9.1 -34.9 7.1 6.9 9.7 30.6 26.7 195 2.8 2.6 +93050100.DDC 790 4.50 3206 11.1 -16.5 -44.2 8.0 7.7 15.4 24.0 29.9 194 2.7 3.7 +92073000.TOP 268 4.50 4074 16.6 -10.0 -37.8 7.5 7.5 11.8 22.5 22.1 164 2.2 2.4 +92073000.OVN 400 4.50 4366 16.6 -11.4 -38.3 7.4 7.3 13.9 22.3 23.7 216 2.7 3.2 +92062900.SEP 399 4.50 3761 17.4 -9.6 -33.8 7.8 6.6 13.7 21.8 15.6 248 2.0 2.8 +92062800.DDC 791 4.50 2750 13.8 -11.3 -34.2 7.8 6.2 15.2 20.6 41.3 315 1.6 2.9 +92062800.AMA 1095 4.50 4069 16.0 -10.3 -36.1 7.9 6.9 16.9 22.8 27.5 150 2.4 3.2 +91081400.GTF 1118 4.50 2524 11.5 -13.2 -37.4 8.5 6.6 15.3 25.8 28.9 213 2.0 2.0 +91072100.HON 392 4.50 5826 20.1 -6.1 -32.2 6.8 6.9 14.3 22.8 33.9 180 1.8 1.9 +91042912.BRO 7 4.50 4471 19.5 -9.8 -38.2 7.7 7.6 13.7 23.1 24.2 254 2.5 -999.0 +91032800.FNT 236 4.50 1860 11.3 -17.3 -44.0 7.6 7.4 26.8 47.0 45.4 431 1.8 2.9 +90051600.OUN 357 4.50 4398 16.7 -9.0 -36.4 7.6 7.3 23.2 25.5 44.9 180 2.5 3.1 +89080400.INL 359 4.50 3953 17.4 -11.5 -30.6 8.3 5.1 7.3 18.6 29.2 36 2.3 1.0 +89070300.SEP 399 4.50 5261 18.5 -7.6 -28.8 8.4 5.6 12.9 22.6 1.2 222 2.5 2.9 +89062700.GSO 277 4.50 4349 17.6 -7.3 -33.8 6.3 7.1 7.8 14.2 6.4 52 0.9 0.9 +89060700.SEP 399 4.50 3510 15.6 -7.9 -33.9 7.0 7.0 9.0 24.8 47.4 130 1.6 2.4 +89060400.MAF 873 4.50 3939 14.0 -10.0 -36.2 8.5 7.1 6.6 20.6 33.6 58 2.2 2.2 +02043000.FWD 171 4.50 5853 19.4 -10.9 -33.7 8.0 6.1 14.6 29.7 37.1 151 4.4 3.1 +02042900.IAD 93 4.50 2553 13.6 -16.7 -41.9 7.3 6.9 24.9 21.1 33.9 373 2.1 2.9 +08020600.SHV 79 4.25 2312 13.5 -14.1 -42.1 7.3 7.7 25.8 32.4 43.7 212 2.1 1.8 +07080400.RAP 1029 4.25 2983 15.6 -4.1 -30.9 6.2 7.1 18.3 22.7 35.8 270 0.7 0.9 +05042200.SGF 387 4.25 2944 12.6 -13.3 -42.7 6.8 8.0 15.1 21.3 15.6 193 1.7 2.2 +05042000.LBF 849 4.25 2460 10.1 -15.7 -43.9 8.9 7.8 16.6 15.3 22.3 255 1.4 2.9 +05031400.JAN 101 4.25 1382 11.1 -15.7 -40.7 7.6 6.8 19.2 25.5 49.7 161 1.1 2.8 +04081000.DNR 1625 4.25 3415 12.9 -9.1 -38.9 8.0 8.1 16.2 15.0 15.4 270 1.2 3.2 +04071318.ILX 178 4.25 6811 22.1 -10.9 -36.3 7.9 6.8 15.5 18.7 21.9 131 3.6 2.6 +04071300.LBF 849 4.25 7183 19.5 -7.3 -35.7 8.6 7.5 10.3 14.7 20.5 68 2.1 3.7 +04071200.GGW 700 4.25 2390 11.0 -13.7 -41.1 8.6 7.5 17.1 22.3 32.0 99 1.7 1.9 +04062200.AMA 1099 4.25 3828 13.8 -8.9 -36.5 8.0 7.4 17.8 26.2 40.5 141 2.3 2.3 +04053000.OUN 357 4.25 4526 16.8 -7.5 -36.5 7.8 7.7 15.8 24.4 40.4 224 2.1 -999.0 +04052200.AMA 1099 4.25 4265 13.7 -8.7 -36.3 7.9 7.4 13.6 21.5 23.9 176 2.0 2.1 +04040400.MAF 872 4.25 2746 12.0 -14.7 -43.1 7.0 7.8 14.4 19.5 31.1 262 1.6 2.7 +03051000.MHX 11 4.25 4373 17.1 -10.5 -35.1 7.3 6.6 14.1 22.7 23.2 146 2.5 2.1 +03050518.BNA 210 4.25 2730 16.0 -12.9 -36.4 7.1 6.5 18.3 37.0 37.2 239 2.2 -999.0 +03050500.SGF 387 4.25 5169 15.7 -13.5 -40.7 7.6 7.4 30.0 38.4 50.7 348 4.6 2.9 +03040600.FWD 171 4.25 2487 12.4 -14.3 -41.7 7.3 7.5 17.1 31.5 51.8 341 2.1 2.9 +01070300.LBF 849 4.25 5584 16.7 -8.7 -37.3 8.5 7.8 14.2 18.0 24.7 154 2.4 4.2 +98063000.TOP 270 4.00 6490 21.8 -5.3 -30.5 7.2 6.6 18.1 24.4 32.6 230 2.0 1.7 +98050800.FFC 244 4.00 4120 17.3 -12.3 -36.1 7.7 6.4 17.1 31.0 51.6 172 3.4 2.2 +97082200.LBF 849 4.00 3974 15.7 -9.7 -35.9 7.4 7.1 17.4 26.4 37.5 321 2.4 3.3 +96052300.LBF 847 4.00 2915 13.5 -11.1 -38.2 8.0 7.3 18.5 27.8 43.7 303 2.3 2.9 +95102700.SGF 394 4.00 2166 12.5 -13.8 -41.6 6.9 7.6 25.7 21.9 29.4 267 1.3 1.6 +95072600.DDC 791 4.00 5696 18.3 -10.1 -32.2 8.8 5.9 17.1 21.3 19.2 238 3.5 3.3 +95072500.FTD 196 4.00 2897 15.4 -10.0 -30.5 9.2 5.5 12.8 19.1 19.8 168 1.7 -999.0 +95051600.JAN 91 4.00 4861 17.9 -10.9 -37.6 7.8 7.2 8.6 14.9 18.5 -35 2.0 2.5 +95050600.FTD 196 4.00 2036 15.1 -11.1 -34.7 7.1 6.4 20.8 21.2 37.5 304 1.1 0.6 +93072300.HON 443 4.00 3720 15.7 -8.1 -37.4 6.0 7.8 15.4 19.1 22.5 130 1.1 1.5 +93071600.RAP 966 4.00 3230 14.1 -7.5 -34.9 7.7 7.3 18.6 25.0 35.8 97 1.5 3.2 +91041300.SEP 399 4.00 5008 16.9 -10.6 -40.5 6.8 8.1 12.2 21.8 27.4 137 2.6 3.4 +90090200.RAP 966 4.00 1762 11.3 -7.4 -33.9 7.5 7.0 14.1 23.6 32.7 181 0.6 2.1 +90070100.DAY 298 4.00 3541 16.6 -9.4 -33.6 7.1 6.5 8.6 19.9 24.5 154 1.5 1.8 +90060900.TOP 268 4.00 5571 18.5 -10.1 -39.2 7.3 7.8 14.8 22.6 16.4 252 3.0 2.7 +90051900.AMA 1095 4.00 2732 11.5 -9.3 -38.2 7.7 7.8 18.5 26.1 30.4 301 1.4 2.1 +90051500.AMA 1095 4.00 4543 14.8 -9.9 -36.2 8.2 7.1 19.2 24.7 33.8 473 2.9 2.2 +89071800.LBF 847 4.00 3622 15.4 -9.4 -35.6 8.1 7.0 22.9 38.9 37.6 361 2.4 2.9 +89062700.DDC 791 4.00 2840 14.3 -8.4 -36.6 7.6 7.5 12.7 19.4 19.2 167 1.1 2.2 +89061100.AMA 1095 4.00 3666 15.8 -8.7 -35.4 7.6 7.2 11.1 11.0 19.2 87 0.9 -999.0 +06092221.SGF 387 4.00 5071 17.6 -6.7 -36.1 5.3 7.9 21.0 31.6 37.0 202 1.6 1.1 +06071700.INL 361 4.00 3719 14.1 -11.1 -38.3 8.4 7.4 19.9 26.3 29.8 328 3.0 2.4 +06050600.MAF 872 4.00 3533 12.4 -12.3 -40.1 8.2 7.5 19.3 33.6 48.0 174 2.8 2.0 +04071318.DVN 229 4.00 6090 20.8 -11.1 -37.3 8.4 7.1 22.5 25.9 22.3 191 4.7 2.8 +03050300.BMX 178 4.00 4593 15.2 -15.7 -40.1 7.9 6.7 8.1 32.4 30.5 51 5.0 2.9 +02061300.DDC 790 4.00 6234 19.5 -6.9 -31.9 7.6 6.6 17.2 19.8 32.7 126 2.1 3.7 +02042000.MAF 872 4.00 2974 12.9 -8.1 -36.7 6.9 7.6 19.0 24.3 41.7 133 1.2 2.5 +95051900.BMX 178 3.75 3370 16.5 -9.9 -35.7 6.6 7.0 16.9 20.6 25.5 246 1.5 0.6 +03040400.OUN 357 3.75 2640 11.9 -15.1 -42.7 7.3 7.6 13.4 24.0 23.9 187 2.0 2.3 +99072600.LBF 849 3.65 4375 16.4 -6.7 -30.5 7.9 6.4 9.5 12.9 16.1 60 1.0 2.6 +99050400.OUN 357 3.65 5195 15.6 -14.9 -44.1 8.4 8.0 16.5 21.3 22.0 343 4.5 4.7 +99030600.LZK 165 3.65 1922 11.7 -18.5 -46.3 8.2 7.7 21.4 22.8 39.2 360 1.9 2.1 +98052200.SGF 387 3.65 4719 17.1 -9.9 -36.5 7.8 7.2 13.8 22.4 23.1 232 2.6 2.3 +98040800.ILX 178 3.65 1354 10.2 -19.7 -46.5 7.2 7.5 20.1 21.2 25.1 180 1.1 2.6 +03062300.OAX 350 3.65 6203 18.7 -9.3 -36.9 8.6 7.5 12.3 13.6 22.9 237 2.2 4.2 +02091900.OUN 357 3.65 4268 15.7 -6.1 -36.9 6.7 8.2 17.8 20.8 23.4 308 1.2 3.0 +02062400.ABR 396 3.65 5093 17.2 -10.5 -35.7 8.2 6.8 16.9 26.3 30.9 187 3.7 3.5 +02060500.RNK 654 3.65 5399 17.9 -9.7 -34.9 6.9 6.7 8.7 4.0 7.3 54 0.8 3.2 +02051200.TOP 270 3.65 4489 15.8 -11.9 -38.9 8.1 7.3 13.7 26.0 26.5 224 3.6 3.3 +02051100.MAF 872 3.65 4658 14.5 -9.3 -35.9 8.4 7.2 14.8 23.1 40.3 132 2.7 2.2 +01072100.GGW 700 3.65 3114 13.5 -10.7 -38.5 7.7 7.5 15.8 28.3 30.5 354 2.2 2.8 +01071800.ABR 396 3.65 5177 17.5 -9.9 -36.7 8.4 7.2 9.6 19.5 28.2 136 2.7 3.9 +01062100.DDC 790 3.65 4428 15.2 -10.7 -37.5 7.8 7.3 13.4 19.0 25.2 400 2.3 3.2 +01061400.DDC 790 3.65 5244 15.7 -8.9 -36.7 8.0 7.5 19.8 28.1 28.2 384 3.2 2.5 +01052500.JAN 101 3.65 3446 13.5 -15.1 -42.5 7.5 7.5 17.4 21.8 31.4 240 2.7 2.7 +01051800.AMA 1099 3.65 4695 13.9 -10.5 -38.9 8.6 7.7 16.1 13.2 22.8 86 1.8 2.1 +01050700.SHV 79 3.65 2945 14.8 -12.5 -39.3 6.5 7.3 9.0 15.7 22.1 110 1.2 1.7 +01050700.LZK 78 3.65 3512 14.7 -12.9 -40.5 5.9 7.5 7.3 18.7 26.3 77 1.6 3.4 +01041500.DDC 790 3.65 3892 13.1 -18.3 -43.1 9.0 6.9 24.4 43.1 54.7 233 5.4 2.5 +01040400.SGF 387 3.65 3277 12.8 -15.1 -43.1 8.3 7.7 17.2 22.4 28.9 310 2.8 3.1 +98062000.OUN 357 3.50 6048 19.0 -7.1 -35.9 7.8 7.7 13.7 15.4 11.2 209 1.7 3.9 +98052500.OUN 357 3.50 5688 18.0 -10.7 -39.7 8.1 7.8 9.9 21.9 28.7 172 3.5 4.2 +98052100.TOP 270 3.50 4680 16.5 -12.5 -38.1 8.4 7.0 9.8 10.5 23.7 100 1.7 3.8 +97062100.LBF 849 3.50 6058 17.3 -9.3 -35.7 8.8 7.2 13.9 23.1 25.1 129 3.7 3.7 +96062000.OAX 350 3.50 4081 16.3 -9.8 -37.1 8.6 7.4 18.9 19.0 24.4 271 2.1 -999.0 +90061900.BIS 504 3.50 1968 11.1 -13.5 -40.9 8.2 7.5 17.4 28.4 38.0 257 1.5 2.9 +90060900.IAD 85 3.50 3994 17.2 -10.9 -35.5 7.1 6.7 18.3 23.7 20.0 203 2.4 0.9 +90040600.SEP 399 3.50 3764 12.4 -14.9 -45.3 7.8 8.4 15.4 25.2 36.8 305 3.3 2.3 +90031400.OUN 357 3.50 3950 14.6 -16.1 -39.5 7.2 6.4 12.3 20.2 49.4 169 3.0 2.9 +89070300.STC 315 3.50 3556 15.6 -8.2 -35.9 7.0 7.4 8.5 15.8 21.4 128 1.1 1.4 +02081200.DDC 790 3.50 3415 14.0 -8.7 -34.3 8.0 6.9 10.7 15.7 27.7 157 1.2 3.1 +01061500.FWD 171 3.50 4260 17.3 -9.7 -33.7 7.9 6.5 11.1 15.1 9.7 74 1.6 2.2 +01041000.SGF 387 3.50 3476 13.0 -14.5 -41.3 7.9 7.4 12.5 21.6 30.3 141 2.7 2.6 +91060500.DDC 791 3.25 4631 16.9 -7.9 -35.5 6.5 7.4 11.0 15.3 15.4 74 1.2 3.5 +06070200.GRB 214 3.25 3255 15.4 -9.3 -35.9 6.6 7.1 14.7 17.0 24.9 99 1.1 1.5 +99060200.FWD 196 3.00 4928 17.3 -11.5 -37.3 8.8 7.0 15.3 15.0 30.3 171 2.4 4.5 +98062900.TOP 270 3.00 6895 22.0 -7.7 -33.1 7.0 6.8 19.3 20.6 27.3 335 2.5 2.4 +98062500.BIS 506 3.00 4591 15.5 -13.3 -41.3 8.1 7.7 15.5 15.9 15.4 89 2.5 3.0 +98062500.ABR 396 3.00 4448 16.3 -13.7 -40.5 8.8 7.3 11.2 17.4 28.7 42 3.0 3.7 +98061400.OAX 350 3.00 2830 13.3 -10.5 -39.5 7.7 7.9 15.3 24.4 45.4 219 1.8 3.4 +98052400.DDC 790 3.00 2630 11.6 -12.9 -41.5 6.7 7.8 9.8 22.0 27.7 101 1.4 2.3 +97061000.FWD 196 3.00 2699 15.6 -9.9 -34.9 7.0 6.7 10.9 18.7 24.1 98 1.1 1.3 +97052600.OUN 357 3.00 5143 17.2 -7.7 -38.5 5.9 8.3 15.0 30.4 32.4 148 2.0 2.6 +96070800.LBF 847 3.00 3341 15.3 -6.4 -32.5 7.0 6.9 20.6 30.0 41.5 390 1.3 2.2 +96062012.LBF 847 3.00 3418 15.2 -8.6 -35.4 7.9 7.3 16.5 22.6 25.0 380 1.7 3.3 +96061400.UNR 1037 3.00 3801 13.1 -11.0 -37.6 8.4 7.2 12.4 18.0 14.8 63 2.0 2.0 +96052700.OUN 362 3.00 3034 15.2 -9.4 -36.2 6.9 7.2 22.5 29.8 33.6 330 1.7 2.0 +96042000.ILX 178 3.00 2394 12.9 -14.6 -41.1 7.1 7.3 16.4 27.0 39.5 249 2.1 -999.0 +96033100.SHV 84 3.00 2891 12.7 -17.1 -46.6 7.6 8.2 20.1 27.4 35.5 163 3.0 3.1 +95082700.GGW 696 3.00 3094 11.7 -12.6 -38.7 8.3 7.1 13.6 26.8 41.0 162 2.4 1.7 +95082300.INL 359 3.00 3023 15.4 -11.6 -36.2 8.0 6.7 25.4 30.9 26.5 694 2.5 2.1 +95072400.DDC 791 3.00 3645 15.9 -9.9 -33.5 8.2 6.3 11.8 18.2 32.6 31 1.7 3.6 +95071500.LBF 847 3.00 3052 14.4 -7.0 -32.9 6.5 6.9 13.9 15.9 24.7 159 0.7 2.1 +95062300.LBF 847 3.00 2962 12.9 -11.1 -36.7 7.9 7.0 15.3 21.0 19.8 220 1.7 2.8 +95043000.FTD 196 3.00 4416 15.0 -13.3 -43.2 8.1 8.2 15.6 21.9 31.7 166 3.4 3.4 +95021400.PBI 6 3.00 2433 16.5 -11.0 -41.1 5.9 8.1 13.8 27.1 33.4 117 1.4 0.6 +94060600.DDC 791 3.00 4882 14.8 -8.8 -37.2 8.7 7.6 13.1 15.6 18.6 248 1.9 2.1 +94052600.FNT 236 3.00 2240 10.8 -16.3 -46.6 6.1 8.4 12.8 17.8 25.8 113 1.0 2.4 +94032800.CKL 140 3.00 2066 15.3 -9.6 -33.7 6.3 6.4 30.5 38.6 36.3 429 1.1 0.6 +93091900.DDC 824 3.00 1954 12.4 -10.4 -35.2 7.2 6.7 16.8 29.5 46.6 233 1.2 2.8 +93091900.AMA 1094 3.00 1911 12.4 -9.0 -33.5 7.7 6.5 16.5 32.7 35.4 264 1.1 2.4 +93082300.DDC 790 3.00 2608 13.3 -7.8 -33.0 7.7 6.8 13.1 19.5 27.0 83 1.0 2.0 +93070900.OVN 487 3.00 5546 19.7 -6.8 -30.3 6.9 6.2 16.9 29.4 24.3 345 2.3 0.6 +93070200.DDC 816 3.00 4895 17.1 -5.2 -33.2 7.2 7.4 13.3 16.4 21.4 237 1.0 2.8 +93060600.HAT 4 3.00 4948 16.0 -13.5 -38.7 8.3 6.9 12.6 15.5 17.2 70 2.8 3.9 +93050600.MAF 873 3.00 3784 13.9 -9.6 -37.2 7.2 7.4 18.6 27.0 25.4 149 2.3 2.5 +92070500.OVN 400 3.00 5051 17.3 -9.3 -36.1 7.4 7.2 16.1 21.8 33.3 243 2.5 3.5 +92062700.MAF 873 3.00 3224 13.9 -8.2 -32.9 7.7 6.6 13.0 23.7 38.8 253 1.6 2.5 +92032600.TBW 13 3.00 2104 12.6 -14.0 -43.1 6.5 8.0 18.6 32.2 37.0 195 1.5 1.1 +91052700.DDC 791 3.00 5493 17.0 -10.5 -38.1 8.4 7.4 13.3 21.7 29.3 81 3.4 2.9 +91040912.1M1 172 3.00 3450 14.2 -15.2 -42.3 8.0 7.5 11.5 19.7 20.8 134 2.7 -999.0 +91032700.TOP 268 3.00 2763 12.7 -12.3 -39.3 6.8 7.4 21.6 27.7 31.7 279 1.9 2.5 +90052700.OUN 357 3.00 4621 17.5 -8.8 -37.3 7.6 7.7 20.4 23.8 25.1 255 2.4 3.2 +90051500.OUN 357 3.00 4798 16.8 -10.7 -38.4 7.8 7.5 12.5 19.8 29.7 186 2.6 4.2 +89060700.AMA 1095 3.00 4752 15.4 -9.5 -33.5 8.5 6.4 21.7 30.5 55.6 303 3.3 2.4 +89060500.OUN 357 3.00 1640 12.5 -11.6 -39.9 7.0 7.7 8.8 15.7 23.9 53 0.6 0.7 +72081200.YRM 988 3.00 1989 10.9 -14.2 -40.4 8.3 7.1 14.0 24.6 35.0 132 1.5 2.4 +06052800.BIS 506 3.00 3434 12.5 -11.1 -38.7 8.1 7.5 10.5 11.3 12.7 74 1.0 1.8 +06052700.BNA 210 3.00 3535 16.1 -8.3 -35.3 5.9 7.2 17.7 12.8 17.2 196 0.7 0.7 +06052500.SGF 387 3.00 3470 15.6 -11.1 -37.1 7.6 7.0 13.6 14.3 7.3 162 1.4 2.0 +06042500.OUN 357 3.00 4007 15.5 -12.3 -39.3 8.6 7.3 15.4 20.1 21.2 105 2.8 3.3 +06042412.LMN 317 3.00 3248 14.1 -12.9 -39.7 8.2 7.3 16.6 25.4 28.7 413 2.8 3.2 +04081000.DDC 790 3.00 3147 14.6 -9.7 -36.3 7.7 7.1 13.0 21.0 22.0 222 1.6 3.0 +04070200.AMA 1099 3.00 5137 16.9 -8.1 -37.7 7.4 7.9 18.0 14.0 16.6 80 1.4 3.0 +04052300.OAX 350 3.00 4333 15.6 -12.3 -40.7 7.6 7.8 19.6 32.4 28.9 289 3.6 3.0 +04051700.DDC 790 3.00 2200 10.0 -11.9 -41.3 8.4 8.0 20.5 31.7 30.2 390 1.6 1.5 +04042200.OUN 357 3.00 2363 12.2 -13.5 -39.5 7.0 7.1 16.9 24.3 33.8 385 1.6 2.7 +04041900.OAX 350 3.00 3136 11.9 -15.1 -40.5 8.2 7.0 20.5 33.8 44.9 394 3.0 1.9 +03062800.DDC 790 3.00 2329 11.4 -9.3 -38.9 6.7 8.0 10.8 16.9 26.8 138 0.7 2.2 +03062400.LBF 849 3.00 6189 18.6 -8.7 -38.9 8.1 8.1 21.7 30.8 31.6 381 3.8 4.8 +03050420.SGF 387 3.00 4524 15.8 -11.9 -40.7 7.1 7.8 25.2 35.4 47.9 480 3.3 3.2 +03042100.SHV 79 3.00 2947 15.5 -13.5 -38.7 7.5 6.8 14.3 24.0 38.0 110 2.3 0.9 +01090900.FWD 171 3.00 4304 17.1 -8.9 -35.7 8.2 7.1 7.7 14.1 12.0 97 1.4 2.7 +01053000.AMA 1099 3.00 5827 16.4 -9.7 -38.5 8.2 7.7 25.0 26.1 29.7 268 3.9 2.8 +01051900.LZK 78 3.00 4269 16.6 -12.5 -37.3 8.1 6.7 9.9 18.5 25.8 98 2.6 2.7 +00080600.OAX 350 3.00 5525 19.0 -7.1 -33.1 7.5 6.9 9.4 15.0 22.8 56 1.4 3.1 +00062900.MAF 872 3.00 3565 14.8 -6.3 -31.1 6.3 6.6 9.6 10.5 16.7 29 0.5 1.8 +00050400.FWD 196 3.00 2731 13.2 -14.3 -40.3 6.3 7.1 19.0 21.7 28.5 327 1.7 3.0 +99081800.LBF 849 2.75 5554 18.3 -8.9 -32.5 7.8 6.4 10.7 23.7 25.1 143 2.9 3.4 +99070100.MAF 872 2.75 3989 13.7 -2.5 -33.9 7.5 8.3 10.5 14.9 13.7 146 0.8 2.0 +99061900.DDC 790 2.75 4141 13.9 -11.3 -40.3 7.3 7.9 13.4 22.5 29.0 346 2.5 2.4 +99061200.AMA 1099 2.75 4400 14.7 -10.3 -36.3 7.7 7.0 18.8 26.2 36.6 210 3.0 2.4 +99060300.AMA 1099 2.75 5087 15.6 -10.3 -36.5 8.7 7.1 15.5 18.6 49.2 289 2.7 2.5 +98061400.OUN 357 2.75 6689 20.5 -6.5 -32.5 7.7 6.9 17.9 32.8 42.7 262 2.9 4.0 +98052500.DDC 790 2.75 2688 12.5 -12.1 -40.7 7.2 7.8 13.7 27.9 32.0 180 1.9 2.7 +98040900.BMX 178 2.75 3341 15.8 -13.9 -39.5 7.9 7.0 25.9 40.1 51.5 296 3.2 2.0 +97061600.DDC 790 2.75 3187 13.5 -10.9 -36.5 7.7 6.9 11.9 23.3 39.3 26 2.0 2.7 +97061200.TOP 270 2.75 1552 12.6 -11.7 -38.7 7.1 7.3 11.6 23.5 30.2 141 0.9 0.9 +97052700.SGF 387 2.75 4440 16.3 -9.9 -38.1 7.0 7.6 16.3 22.6 25.0 276 2.3 2.6 +97052700.OUN 357 2.75 5907 18.0 -8.7 -37.7 6.4 7.8 17.6 17.5 23.9 271 1.9 3.7 +97042100.SGF 387 2.75 1773 9.4 -16.5 -45.7 7.4 8.1 23.3 25.4 23.9 405 1.4 2.0 +97041100.MAF 873 2.75 4076 11.9 -15.0 -45.9 8.2 8.5 20.8 23.7 30.7 260 3.3 2.1 +97032900.BNA 180 2.75 1618 11.1 -15.6 -42.6 7.4 7.4 18.1 25.2 15.3 389 1.3 3.0 +97012500.SIL 8 2.75 2563 13.0 -16.5 -46.0 7.5 8.2 18.3 18.3 25.8 145 1.8 2.8 +96092100.FTD 196 2.75 2870 16.4 -9.4 -37.2 6.5 7.4 15.7 26.4 32.6 136 1.5 -999.0 +96083000.DEN 1611 2.75 2478 11.7 -9.1 -36.2 7.8 7.3 17.6 26.2 28.9 86 1.3 2.3 +96080100.DEN 1611 2.75 3920 13.5 -7.8 -34.9 8.5 7.3 15.0 22.6 26.3 276 1.9 2.1 +96072400.DDC 791 2.75 3068 14.3 -11.1 -36.0 8.6 6.7 16.8 27.6 36.6 203 2.6 2.7 +96062500.AMA 1095 2.75 3778 13.9 -9.4 -33.2 8.5 6.4 7.0 22.9 28.2 123 2.2 1.9 +96061400.LBF 847 2.75 2384 12.4 -8.6 -36.2 6.5 7.4 12.0 15.4 25.0 102 0.6 2.2 +96061300.FFC 246 2.75 2727 13.7 -9.1 -36.5 5.7 7.4 12.9 12.9 13.1 152 0.6 1.0 +96061200.AMA 1095 2.75 3079 11.9 -8.8 -38.1 8.0 7.9 18.3 24.3 30.2 373 1.5 1.9 +96060300.SGF 394 2.75 2739 11.7 -15.9 -42.2 7.1 7.2 14.8 26.4 35.9 90 2.3 2.1 +96060200.JAN 91 2.75 1863 16.1 -7.5 -32.6 5.5 6.8 11.3 12.7 20.3 168 0.3 0.6 +96060100.ABR 397 2.75 2276 12.6 -13.4 -40.4 6.2 7.4 24.6 22.4 27.2 370 1.3 2.2 +96053000.MAF 873 2.75 3675 14.9 -7.0 -32.9 7.7 6.9 19.0 35.1 40.6 321 1.7 2.5 +96052600.MAF 873 2.75 3464 14.1 -6.2 -36.5 7.7 8.1 22.5 28.7 42.1 240 1.4 2.9 +96052500.AMA 1095 2.75 3927 13.5 -11.3 -36.6 9.1 6.9 16.4 20.3 4.9 101 2.6 1.9 +96051800.OAX 350 2.75 4523 15.3 -11.1 -39.7 8.8 7.8 12.9 16.0 21.2 68 2.3 -999.0 +96051700.UNR 1037 2.75 4365 14.8 -8.1 -37.0 8.0 7.8 15.0 25.5 28.7 219 2.3 2.5 +96042200.TOP 268 2.75 1574 10.9 -16.6 -42.6 7.3 7.2 14.6 45.6 54.3 145 1.3 2.3 +96042200.OUN 362 2.75 2260 12.7 -10.9 -36.6 5.9 7.0 18.5 38.3 48.8 500 1.2 2.3 +96031600.FFC 246 2.75 890 9.6 -19.2 -39.7 7.8 5.7 20.5 28.8 55.2 353 0.9 2.2 +95081800.BIS 503 2.75 5585 18.4 -7.0 -34.2 7.7 7.3 10.6 10.6 17.3 142 1.0 3.3 +95072400.AMA 1095 2.75 2225 13.3 -7.8 -30.1 8.5 6.0 13.1 21.6 25.1 124 1.0 2.9 +95071500.GRB 210 2.75 5409 19.0 -8.5 -30.8 8.1 5.9 8.0 12.1 9.0 69 1.5 3.0 +95071200.OKX 20 2.75 2900 13.9 -15.6 -43.2 6.9 7.6 8.1 12.7 13.6 48 1.3 2.4 +95070300.DDC 791 2.75 2905 14.2 -9.6 -38.9 6.8 7.9 12.3 18.2 21.4 111 1.1 2.3 +95070300.AMA 1095 2.75 3838 14.7 -11.5 -36.5 8.8 6.8 8.2 22.8 29.0 115 2.9 2.5 +95062800.LBF 847 2.75 2880 12.4 -10.1 -37.2 7.7 7.3 13.9 22.0 19.7 208 1.5 2.5 +95062100.OKX 20 2.75 3918 17.1 -9.8 -34.9 7.1 6.7 11.4 18.4 25.8 18 1.6 1.0 +95060300.AMA 1095 2.75 3024 12.4 -9.6 -36.5 8.2 7.2 15.7 22.4 37.2 346 1.6 2.0 +95052200.LBF 847 2.75 2027 10.4 -14.9 -42.1 7.4 7.4 18.7 28.3 33.3 221 1.6 2.1 +95051400.UMN 438 2.75 5278 16.5 -10.3 -38.0 6.9 7.5 22.3 28.0 26.2 211 3.3 3.2 +95042000.FTD 196 2.75 2621 14.6 -13.3 -38.5 7.7 6.8 25.8 39.5 59.2 498 2.3 2.4 +95040900.TOP 268 2.75 2836 10.7 -17.5 -44.5 9.2 7.5 16.5 21.4 31.9 120 2.6 1.9 +94070700.HON 392 2.75 3051 16.5 -8.8 -35.7 7.2 7.2 10.2 20.5 18.6 159 1.3 0.6 +94070200.OAX 350 2.75 5257 18.5 -10.1 -33.0 8.0 6.2 15.5 26.5 25.4 416 3.6 3.2 +94070100.STC 315 2.75 3701 14.3 -11.6 -39.6 7.3 7.6 19.0 27.2 25.1 399 2.7 2.7 +94062600.JAN 106 2.75 2842 16.1 -9.5 -35.0 6.4 6.8 12.4 24.0 32.8 130 1.3 0.9 +94062500.HON 392 2.75 1962 11.8 -10.8 -39.7 6.4 7.8 15.4 27.8 33.5 211 1.0 2.2 +94061900.JAN 91 2.75 3177 16.8 -7.5 -32.7 5.9 6.7 3.8 11.5 12.4 42 0.5 0.6 +94061800.AMA 1095 2.75 2676 11.9 -7.0 -33.1 8.2 6.9 10.7 11.0 11.3 171 0.5 1.6 +94061200.TOP 268 2.75 2320 13.9 -9.5 -36.5 6.6 7.3 15.8 23.9 24.4 117 1.1 0.9 +94061200.AMA 1095 2.75 4015 14.7 -8.0 -33.7 7.8 6.9 18.4 26.7 19.9 302 2.2 2.7 +94061100.AMA 1095 2.75 2164 12.3 -8.3 -36.1 7.3 7.5 16.6 19.5 20.3 229 0.7 2.8 +94060600.TOP 268 2.75 3953 16.5 -9.3 -35.1 8.1 6.9 15.4 16.1 27.7 394 1.5 2.5 +94060500.HON 392 2.75 3871 14.2 -11.6 -38.7 8.5 7.4 12.0 21.4 19.2 202 2.6 2.4 +94053000.SEP 399 2.75 5032 17.5 -10.6 -36.6 8.2 7.0 16.1 27.0 23.8 291 3.8 3.9 +94052500.OUN 362 2.75 3912 15.0 -11.5 -38.1 7.4 7.2 13.2 22.0 36.2 122 2.4 3.0 +94041100.UMN 438 2.75 2040 12.6 -16.5 -41.0 7.6 6.7 19.9 37.8 45.4 486 2.1 2.5 +94012700.GGG 124 2.75 2167 13.2 -15.9 -42.4 6.8 7.3 17.5 31.0 32.3 306 2.0 0.7 +93102000.DRT 313 2.75 3433 15.5 -8.9 -36.3 6.4 7.4 13.4 25.4 34.0 35 1.6 1.6 +93101900.GGG 124 2.75 3105 15.7 -9.8 -36.9 6.9 7.3 10.3 23.5 33.9 105 1.6 0.7 +93101300.CRP 14 2.75 4367 17.3 -8.6 -37.2 6.3 7.7 14.8 20.2 29.8 227 1.5 1.5 +93090400.IAD 85 2.75 2779 15.6 -5.9 -32.6 5.7 7.1 12.4 15.2 15.6 149 0.5 0.6 +93070700.DDC 790 2.75 5334 17.0 -6.0 -36.1 7.2 8.0 16.5 27.9 28.2 154 2.0 3.1 +93070700.AMA 1094 2.75 5327 17.0 -4.7 -32.2 7.8 7.3 11.4 21.3 20.0 127 1.6 3.8 +93070500.DDC 790 2.75 4186 17.1 -5.4 -31.1 6.7 6.8 16.6 30.6 34.9 146 1.3 1.2 +93062400.LBF 849 2.75 3944 16.0 -8.6 -37.5 8.1 7.7 18.1 21.9 33.8 178 2.0 2.8 +93062400.DEN 1611 2.75 3442 11.7 -9.6 -38.0 8.8 7.8 15.8 32.0 42.3 211 2.2 1.8 +93061900.AMA 1094 2.75 2140 12.8 -7.8 -33.2 7.0 6.7 14.4 22.7 23.3 146 0.8 1.9 +93051600.DDC 790 2.75 3614 12.8 -9.8 -40.4 6.6 8.3 12.6 19.4 23.7 161 1.4 2.5 +93050600.AMA 1094 2.75 4478 13.2 -13.6 -38.2 8.6 6.7 16.6 34.6 38.4 340 4.5 2.0 +93050100.AMA 1095 2.75 4085 11.6 -14.5 -42.9 8.1 7.8 15.3 25.7 15.8 234 3.4 1.9 +93042900.MAF 873 2.75 2435 11.7 -10.9 -36.0 7.1 6.8 20.8 29.3 37.4 551 1.4 2.2 +93042800.MAF 873 2.75 1494 10.4 -10.6 -38.7 6.9 7.6 12.9 19.6 25.8 150 0.6 1.8 +93042500.UMN 438 2.75 2317 11.4 -14.6 -42.2 6.9 7.6 18.2 25.2 33.1 198 1.6 2.4 +93042000.GGG 168 2.75 2342 12.4 -13.3 -42.9 8.0 8.1 17.5 26.7 28.4 156 2.0 2.7 +93040200.WAL 13 2.75 1625 10.9 -18.5 -46.2 7.3 7.7 26.8 30.7 48.4 200 1.5 2.4 +93033100.UMN 440 2.75 2598 11.1 -16.5 -43.6 6.4 7.5 19.7 29.7 28.9 117 2.0 2.1 +93033100.1M1 204 2.75 2471 11.9 -15.1 -43.9 7.2 8.0 17.8 30.2 27.1 54 2.1 2.8 +92101600.SEP 399 2.75 3654 14.6 -12.1 -37.5 7.7 6.9 12.6 16.4 22.7 227 1.8 2.9 +92073000.LBF 847 2.75 3544 15.0 -10.3 -38.2 7.9 7.5 22.0 25.7 33.8 335 2.4 3.0 +92062700.AMA 1095 2.75 3165 14.1 -10.0 -34.2 7.7 6.5 12.4 16.6 29.9 191 1.3 2.9 +92061900.DDC 791 2.75 2598 12.8 -8.3 -34.7 7.9 7.1 15.7 25.1 40.5 114 1.3 2.7 +92061900.BIS 504 2.75 1791 11.0 -14.4 -39.4 6.9 6.9 13.0 27.4 24.4 106 1.3 2.5 +92061300.AMA 1095 2.75 2821 14.7 -8.8 -34.4 7.2 6.9 12.0 19.1 36.4 165 1.1 2.7 +92061200.MAF 873 2.75 2387 13.8 -8.2 -32.3 7.4 6.4 13.3 26.7 34.6 178 1.3 2.0 +92060500.AMA 1095 2.75 2870 13.4 -9.4 -37.0 7.5 7.4 12.2 17.5 25.9 249 1.1 2.6 +92030600.1M1 172 2.75 2572 11.5 -21.1 -44.4 7.2 6.5 17.3 22.5 26.7 194 2.4 2.3 +92021500.UMN 438 2.75 1724 10.2 -16.9 -44.0 6.4 7.5 24.2 33.2 28.2 289 1.3 2.2 +91072200.HON 392 2.75 4474 19.3 -6.8 -31.8 7.2 6.7 11.1 17.3 24.1 198 1.2 -999.0 +91070500.GGW 696 2.75 2308 11.4 -9.9 -38.5 7.0 7.7 6.7 17.5 23.9 144 0.8 2.2 +91070500.BIS 504 2.75 2941 13.3 -9.3 -37.6 6.4 7.6 19.3 21.4 26.6 206 1.2 2.4 +91062000.HON 392 2.75 2691 13.9 -10.5 -37.0 7.0 7.2 16.1 22.1 20.0 282 1.4 1.2 +91061900.LBF 847 2.75 3600 13.0 -12.0 -40.0 8.6 7.6 13.5 15.2 20.9 219 1.7 2.6 +91061500.GRB 210 2.75 3430 17.6 -8.7 -32.3 6.7 6.3 21.7 13.9 17.0 161 0.9 0.6 +91061500.BIS 504 2.75 2379 13.0 -11.9 -35.8 6.6 6.5 13.2 22.5 25.2 152 1.3 2.6 +91060500.OVN 400 2.75 2813 14.6 -10.1 -31.5 6.5 5.7 8.4 17.1 19.6 177 1.0 3.1 +91053000.RAP 966 2.75 2814 10.9 -15.7 -43.2 8.1 7.6 13.0 14.5 28.4 159 1.4 2.0 +91053000.OVN 400 2.75 4446 16.8 -10.2 -36.3 6.8 7.0 14.3 18.2 19.0 31 1.8 2.7 +91052500.AMA 1095 2.75 3416 13.7 -10.5 -37.1 7.0 7.2 17.0 17.4 13.8 124 1.4 2.5 +91051800.UMN 438 2.75 3444 15.1 -11.0 -34.2 7.4 6.2 9.4 11.9 21.0 59 1.1 1.2 +91051700.UMN 438 2.75 3299 15.9 -10.6 -35.6 7.6 6.7 14.4 16.1 11.8 174 1.4 1.9 +91051200.RAP 966 2.75 4430 14.1 -11.0 -39.1 7.9 7.6 26.6 23.5 33.5 437 2.9 2.5 +91051100.AMA 1095 2.75 5629 15.6 -10.7 -37.8 9.0 7.3 14.5 16.5 21.5 314 2.9 2.5 +91042800.GGG 124 2.75 4554 18.9 -10.5 -37.7 7.2 7.3 15.4 29.5 19.6 140 3.0 2.2 +91042700.OUN 357 2.75 4751 16.6 -11.5 -41.7 7.0 8.2 20.6 23.6 26.4 376 2.9 3.7 +91042700.GGG 124 2.75 5164 18.9 -10.7 -38.1 8.2 7.5 12.4 18.9 27.6 209 2.8 2.7 +91041300.OUN 357 2.75 4063 14.1 -13.7 -42.3 8.0 7.8 17.1 22.0 25.1 205 3.2 2.9 +91040300.OUN 357 2.75 1560 10.1 -19.8 -43.3 7.3 6.6 15.1 22.6 41.7 275 1.3 1.5 +91032700.DDC 791 2.75 3132 12.4 -14.2 -40.5 8.2 7.2 18.9 40.7 44.0 160 2.9 2.1 +91032200.UMN 438 2.75 2632 11.5 -15.3 -44.0 7.0 7.9 18.8 33.0 35.3 371 2.1 2.5 +90090600.STC 315 2.75 4899 19.5 -6.8 -33.9 6.2 7.2 14.7 21.0 17.1 294 1.4 1.0 +90082800.SSM 221 2.75 5115 18.2 -8.5 -36.7 6.2 7.5 20.5 31.6 29.9 334 2.4 1.1 +90081100.LBF 847 2.75 3971 14.8 -9.0 -36.8 7.5 7.5 14.3 25.6 21.5 282 2.2 2.9 +90070700.BIS 504 2.75 3274 14.9 -7.5 -34.7 6.9 7.3 12.9 19.0 25.7 316 1.0 2.2 +90070300.BIS 504 2.75 6982 21.3 -6.3 -31.9 8.2 6.8 14.9 23.0 29.6 172 2.7 4.6 +90061900.LBF 847 2.75 7070 19.2 -6.1 -35.5 8.4 7.9 18.5 30.2 38.1 266 3.2 3.6 +90060200.STC 315 2.75 2697 13.4 -13.3 -39.7 8.5 7.2 10.4 18.6 17.2 132 1.8 2.2 +90060200.LBF 847 2.75 3719 13.6 -10.8 -39.9 7.9 7.9 16.4 15.6 29.4 89 1.6 2.4 +90053100.GGG 124 2.75 4743 19.3 -5.7 -33.3 6.1 7.3 21.5 27.2 25.7 317 1.4 0.7 +90052000.OUN 357 2.75 4565 15.3 -10.8 -39.0 7.1 7.6 12.1 13.7 14.7 94 1.6 3.1 +90051900.LBF 847 2.75 3954 12.1 -13.9 -42.1 8.6 7.8 16.2 25.1 24.6 398 3.4 2.0 +90051700.GGG 124 2.75 3234 17.5 -8.3 -36.2 7.2 7.4 17.6 24.7 35.1 304 1.5 0.6 +90050100.AHN 246 2.75 4557 14.9 -12.6 -41.5 7.7 7.9 19.7 14.7 9.3 92 2.1 3.4 +90042800.GGG 124 2.75 2263 12.9 -14.9 -41.0 6.6 7.1 12.8 14.1 25.3 84 1.0 2.8 +90041700.OUN 357 2.75 3717 13.6 -15.0 -44.3 8.3 8.1 17.2 11.5 20.5 152 1.7 3.8 +90031400.PIA 200 2.75 2115 12.4 -14.4 -41.2 6.9 7.4 15.3 18.1 24.1 206 1.1 2.6 +90021600.JAN 91 2.75 2047 15.2 -10.9 -40.4 6.6 8.0 18.9 20.9 34.6 124 1.0 -999.0 +89090400.LBF 847 2.75 4599 17.3 -8.6 -36.0 8.3 7.3 8.6 29.6 38.8 223 2.9 3.3 +89082900.STC 315 2.75 1959 14.6 -10.0 -35.2 6.8 6.8 18.0 26.3 44.7 147 1.1 1.1 +89082200.STC 315 2.75 3346 16.2 -11.1 -35.6 6.9 6.7 11.9 20.6 30.6 173 1.7 1.2 +89082200.OMA 400 2.75 4223 17.9 -8.3 -30.9 7.0 6.0 15.0 22.2 45.4 138 1.8 0.9 +89082200.HON 392 2.75 4160 15.6 -9.4 -38.2 6.9 7.8 14.8 22.9 28.9 107 2.0 3.3 +89081600.AMA 1095 2.75 2669 12.8 -7.1 -34.8 6.9 7.4 10.5 17.0 24.9 158 0.7 2.5 +89062600.RAP 966 2.75 2246 11.5 -13.8 -40.7 7.8 7.4 20.0 31.3 30.4 301 1.8 2.6 +89061300.AMA 1095 2.75 3611 14.4 -10.8 -36.6 8.1 7.0 9.9 15.8 22.1 79 1.6 3.0 +89060300.TOP 268 2.75 2623 13.7 -12.6 -38.3 7.0 7.0 12.4 19.5 39.7 118 1.5 2.0 +89060300.MAF 873 2.75 2291 11.9 -8.4 -34.6 7.6 7.0 13.3 19.3 32.2 147 0.8 2.2 +89060200.MAF 873 2.75 3193 14.1 -10.4 -34.9 7.9 6.6 8.5 24.5 27.4 104 2.1 2.8 +58042200.FWH 180 2.75 3338 13.3 -16.1 -39.0 7.8 6.3 25.5 37.0 49.4 276 3.6 2.4 +07021400.BMX 178 2.75 1032 9.9 -19.1 -44.7 7.0 7.1 19.5 20.7 36.3 245 0.7 2.4 +06082600.DDC 790 2.75 3488 16.5 -5.5 -31.7 6.5 6.9 17.6 20.2 26.5 141 0.8 0.8 +06081000.BIS 506 2.75 2589 13.0 -8.9 -35.7 7.5 7.2 8.8 19.1 18.8 147 1.0 2.6 +06062200.DDC 790 2.75 2406 12.7 -8.7 -34.9 8.1 7.0 11.0 21.1 24.9 175 1.1 2.4 +06050800.MAF 872 2.75 2440 11.9 -12.5 -36.9 8.0 6.6 22.1 33.3 51.2 327 1.9 2.3 +06050718.CHS 15 2.75 2580 12.9 -12.5 -40.1 6.0 7.5 15.9 17.7 18.8 177 1.1 2.0 +06050500.MAF 872 2.75 3709 11.5 -12.1 -42.7 8.1 8.4 21.7 27.6 34.4 372 2.7 1.7 +06050300.DRT 313 2.75 3549 13.7 -12.1 -37.1 8.5 6.8 5.1 14.2 19.0 74 1.7 2.1 +06042000.BMX 178 2.75 2242 13.1 -11.9 -37.1 7.1 6.8 11.3 21.7 27.0 122 1.3 2.1 +06041400.DVN 229 2.75 1524 11.2 -15.7 -35.1 8.3 5.6 15.8 30.6 30.3 263 1.4 3.4 +06031218.TOP 270 2.75 2814 12.6 -17.9 -44.3 8.5 7.3 33.9 44.8 54.9 723 3.5 2.7 +05092300.ILX 178 2.75 1858 14.1 -8.1 -33.3 6.9 6.7 11.5 21.5 16.8 121 0.7 0.8 +05051000.FWD 171 2.75 4841 15.5 -11.5 -42.1 6.7 8.3 9.5 18.0 25.9 152 2.2 2.9 +05042300.JAN 101 2.75 2558 13.6 -14.7 -39.7 7.1 6.9 19.9 28.5 34.1 183 2.3 2.7 +05042100.DDC 790 2.75 4722 13.2 -15.3 -43.5 8.6 7.7 15.2 16.1 14.9 174 3.1 2.1 +05041800.AMA 1099 2.75 1767 9.4 -17.3 -43.3 8.7 7.2 15.5 19.6 22.9 211 1.4 1.9 +05022200.FFC 244 2.75 1389 11.4 -16.3 -43.1 7.0 7.4 20.7 28.5 35.4 225 1.2 1.7 +04070500.DDC 790 2.75 3819 14.3 -10.3 -37.7 8.3 7.4 14.4 18.6 30.5 161 2.0 2.5 +04060300.FWD 171 2.75 4767 16.9 -11.1 -36.5 8.7 6.9 14.1 19.1 24.1 157 2.9 -999.0 +04053000.TOP 270 2.75 3882 15.9 -12.9 -39.3 8.7 7.1 14.8 22.4 15.3 295 3.2 3.2 +04051300.OUN 357 2.75 5740 16.8 -11.5 -40.5 8.2 7.9 12.4 15.2 20.9 131 2.7 3.6 +04051223.LMN 317 2.75 4076 15.9 -10.5 -40.3 7.4 8.1 21.9 22.7 30.4 304 2.3 2.4 +04051100.DNR 1625 2.75 3995 10.6 -12.9 -41.1 9.2 7.8 18.2 28.3 16.6 379 3.4 1.5 +04050600.WAL 12 2.75 1861 9.3 -21.3 -47.5 7.2 7.4 21.3 20.2 28.3 239 1.5 1.4 +04040500.CRP 13 2.75 2478 14.9 -12.1 -39.1 6.7 7.3 7.0 22.4 20.6 184 1.5 0.6 +04032800.OUN 357 2.75 2904 12.6 -15.9 -44.3 7.8 7.8 16.4 23.3 31.1 315 2.5 2.8 +04032718.DDC 790 2.75 4133 13.2 -17.3 -42.1 8.0 6.9 14.4 24.6 26.6 143 4.4 2.3 +03100600.AMA 1099 2.75 2542 12.2 -10.3 -39.3 6.4 7.8 12.9 24.1 30.2 50 1.2 2.5 +03091100.MAF 872 2.75 2808 13.3 -6.5 -32.5 6.8 6.9 7.4 10.3 9.0 80 0.4 1.4 +03091000.DDC 790 2.75 3620 14.8 -7.7 -34.7 7.5 7.2 11.3 12.1 15.8 233 0.8 3.0 +03061400.AMA 1099 2.75 3153 12.3 -13.3 -39.3 8.3 7.1 13.7 21.7 24.7 35 2.2 2.1 +03060500.AMA 1099 2.75 2647 11.9 -11.9 -36.9 7.6 6.8 13.1 23.0 28.5 167 1.5 2.1 +03051700.SHV 79 2.75 3995 16.3 -10.9 -37.3 7.4 7.2 19.6 23.2 13.9 242 2.4 2.7 +03051600.AMA 1099 2.75 3706 14.1 -10.3 -37.5 8.9 7.4 34.9 42.9 37.7 632 3.0 -999.0 +03051400.SHV 79 2.75 3920 16.7 -9.5 -38.5 7.2 7.8 19.3 27.2 37.0 389 2.3 0.8 +03051000.OUN 357 2.75 5328 16.8 -11.1 -38.1 8.3 7.3 16.8 27.5 34.8 182 4.3 3.6 +03050700.FWD 171 2.75 5303 17.8 -9.7 -37.7 7.1 7.5 8.4 30.4 36.2 126 3.2 3.5 +03050618.SGF 387 2.75 5492 15.6 -14.7 -43.9 7.7 8.0 17.8 32.0 40.6 313 5.5 2.8 +03050100.TOP 270 2.75 3922 13.0 -14.1 -43.5 7.8 8.1 13.9 17.2 19.6 117 2.3 2.7 +03042900.SGF 387 2.75 3399 13.1 -16.7 -43.3 8.5 7.3 4.8 5.0 19.6 53 1.1 2.8 +03042600.BMX 178 2.75 3921 14.2 -13.3 -41.1 6.2 7.6 26.6 35.8 33.5 89 2.8 2.7 +03042500.LZK 78 2.75 3423 13.8 -15.7 -43.1 7.6 7.6 20.0 20.9 31.0 212 2.8 3.3 +03040618.LZK 78 2.75 2556 13.1 -15.9 -41.3 7.6 7.0 28.4 35.1 38.9 600 2.6 3.1 +03031300.SHV 79 2.75 2901 13.5 -15.3 -43.1 7.1 7.7 11.0 17.1 24.1 162 1.7 2.0 +02081200.LBF 849 2.75 3735 13.3 -9.9 -37.1 8.7 7.3 10.5 13.1 11.8 222 1.3 2.1 +02072700.TOP 270 2.75 6406 19.3 -5.3 -32.5 6.9 7.1 9.1 18.2 19.3 131 1.4 2.6 +02072000.TOP 270 2.75 4986 17.5 -7.5 -32.9 7.3 6.8 8.5 10.0 12.7 197 0.9 2.7 +02062500.ABR 396 2.75 4208 15.1 -7.1 -37.7 6.8 8.2 11.1 19.1 19.3 20 1.3 3.1 +02062400.BIS 506 2.75 3559 16.0 -9.7 -34.1 6.8 6.6 25.2 28.0 24.8 298 2.1 2.4 +02061300.AMA 1099 2.75 3027 13.7 -8.5 -31.9 8.4 6.3 18.7 29.6 33.0 65 1.9 2.5 +02060500.AMA 1099 2.75 2947 13.2 -11.5 -38.3 7.6 7.3 17.9 32.1 45.0 309 2.2 2.7 +02052400.AMA 1099 2.75 4729 13.8 -13.3 -39.9 8.3 7.2 18.5 28.8 21.8 258 4.5 2.3 +02051800.DRT 313 2.75 5077 16.0 -10.5 -37.1 8.1 7.2 5.2 8.8 6.3 15 1.2 2.6 +01112418.BMX 178 2.75 2902 15.1 -11.3 -39.7 6.1 7.7 22.2 26.9 31.9 328 1.7 0.8 +01072500.GGW 700 2.75 1714 11.5 -11.3 -36.3 6.9 6.8 18.2 26.7 32.1 350 1.0 2.2 +01071900.BIS 506 2.75 5738 17.8 -9.9 -36.1 8.6 7.1 14.1 21.8 28.8 183 3.4 2.9 +01071900.ABR 396 2.75 5356 17.5 -10.5 -35.1 8.8 6.6 3.4 18.1 22.7 35 2.9 2.7 +01071800.INL 361 2.75 4580 17.0 -12.9 -37.7 7.8 6.7 11.8 11.9 12.8 154 1.8 0.8 +01070100.RAP 1029 2.75 3235 14.3 -10.7 -35.7 7.7 6.8 12.9 30.8 40.7 114 2.3 2.6 +01061900.MPX 287 2.75 5114 15.6 -11.9 -39.3 9.2 7.5 19.0 33.1 31.9 154 4.9 3.4 +01061700.TOP 270 2.75 4594 15.7 -13.7 -41.9 8.5 7.8 15.7 22.1 26.6 214 3.8 3.4 +01061700.LMN 317 2.75 4093 14.1 -10.7 -37.9 8.0 7.3 9.3 19.4 26.9 195 2.2 3.5 +01061400.OAX 350 2.75 4956 17.2 -11.3 -38.5 9.0 7.4 18.5 20.4 25.5 153 3.3 3.8 +01061000.ABR 396 2.75 3453 13.8 -12.1 -39.9 7.8 7.5 16.6 24.6 32.3 158 2.6 3.6 +01060800.DNR 1625 2.75 3440 13.9 -8.7 -36.7 7.2 7.6 7.4 25.3 21.9 -26 1.8 3.1 +01060600.AMA 1099 2.75 4665 14.9 -8.9 -36.7 7.2 7.5 11.9 15.8 15.6 191 1.5 2.3 +01052500.FFC 244 2.75 2338 11.7 -14.5 -43.1 6.4 7.9 19.6 18.1 21.4 240 1.1 2.5 +01050620.LMN 317 2.75 4496 15.4 -16.1 -43.1 7.3 7.5 7.3 11.5 20.9 60 2.0 3.1 +01042100.OAX 350 2.75 3283 12.4 -15.3 -43.1 7.7 7.7 23.5 28.1 32.7 282 3.1 2.4 +01040400.LZK 78 2.75 4223 15.2 -15.1 -42.1 8.5 7.4 11.9 18.1 24.8 105 3.2 3.1 +00121618.BMX 178 2.75 2219 13.2 -14.1 -42.7 6.7 7.9 25.0 32.9 45.8 266 1.8 0.9 +00072700.OAX 350 2.75 5048 18.5 -9.7 -35.3 8.0 6.9 16.7 21.8 23.2 215 2.8 2.6 +00072500.LBF 849 2.75 5901 17.1 -8.9 -38.1 8.5 7.8 22.2 24.5 29.4 162 3.5 2.9 +00072100.LBF 849 2.75 3073 15.3 -11.3 -37.5 7.8 7.1 16.9 26.5 39.4 223 2.3 2.0 +00071700.MHX 11 2.75 2929 15.1 -12.3 -36.1 7.2 6.4 7.9 18.2 29.9 81 1.5 2.3 +00071000.LBF 849 2.75 5871 18.1 -5.5 -32.5 7.8 7.2 10.7 14.3 19.9 146 1.2 3.5 +00071000.GGW 700 2.75 3180 15.6 -10.9 -35.1 7.0 6.5 23.2 18.4 13.5 248 1.5 2.6 +00062000.LBF 849 2.75 4028 14.9 -8.5 -37.9 6.8 7.9 11.9 18.8 23.9 96 1.4 3.0 +00061400.AMA 1099 2.75 5758 16.5 -4.9 -34.9 7.6 7.9 19.9 23.8 32.0 244 1.8 2.5 +00061200.BIS 506 2.75 2000 11.3 -13.1 -39.9 7.5 7.4 10.2 22.0 28.0 306 1.2 2.5 +00052700.OUN 357 2.75 5870 18.3 -10.1 -37.9 8.4 7.5 12.8 21.5 32.8 117 3.5 4.0 +00051300.DTX 329 2.75 4524 16.9 -8.5 -37.3 7.7 7.7 20.2 24.1 18.5 328 2.3 2.4 +00022500.AMA 1099 2.75 3614 10.3 -18.5 -46.1 8.5 7.7 13.1 26.8 48.5 107 4.0 1.7 +98071100.DDC 790 2.50 4323 18.9 -4.3 -29.9 6.2 6.8 16.0 12.7 15.2 230 0.6 0.6 +96072200.LBF 847 2.50 4756 18.4 -6.5 -34.7 7.2 7.5 19.0 20.0 29.4 94 1.4 2.1 +96071900.GRB 210 2.50 4746 20.7 -7.5 -31.3 6.4 6.3 20.0 26.3 26.2 164 1.9 0.7 +96062100.DEN 1611 2.50 5603 15.2 -8.1 -36.1 9.6 7.6 8.8 27.5 33.4 155 3.8 2.2 +96061200.LBF 847 2.50 2310 11.7 -9.9 -37.5 7.5 7.4 12.7 16.7 22.2 122 0.8 2.4 +96060300.AMA 1095 2.50 2356 11.0 -10.5 -39.7 6.9 7.9 18.0 27.6 31.6 256 1.2 2.0 +96060100.DDC 791 2.50 2888 13.3 -10.9 -38.5 8.3 7.4 13.9 13.3 19.3 111 1.1 2.5 +96051800.MPX 287 2.50 4406 16.3 -8.9 -38.5 8.2 8.0 20.7 13.0 23.4 259 1.4 3.4 +96042200.FTD 196 2.50 1872 12.0 -12.6 -38.7 8.2 7.1 18.3 27.1 34.0 298 1.5 -999.0 +96030700.TLH 26 2.50 2615 15.4 -10.4 -39.0 6.0 7.7 20.7 20.9 23.7 320 1.1 0.6 +95081212.MPX 287 2.50 3361 19.1 -6.3 -31.3 7.2 6.7 23.0 20.6 36.8 164 1.0 -999.0 +95061600.TFX 1130 2.50 3142 13.0 -12.0 -37.7 8.4 7.0 23.8 27.7 35.6 277 2.7 2.3 +95060700.DEN 1611 2.50 3137 12.3 -10.8 -35.7 9.2 6.8 20.7 37.2 35.9 284 2.4 2.0 +95052912.MAF 873 2.50 1617 13.0 -11.3 -37.2 7.5 7.0 13.7 27.6 22.0 284 1.1 1.9 +95051900.GSO 277 2.50 1758 13.4 -11.8 -35.2 7.9 6.3 23.6 25.3 27.1 83 1.3 -999.0 +95051600.MAF 873 2.50 3261 13.6 -7.8 -34.0 8.4 7.1 10.3 21.7 28.8 134 1.5 1.8 +95050900.TOP 268 2.50 1495 10.0 -19.3 -39.2 6.9 5.6 21.2 19.3 22.8 126 1.0 1.2 +95050800.LCH 5 2.50 3259 17.9 -9.9 -35.6 7.1 6.9 10.2 16.7 31.1 119 1.2 0.6 +95050800.FTD 196 2.50 2700 16.5 -10.4 -38.9 7.7 7.7 24.5 30.8 30.8 407 1.9 0.8 +94062600.TOP 268 2.50 4265 16.4 -8.6 -35.2 8.4 7.1 21.6 25.2 45.9 418 2.5 2.9 +94032800.AHN 246 2.50 2627 14.4 -10.5 -35.7 6.2 6.8 30.4 34.5 24.7 518 1.5 0.7 +93070300.TOP 270 2.50 4019 18.5 -7.2 -31.5 7.1 6.5 15.2 15.8 16.4 202 1.0 0.7 +93070200.HON 392 2.50 2619 14.6 -11.3 -39.6 7.0 7.7 12.6 28.3 40.3 143 1.8 0.8 +93061400.TOP 270 2.50 4195 16.5 -8.5 -35.1 7.7 7.1 10.7 12.5 17.8 65 1.1 2.8 +93033000.DRT 314 2.50 2680 12.7 -13.4 -39.4 8.2 7.1 26.0 39.6 44.0 411 2.4 2.8 +92070200.DEN 1611 2.50 2313 11.7 -11.2 -35.2 8.0 6.5 20.0 27.6 29.9 362 1.6 2.5 +92041600.AMA 1095 2.50 3362 11.1 -13.4 -40.9 7.6 7.5 12.0 16.0 17.8 127 1.5 1.7 +92030400.SEP 399 2.50 2676 12.7 -15.3 -44.8 7.7 8.1 9.2 20.1 27.2 133 1.9 2.3 +91080200.CAR 191 2.50 1891 12.3 -13.7 -41.6 6.3 7.6 11.9 19.6 33.3 223 0.9 1.8 +91071800.STC 315 2.50 4956 18.2 -8.7 -32.0 7.3 6.3 21.9 18.7 20.1 104 1.9 2.5 +91053100.DEN 1611 2.50 3551 12.0 -12.1 -39.1 9.5 7.4 10.7 27.3 45.8 149 3.1 1.9 +91052700.LBF 847 2.50 2669 11.9 -13.4 -38.4 7.9 6.8 13.0 13.9 32.3 35 1.1 2.1 +91051200.AMA 1095 2.50 4539 14.3 -10.8 -37.8 8.5 7.3 16.7 12.4 14.9 208 1.7 2.3 +91050800.MAF 873 2.50 3415 11.2 -14.8 -41.4 8.4 7.3 25.4 31.1 36.7 280 3.1 1.6 +91042100.AYS 44 2.50 2563 11.8 -16.9 -41.9 7.4 6.9 10.3 13.4 30.0 76 1.2 1.7 +91041900.SEP 399 2.50 5996 17.6 -13.2 -38.3 7.4 6.8 13.0 13.5 44.8 24 2.6 3.1 +90083100.CHS 13 2.50 2477 16.0 -8.5 -33.3 6.5 6.6 8.3 17.0 17.7 67 0.8 0.6 +90070200.GSO 277 2.50 3963 14.8 -10.0 -35.9 7.2 7.0 10.7 26.0 16.3 100 2.4 2.2 +90062200.ALB 86 2.50 1833 12.6 -14.1 -41.8 6.7 7.6 20.6 32.5 29.1 203 1.4 1.6 +90061500.DDC 791 2.50 4667 16.0 -6.5 -35.9 7.9 7.8 15.7 28.4 30.1 306 2.1 2.7 +90060700.DEN 1611 2.50 2393 10.9 -8.2 -36.5 9.0 7.6 19.6 26.3 23.9 170 1.2 1.6 +90060300.PAH 126 2.50 3663 17.8 -7.6 -36.2 7.0 7.6 29.8 24.0 25.9 367 1.5 0.6 +08110600.OUN 357 2.50 1623 11.4 -12.5 -39.9 6.9 7.5 24.8 29.8 32.7 317 1.0 2.4 +06071123.LMN 317 2.50 2996 16.5 -5.9 -29.5 6.7 6.2 9.4 12.6 11.2 110 0.5 0.6 +06062500.DNR 1625 2.50 987 7.1 -11.5 -38.9 8.9 7.4 12.5 26.1 26.5 -172 0.7 0.9 +06061400.RAP 1029 2.50 2691 11.5 -7.7 -35.5 8.3 7.5 15.3 17.3 24.5 248 0.8 1.6 +06052600.SGF 387 2.50 3409 13.9 -9.5 -39.1 6.5 8.0 18.8 18.9 23.2 262 1.3 2.5 +06050900.JAN 101 2.50 3303 16.1 -13.3 -38.7 7.3 6.9 14.9 28.4 39.9 170 2.8 1.9 +05050700.MAF 872 2.50 3257 10.7 -12.3 -41.3 8.0 7.9 11.2 20.3 24.6 48 1.7 1.6 +05050322.XMR 3 2.50 2165 13.4 -13.9 -38.9 7.6 6.8 21.5 23.3 41.5 82 1.7 1.2 +04102400.JAN 101 2.50 1938 15.8 -6.9 -33.5 5.3 7.1 19.3 30.8 27.8 328 0.6 0.6 +04091500.LBF 849 2.50 1474 12.8 -10.7 -38.3 8.0 7.4 20.5 35.4 39.8 306 1.0 -999.0 +04080700.ABR 396 2.50 2792 13.1 -9.3 -36.7 6.7 7.4 12.1 21.0 25.9 240 1.1 2.5 +04040400.EPZ 1252 2.50 4482 12.1 -17.9 -46.3 8.2 7.9 11.6 29.1 25.4 203 5.1 2.1 +04032718.OUN 357 2.50 2825 12.6 -14.9 -42.3 7.3 7.6 11.5 21.1 32.3 199 2.0 2.1 +03062200.RAP 1029 2.50 3380 10.6 -13.7 -39.5 8.0 7.1 18.7 27.5 42.2 189 2.6 1.5 +03051500.SHV 79 2.50 4260 16.8 -9.9 -36.1 6.8 7.1 16.3 33.7 42.9 246 2.5 0.8 +02072500.ABR 396 2.50 3995 15.0 -11.5 -38.9 7.9 7.5 13.8 28.3 28.6 207 3.2 3.0 +02051700.AMA 1099 2.50 5036 13.8 -12.7 -40.5 8.7 7.6 17.4 21.9 26.5 216 3.9 2.2 +02041900.DVN 229 2.50 2861 12.3 -14.5 -39.9 8.2 7.0 15.9 14.1 20.0 213 1.4 2.5 +02041212.AMA 1099 2.50 2907 12.2 -13.7 -42.7 7.5 7.9 14.6 20.4 25.1 184 1.8 2.8 +02040300.JAX 9 2.50 3327 14.8 -14.3 -41.7 7.2 7.4 11.8 11.5 30.9 80 1.3 1.5 +01101000.DDC 790 2.50 3299 12.9 -9.7 -40.3 6.4 8.3 16.4 18.8 18.3 275 1.2 2.5 +01082400.AMA 1099 2.50 4318 15.4 -6.7 -34.3 7.4 7.4 21.0 24.0 28.1 158 1.7 2.8 +01070500.LBF 849 2.50 3571 14.5 -7.7 -36.3 7.7 7.6 17.1 26.0 27.0 313 1.8 2.9 +01070400.RAP 1029 2.50 3145 13.2 -11.1 -37.9 8.3 7.3 12.9 25.2 26.1 144 2.3 2.6 +01052620.LMN 317 2.50 4355 14.1 -13.5 -40.9 6.4 7.5 20.2 27.3 33.2 233 3.3 2.9 +01052500.BMX 178 2.50 2388 11.9 -14.9 -43.1 6.7 7.7 23.5 29.2 27.4 436 1.8 2.7 +01050400.MAF 872 2.50 3866 13.7 -11.3 -36.7 7.2 6.9 11.4 12.8 33.8 101 1.3 2.7 +01050100.OAX 350 2.50 2265 10.4 -16.9 -44.5 7.7 7.7 19.2 17.4 17.0 226 1.3 2.2 +01042200.DDC 790 2.50 3749 13.3 -12.1 -41.1 7.3 7.9 24.2 33.4 45.3 510 2.8 2.7 +01041700.MAF 872 2.50 4552 13.9 -12.1 -39.1 7.5 7.3 8.0 16.2 30.6 100 2.2 2.2 +00091100.MPX 287 2.50 4554 16.6 -10.3 -39.5 7.0 7.9 18.4 22.0 24.0 271 2.4 3.2 +00080500.BIS 506 2.50 4830 17.0 -8.7 -35.1 6.9 7.2 4.0 17.2 22.9 86 1.6 3.3 +00070600.LBF 849 2.50 5506 18.2 -7.1 -32.3 8.3 6.6 11.8 25.3 35.5 155 2.6 3.5 +00070200.ABR 396 2.50 5952 17.8 -10.3 -38.1 8.4 7.5 8.1 12.2 23.4 147 2.0 3.9 +00062400.OAX 350 2.50 4783 17.5 -8.7 -35.5 7.2 7.2 14.9 18.7 28.2 195 1.8 2.3 +00061000.RAP 966 2.50 3610 13.2 -8.1 -37.9 7.8 8.0 11.9 14.3 21.1 70 1.0 2.1 +00052300.MHX 11 2.50 3613 15.1 -13.5 -41.7 6.5 7.7 10.5 15.3 26.5 79 1.6 2.4 +00051200.DVN 229 2.50 4865 15.6 -8.1 -39.3 7.4 8.4 19.3 24.8 24.9 225 2.3 3.4 +00050100.FWD 196 2.50 3593 14.3 -13.1 -41.5 7.2 7.8 19.0 17.3 18.5 401 1.9 1.7 +00032700.SGF 387 2.50 1766 9.8 -18.3 -45.1 7.5 7.4 21.4 34.3 43.9 350 1.7 2.2 +00021400.LZK 165 2.50 2091 10.7 -20.3 -45.7 6.4 7.1 22.2 21.1 24.5 245 1.5 2.1 +00061300.OAX 350 2.25 5453 17.7 -11.5 -38.7 8.5 7.3 12.9 15.8 19.3 206 2.7 4.0 +99053100.TOP 270 2.00 2215 13.1 -10.9 -39.7 6.8 7.8 14.7 18.6 12.2 189 1.0 1.4 +99050400.DRT 307 2.00 5609 17.4 -10.1 -40.7 7.5 8.3 21.2 40.5 38.9 342 3.7 4.6 +98063000.BUF 215 2.00 2615 14.5 -10.5 -38.3 6.1 7.5 8.5 23.6 28.2 86 1.3 1.7 +98062500.APX 448 2.00 3453 15.8 -11.3 -34.3 7.3 6.2 21.9 28.9 35.4 348 2.5 3.3 +98033100.FWD 196 2.00 2873 13.3 -14.3 -40.7 7.2 7.2 17.6 29.6 57.5 93 2.5 2.9 +90091400.STC 315 2.00 2123 13.1 -10.9 -38.5 7.4 7.5 23.2 27.8 39.0 564 1.4 -999.0 +90072600.TBW 13 2.00 4330 18.4 -6.3 -31.8 5.7 6.8 6.3 3.5 8.5 7 0.4 0.6 +90061400.PIA 200 2.00 3570 18.1 -7.0 -32.9 7.0 6.9 9.5 16.5 23.4 134 0.9 0.6 +90060900.PIT 360 2.00 4095 16.7 -9.5 -35.8 6.7 7.0 18.8 18.1 13.6 236 1.5 1.0 +89103000.OUN 357 2.00 2163 12.5 -14.7 -42.6 6.6 7.6 13.1 18.0 18.1 195 1.1 1.6 +89082100.LBF 847 2.00 3307 14.8 -9.1 -35.7 7.1 7.1 8.0 28.0 44.7 83 1.9 3.0 +89071100.HON 392 2.00 3126 15.7 -7.0 -31.9 6.9 6.6 12.3 14.6 18.6 151 0.7 1.2 +89052800.ELP 1199 2.00 2569 11.2 -6.8 -34.2 8.0 7.3 14.9 11.3 17.1 232 0.4 1.4 +06090100.DDC 790 2.00 1972 12.2 -7.7 -34.9 7.1 7.2 13.9 15.6 27.4 363 0.5 1.6 +06062700.ILX 178 2.00 2025 12.2 -15.7 -43.1 6.4 7.6 5.2 3.5 11.7 15 0.4 1.2 +06061400.TFX 1131 2.00 2827 12.3 -9.7 -36.9 8.1 7.3 14.3 15.9 28.9 65 1.0 2.1 +06052400.DDC 790 2.00 1607 10.2 -8.7 -36.9 7.6 7.6 17.0 22.4 19.3 189 0.6 1.8 +06051600.MFL 5 2.00 2473 15.8 -11.1 -35.3 6.8 6.6 18.7 26.6 21.2 227 1.6 0.6 +06050800.DDC 790 2.00 1674 9.5 -17.1 -43.7 8.9 7.4 16.1 16.8 27.8 248 1.1 2.6 +06041600.TOP 270 2.00 2191 12.2 -12.9 -37.7 8.2 6.7 28.5 37.2 42.6 533 1.8 2.9 +06040700.TOP 270 2.00 2249 11.0 -15.1 -41.9 7.4 7.4 15.8 35.7 27.3 206 1.8 2.1 +05050900.LMN 317 2.00 2971 12.0 -16.1 -42.3 7.8 7.2 15.9 15.1 29.6 290 1.6 2.2 +05050700.LBF 849 2.00 3058 9.7 -14.3 -42.7 8.2 7.9 6.1 12.5 21.7 135 1.2 1.4 +05022100.SGF 387 2.00 1128 9.1 -18.9 -48.7 6.8 8.3 17.1 27.7 36.6 97 1.0 1.9 +04091200.GRB 214 2.00 2256 12.3 -14.9 -39.7 7.2 6.8 11.6 14.7 24.8 64 1.0 1.0 +04082400.BIS 506 2.00 2596 13.4 -11.1 -36.5 7.6 6.9 16.4 21.3 22.3 208 1.5 2.2 +04072300.TOP 270 2.00 3276 16.0 -7.7 -31.5 6.4 6.3 11.4 15.8 19.6 158 0.8 0.7 +04062400.GRB 214 2.00 1604 10.4 -16.9 -45.3 6.3 7.9 16.4 25.3 36.9 128 1.1 2.4 +04052200.DDC 790 2.00 3809 13.5 -9.7 -37.9 8.1 7.6 20.3 21.0 27.0 297 2.0 2.2 +04043000.JAN 101 2.00 1469 13.6 -12.7 -38.7 6.5 7.0 18.1 27.4 22.8 184 1.1 0.6 +03051900.TBW 13 2.00 3797 17.1 -10.9 -35.3 6.8 6.6 4.0 5.9 5.0 -4 0.6 1.0 +02062600.MPX 287 2.00 6228 19.6 -9.7 -37.1 7.1 7.4 9.2 18.6 21.8 120 2.6 3.2 +02061300.DVN 229 2.00 3501 17.3 -11.9 -35.7 7.4 6.5 10.0 26.3 38.7 100 2.6 1.1 +02052800.LZK 78 2.00 3284 15.1 -12.3 -37.7 6.5 6.9 2.6 4.4 12.3 13 0.6 0.6 +02041800.OAX 350 2.00 2113 11.4 -14.5 -43.5 7.6 8.0 24.0 33.9 35.5 376 1.7 2.2 +01101000.OUN 357 2.00 3485 15.6 -12.9 -39.9 7.9 7.3 23.9 24.4 28.2 447 2.8 2.5 +01090800.TOP 270 2.00 4174 17.8 -11.3 -34.9 8.1 6.4 24.5 26.2 26.7 274 3.2 1.7 +01090800.OUN 357 2.00 4351 17.6 -8.7 -33.7 7.8 6.7 21.8 26.1 21.2 151 2.5 2.3 +01082400.DDC 790 2.00 4283 16.4 -7.5 -33.9 7.7 7.0 11.9 14.7 16.3 77 1.2 3.1 +01082300.TOP 270 2.00 4361 16.7 -9.7 -33.7 7.6 6.5 13.6 9.9 23.0 192 1.0 2.3 +01072000.RAP 1029 2.00 4486 15.1 -8.7 -35.5 8.4 7.2 10.9 15.4 26.3 71 1.6 2.4 +01071300.GGW 700 2.00 3042 14.5 -10.1 -36.3 8.1 7.1 7.9 16.5 34.2 19 1.3 3.5 +01063000.FWD 171 2.00 4122 16.8 -9.7 -36.7 6.9 7.3 9.2 11.2 19.2 133 1.0 1.6 +01062100.DNR 1625 2.00 2544 10.8 -11.5 -39.3 7.5 7.5 20.5 21.4 23.2 192 1.2 2.1 +01053100.LCH 10 2.00 3988 17.4 -8.3 -37.7 7.0 7.9 0.8 8.3 13.9 8 0.6 2.4 +01053100.FWD 171 2.00 4571 15.8 -12.3 -40.5 8.7 7.7 13.7 12.4 20.6 106 2.0 3.9 +01053000.DDC 790 2.00 2892 15.2 -12.1 -35.1 8.0 6.2 14.8 19.5 26.6 388 1.8 1.8 +01052800.OUN 357 2.00 4910 16.5 -10.7 -40.3 7.6 8.0 16.9 29.7 38.8 113 3.5 3.1 +01052700.DDC 790 2.00 2853 11.3 -12.1 -40.1 6.7 7.6 19.3 30.6 37.1 184 1.7 1.8 +01051200.OUN 357 2.00 3098 13.2 -13.9 -40.5 7.1 7.3 8.7 10.0 10.8 132 1.0 2.1 +01050702.LZK 78 2.00 2759 14.2 -12.9 -40.5 5.9 7.5 7.3 18.7 26.3 77 1.3 2.0 +01050700.SGF 387 2.00 4025 14.5 -13.7 -42.3 6.1 7.9 10.5 8.8 17.0 202 1.0 3.1 +01050600.FWD 171 2.00 3092 15.4 -12.7 -38.7 6.8 7.1 19.4 32.7 34.4 170 2.3 2.1 +01042200.MAF 872 2.00 4543 13.7 -12.3 -39.7 8.4 7.5 12.3 27.4 36.2 164 4.1 2.2 +01042200.AMA 1099 2.00 6059 14.1 -15.3 -41.1 9.2 5.4 16.6 35.7 38.3 320 7.4 3.3 +00072300.LBF 849 2.00 2926 13.2 -11.5 -38.1 7.1 7.2 13.6 25.2 27.3 91 1.9 2.8 +00071500.BIS 506 2.00 5132 16.5 -9.5 -35.1 8.1 6.9 14.6 27.6 34.1 152 3.4 2.7 +00071100.GGW 700 2.00 3230 14.2 -11.3 -38.9 6.9 7.5 16.9 30.1 48.1 88 2.2 3.0 +00061500.JAX 9 2.00 4801 17.9 -8.7 -34.3 6.4 6.9 3.6 6.2 13.3 55 0.6 1.1 +00061300.LBF 849 2.00 4790 13.9 -9.9 -37.9 8.3 7.5 9.9 16.6 18.6 159 2.1 2.0 +00061200.AMA 1099 2.00 5720 16.8 -10.3 -34.7 8.3 6.6 15.7 16.1 28.7 88 2.6 2.7 +00032800.JAX 9 2.00 2135 12.5 -14.5 -43.3 6.3 7.9 25.7 29.1 24.7 268 1.6 0.9 +00031600.LMN 317 2.00 1478 9.5 -17.3 -45.5 7.1 7.8 12.9 22.1 10.9 164 1.0 2.2 +00030300.FWD 196 2.00 2589 12.3 -14.3 -41.7 6.2 7.5 20.2 33.4 29.1 239 1.8 2.7 +98062500.FFC 244 1.75 3224 15.8 -8.9 -34.3 7.3 6.8 5.6 4.2 9.9 54 0.5 0.6 +97100900.OUN 357 1.75 3628 16.5 -7.5 -35.9 6.0 7.5 16.6 20.0 29.9 205 1.1 0.8 +94071700.HAT 4 1.75 2973 16.5 -6.0 -31.3 5.7 6.7 4.4 5.9 3.1 33 0.2 0.6 +94071700.1M1 172 1.75 3339 17.7 -6.4 -31.8 5.8 6.7 19.1 12.5 11.3 164 0.5 0.6 +94070100.1M1 172 1.75 4820 18.6 -8.1 -33.0 6.1 6.7 12.6 20.0 18.5 342 1.5 1.0 +94062600.PBI 6 1.75 4199 17.7 -9.1 -34.2 6.6 6.7 5.2 4.9 6.6 10 0.6 1.8 +92051500.1M1 172 1.75 2877 13.3 -11.3 -39.9 6.4 7.8 7.9 11.4 16.3 54 0.7 1.5 +91060600.RAP 966 1.75 2001 13.1 -11.5 -36.7 7.1 6.8 11.9 13.2 19.7 170 0.7 1.4 +91060600.JAN 91 1.75 3344 16.3 -9.1 -33.5 6.8 6.5 3.1 9.5 9.6 12 0.6 0.6 +91053100.AHN 246 1.75 3505 16.3 -6.9 -32.1 5.9 6.7 3.2 3.9 4.1 15 0.3 0.6 +91051700.GGG 124 1.75 5081 18.4 -10.4 -36.4 7.5 7.0 10.5 7.9 11.2 157 1.0 0.9 +91051300.HON 392 1.75 3615 14.7 -9.5 -38.2 7.2 7.7 13.0 14.2 22.7 97 1.1 2.8 +91051300.BIS 504 1.75 1867 13.8 -11.5 -36.7 6.8 6.8 15.8 26.9 19.8 -79 1.3 0.7 +91032700.DAY 298 1.75 1310 10.7 -13.1 -42.1 6.4 7.9 24.3 30.2 30.6 531 0.8 1.8 +90091100.AHN 246 1.75 2857 15.1 -8.6 -34.0 5.9 6.8 6.3 7.9 7.6 80 0.4 0.6 +90090200.MAF 873 1.75 3597 14.9 -6.2 -32.1 6.8 6.8 7.5 17.2 18.3 58 0.8 2.5 +90082600.HON 392 1.75 5529 17.9 -11.5 -38.5 9.1 7.4 9.9 14.7 28.6 156 2.7 -999.0 +90082600.BIS 504 1.75 3187 13.7 -13.2 -42.0 8.6 7.9 13.2 22.2 23.1 190 2.6 2.5 +90082400.OVN 400 1.75 5016 18.7 -7.4 -31.7 6.8 6.5 9.4 7.4 14.7 100 0.6 0.7 +90082100.AMA 1095 1.75 2833 14.6 -5.7 -30.1 6.6 6.5 10.6 11.7 11.3 75 0.4 1.2 +90081500.DDC 791 1.75 3012 15.1 -6.6 -32.5 5.6 6.9 9.9 9.0 15.8 59 0.3 0.6 +90081000.AHN 246 1.75 2234 14.9 -9.4 -35.2 6.2 6.9 6.4 13.3 26.7 33 0.6 0.8 +90080200.LCH 5 1.75 3223 18.4 -7.3 -32.2 6.4 6.6 3.1 6.5 2.0 14 0.3 0.6 +90073100.GGG 124 1.75 3254 16.1 -7.5 -31.9 6.4 6.5 1.2 7.9 5.4 3 0.4 0.6 +90072700.AMA 1095 1.75 3104 14.3 -5.8 -31.4 7.3 6.8 11.1 7.7 7.9 117 0.3 2.2 +90072600.OUN 357 1.75 3546 16.6 -6.8 -32.6 6.2 6.8 11.1 10.8 14.7 206 0.5 0.7 +90072100.ABQ 1619 1.75 1327 10.9 -5.9 -28.5 8.3 6.1 9.8 7.9 14.5 145 0.1 1.3 +90071800.LBF 847 1.75 3138 12.3 -7.7 -36.8 8.2 7.8 10.0 17.7 16.6 115 1.0 1.6 +90071700.FNT 236 1.75 1393 11.9 -12.5 -40.9 6.5 7.7 13.2 15.5 25.3 176 0.5 0.6 +90071400.ABQ 1619 1.75 1588 10.4 -9.4 -32.2 8.7 6.2 4.4 18.9 32.6 70 0.6 1.2 +90071300.CRP 12 1.75 1658 13.3 -6.5 -31.6 6.5 6.7 14.6 12.8 9.3 121 0.3 0.6 +90071100.CKL 145 1.75 2544 15.4 -8.1 -32.3 6.4 6.4 2.1 5.1 4.6 9 0.3 0.6 +90070900.GRB 210 1.75 2962 16.9 -6.5 -31.5 6.5 6.6 12.1 18.2 22.7 82 0.7 0.6 +90070500.LCH 5 1.75 3315 17.6 -8.5 -32.0 6.6 6.3 11.6 15.3 2.5 58 0.9 0.6 +90061800.PIA 200 1.75 4567 19.5 -8.1 -33.4 7.4 6.7 14.1 17.0 25.7 94 1.5 1.0 +90061300.STC 315 1.75 2789 16.2 -10.4 -33.4 7.2 6.2 14.2 36.6 42.0 139 1.8 0.7 +90061100.CHS 13 1.75 4050 17.7 -8.1 -33.2 6.6 6.7 6.4 8.1 19.1 102 0.6 0.6 +90061000.OUN 357 1.75 3242 15.1 -8.5 -33.0 7.8 6.6 10.9 10.1 1.3 21 0.7 2.5 +90061000.IAD 85 1.75 2818 14.9 -9.2 -34.3 6.5 6.7 18.0 16.4 19.3 175 0.9 0.6 +90052800.SIL 8 1.75 3916 18.0 -10.0 -34.5 6.8 6.6 10.4 19.3 10.6 48 1.7 0.8 +90052300.HON 392 1.75 1984 10.9 -14.0 -42.8 7.2 7.9 15.0 22.3 33.6 107 1.2 2.4 +90052100.UMN 438 1.75 3661 14.8 -13.1 -43.5 7.6 8.3 15.3 15.4 23.7 181 1.8 3.4 +90052100.HAT 4 1.75 2891 15.8 -9.7 -37.4 5.6 7.5 12.4 13.8 19.5 182 0.7 0.6 +90051900.SEP 399 1.75 3246 17.0 -9.1 -34.7 6.6 6.8 15.6 20.9 27.2 387 1.3 0.6 +90051600.IAD 85 1.75 2004 13.4 -14.0 -39.9 7.0 7.1 12.7 16.7 27.7 102 1.0 -999.0 +90051200.SEP 399 1.75 2282 13.6 -9.2 -37.7 6.9 7.7 14.5 34.8 47.4 134 1.3 -999.0 +90050600.OUN 357 1.75 836 7.6 -20.1 -41.8 7.2 6.0 5.8 18.3 48.8 30 0.6 1.4 +90042900.AYS 44 1.75 2333 13.0 -12.2 -40.9 6.2 7.8 19.1 30.6 23.2 243 1.5 2.3 +90042600.DRT 314 1.75 3699 14.6 -13.8 -39.4 8.1 7.0 11.1 25.7 33.2 101 3.4 4.3 +90042200.OUN 357 1.75 2748 11.1 -13.3 -46.8 6.6 9.3 7.3 12.2 14.9 48 0.8 2.0 +90040200.BRO 7 1.75 3494 16.2 -9.3 -36.7 7.1 7.4 15.2 25.7 37.2 65 1.9 0.9 +90031300.OUN 357 1.75 3211 12.7 -13.6 -43.5 7.8 8.2 19.4 24.2 18.1 286 2.5 2.8 +90031000.AMA 1095 1.75 2468 11.1 -16.0 -40.7 8.6 6.8 9.9 13.1 18.2 106 1.2 1.9 +90022800.MAF 873 1.75 607 9.7 -16.2 -42.9 6.6 7.4 5.1 16.4 23.8 55 0.3 1.2 +89090800.DEN 1611 1.75 1350 10.1 -6.8 -33.1 8.3 7.1 15.4 24.1 24.0 366 0.5 2.0 +89090200.1M1 172 1.75 3818 18.3 -4.8 -29.4 6.1 6.5 8.2 16.2 14.1 64 0.7 0.6 +89083100.DDC 791 1.75 2956 16.5 -5.7 -31.4 6.6 6.9 13.3 13.6 22.5 346 0.5 0.8 +89083000.OUN 357 1.75 3864 17.3 -5.6 -30.2 6.0 6.5 11.8 13.1 24.2 112 0.6 0.6 +89082900.TOP 268 1.75 4842 19.8 -6.3 -32.1 6.6 6.8 13.2 15.4 21.1 156 1.0 0.6 +89082800.UMN 438 1.75 3603 17.3 -6.1 -30.3 6.5 6.4 2.6 7.8 5.6 28 0.4 0.6 +89082700.OMA 400 1.75 3452 17.8 -6.6 -33.4 6.1 7.1 15.2 19.5 33.1 142 0.9 0.6 +89082500.RAP 966 1.75 1899 10.6 -7.1 -34.2 7.6 7.2 2.7 7.7 7.6 55 0.2 1.0 +89081300.TBW 13 1.75 2617 16.4 -8.6 -33.3 6.0 6.6 10.1 18.1 18.2 65 0.8 0.6 +89080600.UMN 438 1.75 5563 19.0 -6.9 -31.4 7.0 6.5 8.8 11.7 11.3 99 1.0 0.8 +89073000.JAN 91 1.75 3940 18.0 -7.7 -34.5 6.7 7.2 2.1 1.9 3.1 9 0.5 0.6 +89072900.HON 392 1.75 2092 14.0 -5.9 -34.4 6.0 7.6 6.4 12.0 17.9 105 0.3 0.8 +89071500.LBF 847 1.75 2675 14.3 -6.9 -33.4 6.1 7.0 5.5 6.1 8.4 27 0.3 0.6 +89071300.OUN 357 1.75 4127 19.0 -5.4 -31.1 6.9 6.8 13.0 13.8 19.1 196 0.7 -999.0 +89071300.DDC 791 1.75 3239 15.1 -4.9 -31.6 6.9 7.1 7.9 5.1 7.2 81 0.3 1.2 +89070800.PIT 360 1.75 2732 15.4 -9.1 -36.1 6.8 7.3 12.8 17.5 15.7 81 1.0 1.5 +89062800.BUF 218 1.75 2385 15.2 -8.2 -33.3 5.3 6.8 9.8 20.1 22.3 82 0.7 0.6 +89062700.PIA 200 1.75 2460 15.7 -7.9 -33.9 6.6 6.9 5.3 13.2 12.4 87 0.5 0.7 +89062600.IAD 85 1.75 3138 16.2 -8.6 -36.4 6.1 7.4 12.1 14.3 23.0 108 0.8 0.7 +89062200.AHN 246 1.75 1517 15.5 -7.6 -33.7 5.8 6.9 14.9 12.6 15.8 112 0.3 0.6 +89061900.BNA 180 1.75 1755 13.9 -10.2 -36.1 6.3 6.9 6.8 9.7 7.8 86 0.4 0.6 +89061400.GGG 124 1.75 3674 17.2 -11.0 -35.3 6.9 6.6 4.3 15.4 23.3 61 1.4 -999.0 +89060600.JAN 91 1.75 3336 16.3 -11.3 -37.4 6.7 7.0 10.4 20.8 25.3 103 1.7 0.8 +89060600.GSO 277 1.75 2078 14.8 -9.1 -34.5 5.9 6.8 10.0 8.1 6.7 93 0.3 0.6 +89060100.TOP 268 1.75 2810 15.8 -10.9 -35.3 7.9 6.6 7.9 10.6 26.9 90 0.8 -999.0 +06100400.MPX 287 1.75 3011 13.7 -12.1 -41.5 7.4 8.1 23.9 34.0 30.2 514 2.4 2.9 +06091600.DDC 790 1.75 2738 14.4 -6.9 -34.5 6.6 7.4 21.6 29.7 39.0 378 1.1 2.2 +06091400.EPZ 1252 1.75 1589 11.7 -10.3 -32.9 7.6 6.1 13.1 17.4 23.7 167 0.6 2.0 +06091100.AMA 1099 1.75 1812 12.5 -8.9 -37.1 7.1 7.6 13.7 14.9 33.3 51 0.5 2.1 +06082300.RAP 1029 1.75 1757 8.3 -9.5 -39.1 9.1 8.0 12.7 21.3 28.7 108 0.8 0.8 +06082100.ABR 396 1.75 1851 12.5 -9.9 -36.9 6.8 7.3 15.5 21.9 39.5 257 0.8 2.1 +06080900.TUS 779 1.75 1640 11.9 -4.7 -30.5 6.6 6.8 6.6 5.1 8.2 25 0.1 0.6 +06080700.TOP 270 1.75 1693 12.5 -6.7 -31.1 7.0 6.4 3.2 7.6 6.8 35 0.2 0.6 +06072600.TUS 779 1.75 1725 11.2 -5.7 -31.7 7.4 7.0 8.5 15.0 18.3 36 0.3 0.9 +06072200.LZK 78 1.75 2480 14.1 -8.1 -31.3 7.3 6.2 7.7 6.9 5.8 67 0.3 0.6 +06071900.JAN 101 1.75 2280 15.2 -6.9 -33.5 6.5 7.1 9.0 11.1 11.1 88 0.4 0.6 +06071300.DDC 790 1.75 1575 12.8 -5.9 -30.5 6.9 6.5 7.4 12.7 13.7 99 0.2 0.8 +06071200.DDC 790 1.75 1068 11.8 -8.7 -29.3 8.0 5.5 11.8 15.4 21.8 12 0.3 1.0 +06070100.BNA 210 1.75 2750 13.5 -11.5 -39.1 6.7 7.5 11.5 10.8 7.8 41 0.7 1.5 +06062900.DDC 790 1.75 919 7.7 -10.1 -38.7 7.7 7.7 1.9 17.9 17.9 16 0.3 0.8 +06062400.LBF 849 1.75 1400 10.7 -12.1 -38.5 7.4 7.2 13.6 26.6 25.0 272 0.9 2.1 +06062400.BIS 506 1.75 942 8.3 -15.3 -41.9 7.0 7.3 16.7 22.7 27.2 167 0.6 1.6 +06062100.CHS 15 1.75 4007 17.0 -10.1 -35.5 6.4 6.9 7.1 12.9 19.3 66 1.1 0.7 +06061800.FWD 171 1.75 2286 14.3 -10.9 -34.3 8.2 6.2 11.6 13.9 24.6 134 0.9 2.3 +06052700.GSO 270 1.75 2136 12.7 -9.9 -37.3 5.8 7.4 17.1 17.4 21.2 217 0.6 1.5 +06052500.TLH 53 1.75 2619 14.8 -10.5 -36.5 6.4 7.0 9.2 7.3 7.5 56 0.4 0.6 +06052300.SGF 387 1.75 3032 14.4 -11.9 -37.7 7.1 7.0 8.3 9.0 15.5 91 0.7 1.6 +06051800.ILX 178 1.75 713 8.0 -17.5 -46.5 6.9 8.1 16.9 28.8 29.6 226 0.6 2.1 +06051412.SHV 79 1.75 2270 12.4 -14.9 -41.3 7.8 7.2 15.5 16.8 26.2 84 1.3 2.8 +06051100.LCH 10 1.75 4564 18.5 -12.3 -35.7 8.9 6.4 12.2 22.9 22.0 38 3.7 1.7 +06050912.SGF 387 1.75 2144 12.9 -12.9 -39.7 6.7 7.3 10.1 20.3 18.4 144 1.2 1.8 +06050900.DDC 790 1.75 1630 9.6 -13.3 -40.5 7.9 7.4 15.1 27.2 27.8 179 1.2 2.0 +06050600.LCH 10 1.75 2655 14.9 -10.3 -39.3 5.8 7.8 15.8 23.1 25.2 64 1.2 0.6 +06050400.SHV 79 1.75 3310 15.0 -12.1 -39.1 6.7 7.3 5.8 8.0 14.3 85 0.7 0.6 +06042300.DTX 329 1.75 609 6.7 -24.1 -43.7 7.4 5.5 14.0 17.7 27.4 50 0.5 1.8 +06041900.BMX 178 1.75 1805 12.0 -11.1 -39.9 6.3 7.7 5.4 14.2 22.0 62 0.5 0.7 +06041600.WAL 12 1.75 2234 10.9 -16.5 -44.7 7.2 7.8 17.2 17.7 48.2 81 1.2 2.3 +06041600.IAD 93 1.75 2181 10.2 -16.7 -43.9 7.0 7.5 16.6 27.7 43.3 48 1.8 1.8 +06041300.LZK 78 1.75 1294 11.0 -13.5 -41.1 7.2 7.6 6.0 12.6 20.8 34 0.4 -999.0 +06040900.JAX 9 1.75 2254 13.6 -13.7 -38.1 6.6 6.6 19.5 20.4 22.0 178 1.3 2.1 +06040400.CHS 15 1.75 2165 11.6 -16.9 -42.5 8.1 7.0 26.6 31.6 39.3 207 2.2 2.6 +05082700.AMA 1099 1.75 2765 13.6 -5.5 -32.3 7.4 7.1 10.0 11.5 11.5 31 0.4 2.0 +05082400.RAP 1029 1.75 2040 11.3 -11.3 -38.9 8.6 7.5 13.6 11.6 19.1 116 0.6 -999.0 +05031500.TLH 53 1.75 1338 12.4 -14.1 -38.5 7.1 6.6 12.7 28.4 53.2 41 1.1 1.1 +05030400.AMA 1099 1.75 697 4.3 -23.3 -51.5 8.7 8.0 13.1 22.7 36.0 142 0.8 1.3 +04092500.AMA 1099 1.75 2465 11.2 -11.9 -40.7 6.9 7.8 12.0 15.1 24.9 38 0.8 2.0 +04092300.AMA 1099 1.75 1887 12.8 -10.1 -35.5 6.7 6.9 19.6 23.5 21.8 374 0.9 1.3 +04082600.BIS 506 1.75 3083 12.5 -13.1 -41.7 7.1 7.8 13.9 16.6 18.9 101 1.4 2.4 +04081900.ILX 178 1.75 3685 15.1 -9.1 -36.3 5.9 7.3 19.7 19.9 28.2 371 1.3 1.3 +04071200.TOP 270 1.75 3709 17.7 -7.3 -32.5 6.8 6.7 11.9 13.6 9.1 204 0.8 0.6 +04051600.EPZ 1252 1.75 2888 10.4 -11.5 -39.9 8.7 7.8 4.1 12.2 7.0 93 0.9 1.6 +04051000.LBF 849 1.75 4026 11.6 -13.9 -41.1 9.0 7.5 3.0 13.9 17.5 38 1.9 1.6 +04042900.DRT 313 1.75 1834 12.4 -12.9 -40.9 6.4 7.7 16.1 20.0 31.6 217 0.9 1.3 +04040700.FWD 171 1.75 835 10.4 -16.3 -40.1 6.7 6.6 11.8 28.3 27.2 87 0.6 1.0 +04032100.MAF 872 1.75 2053 10.0 -12.9 -41.3 7.9 7.7 5.5 9.6 21.3 39 0.5 1.5 +04032100.FFC 244 1.75 942 7.9 -17.3 -44.1 7.5 7.4 11.3 12.0 13.4 154 0.4 1.1 +04030100.TOP 270 1.75 487 6.3 -28.7 -42.5 8.7 3.9 20.1 32.0 35.0 171 0.9 1.6 +04022512.LIX 8 1.75 837 10.3 -17.7 -40.5 6.7 6.3 25.2 31.9 48.7 340 0.7 2.4 +03092100.DDC 790 1.75 1784 10.2 -10.9 -38.5 7.3 7.5 21.8 20.1 23.8 257 0.7 2.0 +03091100.DDC 790 1.75 3112 14.8 -7.5 -31.9 6.9 6.6 15.7 22.3 30.8 259 1.2 2.2 +03091000.MAF 872 1.75 3038 12.9 -7.3 -34.1 7.4 7.1 8.6 8.3 12.7 79 0.4 2.1 +03090500.DRA 1009 1.75 1966 11.3 -8.3 -34.1 8.1 6.9 5.0 3.7 9.2 33 0.2 1.2 +03062500.MAF 872 1.75 4621 16.5 -6.7 -29.9 7.7 6.2 11.9 8.7 16.8 45 0.7 2.1 +03062100.MAF 872 1.75 1489 10.7 -7.7 -33.7 7.0 6.9 6.5 14.5 29.4 74 0.3 1.9 +03061700.RAP 1029 1.75 1501 10.1 -11.1 -38.5 7.1 7.4 2.9 5.7 17.5 92 0.2 1.9 +03061700.FFC 244 1.75 2826 16.3 -8.5 -33.7 6.2 6.8 5.5 7.0 13.0 32 0.3 0.6 +03061500.LBF 849 1.75 1717 10.7 -11.3 -39.3 6.3 7.6 6.6 10.6 12.0 51 0.3 1.7 +03061500.FWD 171 1.75 2433 14.3 -11.3 -37.9 6.9 7.2 5.3 12.1 2.8 32 0.7 1.7 +03061300.LBF 849 1.75 2759 12.0 -11.3 -40.9 7.2 8.0 13.0 15.4 16.3 179 1.0 2.6 +03061100.OUN 357 1.75 3045 14.5 -9.3 -35.7 7.2 7.1 12.1 17.8 13.1 135 1.2 2.0 +03060400.LCH 10 1.75 4988 19.7 -6.7 -34.5 5.8 7.4 7.3 13.3 17.2 44 0.8 0.6 +03051312.FWD 171 1.75 1814 12.6 -10.3 -36.9 7.3 7.1 16.8 17.7 24.7 205 0.7 1.2 +03050700.BMX 178 1.75 4489 17.4 -10.5 -36.9 7.0 7.1 12.2 26.5 28.4 101 2.8 2.1 +03050200.FFC 244 1.75 3289 13.7 -13.5 -41.1 6.5 7.5 7.5 9.8 9.5 55 0.9 0.9 +03043000.BNA 210 1.75 3359 12.4 -15.3 -42.5 7.2 7.5 4.1 4.3 5.5 30 0.8 1.3 +03042900.MAF 872 1.75 2325 9.8 -13.5 -39.1 8.4 7.0 15.5 23.4 21.0 165 1.6 1.4 +03042900.AMA 1099 1.75 2549 9.6 -14.5 -41.5 8.3 7.4 16.5 25.3 33.7 237 2.0 1.6 +03032600.SHV 79 1.75 1723 11.3 -18.3 -45.5 8.5 7.6 8.0 17.7 18.0 108 1.3 1.4 +03032600.LZK 78 1.75 2073 11.3 -18.5 -46.3 6.7 7.8 9.5 14.3 15.4 67 1.0 2.2 +03031500.BMX 178 1.75 1555 10.9 -19.1 -43.3 7.4 6.8 12.3 8.5 21.2 94 0.5 1.3 +02082300.LBF 849 1.75 6193 17.8 -10.1 -38.1 8.0 7.5 3.8 12.9 28.1 10 2.1 3.1 +02072800.DDC 790 1.75 2480 12.9 -5.3 -31.3 7.4 6.8 10.7 10.6 11.1 155 0.3 1.4 +02072518.TBW 13 1.75 4523 18.9 -8.5 -34.7 6.7 7.0 2.0 7.8 6.3 7 0.7 0.6 +02070200.AMA 1099 1.75 2393 12.2 -6.5 -35.3 7.3 7.6 20.8 18.4 11.3 353 0.6 1.6 +02062600.DTX 329 1.75 3079 14.5 -8.9 -34.7 6.1 7.0 1.4 1.9 7.2 -1 0.4 0.7 +02061200.TOP 270 1.75 5029 19.6 -8.9 -32.9 7.6 6.4 15.6 21.1 24.7 224 2.3 0.7 +02060700.MPX 287 1.75 1952 9.2 -15.1 -43.7 7.7 7.9 16.2 22.8 25.3 758 1.4 1.5 +02060402.CHS 15 1.75 2637 13.7 -10.1 -34.9 7.6 6.7 11.7 9.7 10.8 33 0.6 0.8 +02052900.TOP 270 1.75 2661 12.8 -13.7 -40.1 6.8 7.2 7.3 4.2 10.7 48 0.5 1.3 +02052800.MAF 872 1.75 3115 12.7 -11.1 -37.5 8.0 7.1 16.4 20.6 24.7 103 1.7 2.1 +02052800.LBF 849 1.75 3387 11.3 -15.1 -41.3 9.0 7.2 11.6 18.8 30.1 184 2.3 1.9 +02050400.CHS 15 1.75 3255 15.9 -10.7 -35.7 6.6 6.7 16.6 21.1 29.5 19 1.6 0.9 +02041800.FWD 171 1.75 3343 15.9 -9.9 -35.9 6.4 7.0 5.6 12.4 34.6 61 0.9 -999.0 +02041600.PIT 357 1.75 1856 11.5 -14.9 -41.7 7.3 7.4 15.8 17.9 18.1 245 1.0 1.6 +01062000.DTX 329 1.75 3813 14.9 -12.5 -37.3 6.9 6.7 15.0 8.4 17.6 -45 0.9 2.8 +01061800.TBW 13 1.75 3469 15.9 -9.7 -34.9 5.9 6.8 1.5 4.6 6.6 23 0.5 0.8 +00090400.LBF 849 1.75 2441 11.2 -9.5 -35.5 7.8 7.0 18.5 21.4 24.1 309 1.0 1.5 +00080800.OAX 350 1.75 4679 16.3 -8.1 -32.7 7.8 6.5 10.8 16.4 25.1 185 1.6 3.0 +00080200.GGW 700 1.75 2057 10.8 -8.9 -37.9 8.0 7.8 15.0 24.6 35.3 148 0.9 1.8 +00073100.JAX 9 1.75 3581 17.6 -8.9 -33.5 6.0 6.6 4.7 6.6 5.5 27 0.4 0.6 +00072900.GSO 270 1.75 2081 14.3 -9.7 -35.1 6.2 6.8 6.5 6.2 16.1 43 0.3 0.6 +00072700.LBF 849 1.75 5178 18.1 -8.9 -36.7 8.7 7.5 12.2 17.5 26.1 351 2.3 2.2 +00072600.MPX 287 1.75 3240 15.3 -13.1 -36.3 7.6 6.4 10.1 21.4 12.4 139 2.2 3.0 +00072600.MFL 5 1.75 4079 18.3 -8.5 -33.5 6.6 6.7 2.4 5.2 5.6 18 0.5 0.6 +00072500.ABR 396 1.75 4195 15.6 -12.3 -38.3 8.9 7.1 10.9 15.3 19.8 113 2.3 3.1 +00072200.LBF 849 1.75 3031 12.8 -11.5 -38.5 7.6 7.3 14.5 27.5 23.7 247 2.2 2.6 +00072100.FFC 244 1.75 2149 14.3 -6.9 -30.5 6.4 6.2 9.1 9.2 10.4 63 0.3 0.6 +00071800.AMA 1099 1.75 3660 14.4 -4.7 -32.7 6.9 7.4 5.9 9.1 7.7 79 0.4 1.5 +00071500.IAD 98 1.75 2186 13.9 -12.3 -36.3 6.8 6.5 9.3 17.8 17.7 118 1.1 2.0 +00071300.ABR 396 1.75 2305 13.6 -8.7 -36.1 6.7 7.3 21.7 29.3 44.3 278 1.2 2.0 +00070600.GGW 700 1.75 2743 11.7 -14.1 -40.7 8.5 7.3 13.0 29.6 40.4 165 2.4 1.9 +00062400.LBF 849 1.75 4723 14.8 -9.7 -37.3 8.6 7.4 9.8 17.4 29.6 126 2.2 2.0 +00062400.DDC 790 1.75 3499 14.8 -7.3 -33.9 7.7 7.2 12.0 23.2 30.2 237 1.5 2.7 +00062200.DDC 790 1.75 3602 14.3 -8.7 -37.5 7.0 7.7 16.2 15.4 23.4 157 1.1 2.9 +00061100.AMA 1099 1.75 3932 14.0 -7.9 -33.5 7.8 6.8 9.4 14.8 19.1 128 1.2 2.1 +00060300.ABQ 1620 1.75 1267 9.4 -8.7 -34.3 8.2 6.9 7.6 10.3 17.5 70 0.2 1.4 +00052900.GSO 270 1.75 1988 14.3 -11.1 -37.1 6.2 7.0 17.6 28.7 35.1 139 1.2 1.2 +00051900.FWD 196 1.75 3610 16.2 -10.9 -37.7 7.4 7.2 6.7 25.2 32.9 75 2.4 0.6 +00051200.TOP 270 1.75 5329 16.7 -7.3 -39.3 6.5 8.6 21.0 25.1 29.2 216 2.1 3.7 +00033000.SHV 79 1.75 3548 15.4 -15.9 -44.1 7.6 7.8 23.8 31.6 50.3 323 3.8 2.8 +94070100.GSO 277 1.50 2296 13.8 -10.3 -38.7 5.4 7.7 6.6 8.1 14.3 40 0.3 0.6 +90082200.OUN 357 1.50 3350 16.6 -5.5 -30.6 6.1 6.6 3.1 3.3 5.7 -7 0.3 0.6 +90082200.AHN 246 1.50 3275 16.5 -6.8 -30.8 6.5 6.3 6.0 8.7 15.8 48 0.4 0.6 +90071000.DEN 1611 1.50 3504 13.5 -8.2 -34.3 8.0 7.0 16.7 25.4 20.1 41 1.9 2.5 +90041100.AHN 246 1.50 1096 11.5 -14.0 -40.0 6.4 7.1 19.0 25.4 25.8 343 0.7 0.6 +90040200.GSO 277 1.50 984 8.7 -17.4 -45.5 6.8 7.8 19.9 29.7 37.4 210 0.8 2.0 +89060200.AHN 246 1.50 1996 13.2 -7.3 -34.8 6.1 7.3 3.2 2.6 1.6 18 0.2 -999.0 +06071100.DNR 1625 1.50 1192 10.1 -7.9 -33.7 7.6 6.9 12.2 16.2 27.0 79 0.3 1.7 +06053000.SGF 387 1.50 2988 15.0 -9.3 -34.7 6.5 6.9 4.0 2.7 12.8 27 0.4 0.6 +06052200.LBF 849 1.50 1420 8.2 -11.1 -41.1 7.7 8.1 14.8 15.2 22.6 199 0.5 1.3 +06042117.JAN 101 1.50 1486 13.4 -12.9 -37.5 6.5 6.7 6.4 17.4 11.7 58 0.7 0.6 +03091800.INL 361 1.50 1863 13.7 -13.5 -38.9 7.5 7.0 15.3 24.7 29.2 384 1.5 -999.0 +03031700.MHX 11 1.50 1241 12.1 -13.1 -39.9 5.4 7.3 11.5 19.1 32.8 37 0.5 0.7 +02072500.LCH 10 1.50 5453 20.2 -7.3 -31.7 5.9 6.4 5.5 8.5 11.3 66 0.6 0.6 +02042200.ILN 317 1.50 623 10.3 -13.3 -37.4 6.8 6.6 31.2 36.0 43.5 525 0.4 2.1 +01062600.RNK 654 1.50 1653 11.1 -11.9 -39.7 5.7 7.5 8.3 13.7 30.3 88 0.4 2.1 +01062600.GSO 270 1.50 929 11.9 -11.7 -40.1 6.0 7.7 10.4 17.8 25.6 106 0.3 0.6 +00090200.SLC 1288 1.50 1641 9.1 -14.7 -41.9 8.4 7.4 20.1 16.1 24.8 101 0.9 1.7 +00051800.GSO 270 1.50 1767 11.9 -13.7 -40.9 6.5 7.4 7.6 16.4 31.1 124 0.7 1.6 +94062500.GSO 277 1.25 2334 15.9 -5.4 -31.3 5.6 6.9 12.9 9.9 5.2 103 0.2 0.6 +90041400.OUN 357 1.25 1408 10.8 -18.2 -46.0 7.9 7.7 17.5 23.5 33.0 146 1.2 2.0 +06072800.FGZ 2192 1.25 3100 13.5 -5.3 -30.7 8.1 6.7 14.1 22.7 18.3 193 1.0 2.7 +06072700.ILX 178 1.25 4385 20.7 -4.3 -31.7 5.7 7.2 14.7 12.7 19.1 318 0.6 0.6 +06070400.GRB 214 1.25 1881 14.1 -10.1 -36.5 6.6 7.1 14.0 22.8 40.7 132 0.9 0.6 +06061200.DNR 1625 1.25 942 6.0 -9.9 -38.5 9.4 7.8 7.4 17.1 22.2 130 0.4 0.6 +06060312.LBF 849 1.25 988 7.7 -11.9 -40.5 9.0 7.9 10.8 19.5 17.8 699 0.5 1.0 +06060300.ILX 178 1.25 1218 10.0 -14.5 -42.9 5.9 7.8 14.1 20.0 22.7 87 0.5 1.5 +06052600.FFC 244 1.25 1711 12.1 -12.1 -36.7 7.1 6.6 4.1 8.7 3.3 46 0.4 1.1 +06052000.BOI 874 1.25 1070 7.4 -13.5 -39.9 8.4 7.2 9.2 15.9 25.9 95 0.5 0.8 +06051500.TLH 53 1.25 1279 10.8 -13.7 -41.5 7.1 7.6 18.5 24.7 23.2 104 0.8 1.7 +05100123.LMN 317 1.25 2672 15.9 -9.9 -36.7 7.0 7.2 14.1 21.4 26.0 276 1.3 -999.0 +05090600.LBF 849 1.25 2252 13.0 -9.1 -33.7 8.1 6.7 6.3 14.1 27.2 28 0.7 2.9 +05030700.MAF 872 1.25 547 8.0 -16.7 -46.3 6.9 8.2 16.9 34.3 40.4 177 0.4 1.9 +04100400.AMA 1099 1.25 1672 10.5 -13.5 -40.1 7.6 7.2 10.7 23.5 31.9 28 1.1 2.4 +04032700.RAP 1029 1.25 2052 8.5 -15.5 -43.5 8.0 7.7 12.6 19.0 17.5 161 1.3 1.5 +03090800.PHX 384 1.25 2268 12.1 -6.7 -35.1 6.7 7.5 8.2 10.7 16.8 90 0.3 1.2 +03090800.FGZ 2192 1.25 663 8.3 -8.3 -35.1 7.7 7.1 11.2 15.0 17.0 130 0.2 1.2 +03090300.NKX 128 1.25 940 10.8 -5.9 -32.3 6.6 7.0 4.2 7.0 5.9 9 0.1 0.7 +03040500.ILN 317 1.25 1856 10.4 -15.7 -44.1 6.5 7.8 17.7 20.8 25.6 233 1.0 2.2 +02041200.TOP 270 1.25 1084 9.8 -16.5 -44.3 7.1 7.7 16.2 9.4 27.2 99 0.3 1.6 +00072000.LZK 165 1.25 3973 16.4 -6.7 -30.7 6.8 6.3 8.3 12.6 12.7 102 0.7 1.1 +00071100.DDC 790 1.25 4707 16.4 -4.1 -31.5 6.8 7.2 6.0 4.6 8.7 136 0.4 2.6 +00030400.BMX 178 1.25 1311 11.4 -14.9 -42.9 5.7 7.7 21.1 42.9 54.3 205 0.8 1.4 +99061200.ILN 317 1.00 3299 14.7 -8.3 -35.5 5.8 7.3 8.2 4.6 4.0 32 0.4 1.1 +98052200.BNA 180 1.00 3709 15.2 -10.7 -36.9 6.4 7.0 10.4 9.2 7.9 83 0.8 0.9 +97081800.FFC 244 1.00 3564 18.4 -6.1 -31.1 6.1 6.6 4.4 2.5 2.0 37 0.3 0.6 +97081700.PIT 373 1.00 3951 18.3 -7.9 -31.9 6.9 6.4 15.4 12.7 23.0 224 0.9 0.6 +97081700.DVN 229 1.00 5790 20.8 -8.3 -34.9 7.5 7.1 12.3 14.3 11.8 137 1.7 1.0 +93092500.OUN 381 1.00 2895 16.1 -6.7 -32.0 6.2 6.8 16.0 24.5 27.2 264 1.0 0.6 +91060500.CKL 140 1.00 3345 16.9 -7.5 -32.0 6.3 6.5 9.2 5.0 4.8 52 0.4 0.6 +91060500.AHN 246 1.00 3036 15.3 -8.1 -31.7 6.7 6.3 11.6 5.7 13.0 72 0.4 0.6 +90101800.GGG 124 1.00 1619 14.2 -10.6 -37.1 6.4 7.1 12.5 20.0 27.9 114 0.7 0.6 +90100800.GGG 124 1.00 2689 16.8 -6.0 -32.5 5.8 7.0 8.9 14.2 17.2 70 0.4 0.6 +90092900.MAF 873 1.00 1606 12.2 -8.0 -36.1 6.0 7.5 11.3 15.0 28.7 35 0.3 0.8 +90083000.GSO 277 1.00 3552 16.4 -9.3 -33.8 6.0 6.6 14.1 20.1 18.2 37 1.3 0.6 +90082300.HTS 246 1.00 707 15.2 -7.7 -33.3 6.2 6.8 3.6 7.0 8.5 -4 0.1 0.6 +90082100.OUN 357 1.00 5290 19.2 -6.7 -31.0 6.9 6.4 6.2 8.3 3.4 38 0.7 0.6 +90081900.AMA 1095 1.00 2596 13.6 -7.9 -32.0 7.0 6.5 3.8 5.1 5.1 45 0.3 0.8 +90080200.MAF 873 1.00 1702 14.4 -6.2 -31.8 6.1 6.8 2.8 9.7 12.2 27 0.2 0.6 +90072600.GGW 696 1.00 1514 10.2 -10.6 -37.7 7.0 7.3 7.9 15.6 16.6 55 0.5 1.8 +90072500.DDC 791 1.00 1703 11.9 -8.0 -34.0 6.8 7.0 10.1 14.0 17.5 208 0.4 1.4 +90072200.TBW 13 1.00 3409 17.8 -5.7 -31.9 6.0 6.9 3.6 4.6 7.8 35 0.3 0.6 +90072000.DEN 1611 1.00 1698 11.7 -7.2 -32.2 7.4 6.7 14.0 16.1 20.8 182 0.4 2.1 +90071800.AMA 1095 1.00 1482 11.4 -6.5 -33.5 6.7 7.2 8.4 14.8 26.1 98 0.3 1.1 +90071100.GSO 277 1.00 3487 15.2 -6.6 -32.6 5.9 6.9 7.5 3.5 9.1 38 0.3 0.6 +90070900.GSO 277 1.00 4051 17.6 -5.3 -32.6 5.6 7.2 6.1 10.2 10.5 73 0.4 0.8 +90062400.OUN 357 1.00 1571 11.9 -10.8 -34.1 8.2 6.3 14.1 26.8 24.9 186 1.1 1.9 +90062300.HTS 246 1.00 1346 14.5 -8.5 -33.5 5.8 6.6 19.1 27.1 36.9 231 0.6 0.6 +90061000.GSO 277 1.00 2409 15.3 -8.8 -32.8 6.1 6.4 11.1 9.7 14.5 145 0.4 0.6 +90050400.CKL 140 1.00 1534 14.0 -10.6 -33.4 6.4 6.0 10.8 20.1 25.8 141 0.7 0.6 +89082700.DDC 791 1.00 4549 16.9 -7.4 -32.1 7.6 6.6 1.4 11.3 24.3 11 0.9 2.1 +89082000.UMN 438 1.00 3524 17.3 -6.0 -31.1 6.2 6.6 13.6 20.6 14.9 350 0.9 0.8 +89080600.OUN 357 1.00 3439 16.3 -5.4 -31.1 6.8 6.8 9.7 10.2 12.1 101 0.4 0.8 +89073100.GTF 1118 1.00 1858 9.5 -9.3 -36.7 8.9 7.4 10.3 10.8 21.7 106 0.4 1.2 +89072800.DAY 298 1.00 2617 16.4 -7.8 -34.6 5.7 7.2 7.5 13.5 11.3 83 0.5 0.6 +89072400.VCT 33 1.00 2953 14.8 -9.6 -37.2 6.2 7.4 9.5 7.7 13.3 120 0.4 0.6 +89071200.TOP 268 1.00 3182 16.6 -8.1 -30.9 7.6 6.1 13.2 12.6 8.2 157 0.8 1.6 +89070600.OUN 357 1.00 1373 12.9 -6.0 -34.0 6.2 7.4 11.3 6.0 12.2 64 0.1 0.6 +89062900.AMA 1095 1.00 2035 12.6 -8.2 -31.3 8.6 6.2 13.0 14.8 26.0 165 0.6 2.3 +89062800.HTS 246 1.00 3659 17.6 -8.0 -31.7 5.8 6.4 7.4 15.4 21.4 62 0.8 0.6 +89061900.CKL 140 1.00 3363 16.7 -9.6 -36.6 6.4 7.3 12.2 14.5 12.2 103 1.0 0.6 +89061600.TBW 13 1.00 3463 16.4 -7.6 -32.3 5.7 6.5 5.9 10.2 6.4 36 0.5 0.6 +89061400.JAN 91 1.00 3274 16.0 -11.5 -35.2 7.1 6.4 9.4 11.3 8.2 57 1.0 1.0 +89061200.JAN 91 1.00 3616 17.7 -9.1 -31.2 6.5 5.9 7.5 15.3 5.8 84 1.1 0.6 +89060500.1M1 172 1.00 2493 15.8 -8.2 -35.8 6.0 7.4 10.3 14.7 13.0 19 0.6 0.6 +06092900.FFC 244 1.00 705 10.8 -11.1 -40.1 4.6 7.9 18.9 19.1 33.4 85 0.2 0.6 +06091200.ILX 178 1.00 1642 13.6 -11.1 -38.9 6.4 7.5 8.6 12.9 23.9 56 0.5 0.6 +06090800.LBF 849 1.00 880 7.9 -14.1 -40.7 7.5 7.3 6.9 11.1 19.9 20 0.3 0.9 +06090800.ABR 396 1.00 1406 9.5 -14.3 -42.3 7.5 7.7 10.6 9.4 9.1 163 0.4 1.7 +06081000.TUS 779 1.00 1913 13.4 -6.3 -29.9 7.3 6.3 1.2 3.1 6.2 12 0.2 0.6 +06080100.PIT 357 1.00 3456 18.6 -4.5 -30.1 5.8 6.8 10.1 12.7 7.9 104 0.5 0.6 +06072800.OAX 350 1.00 2714 15.6 -5.3 -34.3 6.0 7.7 9.3 16.8 22.8 92 0.5 0.6 +06072800.ABR 396 1.00 1956 12.7 -6.1 -34.7 6.4 7.6 16.1 23.5 29.4 149 0.5 1.4 +06072700.RAP 1029 1.00 694 8.7 -8.7 -33.7 8.3 6.7 13.4 16.3 21.8 157 0.2 0.9 +06072300.ABQ 1620 1.00 1267 9.6 -4.9 -32.1 7.8 7.2 2.8 5.7 11.2 -9 0.1 1.0 +06072200.RNK 654 1.00 3249 16.5 -6.1 -31.1 6.0 6.6 7.2 7.0 9.1 100 0.3 0.6 +06072000.RNK 654 1.00 2160 14.2 -8.5 -31.1 5.9 6.1 11.1 9.1 3.0 113 0.3 1.0 +06071800.DNR 1625 1.00 1197 9.1 -6.9 -32.3 8.0 6.9 3.5 7.7 6.2 83 0.1 1.1 +06071300.BIS 506 1.00 966 9.0 -8.7 -35.3 8.1 7.1 5.9 7.7 14.5 108 0.1 0.7 +06070500.GSO 270 1.00 2335 15.2 -7.3 -33.1 6.1 6.8 7.6 9.6 6.1 96 0.3 0.6 +06070300.IAD 93 1.00 3195 14.8 -9.3 -36.5 5.9 7.3 10.7 10.7 13.6 60 0.6 0.9 +06070200.LBF 849 1.00 2554 12.2 -8.5 -35.5 8.0 7.3 17.1 20.5 17.9 223 1.0 2.0 +06070200.FWD 171 1.00 1806 12.8 -9.9 -36.5 7.2 7.2 1.6 6.1 11.2 20 0.3 0.6 +06070200.FFC 244 1.00 1552 11.2 -9.7 -38.3 6.3 7.7 1.2 6.5 9.5 4 0.2 0.9 +06062900.TOP 270 1.00 959 8.5 -12.3 -40.9 7.1 7.8 8.1 12.7 14.7 120 0.3 1.0 +06062900.PIT 357 1.00 925 10.9 -13.7 -38.3 6.4 6.7 7.1 21.3 35.7 17 0.5 1.6 +06062800.GRB 214 1.00 1049 9.4 -15.5 -44.5 6.1 8.0 8.1 13.8 20.6 34 0.4 1.6 +06062700.FFC 244 1.00 2376 15.4 -6.9 -33.5 5.6 7.0 9.3 12.6 21.6 23 0.4 0.6 +06062300.DDC 790 1.00 987 11.0 -11.1 -33.3 7.2 6.0 9.3 17.7 17.5 78 0.4 1.3 +06062300.BNA 210 1.00 3023 15.6 -10.1 -34.7 7.3 6.6 8.0 10.6 3.6 71 0.8 0.6 +06062300.BMX 178 1.00 1595 12.5 -7.1 -34.3 6.2 7.2 1.9 5.1 4.3 -10 0.1 0.6 +06062200.JAN 101 1.00 2595 15.3 -8.7 -34.7 7.0 7.0 4.6 3.0 2.5 -15 0.4 0.6 +06062100.BNA 210 1.00 2387 14.1 -9.3 -35.3 6.8 6.9 6.8 6.7 3.3 43 0.3 0.6 +06061900.GRB 214 1.00 2397 14.0 -11.7 -38.1 6.2 7.2 12.4 15.9 20.9 74 0.9 1.9 +06061200.BNA 210 1.00 1539 13.6 -6.7 -34.3 5.6 7.4 9.1 15.2 7.0 107 0.3 0.6 +06060800.LBF 849 1.00 2368 10.8 -6.9 -36.5 7.7 7.9 11.2 20.5 22.3 244 0.7 1.7 +06060712.RAP 1029 1.00 1110 7.9 -10.3 -38.1 8.7 7.6 9.9 12.3 19.2 131 0.3 1.3 +06060700.SHV 79 1.00 2252 14.6 -10.3 -34.3 7.4 6.4 15.1 25.4 14.5 164 1.4 0.6 +06060500.FFC 244 1.00 1475 11.0 -12.5 -39.5 5.9 7.4 5.7 11.7 22.4 18 0.3 2.1 +06060400.ILN 317 1.00 1032 8.3 -18.1 -46.9 6.5 8.0 6.7 8.5 11.1 35 0.3 1.2 +06060300.GRB 214 1.00 1314 8.8 -18.9 -45.5 7.1 7.4 12.0 16.3 19.5 77 0.7 1.6 +06060200.BNA 210 1.00 2055 14.2 -7.9 -34.3 5.4 7.1 8.6 5.5 12.6 -2 0.2 0.6 +06053100.GGW 700 1.00 570 5.6 -21.1 -50.3 7.4 8.3 2.8 5.0 8.1 30 0.2 0.9 +06052700.JAX 9 1.00 2879 15.0 -9.9 -36.5 6.1 7.2 11.0 13.7 13.1 117 0.8 0.8 +06052700.BIS 506 1.00 2274 9.4 -11.9 -40.3 8.5 7.7 20.2 22.0 21.3 198 1.3 1.3 +06052600.JAX 9 1.00 1856 13.3 -10.7 -37.3 6.6 7.2 10.5 15.3 20.8 70 0.6 0.6 +06052600.GSO 270 1.00 1743 11.9 -10.1 -36.3 6.1 7.0 8.4 14.4 11.4 82 0.4 0.8 +06052600.AMA 1099 1.00 1911 7.9 -11.3 -38.3 9.9 7.3 11.8 16.9 12.6 262 0.9 0.7 +06052300.RAP 1029 1.00 2536 9.6 -10.3 -39.5 8.5 7.9 5.6 9.7 18.1 43 0.6 1.3 +06051800.IAD 93 1.00 1009 8.4 -20.5 -45.9 6.7 7.2 11.9 16.0 20.3 66 0.6 1.3 +06051600.DTX 329 1.00 519 8.7 -20.5 -49.7 6.1 8.2 7.2 5.0 17.9 -7 0.1 0.7 +06041400.PIT 357 1.00 390 6.2 -20.1 -48.7 7.0 8.1 18.8 18.6 40.0 220 0.3 0.9 +06041400.BUF 215 1.00 383 6.2 -23.3 -49.9 7.6 7.6 21.6 26.8 55.7 237 0.5 1.4 +06011200.GSO 270 1.00 1374 9.5 -19.1 -46.5 7.5 7.7 21.9 15.6 28.9 253 0.8 2.5 +06010300.ILN 317 1.00 791 9.0 -19.3 -46.1 7.5 7.5 7.8 16.0 23.8 140 0.5 1.4 +05092900.FWD 171 1.00 1553 12.7 -5.9 -29.7 6.4 6.3 8.5 10.1 13.0 39 0.2 0.6 +05082700.EPZ 1252 1.00 2162 11.1 -6.5 -31.9 8.5 6.8 4.0 4.9 6.7 21 0.2 1.0 +05081800.LMN 317 1.00 3655 17.7 -4.1 -30.3 6.0 6.8 13.3 22.3 17.3 221 0.9 0.6 +05081700.GGW 700 1.00 1042 9.2 -11.1 -36.7 7.8 6.9 16.7 27.6 40.5 265 0.6 1.7 +05081100.GGW 700 1.00 805 10.1 -13.7 -37.9 7.4 6.5 15.6 30.5 38.9 170 0.6 2.1 +05050600.EPZ 1252 1.00 1672 8.0 -12.7 -40.3 8.6 7.5 15.0 27.7 28.8 178 1.3 1.2 +05050412.TBW 13 1.00 1839 14.1 -13.5 -39.3 7.3 7.0 10.0 15.8 33.3 187 0.9 1.0 +05030400.SGF 387 1.00 823 5.9 -25.9 -52.1 7.1 7.5 13.0 24.2 27.9 151 1.0 0.7 +04082800.OUN 357 1.00 4225 16.0 -7.1 -32.5 7.4 6.7 7.0 3.8 3.0 101 0.5 1.5 +04081700.TUS 779 1.00 2027 13.1 -8.9 -34.5 7.1 6.9 8.8 13.2 13.3 96 0.5 1.0 +04080900.TOP 270 1.00 2676 14.3 -11.5 -36.3 7.4 6.7 5.9 11.9 15.6 82 0.9 0.9 +04051200.AMA 1099 1.00 1922 9.7 -11.5 -38.7 8.0 7.4 19.1 15.0 8.4 282 0.7 1.6 +04051000.FFC 244 1.00 2006 11.4 -11.1 -38.3 5.4 7.4 4.0 4.7 11.0 -15 0.2 1.9 +04032100.FWD 171 1.00 2648 13.1 -15.5 -42.9 8.2 7.5 4.9 12.9 20.8 29 1.4 2.8 +04031500.DRT 313 1.00 1498 11.6 -15.5 -43.1 7.0 7.6 6.6 16.8 24.5 123 0.8 1.4 +03111712.TOP 270 1.00 1641 11.5 -17.3 -45.7 7.3 7.9 17.8 25.6 32.6 329 1.4 2.7 +03090900.TUS 779 1.00 2363 11.5 -8.3 -34.9 7.3 7.1 2.8 7.9 11.8 12 0.3 1.1 +03060900.RNK 654 1.00 2965 15.0 -9.1 -36.7 6.2 7.4 18.9 24.1 29.2 134 1.3 1.2 +03060200.DDC 790 1.00 1960 11.1 -9.5 -35.3 7.9 6.9 11.9 17.5 20.6 222 0.7 2.0 +03052700.ABQ 1620 1.00 713 7.1 -9.9 -37.1 8.3 7.3 3.1 14.7 20.6 12 0.2 0.6 +03052600.TFX 1131 1.00 994 8.3 -10.9 -37.7 8.0 7.3 9.1 16.0 15.9 59 0.4 1.3 +03051800.XMR 3 1.00 3602 16.0 -9.5 -35.9 7.0 7.1 5.6 8.6 10.7 -7 0.7 0.9 +03051800.TBW 13 1.00 3839 16.1 -8.7 -36.5 6.5 7.5 6.2 5.7 11.9 3 0.5 1.1 +03051200.JAX 9 1.00 3060 15.9 -7.9 -33.5 6.9 6.8 10.1 13.2 20.0 48 0.7 -999.0 +03051100.MHX 11 1.00 3585 16.0 -9.3 -37.7 7.3 7.6 11.9 16.2 15.0 104 1.3 0.9 +03050312.BMX 178 1.00 1402 9.7 -16.1 -41.9 7.5 7.1 7.9 13.8 38.5 72 0.6 1.8 +03050212.BNA 210 1.00 1865 10.3 -15.3 -44.9 7.0 8.2 12.1 13.0 18.0 55 0.7 2.2 +03050100.FFC 244 1.00 1429 11.1 -13.5 -40.1 6.6 7.2 1.0 6.9 6.4 5 0.2 1.6 +03043000.OAX 350 1.00 1064 8.9 -16.3 -44.3 7.4 7.8 18.4 29.1 32.0 353 0.9 1.9 +03042800.MFL 5 1.00 2735 16.7 -10.7 -35.7 6.4 6.7 12.3 11.7 25.5 83 0.7 0.6 +03042400.SHV 79 1.00 1456 13.1 -12.9 -38.9 7.2 7.1 15.2 26.1 36.8 278 1.1 0.6 +03041800.DNR 1625 1.00 1063 5.3 -18.1 -47.9 8.6 8.3 5.9 11.0 43.9 41 0.5 0.6 +03040500.LZK 78 1.00 1751 10.7 -14.9 -42.5 6.6 7.6 12.6 27.4 33.1 65 1.2 2.3 +03032100.DTX 329 1.00 1602 8.7 -21.3 -48.3 6.6 7.7 7.7 13.3 27.1 80 0.8 1.1 +03032000.ILX 178 1.00 713 8.0 -21.9 -36.7 6.9 4.2 5.4 3.5 11.4 -26 0.2 1.4 +03031500.TBW 13 1.00 3398 15.9 -13.7 -38.1 7.0 6.6 3.9 18.6 27.3 32 1.9 0.9 +02080400.SGF 387 1.00 4328 17.7 -5.5 -34.5 6.5 7.7 3.8 1.1 7.6 -11 0.3 1.5 +02080300.BMX 178 1.00 5098 18.4 -6.5 -35.1 5.8 7.6 11.5 9.6 10.8 33 0.6 1.4 +02072900.AMA 1099 1.00 3610 13.6 -6.5 -32.3 7.8 6.9 13.6 12.5 12.2 164 0.7 2.0 +02072700.RAP 1029 1.00 1688 9.4 -9.3 -37.5 7.5 7.6 14.5 21.0 28.6 139 0.7 1.3 +02072600.TOP 270 1.00 3390 13.8 -5.9 -33.9 7.5 7.4 11.9 16.9 16.9 168 0.8 2.2 +02072000.JAN 133 1.00 3501 17.6 -6.7 -31.9 6.1 6.7 5.7 6.1 7.9 58 0.3 0.6 +02070300.LBF 849 1.00 3367 14.1 -5.9 -35.3 7.5 7.8 11.5 14.0 6.2 158 0.7 1.2 +02070200.FFC 244 1.00 4268 16.3 -9.7 -36.1 6.6 7.1 7.3 7.8 4.3 46 0.7 0.6 +02060700.ABR 396 1.00 2252 9.0 -14.7 -43.9 8.1 8.1 8.2 12.4 18.1 118 0.9 1.2 +02060400.CHS 15 1.00 3170 15.2 -10.1 -34.9 7.6 6.7 11.7 9.7 10.8 33 0.8 0.6 +02052700.AMA 1099 1.00 2332 9.7 -11.1 -37.9 7.2 7.3 13.0 14.5 11.8 198 0.7 1.4 +02051800.CRP 13 1.00 5902 20.3 -10.5 -36.9 7.4 7.1 10.7 22.6 23.2 86 3.4 1.6 +02042300.OAX 350 1.00 614 6.4 -23.3 -46.3 7.9 6.5 15.2 26.3 36.6 133 0.8 1.4 +02012400.LZK 78 1.00 1343 13.1 -12.7 -41.1 6.6 7.8 20.2 32.5 40.7 290 0.9 0.6 +01062600.LBF 849 1.00 3931 12.7 -8.1 -35.3 8.1 7.3 8.1 9.3 8.1 119 0.7 1.5 +01062100.ABR 396 1.00 1118 8.1 -19.3 -47.7 7.0 7.9 3.6 4.2 12.4 14 0.3 1.3 +01061900.JAX 9 1.00 2584 17.2 -9.5 -35.5 6.1 7.0 5.0 4.8 8.3 13 0.3 0.6 +00080700.TOP 270 1.00 4476 17.3 -7.5 -33.1 7.2 6.7 11.7 17.8 22.9 72 1.4 1.8 +00072900.ILN 317 1.00 2735 14.3 -11.5 -37.7 6.7 7.1 8.0 13.4 21.0 68 0.9 0.6 +00072900.CHS 15 1.00 2462 16.1 -7.5 -34.9 5.6 7.3 3.3 9.3 13.2 4 0.3 0.6 +00072800.TOP 270 1.00 3666 15.3 -10.3 -35.3 7.6 6.8 9.1 22.0 26.4 115 2.1 2.6 +00072800.LBF 849 1.00 5581 17.1 -7.7 -35.5 8.1 7.5 9.6 25.0 21.1 187 2.8 3.1 +00072700.JAN 101 1.00 2066 12.5 -10.7 -35.7 6.4 6.7 4.2 8.0 8.4 -50 0.3 1.0 +00072300.OTX 728 1.00 2088 9.0 -12.3 -42.7 8.2 8.3 7.8 17.2 21.1 43 0.9 1.2 +00071900.GYX 125 1.00 997 11.4 -13.3 -37.7 6.0 6.6 18.8 27.0 36.1 107 0.6 1.0 +00071700.TOP 270 1.00 3927 15.9 -8.7 -31.7 7.9 6.1 14.5 8.9 14.1 198 0.8 2.4 +00071500.SHV 79 1.00 4004 17.2 -5.9 -31.1 6.0 6.7 6.2 4.6 8.6 46 0.3 0.6 +00071400.GRB 214 1.00 1743 12.0 -12.3 -37.9 6.9 6.9 13.4 21.5 42.9 195 0.9 1.7 +00071200.DDC 790 1.00 2941 14.4 -5.5 -30.7 7.2 6.7 10.8 11.3 11.7 196 0.4 1.4 +00070700.RAP 966 1.00 4065 14.2 -7.7 -35.3 8.6 7.3 10.8 29.4 33.3 111 2.3 2.1 +00070400.DDC 790 1.00 5142 18.1 -7.1 -30.7 7.6 6.4 11.4 9.7 19.2 114 0.9 2.4 +00070300.OAX 350 1.00 4633 18.5 -6.3 -32.3 6.9 6.9 9.9 10.6 19.6 133 0.7 1.9 +00070300.DDC 790 1.00 4558 17.2 -5.9 -30.9 7.5 6.7 11.7 13.6 22.7 66 0.9 2.4 +00070200.RAP 966 1.00 5621 15.6 -9.7 -36.3 8.7 7.3 15.9 21.5 22.7 263 3.3 2.2 +00070200.DDC 790 1.00 3566 16.2 -5.7 -34.7 6.6 7.7 5.5 14.2 21.9 38 0.6 1.3 +00063000.PIT 373 1.00 1086 9.9 -15.9 -40.5 5.5 6.8 8.1 22.0 37.9 77 0.5 1.8 +00062600.TOP 270 1.00 4052 17.8 -8.9 -32.7 7.6 6.4 2.4 1.3 23.9 26 0.6 2.3 +00062600.DDC 790 1.00 2618 13.5 -6.1 -32.3 6.7 6.9 14.3 15.8 16.9 51 0.5 1.6 +00062300.MHX 11 1.00 4167 18.6 -8.7 -34.1 6.1 6.8 9.7 6.0 6.1 89 0.5 0.6 +00062100.TBW 13 1.00 3180 17.1 -8.5 -32.1 6.4 6.4 8.9 12.2 19.0 49 0.7 0.6 +00060200.TOP 270 1.00 3517 16.1 -9.3 -34.5 6.9 6.7 4.9 10.4 16.3 39 0.8 0.8 +00060200.DVN 229 1.00 3451 16.4 -9.3 -35.5 7.3 7.0 14.2 14.1 11.0 175 1.1 0.6 +00060100.ILX 178 1.00 3208 16.1 -9.1 -37.7 7.0 7.7 20.7 17.9 15.6 163 1.2 1.8 +00053000.LBF 849 1.00 2258 9.9 -9.7 -37.9 9.2 7.6 16.9 27.2 31.9 294 1.4 1.1 +00051400.TLH 21 1.00 3542 15.9 -9.9 -37.7 6.9 7.5 5.4 4.2 4.2 -4 0.5 1.0 +00021800.JAN 101 0.88 1866 12.5 -14.9 -43.1 6.7 7.8 16.2 27.5 38.9 270 1.5 0.7 +00061100.DDC 790 0.88 3471 14.3 -7.9 -33.9 6.9 6.9 14.0 11.0 20.2 53 0.7 2.4 +00061800.RAP 966 0.88 1396 7.4 -18.9 -44.5 7.1 7.2 7.4 14.0 34.9 270 0.7 1.4 +00070600.DDC 790 0.88 2581 12.3 -7.5 -31.7 8.5 6.4 10.7 9.4 10.0 97 0.5 1.8 +00072800.BMX 178 0.88 2147 13.2 -9.5 -36.3 6.2 7.2 6.0 8.0 11.4 35 0.3 0.7 +00080200.DVN 229 0.88 4183 16.6 -9.7 -38.1 6.6 7.6 13.3 11.2 16.4 169 1.0 1.1 +00080300.PIT 373 0.88 2780 14.9 -9.7 -37.1 6.2 7.3 9.1 15.5 29.2 81 0.8 0.6 +00080400.BNA 180 0.88 3453 16.3 -9.9 -35.1 6.8 6.8 9.1 10.9 16.0 83 0.8 0.6 +00080500.LZK 165 0.88 3872 16.1 -6.3 -33.3 5.6 7.3 7.3 9.4 14.6 6 0.4 0.8 +00080700.DTX 329 0.88 4231 19.4 -7.3 -31.9 6.0 6.6 10.6 16.6 31.6 78 1.0 0.6 +00090300.OAX 350 0.88 3099 12.6 -10.1 -36.3 8.7 7.0 9.5 16.9 21.6 126 1.4 1.4 +01062200.DVN 229 0.88 1285 10.3 -18.1 -44.9 6.5 7.5 8.7 10.8 11.8 66 0.4 1.0 +01062600.CRP 13 0.88 3837 16.6 -8.5 -35.7 6.4 7.3 7.1 4.0 8.9 53 0.5 0.6 +02031000.GSO 270 0.88 819 11.0 -15.3 -41.3 5.8 7.2 19.8 24.6 29.7 236 0.5 1.2 +02052900.OAX 350 0.88 2754 13.0 -13.3 -40.9 7.1 7.5 10.0 7.5 7.0 127 0.6 2.6 +03031400.TLH 53 0.88 2141 11.6 -13.1 -43.3 6.3 8.3 5.7 10.5 9.0 39 0.5 1.1 +03042912.TOP 270 0.88 1617 10.6 -16.9 -43.9 7.8 7.5 11.0 16.7 22.5 238 0.9 2.8 +03050400.BIS 506 0.88 1467 8.2 -18.7 -47.3 7.4 8.0 8.8 15.4 16.1 86 0.8 1.6 +03060300.JAX 9 0.88 3513 16.1 -10.1 -36.5 7.6 7.1 11.4 11.1 10.3 111 1.0 0.6 +03060600.ABR 396 0.88 888 8.1 -19.9 -46.5 6.8 7.5 9.2 17.3 14.2 47 0.5 1.5 +03061600.TOP 270 0.88 1944 12.4 -11.9 -38.7 6.4 7.3 5.8 0.8 4.2 3 0.3 1.0 +03062000.GGW 700 0.88 1032 9.2 -9.7 -37.5 8.1 7.5 8.3 9.8 17.1 76 0.2 1.3 +03101712.JAN 101 0.88 1891 12.8 -11.5 -43.1 6.3 8.6 16.9 25.4 33.9 246 1.1 1.2 +03102600.CRP 13 0.88 3408 17.9 -9.9 -35.3 6.3 6.8 9.8 15.2 34.5 17 1.0 0.6 +03111800.OAX 350 0.88 957 10.0 -18.3 -43.3 6.8 6.9 20.0 41.2 58.6 88 0.8 2.5 +04040900.AMA 1099 0.88 1515 8.2 -16.7 -45.5 7.0 8.0 14.7 17.9 23.0 139 0.8 1.6 +04081800.PHX 384 0.88 1709 10.5 -9.1 -35.5 7.3 7.1 6.0 4.8 9.2 15 0.2 0.8 +04082700.ABR 396 0.88 1433 10.2 -15.1 -41.5 6.7 7.3 5.3 14.4 40.5 28 0.5 1.5 +04091900.LCH 10 0.88 2433 15.9 -6.9 -31.9 5.8 6.6 7.7 4.4 15.6 6 0.2 0.6 +04092000.OAK 3 0.88 242 7.3 -17.9 -36.7 5.5 5.2 6.5 27.4 30.4 56 0.2 0.7 +04100400.GSO 270 0.88 1385 13.2 -14.9 -40.1 6.5 6.9 10.4 15.2 26.8 101 0.6 1.4 +05081300.MAF 872 0.88 1568 12.8 -6.3 -31.7 6.5 6.8 6.9 11.8 13.7 82 0.2 0.6 +06013012.JAN 101 0.88 1058 10.0 -20.9 -45.9 7.1 7.0 18.9 38.7 46.0 71 1.1 2.6 +06032100.OUN 357 0.88 579 5.4 -25.5 -40.9 7.4 4.4 5.7 16.6 26.7 53 0.5 0.9 +06040700.FWD 171 0.88 2831 12.5 -12.5 -42.1 6.2 8.1 20.1 33.5 41.5 40 1.8 2.8 +06041200.TOP 270 0.88 726 8.4 -14.3 -42.9 7.0 7.9 23.1 33.2 37.2 232 0.5 2.0 +06043000.OTX 728 0.88 499 6.4 -17.9 -44.3 7.3 7.4 8.3 17.3 23.3 75 0.3 0.8 +89061200.AMA 1095 0.88 3301 13.2 -11.7 -39.3 8.7 7.5 9.2 12.9 25.2 167 1.4 2.3 +89062600.UMN 438 0.88 3812 16.2 -6.9 -33.3 6.3 7.0 2.0 0.7 10.8 -14 0.4 0.6 +89062700.DEN 1611 0.88 931 8.6 -11.1 -38.5 7.6 7.5 10.8 14.3 14.3 122 0.3 1.8 +89072700.AHN 246 0.88 3996 17.5 -6.9 -33.6 6.5 7.1 7.1 3.5 6.8 66 0.4 0.6 +89082500.AHN 246 0.88 3533 16.9 -5.1 -30.7 6.1 6.8 2.7 3.3 8.1 5 0.3 0.6 +89082600.AHN 246 0.88 3463 17.1 -5.6 -31.0 5.8 6.7 4.0 11.3 8.6 41 0.4 0.6 +89082900.GGG 124 0.88 3979 18.5 -4.6 -29.9 6.0 6.7 1.6 4.1 2.2 3 0.3 0.6 +90071000.PIT 360 0.88 3362 16.6 -6.7 -31.4 6.3 6.6 14.3 19.7 14.7 124 0.9 0.6 +90073000.AMA 1095 0.88 943 12.2 -7.5 -32.1 6.3 6.5 8.4 12.7 18.1 14 0.2 0.6 +90091900.OUN 357 0.88 3878 18.0 -6.7 -31.3 6.2 6.6 12.1 11.9 20.5 119 0.6 0.6 +97010900.SIL 8 0.88 909 13.1 -13.6 -37.2 6.7 6.4 33.7 39.7 37.0 511 0.7 -999.0 +98062500.DDC 790 0.88 2667 11.9 -7.3 -34.1 8.7 7.2 12.4 25.1 34.7 224 1.2 1.4 +90052100.SIL 8 0.85 3505 16.6 -10.6 -35.6 6.7 6.7 10.9 8.4 13.0 70 0.7 0.6 +03052100.TBW 13 0.80 2941 15.8 -9.5 -35.9 6.2 7.1 7.1 2.7 5.4 27 0.4 0.6 +91051700.JAN 91 0.80 2890 15.5 -8.9 -36.0 6.5 7.3 0.6 1.1 7.8 1 0.4 0.6 +00022400.LZK 165 0.75 1590 10.6 -18.1 -45.7 7.0 7.7 17.2 25.0 34.2 270 1.3 2.5 +00050300.JAN 101 0.75 1438 12.8 -12.9 -38.5 5.9 7.0 13.9 12.8 7.2 120 0.4 0.6 +00052200.LZK 165 0.75 2062 12.1 -13.5 -44.1 6.2 8.4 17.7 22.6 32.5 162 1.1 1.4 +00061800.JAX 9 0.75 2677 15.7 -7.9 -34.1 5.7 7.0 7.9 6.0 10.5 61 0.3 0.6 +00061900.WAL 41 0.75 2940 17.4 -7.9 -33.5 6.3 6.9 11.6 11.3 9.5 134 0.5 0.6 +00062500.JAX 9 0.75 2442 15.6 -10.1 -34.9 6.2 6.6 9.3 9.4 21.8 104 0.5 0.6 +00062900.GRB 214 0.75 860 8.9 -18.9 -47.9 6.4 8.1 14.1 17.0 24.4 108 0.5 1.1 +00071300.DDC 790 0.75 3064 15.1 -3.7 -31.1 6.1 7.2 9.2 6.2 10.6 0 0.2 0.6 +00071300.FWD 196 0.75 3103 14.9 -5.7 -31.9 6.5 6.9 13.9 10.6 11.4 120 0.4 0.8 +00071800.JAN 101 0.75 3305 15.8 -5.5 -29.7 6.0 6.3 13.1 13.9 14.4 -56 0.5 0.6 +00071900.JAN 101 0.75 3841 17.3 -6.1 -31.7 6.1 6.8 5.7 7.5 6.9 32 0.3 0.6 +00072100.TBW 13 0.75 4845 18.9 -6.9 -31.9 6.4 6.6 7.4 7.0 10.7 56 0.5 0.9 +00072300.GSO 270 0.75 2443 16.5 -9.1 -32.3 5.7 6.1 6.6 20.6 22.2 88 0.9 0.6 +00072400.GGW 700 0.75 3240 10.9 -11.1 -40.3 8.5 7.9 12.5 26.1 22.5 54 2.1 1.4 +00080400.LCH 10 0.75 3045 15.7 -7.5 -32.7 5.6 6.7 4.7 2.8 12.8 28 0.3 0.6 +00090200.SHV 79 0.75 1896 12.1 -7.5 -32.5 7.0 6.6 5.2 3.2 2.0 15 0.2 0.7 +01062400.BIS 506 0.75 4781 13.7 -10.9 -38.3 9.0 7.4 15.0 18.7 27.1 249 2.8 1.7 +02030812.ILX 178 0.75 533 7.2 -19.7 -48.7 6.9 8.2 16.1 31.5 49.1 599 0.5 1.3 +02051500.PIT 357 0.75 521 5.9 -27.9 -45.7 7.9 5.1 17.3 14.7 14.3 74 0.4 1.1 +02060400.JAX 9 0.75 3128 15.3 -8.1 -33.3 6.5 6.7 0.3 3.7 6.5 15 0.4 0.6 +02062500.LBF 849 0.75 3690 11.7 -10.3 -37.1 9.2 7.2 5.0 7.2 9.1 45 0.7 1.3 +02072000.LZK 78 0.75 6551 21.6 -8.5 -32.7 6.9 6.6 8.7 10.2 6.8 145 1.3 0.9 +03031500.OTX 728 0.75 801 6.3 -26.3 -49.9 7.5 6.8 18.3 24.9 28.7 240 1.0 1.5 +03032000.SGF 387 0.75 909 7.6 -22.1 -40.1 6.7 5.1 18.2 10.5 8.6 205 0.4 1.4 +03040922.XMR 3 0.75 2570 15.5 -10.3 -37.3 5.6 7.3 12.7 31.0 38.3 34 1.3 0.6 +03042300.DNR 1625 0.75 1183 6.7 -16.1 -46.5 7.9 8.5 12.2 19.1 35.2 265 0.7 1.2 +03050100.DNR 1625 0.75 1011 6.7 -20.1 -46.3 8.0 7.4 12.5 33.5 27.3 108 1.1 1.2 +03050200.BMX 178 0.75 2216 12.4 -12.9 -40.7 6.6 7.5 4.6 6.7 7.6 9 0.4 0.7 +03052400.PIT 357 0.75 707 10.0 -16.7 -44.5 6.5 7.7 12.1 26.5 23.6 65 0.5 1.0 +03060700.MFL 5 0.75 3041 18.2 -6.7 -31.3 5.6 6.5 0.9 2.8 9.3 5 0.3 0.6 +03061000.JAX 53 0.75 2482 16.0 -8.7 -33.9 6.7 6.7 10.8 11.3 22.4 13 0.5 0.6 +03061222.XMR 3 0.75 2144 17.1 -7.9 -32.5 6.1 6.5 5.2 4.6 6.1 65 0.2 0.6 +03061500.SHV 79 0.75 2511 16.2 -9.9 -33.9 6.3 6.4 13.5 21.1 32.8 91 1.1 0.6 +03061900.TFX 1131 0.75 1802 8.6 -9.3 -37.5 8.2 7.6 13.1 10.8 13.4 178 0.4 1.0 +03062000.BOI 874 0.75 491 7.0 -12.5 -39.7 8.2 7.4 17.9 23.3 18.1 141 0.3 1.0 +03062100.RAP 1029 0.75 2338 11.9 -10.3 -36.1 7.2 7.0 15.0 8.1 14.4 137 0.4 2.4 +03062200.IAD 93 0.75 1215 10.5 -17.1 -38.3 5.8 5.9 9.3 15.1 9.7 79 0.5 1.1 +03090900.GJT 1475 0.75 996 6.8 -12.3 -39.5 9.1 7.4 8.5 17.7 28.1 199 0.5 0.7 +03090900.MAF 872 0.75 2389 12.1 -7.9 -36.1 7.0 7.6 12.1 18.1 17.8 222 0.7 2.2 +03091000.JAN 101 0.75 1929 15.0 -9.5 -35.3 6.0 6.9 8.1 10.8 22.1 83 0.4 0.6 +03111300.BUF 215 0.75 418 8.1 -20.5 -44.7 6.7 6.8 18.0 46.9 65.5 335 0.4 1.5 +04030500.LZK 78 0.75 745 12.4 -10.1 -37.1 5.8 7.2 27.8 39.6 53.2 468 0.4 0.6 +04051300.OAX 350 0.75 1193 10.5 -13.7 -40.5 6.9 7.3 16.7 24.2 28.7 133 0.7 2.2 +04051700.FFC 244 0.75 2077 12.2 -12.1 -39.3 6.4 7.4 2.9 2.0 11.6 0 0.3 0.8 +04052300.BUF 215 0.75 1807 13.8 -10.6 -36.5 5.8 7.0 18.8 22.4 24.0 239 0.8 0.6 +04081700.PHX 384 0.75 2729 12.6 -7.9 -35.3 7.1 7.3 6.2 8.0 6.2 60 0.4 1.3 +04081900.DDC 790 0.75 2146 11.7 -6.3 -34.7 6.2 7.5 10.2 4.3 11.0 15 0.2 0.7 +04081900.OTX 728 0.75 1929 9.8 -11.3 -38.9 7.4 7.4 6.2 9.9 15.1 43 0.4 1.5 +04082800.JAN 101 0.75 3714 18.0 -7.5 -33.7 6.4 7.0 1.0 2.6 3.6 12 0.4 0.6 +04082800.PIT 357 0.75 3258 18.3 -6.1 -31.3 5.6 6.7 10.4 7.8 6.8 106 0.3 0.6 +04092800.DNR 1625 0.75 698 7.9 -13.9 -38.7 7.1 6.8 12.4 17.7 21.0 112 0.3 1.0 +04100400.CHS 15 0.75 1850 15.3 -10.7 -36.1 6.0 6.9 13.4 22.1 32.7 81 0.9 0.6 +05022200.BMX 178 0.75 1749 11.8 -15.9 -43.5 6.8 7.6 19.0 26.1 36.8 174 1.4 1.2 +05030700.OAX 350 0.75 324 5.7 -21.9 -50.1 7.4 7.9 13.6 14.9 9.6 156 0.2 0.9 +05042612.JAN 101 0.75 993 9.2 -17.3 -43.3 6.9 7.2 15.7 27.2 35.7 336 0.8 2.2 +05050500.OTX 728 0.75 1601 7.7 -19.1 -46.9 7.3 7.8 8.5 15.7 22.0 35 0.9 1.4 +05082100.OAX 350 0.75 2617 15.5 -6.9 -34.3 6.0 7.3 15.0 14.8 30.9 159 0.5 0.6 +05082400.SHV 79 0.75 3397 16.6 -5.3 -30.5 6.1 6.8 11.1 9.2 4.4 72 0.3 0.6 +06011400.JAX 9 0.75 1223 12.1 -15.1 -42.3 6.5 7.5 19.7 19.6 26.7 233 0.7 0.7 +89052800.CKL 140 0.75 2098 15.4 -8.1 -34.6 6.2 7.1 8.0 11.8 13.5 43 0.4 0.6 +89060400.PAH 126 0.75 3338 16.4 -9.7 -37.6 5.8 7.5 15.5 14.2 14.7 90 0.9 0.6 +89060700.AHN 246 0.75 2402 14.2 -13.0 -38.1 6.6 6.8 2.7 12.3 18.6 37 0.8 0.6 +89061300.CKL 140 0.75 2677 16.1 -8.6 -32.8 6.1 6.4 11.5 15.9 7.3 102 0.7 0.6 +89061500.AHN 246 0.75 1717 14.7 -7.5 -31.3 5.5 6.3 11.8 10.0 9.8 91 0.2 0.6 +89061600.ACY 23 0.75 2243 16.5 -7.6 -34.5 5.9 7.2 19.5 18.8 19.1 217 0.6 0.6 +89062200.CKL 140 0.75 2986 16.1 -10.1 -37.3 6.7 7.3 6.8 10.0 8.5 76 0.7 0.6 +89062300.GRB 210 0.75 1729 14.6 -8.4 -34.6 6.2 7.0 10.0 10.7 10.8 139 0.3 -999.0 +89062300.OUN 357 0.75 3217 16.0 -7.1 -34.1 5.9 7.2 6.9 12.8 14.9 113 0.6 0.6 +89062700.PIT 360 0.75 2924 16.0 -9.1 -33.7 6.8 6.6 7.9 8.1 4.9 69 0.5 0.6 +89070800.AHN 246 0.75 2876 16.8 -6.5 -32.3 5.8 6.8 4.3 4.1 4.8 33 0.2 0.6 +89071100.DDC 791 0.75 1858 11.9 -8.1 -35.3 7.6 7.3 12.4 8.5 14.0 249 0.3 2.1 +89072900.SIL 8 0.75 4031 18.8 -6.8 -31.8 6.3 6.6 3.9 4.1 4.4 37 0.4 0.6 +89073000.PAH 126 0.75 3630 17.9 -7.0 -33.2 6.4 7.0 7.4 11.4 9.0 58 0.6 0.6 +89073100.TOP 268 0.75 2685 14.5 -6.4 -31.4 6.7 6.7 12.0 9.8 13.0 117 0.4 0.6 +89081200.GRB 210 0.75 1782 11.3 -14.8 -41.6 6.7 7.3 3.9 4.1 9.5 39 0.3 0.6 +89081900.HON 392 0.75 984 13.1 -7.6 -33.3 7.1 6.8 12.1 14.0 17.9 244 0.2 -999.0 +89102800.OUN 357 0.75 1679 12.0 -12.7 -39.4 6.8 7.3 8.3 10.1 27.1 115 0.4 1.0 +90033100.TBW 13 0.75 2515 14.8 -10.0 -38.4 5.6 7.7 12.0 14.0 15.0 135 0.6 0.6 +90042100.OUN 362 0.75 1915 12.4 -14.1 -40.9 6.5 7.3 13.1 25.3 31.9 138 1.3 1.7 +90042200.SEP 399 0.75 2775 13.3 -11.7 -40.8 6.5 7.9 8.1 10.2 20.8 98 0.7 1.0 +90042400.1M1 172 0.75 2374 12.8 -12.6 -40.0 6.7 7.5 6.6 14.0 8.3 56 0.9 0.9 +90052500.MAF 873 0.75 3262 13.1 -7.2 -34.0 7.9 7.2 12.4 22.0 30.6 97 1.3 1.8 +90060400.PIT 360 0.75 390 9.5 -12.5 -36.7 5.6 6.5 14.6 26.0 37.7 57 0.2 0.6 +90060700.TBW 13 0.75 3262 17.0 -8.6 -34.5 6.0 6.9 4.1 1.6 7.3 8 0.4 0.6 +90061000.AHN 246 0.75 2847 14.8 -8.2 -33.4 5.9 6.7 5.6 8.6 9.9 50 0.4 0.6 +90070300.SLI 8 0.75 3250 18.4 -5.7 -32.8 5.8 7.2 7.5 11.8 14.5 79 0.4 0.6 +90070800.TBW 13 0.75 5452 20.0 -8.1 -31.6 6.5 6.2 5.9 7.8 15.4 11 0.7 0.6 +90072200.CHS 13 0.75 3537 18.4 -7.5 -32.4 6.2 6.7 7.1 8.3 10.2 88 0.4 0.6 +90072200.PAH 126 0.75 2541 16.9 -5.6 -30.4 5.7 6.6 11.4 13.3 15.3 80 0.4 0.6 +90072700.DDC 791 0.75 3550 14.7 -7.0 -32.7 7.6 6.8 6.0 7.6 7.2 84 0.5 2.2 +90072800.TOP 268 0.75 3231 16.5 -7.8 -32.8 6.7 6.6 9.8 8.8 11.3 281 0.5 0.9 +90073100.JAN 91 0.75 2834 14.6 -7.3 -33.8 6.1 7.0 0.7 5.1 4.3 -3 0.3 0.6 +90080400.STC 315 0.75 2284 13.1 -12.5 -34.8 7.3 6.0 8.7 5.3 20.0 45 0.5 1.4 +90081400.ALB 86 0.75 1251 14.6 -7.6 -33.8 5.7 7.0 20.7 31.1 21.6 261 0.5 0.6 +90081400.MAF 873 0.75 1598 13.7 -7.1 -32.0 6.2 6.6 2.3 4.4 16.6 35 0.2 0.6 +90081700.CHS 13 0.75 3949 19.5 -6.9 -32.2 5.7 6.7 11.2 14.2 20.9 101 0.7 0.6 +90081900.DEN 1611 0.75 1982 11.7 -7.8 -35.3 7.6 7.4 6.4 10.2 22.1 25 0.3 1.7 +90082000.PIA 200 0.75 4350 19.3 -6.5 -31.2 6.2 6.5 9.4 12.0 9.9 67 0.7 0.6 +90082200.BNA 180 0.75 2619 15.5 -6.1 -32.3 6.1 6.9 8.7 9.1 12.7 -10 0.3 0.6 +90082300.GGG 124 0.75 3016 16.2 -5.9 -30.3 6.0 6.4 5.3 1.3 5.5 35 0.2 0.6 +90082500.OUN 357 0.75 2800 15.7 -6.4 -31.1 6.6 6.6 5.3 5.0 11.9 63 0.3 0.6 +90082500.OVN 400 0.75 3418 17.2 -7.1 -33.6 6.4 7.0 10.0 12.0 21.9 181 0.6 0.7 +90083000.ACY 23 0.75 2413 15.2 -9.3 -34.4 5.8 6.8 9.0 13.9 22.7 62 0.6 0.6 +90101700.MAF 873 0.75 2870 12.3 -12.5 -40.6 8.0 7.7 7.7 14.9 16.2 78 1.3 2.3 +91051700.TBW 13 0.75 3306 16.1 -7.5 -34.7 5.4 7.2 3.8 4.0 0.9 -5 0.3 0.6 +91060600.CKL 140 0.75 2864 16.3 -8.6 -33.4 6.4 6.6 6.2 8.9 11.4 21 0.5 0.6 +94062400.GGG 124 0.75 3754 18.0 -5.5 -30.6 6.3 6.6 8.2 11.0 14.2 98 0.5 0.6 +94062400.HTS 246 0.75 2798 16.5 -5.5 -30.1 5.3 6.5 4.7 8.5 15.0 39 0.2 0.6 +94070200.LCH 5 0.75 2754 17.0 -6.8 -32.4 6.4 6.8 12.4 10.7 11.0 84 0.4 0.6 +97061700.BMX 178 0.75 3829 18.2 -6.9 -31.5 5.9 6.5 6.9 12.4 13.0 48 0.6 0.6 +97062400.MAF 872 0.75 3310 14.1 -9.9 -32.7 8.9 6.1 13.0 11.5 8.6 108 1.1 1.6 +97081700.TBW 13 0.75 3152 17.4 -7.3 -32.7 6.2 6.8 1.8 2.6 4.4 8 0.3 0.6 +97081800.SLC 1288 0.75 931 8.3 -10.3 -36.9 8.5 7.2 13.6 16.1 22.9 203 0.3 1.4 +97082200.ILN 317 0.75 520 9.6 -16.3 -41.3 5.8 6.9 3.9 17.5 30.9 50 0.2 0.7 +98062500.JAN 101 0.75 3507 17.3 -6.1 -32.3 6.0 7.0 7.1 2.3 8.6 -1 0.3 0.7 +98081000.SHV 79 0.75 3464 16.8 -6.5 -33.5 5.9 7.2 4.2 4.8 1.1 42 0.3 0.6 diff --git a/ncep/gov.noaa.nws.ncep.ui.nsharp/localization/ncep/nsharp/sup.txt b/ncep/gov.noaa.nws.ncep.ui.nsharp/localization/ncep/nsharp/sup.txt index cca2be1f0a..6556f7df38 100755 --- a/ncep/gov.noaa.nws.ncep.ui.nsharp/localization/ncep/nsharp/sup.txt +++ b/ncep/gov.noaa.nws.ncep.ui.nsharp/localization/ncep/nsharp/sup.txt @@ -1,939 +1,939 @@ -FILENAME CAT MLMIXR ML CAPE ML CIN MLCL(MAGL) 0-1SRH 0-6KT STPC 500 T (C) 500DIR 7-5 LR 0-3(KT) 0-9(KT) 0-3 KM SRH (M2/S2) -00042320.TXK 2 12.9 1702 -1 657 134 61.7 2.3 -14.0 250 6.5 32.8 76.6 166 -00042001.PPF 2 13.5 2614 -50 1216 227 59.9 4.7 -12.9 234 7.5 39.7 73.5 244 -00032900.FTW 2 13.1 2058 -42 1069 83 49.7 1.3 -15.2 245 8.0 21.9 87.1 126 -00032304.SJT 2 11.9 1680 -119 896 119 61.1 1.1 -15.5 212 9.1 38.4 66.9 217 -00031622.ATT 2 9.4 1019 -7 1566 12 45.8 0.0 -17.5 249 8.0 34.4 53.7 159 -00021323.LRF 2 9.2 1256 -9 1066 82 46.9 0.8 -21.2 249 7.5 32.3 51.4 114 -00010323.MEI 2 13.4 1148 -15 769 241 57.2 2.6 -10.0 226 6.1 38.8 71.2 288 -00010319.GWO 2 12.8 1168 -9 770 202 66.4 2.4 -13.0 223 7.5 47.3 75.1 246 -03050500.UMN 2 13.8 2392 -10 773 341 66.3 8.2 -13.4 237 7.7 49.1 93.8 411 -03050500.JBR 2 15.7 2713 -22 862 266 57.8 6.9 -10.7 240 7.1 50.5 82.9 440 -03050421.TUL 2 16.1 3621 -15 843 147 63.1 5.3 -11.7 230 7.3 45.6 100.2 160 -03050421.MKC 2 13.7 2002 -67 478 479 68.4 8.5 -14.6 224 7.9 48.1 89.8 508 -03050420.P#F 2 15.7 3397 -1 660 166 58.5 5.5 -12.7 230 7.8 34.3 100.9 195 -03050321.P#T 2 12.7 3156 -2 1967 61 36.2 0.0 -9.8 247 7.5 27.2 67.1 207 -03042503.JAN 2 13.5 2568 -27 924 257 44.3 4.9 -15.4 255 7.7 41.1 76.9 279 -03041922.PNC 2 11.5 1157 -40 665 212 87.9 2.5 -17.9 223 7.3 46.5 111.5 242 -03041523.CDS 2 10.7 1020 -106 1534 326 74.0 1.0 -12.4 234 7.5 56.1 83.8 531 -03041522.LBB 2 8.8 883 -53 1986 116 77.2 0.0 -11.7 243 7.5 48.5 87.4 276 -03040702.CLN 2 13.1 488 -133 780 363 62.7 0.8 -11.4 244 7.1 33.6 74.1 411 -03040623.ESF 2 15.8 1847 -29 621 166 51.8 2.6 -11.0 246 6.8 26.8 50.8 161 -03032722.MIA 2 12.4 299 -31 1074 187 48.8 0.4 -10.5 261 5.8 20.5 87.0 197 -01061900.ROS 2 13.6 2218 -30 1076 140 67.7 2.9 -11.1 250 8.2 40.5 73.6 279 -01061401.LNK 2 17.2 4665 -15 1190 173 39.2 4.3 -10.5 215 8.3 32.6 50.7 217 -01061120.ILL 2 14.7 3400 -120 1255 270 56.1 3.4 -10.8 259 8.6 41.9 54.8 448 -01060222.LOZ 2 9.7 164 -10 898 117 51.4 0.2 -13.4 270 5.3 39.8 66.8 189 -01053000.AMA 2 13.0 2887 -76 1322 166 48.4 2.2 -10.1 246 8.4 38.6 50.6 216 -01052902.LHX 2 10.9 1698 -120 1285 185 52.1 1.0 -10.0 251 8.2 38.9 60.5 365 -01052118.OZW 2 12.5 494 -2 775 133 33.4 0.4 -10.3 188 5.6 34.2 36.9 174 -01052022.MIN 2 16.9 3331 -2 711 122 47.8 3.2 -11.0 244 7.3 36.0 67.7 201 -01051022.MIW 2 12.8 2912 -24 1091 65 36.4 1.0 -16.0 255 7.9 28.8 43.0 141 -01051001.FBL 2 9.5 2106 -90 1776 330 50.0 1.0 -16.6 265 8.2 42.9 50.3 516 -01050200.AUM 2 11.2 1434 -74 1331 179 38.8 0.9 -13.3 251 7.5 36.0 52.3 237 -01042202.GBD 2 12.6 2145 -40 777 165 61.8 3.5 -13.6 229 7.8 41.6 62.6 328 -01041423.P28 2 12.3 2168 -54 827 145 76.4 3.1 -16.2 256 8.3 45.0 89.5 235 -01041117.LWD 2 11.9 968 -3 632 282 77.0 2.7 -15.1 208 7.5 38.2 81.4 327 -01040918.BVI 2 10.7 1326 -11 1210 102 57.2 1.0 -15.4 266 7.7 32.1 32.1 174 -01022422.SGT 2 11.8 1020 -15 967 335 52.8 3.0 -14.3 213 7.7 53.6 64.9 450 -00110820.HEZ 2 15.9 2158 -6 881 236 47.1 4.0 -8.5 204 6.2 29.0 68.5 266 -00103122.HLC 2 11.0 1274 -14 954 110 47.4 1.1 -14.1 202 7.4 32.6 74.4 169 -00092022.DAY 2 13.9 1299 -7 971 215 63.4 2.8 -8.2 237 6.1 37.5 61.0 237 -00072601.OTG 2 14.5 2869 -49 1055 88 42.5 1.7 -12.6 290 7.2 33.4 41.3 161 -00072523.RWF 2 14.6 2791 -13 1068 96 39.4 1.6 -12.0 275 7.0 29.2 35.8 163 -00071122.BKX 2 14.7 1167 -47 944 134 42.8 1.1 -7.8 261 6.8 27.2 67.9 205 -00070601.SNY 2 13.6 2847 -18 1681 52 57.5 0.5 -7.4 248 8.1 19.0 74.4 122 -00052319.BWG 2 13.7 2114 -41 1128 167 38.6 2.0 -11.4 294 6.9 36.9 62.8 278 -00051722.LXN 2 14.0 3552 -16 910 111 27.5 1.8 -13.9 169 8.4 28.1 44.5 170 -00051200.ALO 2 16.5 4382 -13 1110 168 51.1 5.6 -7.9 254 6.7 33.2 51.6 199 -00050101.MWL 2 13.0 2207 -103 1176 253 47.3 2.4 -12.4 227 8.2 40.3 37.8 297 -00042323.SHV 2 13.4 2001 -19 928 216 58.9 4.2 -13.0 261 6.7 41.9 60.0 296 -04051923.GFK 2 11.2 967 -44 828 233 54.9 2.1 -16.6 243 7.2 39.5 86.1 229 -04051302.ICT 2 15.9 3157 -12 538 223 36.4 4.3 -9.4 232 6.4 23.8 51.5 245 -04051101.LIC 2 9.0 1549 -59 1592 233 43.4 1.0 -11.5 244 8.4 35.1 46.6 395 -04042022.PIA 2 12.4 1852 -11 728 320 36.4 3.6 -14.7 235 6.2 38.5 40.1 488 -04032718.DDC 2 10.0 1332 -8 893 190 41.4 1.7 -16.6 206 7.5 30.8 47.5 198 -04030418.ABI 2 10.7 626 -20 1108 319 46.5 1.4 -13.7 196 7.0 40.3 84.2 350 -03111718.HOU 2 16.4 1980 -1 445 137 48.2 2.2 -12.4 207 6.6 24.0 77.0 158 -03111223.MFD 2 8.3 64 -56 890 219 99.1 0.1 -15.7 261 5.7 55.1 123.1 275 -03111220.MIE 2 9.7 388 -1 757 123 91.0 0.5 -15.6 258 5.7 47.1 117.3 205 -03082201.JXN 2 17.2 3046 -36 1091 255 31.0 3.6 -5.9 285 6.6 34.4 33.2 304 -03072122.AVP 2 14.3 1810 -16 1228 162 51.1 1.9 -7.9 239 5.6 45.7 49.9 148 -03072104.CID 2 17.8 2344 -22 462 187 48.9 3.6 -7.0 291 7.0 34.2 63.6 237 -03072101.ALO 2 15.0 1859 -107 921 156 49.6 1.5 -8.0 297 7.0 28.2 58.2 248 -03062500.HON 2 17.0 3737 -23 1021 335 52.2 10.7 -7.4 227 7.5 43.4 61.6 550 -03062422.MHE 2 19.5 5088 -22 717 256 55.5 12.1 -8.0 228 7.9 40.9 58.4 422 -03062421.MHE 2 17.5 3584 -16 768 252 56.0 8.4 -7.9 220 7.8 38.8 57.2 348 -03062302.P#8 2 16.8 3414 -169 1003 367 38.7 1.7 -6.8 227 7.6 30.2 57.1 437 -03062223.P#8 2 17.7 4366 -39 972 253 38.8 7.2 -8.3 246 8.6 34.3 54.7 387 -03061001.P#9 2 12.6 2103 -97 1467 421 51.0 2.8 -11.2 266 7.9 45.5 63.9 651 -03053103.CMI 2 12.6 701 -119 899 482 64.7 1.8 -11.6 292 6.3 36.9 85.1 523 -03053101.ILX 2 12.4 784 -55 1108 474 76.0 3.2 -8.5 294 5.0 45.0 90.9 524 -03051100.UIN 2 14.7 2093 -27 738 302 63.1 6.3 -11.7 240 7.7 43.7 97.9 354 -03051004.C34 2 17.3 3493 -14 749 452 53.6 14.1 -8.8 228 7.7 32.1 77.0 511 -03050923.HBR 2 11.1 1389 -64 2135 137 56.8 0.0 -9.1 231 7.7 35.8 78.1 219 -03050900.C30 2 14.6 1749 -112 819 321 69.8 3.3 -8.9 227 6.8 57.0 72.2 306 -03050823.C34 2 17.9 3605 -25 669 342 65.2 12.3 -7.2 233 7.1 42.3 72.0 318 -03050822.W#N 2 17.4 3730 -13 635 141 70.0 5.3 -10.1 228 7.6 45.5 81.3 173 -03050821.LW1 2 19.1 5309 -6 876 145 63.2 7.7 -8.7 235 7.4 31.6 71.3 182 -03050807.ADM 2 17.1 3114 -53 730 439 47.4 10.6 -9.3 253 8.0 50.2 61.5 608 -03050805.SPS 2 16.0 2409 -148 836 382 44.4 2.4 -9.1 262 7.9 43.1 59.0 798 -03050703.PAH 2 15.8 2873 -49 602 390 36.8 6.9 -13.6 237 7.9 35.3 70.1 454 -03050701.CGI 2 15.1 2935 -47 799 431 61.0 12.6 -14.4 269 7.8 32.8 83.2 580 -03050504.MKL 2 15.6 2334 -16 833 615 59.6 14.3 -9.9 251 7.1 62.0 77.1 842 -03050501.LZK 2 15.9 2390 -18 719 361 67.0 8.6 -11.0 237 7.4 41.7 97.3 397 -99120301.GOK 2 10.2 1811 -12 858 234 47.2 3.3 -21.1 202 8.2 32.4 63.0 262 -99081601.JMS 2 13.6 1255 -165 1044 130 48.5 0.3 -9.9 240 8.1 30.2 89.4 174 -99070900.ONA 2 18.4 3379 -18 992 385 46.0 10.0 -5.8 275 6.5 42.9 49.4 571 -99070400.OSC 2 15.9 1760 -27 1078 101 26.7 0.7 -6.7 320 6.2 28.3 31.6 163 -99060620.HCO 2 14.6 3241 -5 904 65 29.6 1.0 -16.1 175 8.1 26.8 70.8 115 -99060500.IEN 2 12.1 2533 -37 1323 70 52.4 1.0 -11.4 201 8.2 32.9 60.1 191 -99060400.HLC 2 15.7 4348 -16 1101 154 38.3 3.9 -9.3 240 7.5 36.9 40.6 277 -99060200.TBN 2 14.9 2338 -19 838 136 37.3 2.0 -10.3 259 6.5 40.0 21.6 223 -99060123.MKO 2 17.3 3739 0 888 68 38.1 1.6 -10.6 279 7.9 32.2 23.0 135 -99060100.LIC 2 9.1 1877 -49 1439 56 56.8 0.6 -13.7 249 9.2 34.3 62.4 140 -99051621.OMA 2 16.1 4691 0 824 102 38.6 3.1 -14.5 223 8.8 33.7 41.5 176 -99051122.BMQ 2 15.0 3545 -92 1026 40 35.1 0.6 -12.3 259 8.0 21.8 29.6 59 -99050408.JCT 2 13.0 2082 -218 838 355 55.0 0.0 -11.2 254 8.3 46.8 58.7 506 -99050402.GOK 2 13.9 3154 -61 723 366 51.4 9.2 -14.6 240 8.2 36.8 57.5 441 -99050401.ICT 2 12.6 2748 -7 1016 257 31.8 3.7 -14.7 227 7.9 40.5 70.4 415 -99050323.OKC 2 15.2 4117 -15 733 308 43.5 9.2 -13.2 243 7.8 43.2 70.1 401 -99050300.HSI 2 8.0 203 -4 845 168 41.5 0.2 -17.7 222 6.7 28.6 32.1 221 -99042200.END 2 12.7 3301 -34 1156 225 46.1 4.8 -15.4 236 8.1 35.1 48.2 242 -04082700.RDD 2 18.4 3706 -37 940 184 41.0 4.7 -6.9 255 7.1 28.7 60.7 258 -04071823.GFK 2 16.7 3575 -36 1246 117 45.4 2.4 -7.9 310 6.8 35.1 45.5 292 -04071302.GRI 2 15.9 3090 -197 1538 152 29.0 0.0 -7.9 298 8.5 13.8 50.5 173 -04062402.OSH 2 11.1 1428 -30 700 187 62.2 2.7 -16.7 257 6.5 50.9 79.3 234 -04061620.LAA 2 12.3 1494 -63 908 129 51.4 1.5 -9.4 252 7.7 34.1 57.1 369 -04061300.W#N 2 16.4 3866 -17 1255 231 34.6 3.8 -9.2 251 7.9 37.4 44.2 387 -04060701.MOT 2 10.4 295 -316 1541 461 68.3 0.0 -8.4 254 6.7 33.2 82.6 561 -04060621.C02 2 9.9 1824 -59 2285 83 55.5 0.0 -10.8 234 7.9 39.7 69.2 64 -04053023.IND 2 17.3 2618 -10 577 361 58.6 9.2 -9.1 248 6.9 35.7 45.1 369 -04053020.SDF 2 16.6 2653 -2 807 250 52.4 5.8 -9.4 245 6.8 37.1 41.1 317 -04053002.OKC 2 15.5 2559 -32 1162 314 55.7 6.2 -7.3 244 7.0 35.6 70.5 434 -04053002.ICT 2 16.1 3240 -98 992 315 44.2 5.1 -10.4 245 7.9 25.8 56.2 399 -04053000.MCI 2 16.0 3437 -5 863 239 36.5 5.0 -12.8 232 8.3 27.4 42.9 372 -04052922.C33 2 16.5 4081 -4 1356 126 51.4 2.8 -7.8 244 7.4 36.9 74.7 248 -04052921.TOP 2 16.1 3843 -13 936 78 32.5 1.6 -12.5 233 8.0 17.3 39.0 190 -04052421.STJ 2 15.6 3982 -40 991 76 40.4 2.0 -11.9 234 7.7 26.3 67.6 270 -04052300.P#8 2 15.0 3882 -47 1262 228 54.5 5.9 -10.5 233 7.9 34.1 69.9 334 -04052221.MCK 2 13.2 3453 -37 1185 103 72.0 2.9 -12.3 231 8.6 35.5 82.5 224 -04052219.GLD 2 9.9 1898 -54 1700 22 59.0 0.1 -12.7 233 8.4 12.6 69.5 76 -04052122.CID 2 15.4 2960 -48 971 309 36.6 5.6 -11.5 268 7.4 36.1 50.0 390 -53031321.FWH 2 10.8 727 -98 981 119 51.2 0.5 -16.3 248 8.1 30.6 80.9 266 V -55052521.LTS 2 15.0 4060 -25 1509 322 66.4 6.4 -12.3 225 8.6 37.0 53.5 355 V -56041521.GUN 2 11.7 1189 -11 1302 251 72.4 2.1 -13.6 230 7.3 55.7 66.8 370 V -57040221.FWH 2 13.2 3580 -3 942 94 35.8 2.0 -15.8 189 7.9 26.1 52.8 122 V -57052021.TOP 2 14.0 2801 -2 920 142 55.7 3.7 -13.8 207 7.7 48.0 77.2 228 V -57052121.BYH 2 15.7 2854 -5 1106 236 49.7 5.0 -10.9 230 7.2 33.0 92.5 240 V -57061418.PIA 2 15.9 2118 -6 986 394 50.0 7.0 -8.6 252 6.9 52.8 52.1 496 V -59040100.FWH 2 12.6 3068 -26 987 124 42.8 2.7 -17.6 247 9.0 28.0 61.5 142 V -61050800.FSM 2 14.5 2844 -7 1215 261 61.7 5.8 -11.4 240 7.5 42.2 65.9 323 V -61050600.FSM 2 14.3 2667 -12 1121 245 65.5 5.8 -13.1 240 8.3 61.7 43.1 430 V -62052600.OKC 2 14.3 4171 -76 1591 154 33.3 1.2 -12.0 264 8.6 25.3 43.2 228 V -62080700.TOP 2 20.6 6024 -12 1167 160 42.3 5.7 -7.3 250 7.7 32.4 60.6 243 V -64050600.OMA 2 12.7 2395 -61 1048 349 68.6 7.4 -13.8 224 8.8 54.6 89.3 498 V -65041200.FNT 2 11.2 1814 -1 974 166 91.0 3.0 -17.7 250 7.7 46.4 91.6 372 V -66042800.FWH 2 14.1 3342 -17 1291 148 38.0 2.2 -11.8 265 7.2 39.3 49.0 269 V -66030400.HKS 2 12.2 1434 -10 831 138 47.6 1.6 -14.0 234 7.6 49.0 77.8 142 V -67061100.OKC 2 14.4 3497 0 1569 144 32.2 1.2 -11.0 235 8.7 35.0 51.1 260 V -68110400.VPS 2 12.8 1596 -2 812 129 50.5 1.7 -13.4 251 5.9 30.3 72.0 184 V -69041806.VPS 2 15.2 1013 -8 445 370 55.8 3.5 -11.0 248 6.9 42.3 73.3 439 V -69062400.TIK 2 18.4 4403 -4 776 317 37.5 8.7 -9.4 240 7.5 45.3 56.2 431 V -70100600.TIK 2 13.7 1865 -3 772 241 41.1 3.1 -12.2 230 6.7 35.4 55.6 335 V -71022200.JAN 2 12.8 938 -4 930 470 74.7 4.4 -11.8 211 6.7 57.8 77.3 590 V -73052800.MGM 2 16.4 2337 -2 1017 293 53.5 6.0 -7.9 239 6.2 45.6 45.2 386 V -73041600.VCT 2 15.4 2861 -37 1272 385 48.1 6.4 -12.9 231 8.1 35.7 72.2 377 V -74040400.MGM 2 14.8 2955 -2 1017 161 52.0 4.1 -12.8 235 8.2 39.5 59.4 253 V -74040400.BNA 2 14.6 2744 -31 970 209 77.8 5.7 -13.3 238 7.8 57.0 80.2 301 V -74040400.DAY 2 12.8 2185 -7 986 619 90.8 13.5 -13.1 235 7.1 71.9 91.6 919 V -75042500.UMN 2 15.7 5306 -1 837 145 53.3 6.8 -13.8 255 7.3 41.6 61.8 185 V -74060900.UMN 2 17.0 3643 -2 987 363 37.0 8.1 -6.7 231 7.6 41.4 27.5 508 V -75063000.BIS 2 13.6 3158 -76 1566 198 41.8 1.6 -12.3 233 8.6 26.8 55.7 204 V -76042000.SEP 2 13.7 3326 0 1092 305 45.1 6.9 -14.1 240 7.6 33.7 48.9 358 V -77040418.CKL 2 14.1 1633 0 994 247 66.8 4.0 -9.8 231 6.0 52.7 80.0 333 V -78060100.TOP 2 16.2 4279 -1 1160 267 35.7 5.7 -12.7 233 7.6 36.3 57.0 349 V -79041021.SEP 2 12.8 2186 -9 912 345 48.2 6.1 -13.1 228 8.1 42.9 54.3 468 V -79050300.OKC 2 13.9 2775 -4 877 218 73.2 6.0 -12.3 246 7.2 57.7 103.2 279 V -79033000.OMA 2 10.1 1322 -24 1155 223 56.4 2.4 -15.8 232 7.1 49.1 52.9 345 V -80040800.UMN 2 10.2 2256 -3 1473 97 39.6 0.8 -18.5 236 8.4 39.7 92.1 247 V -84060800.TOP 2 16.2 2284 -16 918 560 74.0 12.8 -6.0 237 6.2 49.1 84.6 705 V -84031600.1M1 2 12.2 2339 -1 1056 250 47.1 4.3 -14.9 251 6.9 30.4 55.5 292 V -86072900.OMA 2 16.4 4252 -21 1667 112 48.4 1.3 -10.6 268 8.6 28.2 81.3 151 V -87111600.GGG 2 12.8 1593 -8 723 298 61.9 4.8 -15.3 178 7.9 43.3 65.2 326 V -90061600.LBF 2 16.1 3827 -1 1050 21 42.1 0.5 -10.6 185 8.5 24.5 74.1 95 V -90060300.PAH 2 15.6 2246 -3 1039 274 47.1 4.7 -7.6 251 7.0 57.8 49.8 384 V -91042700.OUN 2 15.8 4387 -8 898 195 50.3 7.2 -11.5 242 7.0 44.2 54.9 370 V -92062800.AMA 2 14.6 3148 -3 1020 83 44.3 1.9 -10.3 249 7.9 32.7 52.7 220 V -92061700.OVN 2 18.7 4878 -1 1119 262 50.4 9.5 -6.5 237 6.9 46.6 64.6 473 V -93042500.OUN 2 11.6 2675 0 1209 113 49.6 2.0 -14.6 235 6.9 35.5 65.5 168 V -93050700.TOP 2 13.7 2046 -7 666 484 58.8 9.7 -13.1 217 7.0 55.4 51.4 644 V -93060700.LBF 2 15.9 4738 0 930 328 59.3 15.3 -8.6 229 7.6 41.9 67.6 583 V -94042600.SEP 2 12.9 2562 -34 1365 201 51.9 2.8 -11.5 258 7.4 41.3 51.0 198 V -95051900.BMX 2 15.7 2868 -5 989 239 39.3 4.5 -9.9 247 6.7 31.9 49.1 230 V -98040900.BMX 2 14.6 2259 -18 642 136 77.9 3.1 -13.9 240 7.9 50.3 100.1 290 V -98041700.BMX 2 14.7 2038 0 704 263 73.4 5.4 -11.9 245 6.8 36.3 98.6 327 V -99050400.OUN 2 13.4 3644 -22 1050 271 41.4 6.5 -14.9 225 8.4 32.0 37.7 343 V -00121618.BMX 2 12.0 1369 -1 737 279 66.9 3.8 -14.1 220 6.7 51.3 90.8 339 V -00092100.ILN 2 12.5 747 -19 1280 611 75.3 3.3 -7.5 240 5.4 64.7 73.0 810 V -01061400.OAX 2 16.8 4639 -1 1278 127 38.6 2.8 -11.3 215 9.0 35.2 48.5 145 V -01112412.JAN 2 13.0 1392 -2 773 366 50.4 4.3 -10.1 225 5.7 52.4 48.8 504 V -01112418.BMX 2 13.4 1498 -1 655 227 52.0 3.0 -11.3 220 6.1 43.1 61.9 319 V -02111018.ILN 2 11.3 1239 0 734 385 54.4 4.3 -13.7 230 6.6 49.5 103.8 417 V -02062400.ABR 2 17.1 4378 0 1112 85 50.6 2.8 -10.5 245 8.2 29.8 57.9 153 V -03050900.OUN 2 17.0 3871 -32 990 336 62.0 13.0 -6.9 235 6.3 53.9 80.1 364 V -94032718.CKL 2 15.5 1965 0 743 344 72.9 6.8 -9.1 233 6.3 54.7 56.0 403 V -81052300.OKC 2 13.1 2411 -70 1142 203 49.1 3.0 -13.7 235 9.0 37.6 49.1 249 V -65041100.LIT 2 12.7 1815 -1 1365 140 52.3 1.4 -11.1 248 7.2 39.4 64.4 212 V -53051121.FWH 2 13.2 1452 -55 1150 122 53.0 1.3 -11.2 248 7.3 40.4 64.4 209 V -90082900.PIA 2 21.0 6470 -2 974 110 33.6 4.0 -7.3 297 7.1 23.3 54.6 147 V -55042411.GUN 2 13.1 1784 -7 917 345 68.7 6.2 -12.7 248 7.1 44.1 85.9 375 V -56040321.HKS 2 13.0 1491 -14 1212 173 82.1 2.0 -12.4 221 7.5 52.1 107.5 267 V -56051221.MTC 2 13.8 2444 -8 1001 124 69.2 3.0 -14.4 266 7.5 25.2 94.3 162 V -60052000.TOP 2 14.3 3120 -23 1112 167 43.1 3.3 -13.3 213 8.2 32.6 58.1 244 V -66060900.TOP 2 15.9 2226 -24 819 296 59.5 6.5 -8.6 223 7.1 47.3 69.8 397 V -68082000.GRB 2 16.1 2780 -11 1217 173 50.0 3.1 -7.3 258 6.4 27.0 43.6 195 V -74040318.BNA 2 13.0 2906 -5 1157 205 63.1 5.0 -15.5 229 8.2 48.6 76.4 333 V -61051500.PIA 2 12.4 1259 -2 817 196 68.7 2.5 -13.0 202 6.6 36.7 80.9 205 V -54050121.TIK 2 13.0 1988 -17 709 242 56.2 4.5 -13.5 203 8.0 39.2 73.2 282 V -55060421.SLN 2 13.4 3594 -5 1422 36 25.3 0.3 -12.7 225 7.9 23.8 30.4 152 V -70061300.COU 2 16.5 3499 -11 949 204 64.2 7.2 -7.8 246 5.5 49.6 57.1 318 V -76032700.1M1 2 11.8 1820 -17 961 187 41.8 2.4 -17.1 230 8.2 57.3 71.8 243 V -04071318.ILX 2 19.0 4958 -10 1102 117 37.5 3.3 -10.9 305 7.9 33.8 45.3 197 V -68051600.LIT 2 15.6 2612 -4 971 250 52.8 5.7 -11.7 260 8.6 45.5 72.5 337 V -65031700.OKC 2 11.1 1628 -3 687 269 91.0 4.4 -17.9 235 7.1 58.8 114.4 325 V -00061300.DIK 1 11.1 1786 -3 1286 88 51.7 1.0 -13.3 237 7.5 40.6 50.2 180 -00061122.MOT 1 11.3 2235 -22 1420 120 55.4 1.4 -14.8 231 7.6 39.0 57.9 252 -00060802.JDN 1 7.4 755 -232 3045 106 49.5 0.0 -10.8 230 8.9 34.6 71.9 282 -00060402.OFK 1 10.0 668 -199 1628 156 44.9 0.0 -11.7 284 7.7 38.1 49.1 406 -00060402.NFW 1 16.8 1734 -9 639 117 28.9 1.0 -7.5 270 5.9 23.5 32.0 202 -00052719.MAR 1 16.0 4104 -12 1610 26 26.6 0.2 -12.4 258 8.8 17.5 43.3 95 -00052700.THK 1 14.7 3226 -62 1771 46 35.7 0.2 -9.0 238 8.3 28.1 55.2 83 -00052700.ADK 1 15.9 4170 -7 1457 60 38.4 0.9 -10.1 248 7.9 22.8 55.2 91 -00051202.LWC 1 16.0 3233 -93 1098 243 43.4 3.7 -7.0 245 6.5 28.2 57.5 246 -00050802.RWF 1 11.7 1550 -17 1609 79 45.4 0.4 -12.5 230 7.1 29.3 54.1 203 -00050702.TOR 1 8.6 1203 -94 1663 106 57.4 0.3 -15.3 235 9.1 39.5 72.5 258 -00042622.ONL 1 6.5 337 -109 1466 129 40.6 0.1 -21.7 284 8.4 30.1 73.0 229 -00042118.EZF 1 10.3 898 -4 877 28 58.9 0.3 -17.2 220 6.6 30.7 62.4 94 -00032902.CRS 1 14.5 2234 -6 743 161 50.8 3.0 -14.0 258 7.8 26.8 92.5 244 -00032823.DTO 1 12.9 2286 -24 1256 75 45.3 1.0 -14.5 246 7.7 20.6 88.2 121 -00032701.BAZ 1 14.1 1797 -31 945 101 61.6 1.8 -10.9 294 7.0 32.6 86.8 184 -00032623.MLC 1 11.7 1998 -24 1176 73 50.5 1.0 -14.4 296 6.9 29.7 68.1 193 -00032221.UPT 1 11.4 2370 -12 1181 167 63.0 3.2 -15.3 196 8.2 44.6 83.1 213 -00032207.ODO 1 11.4 1900 -1 561 280 54.6 4.9 -16.5 195 8.4 45.8 80.2 519 -00032207.DRT 1 13.4 2593 -107 837 215 40.0 2.3 -14.9 225 8.9 40.7 64.3 569 -00032201.DYS 1 9.6 140 -194 1028 77 44.2 0.0 -12.2 197 6.4 33.8 61.9 126 -00031523.END 1 9.1 877 -2 1153 56 37.8 0.3 -16.7 241 6.6 26.4 36.5 119 -00031023.BMQ 1 12.1 2702 -18 1209 70 48.2 1.2 -14.5 275 7.6 28.5 52.2 143 -00030823.MKE 1 11.0 1510 -13 1038 185 54.8 2.5 -16.1 213 6.7 42.7 47.9 221 -00030208.MAF 1 11.4 1969 -62 631 373 64.7 6.7 -16.7 225 8.8 39.2 68.5 410 -00022502.ARN 1 11.3 2487 -19 846 226 54.1 5.1 -16.8 208 8.1 38.3 67.9 247 -00022303.DLF 1 8.7 884 -128 1728 29 68.1 0.0 -16.1 277 7.8 32.4 70.9 86 -01042100.SUX 1 8.8 765 -22 1661 84 43.9 0.2 -16.8 206 7.9 27.0 64.5 204 -01041123.BIV 1 12.3 587 -74 777 368 64.3 1.8 -11.6 220 5.9 42.8 48.1 410 -01041107.ADH 1 11.8 556 -140 952 259 56.9 0.5 -12.1 207 7.2 40.1 68.6 271 -01041100.SUS 1 13.7 2171 -35 926 93 64.4 2.0 -12.3 258 6.5 38.6 74.7 252 -01041022.SZL 1 14.3 2693 -55 696 170 63.3 4.4 -12.9 245 6.7 37.7 83.2 242 -01040923.PIA 1 11.9 2755 -12 1469 63 57.1 0.9 -15.8 272 7.5 28.4 73.8 164 -00111220.HYI 1 15.0 1358 0 575 130 66.4 1.8 -11.5 257 7.0 30.5 99.4 240 -00110822.TUP 1 14.5 1023 -4 743 229 62.2 2.3 -9.9 225 6.6 34.8 71.9 291 -00110121.BIS 1 8.9 739 -22 512 134 42.6 0.7 -21.9 135 8.3 30.9 61.9 177 -00103122.FNB 1 12.8 1776 -6 916 106 37.0 1.2 -13.0 217 6.9 22.0 45.0 157 -00102922.LNK 1 10.2 657 -14 724 192 49.1 1.0 -16.4 188 6.2 32.0 43.8 218 -00102919.AUH 1 8.7 191 -3 740 83 38.8 0.1 -16.4 158 6.1 31.7 39.6 118 -00102900.JCT 1 12.1 704 -63 868 232 49.5 1.2 -10.5 218 7.0 32.5 72.8 338 -00102818.GOV 1 11.9 922 -5 443 156 35.8 0.9 -12.3 192 6.7 29.9 31.1 195 -00102423.ODO 1 12.0 1308 -7 918 73 40.2 0.6 -11.4 215 7.4 30.0 51.0 103 -00102300.TIK 1 13.8 1236 -5 453 143 32.3 1.0 -11.8 212 6.3 24.0 44.2 171 -00102123.WLT 1 12.4 655 -43 561 114 29.4 0.4 -11.7 196 5.0 24.0 39.6 153 -00090201.GXY 1 10.1 1399 -61 1894 64 48.6 0.1 -8.8 219 8.0 24.5 58.2 133 -00081501.OEO 1 16.6 2661 -111 1084 275 47.1 3.1 -7.7 281 7.5 38.3 69.3 408 -00072500.ANW 1 14.5 3660 -50 1579 99 43.1 1.1 -9.2 307 8.3 23.5 62.3 152 -00072302.LAA 1 11.0 1368 -108 1806 33 48.7 0.0 -8.9 325 7.7 25.9 61.1 115 -00072104.P28 1 14.3 1660 -216 1167 146 41.4 0.0 -9.2 286 7.8 30.2 58.9 374 -00072004.GLD 1 12.8 1625 -153 1450 69 50.3 0.2 -8.9 286 8.4 26.3 57.9 113 -00071823.SUS 1 17.9 2488 -23 946 101 35.0 1.5 -7.4 262 6.2 32.7 35.7 194 -00071023.GGW 1 11.5 1838 -22 1490 19 53.5 0.2 -11.1 239 6.6 29.9 73.1 81 -00070823.RPD 1 18.8 4320 -44 798 124 39.2 3.5 -8.3 282 6.7 21.3 43.9 183 -00070802.LJF 1 19.5 4388 -7 680 348 43.9 11.2 -9.0 258 8.4 34.1 50.6 438 -00070600.OVE 1 7.4 115 -46 1571 14 34.5 0.0 -17.8 243 7.0 10.2 60.4 40 -00070400.MCK 1 14.2 1661 -19 1452 131 41.3 0.8 -6.2 236 6.6 26.2 46.5 200 -00070222.RYV 1 15.9 2122 -22 737 96 36.0 1.2 -9.2 288 5.9 30.2 35.4 223 -00062923.GLD 1 11.9 2724 -35 2040 95 44.6 0.0 -10.0 295 8.8 34.1 62.4 180 -00062522.AMA 1 13.7 3217 -9 2155 26 36.2 0.0 -6.9 271 8.3 18.7 36.3 97 -00062501.HAO 1 13.1 422 -35 1552 152 35.2 0.2 -7.7 249 5.7 29.2 32.5 226 -00062019.MTO 1 15.3 938 -10 830 185 29.7 0.9 -7.9 246 6.3 38.8 17.7 268 -00062001.HSI 1 14.0 1763 -84 1164 234 40.3 1.8 -8.2 248 7.0 27.7 49.5 343 -00061621.IPT 1 16.3 2224 -6 898 126 25.2 1.2 -7.2 258 5.6 34.7 21.7 251 -00061323.PRT 1 14.6 3313 -86 1730 52 37.5 0.2 -7.5 265 8.2 21.9 60.1 117 -00061321.RDK 1 17.0 3477 -23 902 260 35.7 5.4 -9.8 237 7.9 30.5 30.4 304 -00061300.LBF 1 10.3 2216 -34 2374 46 34.8 0.0 -10.3 241 8.4 19.0 34.1 135 -00061300.GFK 1 11.1 1031 -80 1371 163 45.4 0.6 -13.5 239 7.2 30.8 40.7 248 -03031919.CSV 1 9.7 329 -12 552 167 68.4 0.6 -16.4 213 7.0 45.4 103.6 306 -03031917.CSV 1 9.6 129 -21 493 196 62.6 0.3 -16.0 222 6.7 61.8 100.8 422 -03031915.HSV 1 10.9 546 0 538 221 80.9 1.2 -16.0 224 6.4 51.0 103.8 393 -03031800.FSI 1 11.0 983 -10 789 157 47.9 1.2 -17.1 242 7.4 21.2 84.6 148 -03031722.SPS 1 10.7 981 -38 1183 127 34.3 0.6 -15.4 236 7.3 19.3 95.8 139 -03031721.HBR 1 10.6 1028 -46 917 133 27.4 0.6 -15.9 217 7.1 22.3 90.0 154 -01062101.DEN 1 8.5 516 -90 1464 2 57.2 0.0 -10.9 293 7.2 41.8 50.9 136 -01061403.DDC 1 14.7 4480 -83 1698 161 58.3 1.7 -11.1 234 9.3 30.0 58.2 280 -01061323.PQN 1 15.8 3695 -5 1047 117 31.9 2.2 -10.3 212 8.0 28.2 46.4 193 -01061000.MBS 1 8.3 401 -7 1604 78 43.1 0.1 -16.3 312 6.3 19.1 70.0 124 -01060923.BIS 1 13.0 2950 -51 1333 25 50.8 0.4 -12.4 272 7.7 30.4 52.9 158 -01060521.P28 1 15.5 2749 -10 880 99 38.9 1.8 -11.4 241 8.1 28.3 45.3 182 -01060521.CDS 1 15.0 3410 -11 1645 9 34.8 0.1 -9.6 266 8.0 23.5 28.9 110 -01060421.LIC 1 8.2 167 -117 1162 92 45.0 0.1 -12.6 233 7.5 32.1 65.5 170 -01060402.WLD 1 15.9 3250 -135 778 339 39.0 3.1 -9.4 254 8.1 35.7 49.4 535 -01060121.MXO 1 8.9 416 -12 968 81 51.7 0.3 -17.7 275 6.4 33.3 51.6 153 -01053000.CDS 1 13.5 2478 -201 1327 184 58.9 0.0 -9.9 240 8.4 43.6 59.7 269 -01052423.JCT 1 11.1 2121 -41 2081 21 42.8 0.0 -12.9 298 8.3 34.2 39.7 254 -01052423.BHM 1 10.8 1036 -32 1179 118 47.3 0.8 -14.7 258 6.9 44.8 49.5 280 -01051022.OLZ 1 11.3 1843 -33 1200 61 42.2 0.6 -15.7 256 7.4 31.2 46.0 179 -01050823.CNK 1 8.0 560 -40 1902 58 51.8 0.0 -16.7 317 7.3 21.6 51.7 171 -01050621.ILE 1 16.4 3719 -9 838 53 30.9 1.0 -13.1 261 7.0 24.3 54.4 118 -01050621.1F0 1 14.4 2826 -1 776 124 27.7 1.6 -13.9 256 6.8 24.7 55.3 157 -01050602.COT 1 16.2 2790 -11 863 180 42.4 3.6 -10.7 247 7.2 33.3 76.0 223 -01050601.HBR 1 10.8 1071 -47 991 113 60.9 1.2 -14.6 218 6.8 35.4 66.2 149 -01050600.WLD 1 10.9 813 -3 986 94 45.9 0.6 -13.4 211 6.5 34.0 50.5 174 -01050521.ACT 1 14.9 2393 -3 716 65 41.0 1.1 -11.6 229 6.7 21.6 53.3 125 -01050422.FNB 1 13.2 1315 -10 654 80 33.2 0.6 -12.0 205 5.5 25.5 43.0 144 -01050412.SPS 1 13.3 1511 -11 818 233 45.0 2.6 -11.2 211 5.9 37.5 53.7 290 -01050223.CDS 1 12.5 3652 -132 1895 166 31.7 0.2 -13.0 217 9.2 26.5 37.9 210 -01050123.RPD 1 11.7 2374 -31 1338 213 46.8 2.6 -14.3 249 7.2 38.7 54.2 348 -01050123.RGK 1 12.1 2710 -41 1464 239 44.1 2.6 -14.6 250 7.7 37.9 54.3 370 -01050100.TQE 1 9.6 1164 -13 1373 125 29.7 0.5 -16.8 267 7.6 24.5 30.9 158 -01050100.BGD 1 8.6 1497 -7 2135 23 54.7 0.0 -14.0 327 8.0 22.4 64.0 136 -01042300.OAX 1 11.5 527 -10 586 257 62.9 1.4 -12.4 193 5.9 51.0 62.5 288 -03060800.ECG 1 15.9 456 -52 671 256 26.7 0.5 -5.9 244 4.7 33.3 37.0 264 -03060500.CVS 1 8.5 804 -116 2160 108 56.7 0.0 -9.7 295 8.0 53.0 55.1 313 -03060422.TCC 1 10.6 1847 -48 1858 84 47.9 0.2 -10.4 290 8.6 41.0 53.3 227 -03060103.BFF 1 11.3 1434 -103 1288 72 46.7 0.4 -9.1 291 7.2 22.6 47.7 113 -03052820.PIA 1 11.7 1566 -31 860 135 36.1 1.3 -16.6 318 7.2 30.1 54.2 203 -03052323.V#L 1 10.7 657 -22 998 134 47.6 0.7 -13.2 312 7.1 36.4 63.1 269 -03051401.TXK 1 13.6 1354 -97 1023 210 48.8 1.5 -11.3 301 7.8 39.5 74.4 571 -03051323.C04 1 12.3 338 -272 641 212 57.3 0.0 -12.4 299 8.0 32.1 67.8 353 -03050920.FVX 1 13.5 1153 -108 1077 253 59.2 1.6 -11.6 288 7.8 44.4 56.6 335 -03050918.CHO 1 15.0 1961 -22 782 298 58.7 5.7 -11.4 296 7.3 46.4 63.9 473 -03050800.ABI 1 11.7 1368 -77 2113 150 68.5 0.0 -6.9 244 6.8 41.7 79.4 428 -03050721.ANB 1 14.0 798 -104 694 354 51.0 1.5 -9.4 268 6.5 39.0 46.7 422 -03050719.BMX 1 15.8 2069 -6 591 233 43.2 3.5 -10.7 274 6.8 31.7 48.0 302 -03050700.FAM 1 13.4 2397 -56 1026 270 72.9 6.1 -14.5 269 7.6 38.6 77.4 402 -03050518.MKL 1 15.9 2561 0 610 165 70.0 4.2 -11.5 253 7.0 46.3 90.9 195 -03050423.C35 1 15.5 2257 -12 619 309 68.9 7.0 -11.1 234 7.3 35.2 111.6 297 -03050421.ADM 1 16.6 3573 -3 898 108 77.1 3.9 -8.7 238 6.2 51.9 109.7 213 -03050320.BFF 1 7.9 1569 -35 1574 91 55.3 0.6 -17.6 237 9.1 30.0 121.3 150 -03050121.TUL 1 15.3 4038 -2 592 93 35.5 2.2 -13.9 263 7.7 27.5 53.2 205 -03043023.FOE 1 13.9 4015 -6 1059 116 26.7 2.0 -14.3 236 7.7 24.7 34.3 165 -03042821.BYI 1 4.3 220 -74 1877 74 40.4 0.0 -21.3 217 8.4 19.6 47.5 151 -03042522.MGM 1 13.1 2112 -13 1028 106 63.3 2.2 -14.2 266 6.8 41.2 42.5 199 -03042521.LWT 1 6.2 193 -34 1157 84 33.2 0.1 -19.0 194 7.6 23.8 44.0 191 -03042518.TCL 1 11.3 524 -50 815 216 66.5 1.1 -14.0 256 6.7 54.5 74.3 295 -03042423.PIB 1 13.2 710 -91 552 278 47.4 1.1 -13.2 256 7.3 29.9 47.5 367 -03042422.FOE 1 9.2 537 -24 443 119 31.9 0.3 -19.7 184 6.7 33.6 18.6 155 -03042419.BTR 1 14.3 2208 -2 816 43 52.0 0.8 -13.0 244 7.4 27.5 46.2 86 -03041923.MLC 1 12.8 1448 -52 744 271 64.7 3.9 -11.2 230 5.7 51.5 81.0 283 -03040618.JAN 1 12.9 801 -40 747 201 51.3 1.4 -14.4 243 7.5 28.4 87.0 298 -03040614.MLU 1 13.4 517 -86 382 358 50.8 1.2 -13.9 229 7.4 36.9 73.2 428 -03040601.FWD 1 11.1 461 -111 865 325 67.8 0.9 -13.5 245 6.9 40.1 93.4 563 -03040420.SPI 1 11.2 1687 -7 802 102 38.9 1.1 -17.7 252 7.6 39.5 59.0 176 -03032721.PBI 1 12.4 384 -64 873 185 47.9 0.5 -12.0 240 6.3 8.1 99.7 189 -03032720.TMB 1 13.5 878 -5 1007 102 59.6 0.9 -10.7 241 5.9 21.4 97.6 157 -04040822.ROW 1 7.6 885 -35 1457 25 42.6 0.1 -16.3 225 7.7 31.8 52.9 136 -04040616.VCT 1 13.2 671 0 457 159 42.0 0.8 -12.5 228 5.9 29.4 48.5 233 -04040615.CRP 1 14.5 1276 0 405 109 39.2 0.9 -12.3 238 7.0 30.2 44.3 209 -04032723.C33 1 12.5 2394 -14 752 342 44.2 6.0 -15.0 235 7.2 45.6 56.4 529 -04032721.C33 1 12.5 2248 -11 742 183 42.7 2.9 -14.5 230 7.1 29.5 50.7 257 -04032718.GAG 1 11.6 1959 -2 705 243 43.2 3.4 -16.1 217 7.9 33.2 51.9 263 -04020601.TCL 1 11.9 190 -48 628 310 45.1 0.4 -12.7 222 6.4 48.7 58.2 536 -03111803.GLS 1 16.5 1327 -28 566 364 46.5 3.8 -8.7 230 6.1 33.7 77.0 402 -03111722.GLS 1 10.1 1092 -23 682 103 65.1 1.1 -18.5 220 7.2 45.6 115.8 218 -03110520.IAD 1 13.7 626 -17 1058 109 35.5 0.4 -9.7 248 6.0 23.4 50.7 109 -03100923.GLS 1 18.1 1654 -5 454 164 35.3 1.6 -5.9 253 5.5 26.9 46.4 209 -03100523.C10 1 11.8 1332 -9 1262 56 39.6 0.4 -7.5 295 5.6 37.5 47.9 168 -03090807.MAF 1 11.7 777 -160 1418 169 29.0 0.1 -10.5 282 7.9 18.5 32.7 262 -03082523.RAD 1 12.0 1595 -36 1379 139 56.3 1.3 -11.7 280 6.3 16.2 82.0 142 -03080122.MIE 1 14.8 2465 -19 976 39 23.4 0.0 -10.9 251 6.4 10.2 49.8 63 -03072100.SUX 1 21.5 6268 -16 748 130 47.0 6.4 -7.5 313 7.3 28.4 42.4 175 -03072022.SUX 1 20.7 5887 -14 863 100 42.2 4.2 -7.3 304 7.8 47.1 46.8 375 -03072022.OFK 1 19.2 6004 -19 1398 33 31.9 0.6 -7.5 313 8.2 30.8 31.8 166 -03071922.STC 1 15.2 2711 -22 1042 103 46.1 2.1 -10.6 310 7.0 34.7 54.6 221 -03071102.NHK 1 16.5 987 -67 757 159 22.6 0.0 -7.7 240 6.4 20.9 29.8 187 -03070921.RWF 1 13.6 1319 -19 765 52 42.5 0.5 -10.8 262 7.0 23.9 51.9 91 -03070919.P#3 1 13.7 1228 -1 615 65 49.7 0.7 -10.0 258 6.5 18.9 58.3 80 -03070902.ATH 1 11.5 2088 -216 2152 184 48.4 0.0 -8.0 269 9.4 34.4 71.3 315 -03062823.BRD 1 10.3 984 -41 828 98 44.5 0.7 -16.0 285 5.9 30.4 65.1 168 -03062820.BJI 1 8.9 792 -1 1152 76 36.4 0.3 -17.5 276 6.2 21.6 57.0 122 -03062802.C22 1 8.5 251 -78 1075 74 33.2 0.1 -17.0 302 6.9 33.5 39.2 110 -03062800.P11 1 8.9 130 -58 757 94 34.6 0.1 -16.9 294 6.8 32.0 41.6 182 -03062223.GRI 1 18.1 5092 -19 1060 137 41.0 4.5 -7.9 238 8.0 29.8 45.3 215 -03062119.GCC 1 9.0 940 -32 1043 126 52.6 1.0 -13.9 234 7.3 37.7 61.9 271 -03061423.GLD 1 11.1 1240 -11 1151 21 28.6 0.1 -11.5 347 7.2 20.2 27.1 107 -03061202.9V9 1 11.9 1311 -150 1237 252 55.7 0.8 -12.0 277 7.7 34.4 64.5 403 -03061123.PIR 1 12.2 2019 -91 1257 201 52.8 1.9 -12.8 252 7.7 30.1 78.9 352 -03060922.AIH 1 12.2 3211 -62 1638 201 43.3 1.6 -13.0 253 9.0 35.4 67.6 306 -04052223.P#A 1 15.1 2952 -11 774 39 53.1 1.0 -12.0 243 7.6 22.0 68.8 112 -04052223.OAX 1 13.7 2734 -22 1169 83 52.1 1.6 -11.3 232 7.4 29.5 77.9 274 -04052201.OFK 1 14.7 3647 -8 1268 198 35.6 3.1 -11.0 240 7.8 35.9 59.8 310 -04052201.AIH 1 12.5 2491 -49 1041 183 43.4 3.2 -12.7 241 8.1 37.2 66.0 201 -04052122.GEG 1 8.3 1152 -51 831 61 20.9 0.0 -20.3 270 7.3 16.0 22.9 86 -04051821.PIA 1 13.2 1154 -20 811 45 38.0 0.3 -11.1 240 5.6 36.6 42.0 114 -04051701.C07 1 9.6 1682 -36 2011 261 50.5 0.0 -10.9 271 7.9 35.3 62.3 740 -04051700.GRI 1 11.3 1410 -72 1036 313 44.9 2.7 -14.9 227 8.2 36.5 55.1 498 -04051420.MBS 1 13.4 793 -7 834 109 40.9 0.6 -10.0 223 5.5 35.3 48.3 177 -04051416.SBN 1 13.7 499 0 429 86 47.3 0.3 -10.0 213 5.3 45.7 43.4 226 -04051323.G#4 1 15.5 3158 -12 977 153 38.7 3.1 -11.1 260 7.5 26.9 14.0 223 -04051223.C32 1 11.4 2949 -2 1894 52 53.9 0.2 -12.4 230 8.0 35.8 51.2 184 -04051117.VCT 1 16.3 1839 0 387 110 21.6 0.0 -10.4 236 6.4 21.8 22.3 236 -04043018.SPS 1 12.8 1694 -16 674 115 47.0 1.5 -14.9 221 8.0 24.4 40.3 122 -04042921.CDS 1 9.5 1110 -130 1817 -14 26.8 0.0 -14.5 244 8.2 30.9 40.8 112 -04042900.DRT 1 11.7 872 -12 771 192 46.2 1.3 -13.3 241 6.5 37.1 66.5 291 -04042320.SPS 1 14.3 3037 -1 1026 34 40.0 0.7 -13.4 226 7.4 18.9 49.8 60 -04042317.C11 1 10.4 439 -226 1267 41 38.3 0.0 -12.0 218 8.0 22.5 52.0 77 -04042300.FYV 1 11.8 1066 -33 829 252 39.7 1.8 -14.3 264 7.5 32.0 68.1 287 -04042222.TUL 1 13.0 1845 -5 720 136 58.2 2.4 -14.9 261 7.6 42.3 60.4 262 -04042220.P#P 1 13.3 2326 -1 748 134 58.8 3.1 -15.9 266 8.0 37.4 58.0 199 -04042200.GAG 1 10.8 1625 -5 908 47 32.4 0.4 -16.4 262 7.4 23.8 78.1 203 -04042122.G#1 1 7.3 762 -3 1736 51 74.4 0.1 -18.1 267 7.9 29.6 109.6 287 -04042100.TUL 1 10.6 632 -70 1159 363 52.0 1.5 -13.5 244 6.5 34.2 55.8 403 -04042023.GVS 1 10.8 283 0 524 272 32.9 0.4 -14.5 241 5.8 36.7 31.1 351 -04042022.C34 1 11.4 1441 -8 1212 105 50.3 1.0 -12.2 244 6.3 35.5 57.3 152 -04042019.HUF 1 9.9 107 -34 769 282 37.1 0.2 -14.7 239 5.8 35.7 36.3 292 -04042001.G#1 1 10.9 1585 -37 948 193 46.4 2.4 -14.6 237 7.8 39.5 70.5 374 -04041923.AMA 1 10.3 1602 -8 1272 103 41.6 0.8 -12.3 237 6.8 29.9 68.2 173 -04041823.HYR 1 9.5 788 -51 1551 610 67.8 2.1 -14.2 237 6.6 48.6 102.0 685 -04041822.YKN 1 8.5 781 -30 1937 -47 67.4 0.0 -14.5 231 7.3 50.2 99.2 231 -04041820.STC 1 9.5 1332 -37 1772 54 48.6 0.1 -15.2 231 8.6 26.3 87.5 167 -04041803.MCW 1 11.3 1606 -164 1042 529 61.4 2.0 -14.5 249 8.2 51.8 78.3 736 -04041800.FRM 1 6.2 0 -9999 2233 126 60.4 0.0 -15.8 250 8.3 48.2 86.0 376 -04041318.MHX 1 14.5 829 -6 376 471 48.2 3.1 -10.4 209 5.7 50.3 59.5 492 -04041101.HOU 1 14.2 1196 -29 574 -14 42.4 -0.1 -12.2 228 6.1 21.1 49.7 59 -04040922.MLC 1 9.5 826 -4 1253 59 50.6 0.3 -15.2 263 6.2 30.9 65.3 245 -04081001.LIC 1 13.1 2627 -14 833 10 31.8 0.1 -7.6 302 6.9 29.5 39.6 240 -04080923.LIC 1 12.3 2929 -24 1366 16 34.5 0.2 -7.1 291 7.3 33.3 41.5 174 -04080222.BH5 1 9.0 780 -79 2692 -22 40.8 0.0 -7.8 269 8.3 36.1 53.6 117 -04080101.FSD 1 15.5 3162 -71 1296 126 42.1 1.7 -10.0 298 7.7 29.5 43.5 211 -04071502.PWD 1 11.6 1241 -85 1817 -10 41.6 0.0 -9.7 293 7.4 25.5 68.5 104 -04071421.NHK 1 15.8 2262 -34 1229 29 22.0 0.0 -9.0 266 6.6 17.0 40.9 95 -04070822.CDR 1 8.4 1172 -184 2535 65 52.1 0.0 -10.6 252 9.0 39.8 58.2 155 -04070800.RSL 1 16.8 3857 -81 950 330 43.6 7.3 -6.9 302 7.3 32.9 43.0 525 -04062401.MSN 1 11.0 1731 -10 1132 139 52.2 1.8 -15.8 264 6.6 37.4 69.1 149 -04062202.AMA 1 14.9 2631 -32 851 69 48.2 1.5 -9.3 256 8.0 30.2 68.7 322 -04062201.AMA 1 13.9 2569 -24 1161 158 51.4 2.9 -9.1 264 8.2 37.1 79.6 378 -04062123.AMA 1 14.3 3017 -3 1129 34 46.0 0.7 -9.8 253 7.9 30.1 66.4 233 -04062100.LAA 1 13.7 2855 -58 1180 172 53.2 3.4 -9.9 265 8.0 19.8 59.2 173 -04062021.PUB 1 9.4 1660 -152 1943 219 45.3 0.1 -10.7 255 9.0 31.5 55.0 312 -04062019.COS 1 10.8 2562 -34 1009 45 38.2 0.7 -12.0 275 8.7 28.8 54.8 98 -04061501.HYS 1 14.0 3081 -123 1665 173 58.2 0.9 -9.0 287 8.2 39.1 57.5 526 -04061401.RDD 1 12.6 881 -112 1018 143 43.3 0.5 -9.7 283 6.4 45.8 43.1 223 -04061322.LNK 1 10.8 941 -69 1877 47 38.4 0.0 -9.3 287 5.7 33.3 45.8 183 -04061318.RQB 1 13.7 1000 -12 900 139 52.4 1.2 -10.7 233 6.1 36.9 55.2 229 -04061121.FRM 1 16.5 2686 -15 680 177 37.0 2.9 -11.0 219 7.7 18.6 49.4 252 -04061103.HSI 1 12.4 1209 -300 1522 316 36.6 0.0 -10.8 210 9.0 34.1 53.9 333 -04060921.APA 1 8.8 1388 -12 2068 90 27.2 0.0 -10.0 186 8.8 22.9 47.8 104 -04053022.SLO 1 18.2 3905 -16 909 156 45.8 4.6 -9.2 240 6.9 43.6 52.3 241 -04052701.PNC 1 15.4 2665 -48 1261 221 69.9 4.4 -8.5 266 6.3 33.5 88.2 272 -04052623.G011 1 12.4 1626 -109 1852 49 70.8 0.1 -9.9 262 7.1 37.0 94.0 147 -04052622.P#T 1 11.9 1612 -29 2366 155 49.7 0.0 -7.5 252 7.6 30.5 79.4 164 -04052602.ABI 1 14.8 1459 -96 876 180 51.9 1.6 -7.9 237 7.1 20.8 85.8 179 -04052500.FDR 1 16.4 3848 -41 1381 227 52.9 4.8 -10.3 248 8.8 44.6 77.8 373 -04052421.MCI 1 15.5 3926 -27 1068 147 47.7 4.3 -11.9 239 7.8 31.2 69.7 377 -04052421.CDS 1 11.5 2298 -45 2458 72 49.8 0.0 -9.7 246 8.0 26.4 75.8 113 -04052420.HSI 1 15.0 4625 -31 1086 83 34.0 2.0 -15.1 231 9.5 23.3 61.8 166 -04052420.BGM 1 11.0 1383 -50 1291 107 43.0 0.8 -13.2 261 6.4 38.3 57.1 215 -04052400.MKX 1 12.6 2101 -6 936 253 43.7 3.9 -15.6 243 8.0 47.2 76.4 303 -04052302.P#8 1 14.4 3064 -83 1357 338 64.2 5.2 -12.5 243 8.9 33.2 52.0 372 -04052301.P#A 1 15.3 2427 -11 641 38 43.9 0.7 -11.1 235 7.5 24.0 58.7 130 -04052301.OMA 1 15.2 2700 -10 801 171 47.0 3.6 -10.9 219 7.5 25.3 68.4 216 -99060823.N60 1 13.7 3155 -15 1051 78 41.1 1.6 -13.0 219 8.3 21.8 42.4 152 -99060620.MIW 1 16.5 2747 -2 728 95 46.5 2.0 -11.3 215 7.4 25.8 54.4 126 -99060619.DVL 1 13.3 2802 -18 814 23 14.6 0.0 -16.8 148 8.2 13.8 14.2 55 -99060522.LRJ 1 15.2 2964 -17 1289 56 44.7 0.9 -10.3 227 8.2 27.6 63.5 157 -99060405.VTN 1 12.9 2518 -114 1075 129 40.8 1.2 -11.7 252 8.4 33.9 47.9 180 -99060300.GTF 1 7.5 3 -80 1259 78 32.1 0.0 -12.7 166 6.6 32.1 44.8 172 -99060300.AMA 1 12.9 2756 -67 1541 95 38.7 0.7 -10.0 227 8.6 29.5 72.3 208 -99060123.SPI 1 14.9 2287 -19 881 194 49.6 3.7 -12.9 240 7.2 40.7 42.9 303 -99060110.MLC 1 16.0 1956 -157 477 193 43.7 0.8 -10.8 251 8.4 34.4 54.4 257 -99060101.RSL 1 13.0 1705 -20 907 93 50.1 1.3 -12.2 250 8.3 32.2 70.0 179 -99060100.SJT 1 10.8 1391 -136 2395 53 45.7 0.0 -8.1 279 8.0 23.3 44.1 151 -99060100.CSM 1 13.8 2748 -119 1593 116 55.1 0.7 -10.4 262 8.3 31.9 59.4 205 -99053122.LBL 1 12.8 2910 -27 1574 106 61.1 1.3 -11.1 247 8.1 34.8 75.6 204 -99053023.LXN 1 11.3 1917 -2 1506 20 24.9 0.0 -12.7 282 7.1 22.6 26.3 85 -99052700.INK 1 10.3 1701 -31 1781 9 53.5 0.0 -13.0 263 8.4 26.7 60.4 107 -99052521.ROW 1 8.6 1056 -1 2099 26 43.2 0.0 -11.4 250 7.4 17.0 57.8 56 -99051701.P28 1 14.1 3996 -25 1498 52 41.4 0.7 -12.2 235 7.9 28.4 44.1 137 -99050922.P07 1 10.6 1793 -96 2053 72 29.7 0.0 -11.9 197 8.5 25.8 74.2 77 -99050419.EWK 1 9.8 1172 -30 1060 87 56.5 0.9 -17.0 185 7.4 27.6 56.8 112 -99050401.ONL 1 9.2 1561 -17 1532 160 31.3 0.6 -15.4 205 7.3 24.3 33.6 208 -99050220.HDE 1 8.7 687 -3 649 100 31.9 0.4 -19.2 208 7.1 21.5 23.0 124 -99050122.MAF 1 12.3 1710 -9 776 232 56.9 3.8 -11.2 237 6.8 32.4 76.7 295 -99043021.INK 1 13.0 2707 -11 1033 174 50.2 3.8 -11.8 197 7.3 35.6 67.7 236 -99042421.AGS 1 9.7 443 -32 1749 52 54.7 0.1 -12.4 292 6.7 37.3 65.4 176 -99042300.MKO 1 13.6 2181 -13 1003 243 55.3 4.9 -11.4 253 7.8 35.3 67.1 248 -04082522.FOE 1 16.3 3285 -59 1225 128 33.5 1.7 -8.6 243 6.8 34.0 42.4 233 -04082423.DPA 1 15.3 616 -29 685 237 28.3 0.7 -6.6 213 5.2 26.6 21.5 254 -04082401.FOE 1 17.3 2862 -33 582 300 33.1 4.7 -7.7 274 6.8 24.8 34.1 345 -04082200.C07 1 12.4 2025 -24 1364 108 27.4 0.6 -7.7 278 6.6 14.0 41.6 288 -04081522.ATH 1 10.0 1320 -50 1754 133 37.4 0.3 -10.5 325 7.6 38.4 41.5 249 -04081420.HAT 1 16.9 1221 -20 693 281 41.3 2.4 -6.1 204 4.5 32.5 54.5 312 -04081219.FAY 1 15.4 835 -29 887 115 48.5 0.8 -7.1 211 5.4 29.3 50.5 134 -04081215.CAE 1 16.3 1332 -11 579 78 38.5 0.7 -8.3 217 5.9 37.1 28.4 136 -99112300.TUL 1 11.8 1383 -12 847 203 54.3 2.5 -15.7 217 6.9 37.0 60.1 264 -99092823.LAF 1 14.3 1880 -26 925 44 46.4 0.6 -9.8 226 5.9 31.8 53.4 131 -99092700.ICT 1 13.7 1942 -99 1005 119 45.8 1.2 -7.8 271 6.2 28.6 45.7 170 -99092003.OGD 1 5.9 7 -95 1490 6 35.4 0.0 -14.8 306 7.3 17.3 39.8 59 -99091023.OKM 1 14.1 1578 -173 1285 75 38.5 0.1 -9.8 284 6.9 29.7 41.2 205 -99090400.AKO 1 11.6 1401 -21 1298 3 44.8 0.0 -8.1 221 7.3 26.8 60.0 143 -99081920.SME 1 11.4 1158 -29 2080 34 42.9 0.0 -10.2 267 6.9 18.4 33.8 78 -99081621.GLD 1 14.3 3184 -9 1787 78 34.9 0.3 -7.0 231 7.7 23.6 46.0 131 -99081503.JDN 1 7.8 368 -225 2152 37 52.5 0.0 -11.9 242 8.0 36.8 72.2 220 -99080923.MKT 1 16.2 2484 -10 814 229 44.4 4.2 -9.7 289 7.7 38.9 63.1 274 -99073100.DMH 1 14.4 2057 -58 1629 66 38.0 0.3 -8.8 331 7.0 18.2 55.7 83 -99072800.COQ 1 11.9 957 -73 1267 208 61.5 1.2 -12.4 294 7.3 37.9 75.1 349 -99072300.ABR 1 15.9 3073 -48 1643 51 26.1 0.2 -7.9 237 7.7 10.4 43.4 60 -99072201.GGW 1 8.8 1107 -147 2618 58 49.5 0.0 -11.3 230 8.7 27.6 92.9 163 -99072022.OLZ 1 19.5 3709 -2 737 170 42.4 4.4 -5.2 268 5.5 29.8 44.8 294 -99071400.MOT 1 10.3 1025 -92 1759 96 63.9 0.2 -11.0 284 7.1 34.6 66.5 248 -99070300.LBF 1 18.3 5887 -62 1227 118 33.7 2.8 -6.4 235 9.0 23.9 55.3 163 -99070123.IPT 1 14.7 908 -27 884 203 33.0 1.0 -6.8 229 5.6 30.6 31.5 243 -99062922.GUY 1 13.7 3266 -87 2035 154 43.7 0.0 -7.8 283 9.0 32.3 53.8 237 -99062802.OGA 1 12.3 1529 -168 1178 203 64.3 0.5 -9.7 266 8.8 33.4 87.6 253 -99062701.MCK 1 16.5 3830 -43 1226 55 34.0 0.9 -7.8 258 8.2 20.8 57.0 152 -99062700.SNY 1 12.1 2217 -42 1612 24 49.9 0.2 -8.9 251 8.2 28.2 77.8 141 -99062300.MHE 1 14.1 1832 -74 977 196 23.4 0.0 -9.7 239 7.3 17.5 18.0 213 -00050901.AIZ 0 13.1 1987 -68 1453 84 35.7 0.5 -11.3 241 8.5 41.9 28.1 204 -00050722.SNY 0 9.8 2015 -39 1845 23 56.1 0.1 -12.4 245 8.7 34.2 64.8 128 -00050707.OGA 0 11.6 1205 -190 787 34 39.5 0.0 -11.3 236 8.2 22.0 47.2 115 -00050323.RBD 0 11.2 940 -3 1077 54 42.9 0.3 -14.6 290 6.2 28.9 58.4 174 -00043001.ABI 0 11.9 2549 -66 1686 111 39.6 0.5 -11.8 268 8.4 26.8 40.5 228 -00042423.LAA 0 5.4 613 -132 2566 97 54.0 0.0 -16.3 278 8.9 29.1 72.7 192 -00042422.EHA 0 6.7 706 -56 2143 58 53.8 0.0 -15.2 295 8.1 25.8 83.4 159 -00042021.BWG 0 11.2 1126 -13 1162 167 52.1 1.4 -13.5 240 7.4 46.8 53.8 253 -00042021.BNA 0 11.2 989 -26 1114 165 53.6 1.3 -13.7 242 7.7 45.4 65.0 244 -00042001.MCI 0 12.4 2093 -43 1300 141 61.9 2.1 -12.3 226 7.0 33.4 81.4 163 -00042000.JCT 0 13.1 2950 -156 1701 170 51.7 0.4 -9.4 253 8.2 40.5 71.8 240 -00041822.SJT 0 7.1 414 -185 3169 -7 49.4 0.0 -9.5 243 8.2 32.3 60.6 45 -00041620.SUS 0 9.5 579 -1 968 46 41.8 0.2 -18.1 247 6.6 30.2 69.5 154 -00041602.GRA 0 10.2 901 -182 1269 251 56.8 0.2 -17.0 244 8.6 34.1 76.8 276 -00033000.SHV 0 12.6 1635 -14 797 147 57.7 2.3 -15.2 267 7.2 33.9 91.9 219 -00032900.HYI 0 15.8 2875 -10 771 106 60.6 3.0 -11.6 251 7.3 36.4 82.8 192 -00032522.BNA 0 8.3 268 -8 1461 34 37.5 0.0 -16.9 270 6.2 23.2 61.3 60 -00032207.MAF 0 11.5 1952 0 562 249 54.6 4.4 -16.4 196 8.3 45.0 77.8 468 -00031600.CSM 0 8.3 808 -99 1327 59 34.5 0.1 -17.7 251 7.6 25.7 34.3 101 -00031022.BHM 0 10.3 614 -95 1034 103 48.9 0.4 -15.8 238 7.0 33.1 49.4 179 -00030923.LRD 0 13.5 2701 -7 1360 -13 41.3 -0.2 -12.5 256 7.5 20.8 59.4 95 -00030920.GFL 0 7.1 1 -425 1416 88 63.6 0.0 -18.7 242 8.1 39.6 77.0 165 -00030900.UNU 0 9.9 1306 -11 1121 172 50.6 1.7 -17.3 203 6.6 39.6 44.1 206 -00030900.CLI 0 9.4 673 -29 1009 196 53.3 1.2 -16.9 202 6.6 39.4 53.8 226 -00030302.PWG 0 12.0 1469 -17 1106 252 60.9 3.3 -12.2 259 6.1 45.0 75.3 323 -00030222.AFW 0 11.1 999 -6 913 256 68.3 2.6 -13.5 238 6.5 36.9 80.1 345 -00022606.CRS 0 13.3 2158 -10 637 191 48.7 3.3 -14.8 239 6.9 25.4 69.2 184 -00022523.FSD 0 7.3 495 -2 929 82 38.3 0.3 -21.9 172 7.7 30.1 52.5 83 -00022405.FAM 0 9.2 437 -46 772 315 46.8 1.1 -18.0 235 6.3 29.2 42.2 331 -00072222.BBW 0 11.9 1462 -1 1218 36 35.2 0.2 -11.1 328 6.5 26.6 43.9 124 -00072220.GLD 0 10.6 1162 -15 1699 26 39.9 0.1 -10.2 319 7.4 19.8 55.8 82 -00072122.BFF 0 9.8 1738 -8 2036 34 42.0 0.0 -9.9 297 7.7 36.2 48.9 131 -00072022.AKO 0 14.0 3465 -7 1063 22 46.2 0.6 -10.2 278 8.3 29.1 64.7 106 -00072000.BVX 0 17.4 3847 -11 1674 30 36.4 0.2 -7.1 298 6.9 26.0 29.2 130 -00071022.RCA 0 13.2 1916 -28 1452 23 41.1 0.2 -9.2 238 7.6 21.4 68.1 95 -00071001.LBF 0 14.7 2947 -100 1740 24 28.1 0.1 -5.6 239 7.8 23.6 37.9 109 -00070922.MHE 0 16.8 3556 -34 1430 6 40.7 0.1 -6.1 258 6.7 18.8 41.5 109 -00070922.GGW 0 13.3 2242 -12 1039 31 46.6 0.5 -11.4 226 7.4 18.7 71.4 74 -00070901.LWT 0 8.7 874 -65 1998 38 58.4 0.0 -11.5 232 8.1 32.4 92.6 236 -00070805.LVN 0 18.2 2722 -69 530 388 37.6 5.8 -9.2 261 8.1 22.9 53.3 407 -00070803.JDN 0 7.6 57 -220 2275 33 69.9 0.0 -11.7 240 7.8 39.2 84.5 167 -00070601.CUT 0 11.7 2058 -14 1543 37 55.5 0.3 -9.9 245 8.5 28.5 78.8 136 -00070523.MCK 0 16.4 3979 -55 1631 151 45.4 1.6 -6.8 254 8.1 24.5 59.5 231 -00070521.RAP 0 14.5 3135 -2 1289 15 44.0 0.3 -10.0 233 8.0 19.5 68.5 93 -00070501.2WX 0 11.2 1574 -93 1339 -29 47.6 -0.2 -12.4 230 8.6 28.2 78.4 64 -00070421.JDN 0 8.1 1033 -47 1927 -17 41.2 0.0 -15.0 209 7.9 26.2 68.3 49 -00070302.GGW 0 10.6 1484 -86 1685 121 67.7 0.4 -12.6 252 7.9 36.1 78.0 267 -00070222.FOD 0 17.4 3585 -43 1097 53 23.7 0.0 -9.5 292 7.5 16.4 31.4 91 -00070201.ABR 0 14.2 3411 -108 1790 100 24.5 0.0 -10.0 259 8.3 16.6 39.9 145 -00070123.ELO 0 13.3 2835 -49 1339 117 57.8 2.1 -13.1 291 7.7 31.9 66.7 228 -00070122.ABI 0 13.9 1505 -15 1776 40 26.6 0.1 -5.4 261 5.7 21.4 25.5 120 -00070100.JLN 0 15.5 2255 -3 786 81 43.6 1.3 -7.6 313 5.9 25.5 56.4 208 -00062923.ELM 0 8.8 332 -11 1098 19 33.4 0.0 -16.5 253 6.2 19.9 82.5 60 -00062923.D07 0 9.6 1600 -26 1649 30 42.4 0.1 -15.7 295 7.7 30.2 50.5 90 -00062901.LAM 0 11.8 506 -57 1728 28 25.5 0.0 -6.5 268 6.3 18.5 25.2 126 -00062519.AIO 0 14.7 2632 -77 1269 122 38.0 1.2 -10.6 279 7.3 29.0 32.0 250 -00062402.RCA 0 11.5 1507 -76 1200 0 40.3 0.0 -11.0 273 7.9 29.4 67.6 159 -00062322.SDA 0 16.8 4294 -9 1398 56 28.6 0.7 -9.2 284 7.3 21.1 46.7 160 -00061522.OKV 0 14.5 746 -31 749 130 32.3 0.5 -8.8 240 6.0 35.1 29.5 198 -00061323.P28 0 14.3 3106 -53 1734 60 41.3 0.3 -10.0 260 8.0 15.7 31.7 91 -00061122.DFS 0 13.5 3143 -11 1597 67 28.6 0.4 -8.2 251 7.7 28.8 45.0 62 -00060400.GLD 0 9.0 1430 -74 2560 51 35.6 0.0 -10.7 313 8.7 29.0 38.3 146 -00060221.CEF 0 12.1 326 -141 1452 156 38.5 0.1 -9.8 279 6.6 44.9 47.0 277 -00052701.SZL 0 13.7 1477 -23 1157 198 50.0 2.1 -9.7 244 6.7 38.9 69.4 232 -00052501.PPA 0 15.2 3731 -83 1597 78 46.6 0.7 -8.0 249 8.4 33.0 60.7 288 -00052501.ADK 0 16.3 4569 -134 1861 108 40.3 0.2 -7.8 255 8.7 36.4 49.3 291 -00052219.AVC 0 10.1 628 -1 1000 2 52.8 0.0 -13.8 256 5.9 28.0 59.1 95 -00052021.VPC 0 13.0 805 -6 1196 15 39.2 0.1 -9.8 231 6.1 19.7 47.6 87 -00050922.IRS 0 12.0 729 -2 928 68 49.6 0.4 -13.6 230 6.9 46.6 41.5 178 -01041105.JCT 0 14.1 1545 -229 832 346 71.9 0.0 -9.7 230 8.5 44.0 97.0 386 -01041004.IND 0 11.4 1318 -107 1240 185 57.8 1.1 -13.8 292 7.2 35.6 68.3 216 -01040321.UNO 0 12.3 1279 -42 722 107 57.2 1.3 -13.7 270 7.4 36.3 60.7 225 -01040300.BFF 0 5.0 0 -9999 1708 161 63.5 0.0 -17.8 241 7.5 37.7 81.7 433 -01032404.ABI 0 10.8 1700 -61 813 65 27.5 0.5 -18.2 289 8.0 17.4 46.6 180 -01031202.FTW 0 11.7 1341 -9 490 161 53.1 1.9 -17.9 240 7.3 37.5 47.3 201 -01031123.BWD 0 10.1 846 -18 912 76 47.4 0.5 -17.4 245 7.7 31.1 69.7 133 -01022500.TOP 0 7.3 153 -15 715 148 78.6 0.2 -21.3 203 6.8 32.9 92.4 170 -00110907.GZH 0 15.4 1005 -3 768 172 47.3 1.4 -7.8 213 6.0 36.2 52.6 220 -00110906.EET 0 14.9 674 -3 539 277 52.5 1.6 -8.6 217 5.7 41.9 58.8 327 -00110121.CID 0 12.2 1537 -17 1087 164 40.8 1.6 -12.1 210 6.0 36.7 41.3 225 -00102323.ELP 0 9.8 1432 -3 1298 24 68.0 0.2 -14.2 201 7.5 36.8 65.9 132 -00102212.MWL 0 13.4 1016 -7 525 152 31.3 0.8 -11.5 208 6.2 22.4 43.6 149 -00101423.INK 0 8.5 757 -27 2381 63 29.5 0.0 -10.8 243 7.2 27.3 48.1 91 -00101408.CNM 0 11.5 1524 -124 1147 79 34.2 0.3 -10.4 246 7.2 29.4 55.6 119 -00101400.SLN 0 11.5 577 -49 879 26 58.0 0.1 -11.3 234 5.7 28.9 63.6 76 -00100401.GCK 0 8.5 341 -281 1869 -16 53.4 0.0 -11.5 263 8.5 38.0 70.8 124 -00090523.GTF 0 7.6 277 -43 1393 8 65.8 0.0 -15.8 219 7.4 34.7 93.3 112 -00090300.ISN 0 10.7 654 -10 754 62 42.1 0.3 -13.8 225 6.8 27.3 72.5 95 -00090120.SLC 0 5.7 78 -67 2129 29 41.1 0.0 -14.3 198 7.4 15.4 53.6 53 -00081820.BUY 0 15.3 1702 -37 1351 58 34.7 0.4 -8.2 275 6.5 38.7 13.2 134 -00081723.IND 0 19.2 4115 -13 791 158 47.3 5.1 -7.9 275 6.9 37.5 49.8 224 -00081720.LEX 0 16.6 2579 -6 1129 81 36.5 1.1 -6.7 284 5.9 24.9 42.3 141 -00081420.AIT 0 16.2 2299 -120 690 282 52.2 3.0 -9.8 267 8.0 37.9 69.5 368 -00080623.CDJ 0 14.7 1350 -119 1250 43 35.9 0.1 -6.8 272 6.3 24.5 54.6 88 -00080601.HNR 0 18.6 4073 -16 990 54 37.6 1.4 -7.0 271 7.3 25.9 55.8 92 -00080522.AIA 0 7.8 312 -3 2875 0 43.4 0.0 -8.3 272 7.7 22.1 49.4 52 -00080502.PIR 0 14.4 2629 -128 1844 202 48.0 0.3 -7.4 270 7.5 30.4 64.1 318 -00080502.ANW 0 11.5 1035 -228 2157 138 37.9 0.0 -6.3 276 7.6 25.6 46.8 227 -00080222.FKL 0 13.7 1168 -22 892 104 26.2 0.5 -9.1 253 5.9 27.0 55.7 145 -00080202.LWT 0 8.3 700 -130 2701 50 46.5 0.0 -8.4 286 8.6 19.4 78.7 94 -00080202.GGW 0 10.8 1193 -207 1955 94 51.1 0.0 -9.6 293 8.0 25.1 71.3 230 -00072622.AIO 0 16.7 3711 -2 964 67 44.8 1.9 -10.2 324 7.6 29.1 43.1 186 -00072501.HON 0 13.9 2463 -99 1314 85 29.5 0.5 -11.1 271 8.3 13.2 40.3 91 -01060123.LWC 0 11.2 1268 -25 1421 113 62.6 0.8 -13.2 305 6.4 37.6 79.8 249 -01060122.P28 0 11.4 1141 -69 1552 80 51.2 0.3 -9.7 308 6.6 21.4 62.5 156 -01053100.CVN 0 8.5 1309 -86 2195 -18 45.9 0.0 -10.8 289 8.3 24.1 38.5 138 -01052801.END 0 13.1 2369 -85 1258 150 47.1 1.6 -12.5 280 8.2 39.8 67.4 370 -01052400.OKF 0 7.6 314 -55 2200 85 59.2 0.0 -15.3 298 7.1 43.3 63.3 244 -01052022.GRK 0 15.6 2852 -21 1408 32 40.1 0.4 -7.9 242 6.8 30.2 75.1 60 -01051801.RUL 0 11.1 1624 -134 2428 24 25.8 0.0 -8.5 258 8.1 18.9 46.6 76 -01051623.BIE 0 13.4 3208 -41 1905 35 30.0 0.1 -10.4 274 7.5 20.5 32.1 103 -01051218.DDH 0 8.9 325 -25 1493 21 36.4 0.0 -16.2 229 6.4 25.9 46.8 102 -01051000.OLU 0 9.6 2423 -73 2081 70 30.6 0.0 -15.8 265 8.8 23.7 36.8 157 -01050823.GBD 0 8.1 447 -90 1828 55 44.5 0.0 -15.8 323 7.4 25.4 50.6 207 -01050701.COT 0 15.9 3113 -16 1068 4 34.1 0.1 -12.2 267 8.1 10.5 56.5 73 -01050700.ADS 0 14.6 2915 -5 1038 115 37.4 2.0 -13.7 248 7.3 23.1 63.5 148 -01050623.BMQ 0 16.4 4217 -12 955 48 38.2 1.3 -13.0 257 7.5 27.3 64.9 143 -01050501.COT 0 14.3 1453 -9 1075 113 48.9 1.2 -9.9 226 7.0 33.1 73.5 169 -01050200.AUD 0 10.0 1544 -80 1896 85 31.2 0.1 -14.7 266 8.2 22.1 40.9 170 -01050101.SLN 0 10.5 1695 -66 1383 122 37.1 0.7 -16.7 295 8.0 24.3 61.4 188 -01050100.P28 0 9.9 1422 -94 1553 70 45.7 0.2 -15.7 309 7.8 24.3 54.0 188 -01042317.STE 0 9.5 775 -5 970 86 55.4 0.6 -18.0 210 6.8 38.9 110.9 170 -01042304.JCT 0 14.1 2210 -11 659 190 53.5 3.8 -11.8 248 7.8 31.4 55.1 214 -01042222.MWL 0 11.8 1193 -8 1373 116 46.2 0.7 -10.2 212 6.2 33.4 58.0 105 -01042123.PIA 0 12.1 1857 -13 1175 79 41.0 0.8 -13.4 257 7.5 25.7 51.8 94 -01042123.CDS 0 10.3 2000 -70 2105 81 55.8 0.0 -11.8 230 7.9 27.2 70.8 141 -01042102.SLN 0 11.5 2072 -206 1218 280 50.2 0.0 -15.1 239 8.7 44.2 73.5 374 -01041702.SJT 0 13.0 1793 -30 989 96 38.8 1.1 -10.9 296 7.0 26.3 65.2 260 -01041700.LBB 0 8.1 406 -65 1861 42 46.3 0.0 -12.1 288 7.1 32.9 80.6 256 -01041500.ABI 0 12.6 2222 -121 1474 76 59.9 0.5 -13.2 249 8.7 28.8 78.5 130 -01041423.ADM 0 14.2 1613 -86 524 248 67.7 3.1 -14.2 254 8.6 38.9 90.8 310 -01041422.PCS 0 13.6 2872 -90 1455 5 57.7 0.1 -10.8 245 8.2 21.5 77.6 85 -01041422.EMP 0 8.9 652 -15 1486 57 59.4 0.2 -16.8 254 7.2 31.9 84.7 218 -01041421.HBR 0 13.9 2647 -29 786 167 70.6 4.4 -14.3 255 8.2 39.1 91.1 239 -03050100.BRL 0 12.7 2707 -10 1047 121 47.3 2.5 -15.8 247 8.2 27.0 50.9 270 -03043021.AIA 0 12.3 2247 -53 863 158 49.0 2.8 -15.7 243 8.1 37.1 49.5 276 -03043003.LIC 0 8.7 1228 -82 574 264 52.2 2.2 -15.9 216 8.8 43.9 59.2 676 -03042900.APA 0 6.3 1056 -56 1639 56 35.9 0.1 -15.6 239 8.3 10.6 65.7 63 -03042600.HRL 0 12.4 1634 -219 1994 5 43.7 0.0 -11.1 286 8.3 25.0 72.5 36 -03042522.FTY 0 11.2 645 -12 811 160 61.6 1.0 -14.4 253 6.7 33.8 66.6 259 -03042520.ANB 0 11.5 783 -1 777 164 64.0 1.3 -14.0 259 6.2 36.4 64.7 319 -03042400.SEP 0 14.4 2485 -6 558 393 62.4 9.8 -14.6 238 7.9 39.1 92.6 485 -03042022.MKL 0 12.5 1017 -22 789 92 57.6 0.9 -14.3 251 6.9 29.0 70.2 188 -03042019.MEM 0 13.1 1682 -6 857 78 50.6 1.1 -14.2 252 7.3 29.0 57.0 148 -03041922.P#0 0 11.7 1623 -17 730 127 72.6 2.1 -19.4 223 7.9 35.5 102.9 148 -03041920.END 0 10.6 1171 -12 629 144 57.4 1.6 -21.0 215 8.4 39.0 99.4 219 -03041907.FDR 0 12.6 1046 -418 613 365 65.8 0.0 -13.9 207 8.9 40.5 101.8 352 -03040720.HOU 0 16.5 2215 -1 373 67 57.9 1.4 -11.4 231 7.6 30.3 77.2 191 -03040718.BPT 0 13.8 933 -139 741 16 59.0 0.1 -12.1 226 7.4 26.5 91.0 110 -03040717.LFT 0 14.1 780 -168 559 29 50.5 0.0 -12.0 233 7.3 29.3 84.8 74 -03040605.C12 0 11.3 655 -128 639 328 69.4 1.0 -14.6 250 7.3 45.3 111.0 697 -03040601.C11 0 12.1 2056 -4 832 109 75.1 2.2 -15.3 251 7.6 26.4 93.3 198 -03040400.LW1 0 13.3 2761 -1 682 153 54.3 3.8 -15.1 242 7.6 32.9 52.2 224 -03040322.HBR 0 9.5 1315 -38 1655 57 42.4 0.2 -14.8 235 7.5 33.0 47.0 130 -03032821.MBS 0 7.7 95 -1 1423 199 68.1 0.1 -17.6 223 6.6 48.9 65.7 252 -03032819.AZO 0 8.9 146 -2 830 200 60.9 0.3 -17.3 225 6.7 54.5 64.3 255 -03031722.SPS 0 10.7 981 -38 1183 127 34.3 0.6 -15.4 236 7.3 19.3 95.8 139 -03031720.SPS 0 10.2 947 -44 1140 35 24.3 0.0 -16.7 216 7.4 15.4 100.9 42 -03031221.PBI 0 14.2 1790 -2 1215 21 36.5 0.2 -12.1 258 7.7 2.8 67.6 -23 -03031218.FPR 0 15.8 2760 -2 892 -28 38.6 -0.5 -14.1 256 8.0 11.8 71.6 86 -01062102.ICT 0 13.9 1917 -38 976 89 37.8 1.1 -11.3 291 7.3 26.8 48.8 202 -01061623.JMS 0 8.9 600 -4 1096 41 40.5 0.2 -18.1 283 7.1 25.4 84.9 82 -01061122.RGK 0 14.3 3269 -77 1618 201 51.8 1.8 -10.9 265 8.4 35.2 56.2 397 -01060502.CSM 0 15.8 3992 -79 1412 107 34.9 1.2 -8.4 251 8.1 28.3 40.7 227 -01060501.LHX 0 8.3 615 -248 1957 94 44.0 0.0 -11.2 243 9.0 29.0 49.3 127 -03062823.RST 0 8.8 203 -71 1471 26 40.8 0.0 -12.1 287 4.8 15.4 60.6 57 -03062822.BH4 0 6.7 253 -82 2374 15 53.7 0.0 -12.2 288 8.0 39.8 64.9 352 -03062820.WSC 0 9.5 432 -25 1288 24 38.2 0.1 -13.2 292 5.0 20.7 57.7 45 -03062800.C07 0 9.3 1323 -51 2202 29 36.5 0.0 -9.3 311 7.4 12.9 41.7 81 -03062800.8V7 0 10.5 2208 -13 2023 82 42.3 0.0 -8.2 320 7.8 44.3 44.0 293 -03062722.8V7 0 11.1 2543 -6 1821 66 38.6 0.2 -8.4 315 7.5 40.0 47.0 258 -03062721.C07 0 8.9 1146 -29 2232 32 35.4 0.0 -9.2 306 7.2 11.7 50.1 74 -03062401.CYS 0 10.5 1054 -23 891 146 67.4 1.5 -8.4 210 6.6 44.6 77.5 258 -03062022.ROW 0 10.0 1448 -1 2438 18 41.2 0.0 -8.3 220 7.9 29.6 51.3 74 -03062022.CVS 0 12.0 1680 -21 1220 96 32.9 0.7 -8.5 224 7.2 20.3 41.0 110 -03062020.CVS 0 12.3 2087 -2 1100 14 22.8 0.0 -9.4 233 7.4 10.8 35.9 48 -03061501.CNM 0 11.3 2677 -1 2178 -48 31.4 0.0 -11.2 338 8.5 17.4 38.2 109 -03061423.HOB 0 9.6 1525 -68 2132 7 32.6 0.0 -11.5 330 8.5 14.0 32.3 24 -03061223.C11 0 20.9 5150 -8 501 190 32.5 5.3 -8.9 269 8.0 41.4 58.8 339 -03061221.AGC 0 13.1 691 -9 1032 158 35.1 0.6 -8.8 227 5.9 34.2 44.2 256 -03060401.TCC 0 11.4 1746 -91 1622 -15 59.6 -0.1 -9.6 288 8.2 44.8 48.7 398 -03060322.LBB 0 13.6 2239 -128 1199 80 45.2 0.5 -9.1 302 7.9 31.8 57.3 316 -03060302.LRD 0 17.3 3023 -81 1418 -4 35.4 0.0 -5.0 285 7.3 27.3 67.7 -12 -03053121.ILM 0 13.5 1237 -102 1265 394 58.4 2.3 -10.4 275 6.3 47.7 74.8 576 -03052001.ADM 0 16.8 3033 -19 1155 81 33.3 1.2 -8.4 288 7.5 14.5 61.0 188 -03051922.FSI 0 15.9 2088 -80 836 131 37.4 1.4 -8.3 246 8.1 40.1 50.7 385 -03051409.C12 0 13.9 2056 -415 1151 505 44.5 0.0 -12.7 290 9.5 25.4 80.3 466 -03051406.LW1 0 15.8 3351 -219 819 259 50.4 0.0 -11.8 274 8.3 12.9 74.5 238 -03051401.C11 0 13.9 3239 -178 1774 132 58.3 0.1 -9.9 286 8.2 22.1 60.4 192 -03051322.CDS 0 12.4 3323 -92 2274 79 49.1 0.0 -10.1 280 8.6 18.1 68.8 98 -03051223.MRF 0 11.6 1914 -2 1612 41 42.7 0.2 -6.0 279 6.7 33.9 49.2 174 -03051019.MLC 0 14.5 849 -221 615 158 58.7 0.0 -8.7 240 7.6 34.0 74.3 199 -03051017.P#Q 0 16.5 2801 -34 619 97 68.4 2.7 -9.2 235 7.2 32.3 77.8 168 -03051000.P#J 0 16.2 3929 -21 888 74 55.8 2.7 -12.5 247 7.6 33.6 64.7 227 -03050922.LEX 0 15.5 2304 -3 715 119 55.3 2.5 -9.5 278 7.4 32.8 69.7 185 -03050921.COU 0 16.1 4338 -12 941 67 45.4 2.2 -11.8 246 7.4 35.8 73.5 264 -03050920.SDF 0 15.2 2300 -15 871 88 52.2 1.8 -10.2 268 7.2 36.6 70.7 247 -03050520.MKL 0 15.8 2332 -17 581 247 71.6 5.8 -11.9 263 7.3 40.2 88.1 300 -03050223.BMX 0 15.4 3487 -10 686 61 44.2 1.6 -13.2 283 6.8 21.9 38.7 114 -03050221.HSV 0 13.0 2237 -40 946 139 42.3 2.2 -13.8 264 7.0 27.8 33.8 201 -03050221.ABL 0 13.6 3056 -5 1063 81 40.9 1.6 -14.7 280 7.2 27.0 27.0 130 -03050219.SJT 0 15.1 4252 -2 1189 17 38.9 0.4 -12.5 277 8.1 4.7 61.7 18 -03050219.ABL 0 12.9 2572 -28 1072 45 27.2 0.5 -13.7 261 6.7 22.6 36.0 82 -03050218.MSL 0 13.0 2367 -24 912 19 25.5 0.2 -14.5 257 7.4 24.2 40.8 60 -03050201.ACT 0 13.6 2339 -88 1301 -44 31.1 -0.3 -11.9 280 8.3 21.3 53.8 -77 -03050102.END 0 14.0 3853 -58 1033 227 43.6 5.8 -13.5 250 7.4 27.5 43.5 247 -03071221.AVL 0 11.9 710 -2 1196 56 37.5 0.2 -8.5 266 5.6 31.7 43.3 103 -03071201.FOE 0 16.7 3598 -41 1289 -96 59.4 -2.4 -10.2 313 7.9 33.9 54.8 89 -03071200.FOE 0 16.2 3683 -11 1441 -16 63.8 -0.3 -11.0 315 7.7 31.9 59.2 109 -03071123.P#H 0 12.6 927 -26 1632 97 59.9 0.3 -9.9 322 7.2 45.3 55.0 319 -03070904.PHP 0 14.6 2161 -292 1066 549 72.4 0.0 -8.6 260 8.8 53.5 55.7 683 -03070900.BH3 0 8.3 1108 -106 2627 277 55.8 0.0 -7.9 250 8.4 55.7 68.2 568 -03070723.LVS 0 8.8 850 -179 2135 85 20.0 0.0 -6.4 329 8.7 24.3 27.9 305 -03070720.DSM 0 18.0 4261 -35 1012 20 39.2 0.6 -9.9 262 8.0 13.2 34.7 79 -03070719.LVS 0 9.9 1337 -68 1800 12 22.3 0.0 -7.2 336 8.0 27.0 21.0 98 -03070600.VTN 0 11.6 1572 -201 1584 157 52.8 0.0 -9.5 273 8.2 30.3 50.1 293 -03070521.RAP 0 8.7 803 -208 2327 67 22.6 0.0 -11.2 272 8.5 6.7 33.0 46 -03070521.P#7 0 10.3 1147 -137 2084 84 43.4 0.0 -10.3 249 8.1 22.9 55.2 239 -03070517.BH3 0 8.9 1171 -147 2263 -14 27.2 0.0 -12.5 293 9.1 15.8 39.6 51 -03070305.GDV 0 9.1 634 -206 1972 120 22.6 0.0 -13.9 250 8.7 30.3 58.1 255 -03063018.AUG 0 11.8 1327 -56 1152 60 42.9 0.5 -12.3 267 5.3 24.4 72.0 118 -03081800.BH5 0 9.0 725 -5 2392 -33 27.4 0.0 -9.3 180 7.6 12.2 31.3 76 -03081322.XRW 0 16.6 1031 -16 519 88 21.6 0.0 -6.2 187 5.5 23.7 39.1 164 -03081202.SEP 0 12.7 373 -104 1300 -113 55.9 -0.2 -8.4 345 6.8 38.0 68.0 -12 -03081200.FWD 0 12.2 1050 -51 2135 -30 50.2 0.0 -8.8 339 6.7 35.0 52.7 68 -03081023.P#9 0 13.9 1702 0 1195 30 41.7 0.3 -9.2 346 6.8 25.8 56.8 104 -03080902.P#C 0 15.5 3216 -71 1472 8 27.4 0.1 -6.4 277 7.9 17.3 40.8 199 -03080900.MIB 0 15.0 3325 -48 1477 39 33.2 0.4 -9.0 291 7.7 10.7 43.9 102 -03080900.P#C 0 14.4 3127 -1 1826 10 25.0 0.0 -5.8 262 7.5 12.2 42.3 64 -03080622.GLD 0 12.9 3132 -2 2338 21 28.1 0.0 -7.1 306 8.2 14.7 32.7 115 -03080601.CNU 0 15.8 2262 -28 1629 -18 34.6 -0.1 -5.1 317 6.6 25.1 42.1 49 -03080600.SUX 0 15.5 1945 -3 996 54 38.2 0.7 -8.6 321 7.0 35.9 44.6 171 -03080521.TOP 0 16.0 2857 -24 1592 -7 30.8 0.0 -6.8 308 6.3 19.6 40.9 101 -03080520.DAN 0 15.0 2224 -8 858 8 18.6 0.0 -10.1 275 6.4 27.6 30.4 121 -03080422.P#R 0 15.1 1771 -64 1131 59 51.1 0.7 -8.5 326 6.5 23.7 72.7 144 -03080401.BVX 0 16.9 2856 -38 1072 96 33.8 1.4 -8.7 308 6.7 18.2 47.9 100 -03080202.LUS 0 9.3 520 -170 1828 -21 47.7 0.0 -8.2 291 7.9 30.7 60.7 11 -03080123.CRL 0 13.5 2544 -8 1131 18 35.3 0.2 -12.9 299 7.9 26.6 36.1 109 -03080103.MCW 0 11.0 914 -111 1515 8 24.1 0.0 -12.2 281 7.0 26.6 47.8 60 -03073123.C31 0 8.6 251 -238 2988 79 50.4 0.0 -8.0 311 8.0 29.8 74.4 268 -03073120.TVL 0 10.6 1275 -24 1488 33 34.5 0.1 -7.4 90 7.8 32.3 17.1 170 -03072700.IWD 0 15.1 1598 -19 1386 149 42.6 1.0 -6.1 276 5.9 27.7 60.4 150 -03071802.BH1 0 13.9 2073 -132 1543 52 64.4 0.2 -6.9 291 7.8 47.0 77.9 171 -03071721.RAP 0 14.6 3713 -127 1972 107 39.2 0.0 -6.2 280 8.5 31.5 54.8 181 -03071320.MSL 0 16.4 2839 -21 1060 37 23.4 0.0 -9.3 310 7.1 4.1 36.8 35 -03071320.DIK 0 9.2 2113 -26 3189 -19 27.9 0.0 -9.3 266 9.0 11.0 36.6 31 -04040721.P#U 0 11.2 1509 -10 1060 103 47.1 1.2 -15.7 268 6.4 35.8 60.8 191 -04040702.SPS 0 8.6 230 -53 980 110 36.0 0.2 -17.3 236 6.3 19.0 53.3 110 -04040700.FTW 0 10.4 641 -8 948 43 57.7 0.3 -14.3 228 6.4 22.9 60.1 83 -04040422.LRD 0 13.8 2148 -1 827 171 49.4 3.0 -12.9 244 7.0 31.5 38.8 217 -04040421.ALI 0 13.2 1124 -3 718 10 40.8 0.1 -13.2 238 7.0 18.0 35.9 100 -04032701.DHT 0 9.5 1004 -128 1142 153 30.2 0.3 -13.4 233 8.2 31.2 63.3 235 -04032623.RAP 0 8.7 1651 -52 1568 172 42.5 0.9 -15.5 205 8.0 26.0 46.8 264 -04031802.FSM 0 8.0 442 -99 1939 211 48.0 0.0 -17.1 278 7.5 37.8 72.5 338 -04031800.P#P 0 9.4 1357 -30 1585 127 45.0 0.5 -17.4 288 7.7 34.4 66.4 269 -04030121.ORD 0 7.2 534 -1 908 208 58.9 1.1 -23.3 222 6.6 37.3 72.6 297 -04030120.RFD 0 6.8 505 -7 892 172 55.3 0.8 -24.3 220 6.8 34.8 71.1 256 -04022416.MCO 0 13.1 534 -37 687 121 47.0 0.5 -10.8 255 5.0 28.8 81.9 156 -04022407.G#5 0 10.5 962 -124 801 -16 47.4 -0.1 -18.2 218 7.7 31.4 83.7 14 -04022316.MSY 0 11.3 0 -9999 417 436 51.3 0.0 -11.2 240 6.1 44.9 86.2 531 -04020601.BTR 0 11.7 57 -172 540 186 69.9 0.0 -13.3 214 7.0 48.1 87.1 199 -04020514.LFT 0 11.1 165 -244 1109 583 49.0 0.0 -11.7 217 6.5 46.0 63.5 611 -04020512.LCH 0 13.6 1421 -64 497 282 49.1 3.0 -12.5 222 6.8 41.7 68.1 319 -04011921.VRB 0 10.3 196 -20 878 -16 82.2 0.0 -14.0 242 5.1 46.9 123.3 207 -03112718.RUE 0 10.5 681 0 396 4 92.3 0.0 -20.1 238 7.0 35.8 100.8 153 -03110923.SAC 0 6.9 156 -14 892 38 24.7 0.0 -25.3 234 7.5 14.4 91.8 77 -03102818.CTY 0 16.5 1074 -53 594 181 37.6 1.2 -7.8 217 6.3 23.6 51.5 193 -03100822.VAD 0 14.1 1355 -7 765 -4 27.1 0.0 -11.2 277 6.4 13.9 52.0 68 -03092718.CBE 0 11.6 969 -2 1256 109 40.4 0.5 -12.3 213 6.1 33.1 58.2 137 -03092620.UIN 0 12.7 1139 -3 844 177 50.2 1.7 -14.6 266 7.9 42.7 77.1 266 -03092619.BRL 0 11.1 906 -34 824 125 50.2 1.0 -14.9 256 6.9 40.9 76.6 149 -03091200.MRF 0 9.8 747 -2 1645 9 36.3 0.0 -6.8 276 6.2 25.5 49.1 163 -03090900.MAF 0 9.9 1214 -1 2565 13 32.3 0.0 -8.4 313 7.4 22.4 35.6 163 -03083123.HUF 0 14.8 27 -163 471 268 39.8 0.0 -6.8 243 6.3 41.6 43.2 340 -03082601.P#4 0 12.9 980 -231 1606 140 42.5 0.0 -9.4 277 7.1 39.4 44.3 283 -03082600.ABR 0 14.2 3471 -76 1925 104 37.8 0.1 -11.4 289 8.6 27.8 43.9 143 -03082221.LOL 0 9.6 944 -94 1467 89 64.9 0.3 -12.3 188 8.3 46.4 77.0 299 -03082119.APX 0 14.4 2077 -120 1359 80 36.1 0.3 -8.3 255 7.1 34.1 35.4 132 -03082100.DLH 0 16.1 2503 -11 1009 166 39.5 2.7 -8.1 226 6.2 24.3 46.3 201 -04051501.PUB 0 3.9 204 -85 2585 153 55.2 0.0 -18.2 268 8.8 42.0 78.8 355 -04051423.COS 0 4.6 230 -87 1664 52 57.1 0.0 -18.0 274 8.2 45.2 68.4 179 -04051300.HBR 0 14.0 4148 -28 1710 172 41.2 1.4 -11.1 244 7.8 44.0 46.5 333 -04051100.LUS 0 8.3 917 -69 1429 204 53.5 0.8 -11.5 237 7.4 28.1 44.2 323 -04050923.CVS 0 5.9 554 -61 3040 -32 23.7 0.0 -12.6 309 9.6 17.1 15.5 78 -04050921.STC 0 9.9 1302 -52 1737 185 49.7 0.5 -14.2 264 7.5 46.1 49.8 400 -04050900.P#A 0 13.8 2438 -42 1008 193 29.0 2.3 -12.7 278 7.7 19.9 36.2 251 -04050822.BH3 0 5.3 996 -6 3054 49 48.0 0.0 -15.0 280 9.6 8.9 60.8 58 -04050522.RIC 0 8.3 824 -38 1493 133 43.8 0.4 -20.4 310 7.1 34.9 60.9 251 -04050101.FWD 0 13.9 2471 -39 907 158 44.9 2.9 -14.8 225 8.3 23.0 58.2 185 -04043021.C12 0 13.3 2483 -8 1029 37 45.1 0.7 -14.1 236 7.9 32.8 46.0 48 -04043020.DYS 0 14.1 2950 -10 638 71 52.3 1.8 -14.3 236 7.8 34.1 51.0 143 -04043018.ABI 0 12.0 2372 -1 1211 -3 32.6 0.0 -13.6 230 7.7 22.8 40.3 -22 -04042920.MLU 0 12.9 972 0 744 72 46.0 0.5 -14.5 232 6.6 29.2 45.8 176 -04042821.G#2 0 10.1 747 -3 1175 139 56.7 0.8 -14.7 252 7.4 32.3 53.8 179 -04042521.CDS 0 7.1 679 -5 2042 20 45.4 0.0 -17.7 276 7.7 27.7 76.8 88 -04042300.SGF 0 9.8 113 -134 794 263 69.4 0.1 -15.2 267 7.5 51.1 79.0 572 -04042300.P#P 0 14.6 2114 -9 448 155 49.9 2.7 -13.6 245 7.2 26.3 46.7 258 -04042223.C12 0 12.6 1615 -11 1173 56 54.8 0.7 -10.8 266 6.6 36.5 68.7 191 -04042222.UMN 0 10.5 412 -29 663 220 60.2 0.9 -17.5 254 8.2 45.7 67.6 357 -04042221.C34 0 11.2 1504 -22 1170 72 53.8 0.8 -15.5 265 7.8 38.9 55.3 252 -04042200.ADM 0 11.7 1347 -25 1310 194 51.9 1.6 -13.2 269 6.8 28.4 68.1 339 -04042122.C12 0 11.5 1550 -3 1449 83 53.3 0.6 -13.2 261 6.6 30.3 65.8 168 -04041921.HOB 0 11.3 2173 -1 1395 86 53.9 1.0 -10.9 235 6.7 32.7 83.0 143 -04041801.MFD 0 10.8 1224 -65 1060 185 23.7 0.0 -16.5 288 8.0 29.7 50.0 245 -04041723.MFD 0 11.9 2519 -15 1046 104 26.5 1.1 -15.5 303 7.2 29.2 37.6 184 -04041105.MFE 0 15.8 2222 -37 402 26 39.9 0.4 -11.6 248 7.5 2.1 69.3 23 -04041019.ILM 0 9.2 180 -45 1165 111 41.2 0.1 -16.1 267 6.0 29.7 69.5 345 -04041001.PRX 0 8.8 516 -75 1780 210 42.3 0.1 -14.1 270 6.7 37.6 59.1 314 -04040818.DAB 0 13.2 1058 -19 810 73 56.2 0.7 -15.8 264 7.7 33.6 94.9 186 -04040815.DHN 0 11.9 877 -2 522 78 53.9 0.6 -15.8 257 6.5 30.9 87.6 111 -04071305.CHE 0 17.6 3151 -107 771 181 49.7 2.9 -8.9 301 7.9 29.7 60.2 300 -04070104.HBR 0 15.7 1988 -45 801 174 24.0 0.0 -8.2 259 7.0 25.9 23.7 276 -04062402.FNT 0 10.0 608 -67 1046 219 50.4 1.0 -15.3 260 6.5 32.1 72.4 270 -04062222.BIS 0 7.2 504 -14 1518 9 56.3 0.0 -18.7 301 6.3 28.7 75.6 88 -04062023.DHT 0 8.4 905 -127 2633 107 47.8 0.0 -9.3 270 8.8 36.3 67.8 192 -04061902.G#1 0 13.2 1631 -27 1122 144 35.1 1.2 -8.6 284 7.3 37.4 58.3 408 -04061900.HDN 0 6.4 316 -26 1668 -40 51.4 0.0 -13.3 257 8.3 36.5 73.3 29 -04061820.FAM 0 15.9 1842 -13 923 65 31.0 0.6 -7.0 271 5.7 23.9 35.7 131 -04061800.LHX 0 12.7 2059 -86 777 206 47.3 2.5 -11.2 235 8.4 37.4 49.6 651 -04052700.CHE 0 8.9 347 -4 1255 145 31.1 0.2 -14.7 268 6.1 31.0 44.9 228 -04052623.TYS 0 14.7 1654 -44 919 199 50.1 2.8 -9.7 275 5.9 37.8 71.9 255 -04052623.OKC 0 15.9 3047 -69 1198 124 56.8 2.5 -7.9 261 6.8 24.4 82.9 79 -04052622.FSD 0 9.4 835 -34 1187 143 35.4 0.6 -17.3 267 7.3 33.1 47.2 271 -04052621.CSV 0 14.4 1608 -15 870 176 59.8 2.8 -9.3 268 6.2 35.9 58.7 237 -04052621.C33 0 13.6 2405 -23 1847 104 55.5 0.4 -9.6 256 7.5 30.4 80.9 72 -04052603.CAI 0 15.4 1463 -14 609 129 47.0 1.5 -11.0 277 7.2 31.6 59.9 153 -04052402.P#7 0 7.8 400 -213 1358 246 41.2 0.0 -15.5 247 8.2 35.3 62.4 412 -04052400.STL 0 16.1 3087 -3 604 162 45.4 3.8 -12.7 253 8.0 28.6 58.7 195 -04052400.CDR 0 5.8 117 -187 2181 178 56.7 0.0 -14.5 256 8.0 30.8 66.1 338 -04052323.BGM 0 14.6 2244 0 781 156 41.1 2.4 -11.9 272 7.8 30.1 44.7 249 -04052320.PIN 0 12.0 1300 -3 1376 120 33.7 0.6 -11.8 267 6.7 36.9 31.3 199 -04052300.ELM 0 12.4 1089 -41 1163 226 43.8 1.5 -9.7 281 5.7 46.2 46.0 359 -04052201.G#1 0 12.3 2404 -84 1771 261 33.8 0.6 -8.2 246 7.9 36.9 50.5 385 -04052201.SNY 0 7.0 484 -214 2287 78 62.8 0.0 -12.7 227 9.0 42.4 81.2 214 -04052123.HYS 0 12.7 3460 -27 2109 75 39.7 0.0 -10.8 236 8.6 29.0 45.1 157 -04052100.FKL 0 14.7 2440 -9 772 269 42.7 4.7 -10.6 299 6.4 28.6 49.2 346 -04052100.DEN 0 9.0 1781 -3 1934 76 49.3 0.1 -11.5 231 8.4 30.6 60.1 225 -04051723.DSM 0 13.3 1669 -24 854 23 36.8 0.2 -11.5 251 6.5 26.2 51.1 132 -04051723.PUB 0 9.2 546 -83 1212 147 55.3 0.5 -11.9 251 7.8 44.9 72.1 222 -04051601.9V9 0 7.5 608 -65 1315 120 61.8 0.5 -19.3 286 7.0 35.7 85.8 189 -04051521.PIR 0 6.8 724 -30 1545 91 60.8 0.3 -21.3 289 7.3 36.7 70.4 224 -04051520.Y26 0 7.0 965 -32 1206 89 60.4 0.7 -23.7 287 7.8 40.0 67.1 217 -99053023.P07 0 12.1 2286 -113 1897 53 39.7 0.1 -8.5 315 7.8 22.5 45.3 165 -99052800.FTW 0 12.2 1104 -4 954 41 33.8 0.3 -12.6 256 6.8 24.6 36.5 103 -99052503.FST 0 10.3 1116 -185 1882 122 53.5 0.0 -9.7 271 8.3 44.1 67.4 157 -99052502.INK 0 11.4 1576 -110 1665 119 56.3 0.4 -10.0 270 7.8 39.9 60.4 191 -99052420.ABQ 0 8.1 781 -71 1338 71 34.2 0.2 -13.9 212 8.5 24.7 44.7 132 -99052220.TUL 0 16.0 3471 -3 869 32 31.1 0.6 -12.1 269 7.3 20.4 36.1 91 -99052200.SNY 0 8.7 1439 -7 1674 53 48.7 0.2 -12.8 266 7.7 28.2 65.4 147 -99052123.RAP 0 8.6 1729 -70 1711 131 43.6 0.4 -16.2 256 8.7 23.0 67.0 178 -99052001.MOT 0 8.0 903 -1 1506 2 27.5 0.0 -17.4 240 7.0 14.4 59.7 47 -99051700.LAA 0 7.5 817 -141 1731 124 65.0 0.1 -15.0 234 8.6 43.8 78.0 361 -99050519.MVN 0 12.9 1777 -10 790 108 57.7 1.8 -14.1 237 6.6 41.0 44.8 194 -99043001.INK 0 12.4 2333 -60 967 95 52.8 1.8 -11.4 237 8.1 32.9 71.8 280 -99042900.BIL 0 6.5 60 -143 1109 133 46.8 0.0 -17.8 182 7.5 39.8 84.0 324 -99042800.EVV 0 9.5 305 -3 1146 22 26.2 0.0 -15.6 225 6.4 18.9 38.1 56 -99042701.OKC 0 8.9 873 -24 1056 47 27.4 0.2 -20.3 275 7.9 23.0 44.2 88 -99042322.LOZ 0 12.8 1995 -5 979 77 37.3 1.0 -11.6 287 6.9 30.4 44.4 71 -99042319.EZF 0 10.2 1142 -51 1722 106 57.2 0.3 -14.2 276 6.9 38.0 68.5 172 -99042203.GOK 0 12.3 2307 -132 894 364 53.9 3.4 -16.0 254 8.5 31.2 54.6 401 -99042123.BMI 0 11.6 1687 -24 839 261 53.4 3.9 -16.4 252 7.8 45.9 57.4 408 -04083002.GCK 0 10.7 1029 -108 1687 204 32.5 0.2 -8.1 315 6.8 29.0 26.2 278 -04083000.SUX 0 10.7 779 -7 1471 199 42.6 0.6 -12.9 289 6.7 36.3 45.9 296 -04082622.C23 0 10.2 983 -43 1349 25 41.1 0.1 -15.8 254 7.2 17.8 70.6 46 -04082621.MCW 0 15.4 2478 -27 1087 26 46.1 0.5 -9.9 239 7.0 37.9 68.9 181 -04082522.FSM 0 18.2 3688 -45 1240 101 33.9 1.6 -6.7 244 6.2 16.5 39.6 113 -04082522.BIS 0 10.2 2077 -41 1811 74 38.1 0.2 -15.2 230 8.4 22.8 43.2 103 -04082503.MHK 0 19.2 4217 -59 627 274 31.2 5.7 -7.9 224 7.5 31.4 51.8 392 -04082501.MHK 0 18.9 4262 -45 721 150 29.9 3.2 -7.4 240 7.1 28.3 50.9 241 -04082020.BGM 0 14.6 1425 -21 712 95 53.2 1.2 -9.5 238 5.9 38.1 53.7 106 -04082018.ORH 0 15.1 2067 -19 1051 47 40.0 0.6 -8.9 256 6.1 29.0 39.9 132 -04081918.LBE 0 14.4 1183 -7 597 105 39.9 0.8 -8.7 270 5.6 40.5 44.4 152 -04081901.PIA 0 13.9 1294 -107 1203 377 40.4 1.6 -7.9 277 5.6 39.8 43.3 465 -04081822.BRL 0 15.3 2600 -41 963 377 41.3 6.8 -9.4 276 6.6 42.5 42.9 508 -04081421.LIC 0 9.9 1288 -66 1242 15 32.2 0.1 -10.2 333 7.8 25.5 42.7 65 -04080321.OAX 0 18.7 4816 -44 1389 92 36.9 1.7 -5.9 259 7.0 23.6 38.1 189 -04080202.Y26 0 15.4 3187 -169 1209 336 55.2 1.6 -9.3 291 8.1 28.5 83.2 385 -04080123.Y22 0 8.5 1290 -28 3011 -1 45.9 0.0 -10.5 298 8.6 30.2 71.2 158 -04073101.GAG 0 14.4 2006 -116 1300 54 42.0 0.3 -6.2 308 6.7 14.8 44.7 98 -04072102.FSD 0 19.9 4659 -49 869 261 26.0 5.3 -5.9 278 7.3 28.0 37.4 426 -99081101.HLC 0 17.4 3928 -33 1289 71 38.3 1.3 -5.1 243 6.7 21.0 34.5 152 -99081023.AKO 0 14.9 2910 -32 1271 87 33.9 1.0 -6.5 232 7.6 22.7 45.7 163 -99080901.DIK 0 12.0 2409 -98 1891 48 58.5 0.1 -10.8 267 8.5 29.7 54.5 94 -99080822.2WX 0 10.3 1972 -32 2526 39 44.1 0.0 -8.8 262 8.3 27.2 41.0 117 -99080702.RAP 0 12.7 921 -36 1200 35 33.6 0.1 -6.6 268 6.3 20.0 48.7 72 -99080301.LWT 0 8.5 449 -155 1772 53 48.3 0.0 -10.3 278 7.8 29.4 70.4 131 -99073100.JKL 0 15.8 3605 -30 1833 89 22.3 0.0 -5.9 355 6.7 22.8 19.6 158 -99073020.IPT 0 15.0 2685 -12 1238 32 34.0 0.4 -8.7 319 6.3 16.0 50.7 72 -99072922.FVX 0 14.5 1431 -13 1556 81 34.3 0.3 -6.0 327 5.6 22.6 48.0 117 -99072902.XVG 0 12.7 1459 -186 1710 319 58.3 0.1 -9.5 302 7.7 41.9 73.8 381 -99072900.ADG 0 14.8 1974 -6 1415 63 37.3 0.5 -9.4 298 7.1 21.7 66.3 118 -99072420.MHT 0 14.8 1594 -17 1088 66 27.8 0.5 -9.7 275 6.5 25.2 56.1 134 -99072319.RAP 0 10.6 1320 -19 2145 52 38.7 0.0 -7.5 263 7.3 22.5 54.0 87 -99072300.FAR 0 16.2 2819 -34 1355 81 35.4 0.9 -8.5 247 7.6 27.9 55.9 137 -99071923.GDV 0 11.9 1807 -31 1654 21 41.3 0.1 -11.2 254 7.9 18.9 69.4 67 -99071302.FAR 0 12.1 1948 -48 1552 125 38.2 0.7 -12.5 297 7.2 27.2 61.0 158 -99071302.DVL 0 10.4 1453 -76 1761 69 42.5 0.1 -13.5 288 7.5 28.3 62.4 124 -99071300.OLF 0 9.2 1101 -38 2374 25 49.7 0.0 -10.3 281 7.3 26.5 65.7 106 -99071202.AIA 0 9.4 1094 -73 1844 -8 27.8 0.0 -11.3 327 8.0 26.7 47.0 79 -99070804.GDV 0 14.2 2058 -209 1364 472 61.7 0.0 -7.6 251 8.0 40.8 78.6 551 -99070421.ERY 0 19.1 3756 -61 791 95 32.9 1.8 -6.7 267 8.2 22.2 36.6 98 -99070207.SFD 0 9.5 32 -374 1535 254 82.4 0.0 -10.7 263 7.4 45.0 92.7 464 -99070103.SWO 0 18.3 2994 -18 703 229 51.1 5.8 -4.6 303 6.4 25.9 51.9 297 -99070103.GCK 0 15.2 2113 -124 873 95 73.0 1.0 -6.5 294 7.5 37.6 74.8 319 -99063023.LBF 0 9.7 291 -114 1136 0 76.3 0.0 -12.3 289 6.9 54.3 115.6 214 -99062801.BGD 0 13.8 2864 -63 2251 73 37.7 0.0 -5.0 266 8.5 22.5 43.1 130 -99062522.DIK 0 12.8 2775 -1 1732 -52 57.7 -0.4 -10.3 230 8.2 35.4 58.9 132 -99062501.VTN 0 11.7 1035 -41 1545 55 41.3 0.2 -8.2 282 6.6 23.6 41.7 120 -99062400.BGD 0 12.2 2544 -17 2195 10 13.6 0.0 -6.5 288 7.8 22.6 35.1 91 -99060601.P07 0 11.8 1543 -130 1771 -31 45.2 0.0 -8.7 243 7.9 18.4 58.3 32 -99060523.LBF 0 10.7 2070 -28 1957 91 62.6 0.1 -12.9 197 8.5 25.9 90.4 131 -99060302.IML 0 10.0 869 -198 1657 237 43.7 0.0 -11.0 225 8.5 39.8 66.5 421 -99060202.GCC 0 6.3 226 -83 1883 18 41.3 0.0 -15.4 262 8.3 26.0 42.6 126 -99060200.FTW 0 16.8 3982 -31 1338 62 35.0 1.0 -11.1 275 8.5 25.7 60.3 144 -99053102.MHK 0 11.6 903 -51 1360 108 32.8 0.3 -11.3 270 6.9 30.0 24.5 179 -99120303.ADM 0 9.7 1355 -50 974 250 42.8 2.4 -22.1 217 8.5 35.9 65.7 332 -99112303.RBD 0 13.2 1077 -16 789 138 48.1 1.2 -13.6 235 6.4 25.1 60.9 176 -99112302.HBR 0 8.7 124 -124 660 53 47.7 0.0 -17.1 219 6.7 41.5 75.7 132 -99100823.FSI 0 10.1 649 -14 1313 5 36.2 0.0 -13.6 219 6.3 14.3 67.9 56 -99092600.GKY 0 13.1 1483 -15 1429 43 28.0 0.2 -9.4 340 6.3 21.5 55.3 182 -99092522.D07 0 6.4 163 -199 2219 136 65.7 0.0 -15.8 242 8.3 31.8 105.7 206 -99092004.RRC 0 11.2 292 -200 1044 70 37.2 0.0 -11.2 270 6.7 28.8 60.6 216 -99092000.OKC 0 11.1 1068 -42 1896 56 39.5 0.0 -10.1 290 6.8 29.0 60.9 190 -99091923.CSM 0 11.9 1645 -3 1885 18 41.3 0.0 -9.8 280 7.0 27.5 64.0 178 -99091920.CGZ 0 11.2 802 -16 1905 19 39.1 0.0 -8.7 245 6.5 16.0 60.3 61 -99091207.SLP 0 15.6 2094 -69 507 92 45.4 1.3 -10.8 271 8.2 16.8 55.8 121 -99091200.LBL 0 11.9 1180 -121 1590 31 43.2 0.1 -9.0 275 7.8 25.7 65.5 84 -99091122.HLC 0 12.4 1517 -36 1221 59 37.8 0.4 -11.3 253 7.4 21.0 66.2 94 -99091101.AFW 0 13.1 1250 -24 1970 21 29.5 0.0 -7.4 297 6.2 21.7 52.8 139 -99082300.ABR 0 11.7 1432 -38 1851 61 40.1 0.1 -9.6 289 6.9 20.3 45.5 101 -99082104.HON 0 13.3 1187 -244 1155 197 38.1 0.0 -8.9 281 7.4 31.4 54.2 238 -99082100.LBF 0 9.8 20 -311 1794 44 34.8 0.0 -7.8 321 7.1 19.7 46.1 126 -99082022.DIK 0 11.7 1445 -10 1669 21 33.6 0.1 -7.8 298 6.3 17.8 36.0 58 -99081922.MLS 0 7.1 393 -105 3278 19 33.8 0.0 -10.0 244 8.6 22.0 37.3 120 -99081800.RRT 0 11.4 1524 -26 847 90 49.2 1.1 -17.7 268 7.3 32.2 62.0 126 -99081400.ALB 0 16.8 1843 -4 701 196 38.5 2.3 -6.3 249 5.8 29.9 48.4 252 -99081202.GCC 0 10.6 877 -99 1162 63 34.5 0.2 -10.2 218 7.5 17.7 54.6 98 +FILENAME CAT MLMIXR ML CAPE ML CIN MLCL(MAGL) 0-1SRH 0-6KT STPC 500 T (C) 500DIR 7-5 LR 0-3(KT) 0-9(KT) 0-3 KM SRH (M2/S2) +00042320.TXK 2 12.9 1702 -1 657 134 61.7 2.3 -14.0 250 6.5 32.8 76.6 166 +00042001.PPF 2 13.5 2614 -50 1216 227 59.9 4.7 -12.9 234 7.5 39.7 73.5 244 +00032900.FTW 2 13.1 2058 -42 1069 83 49.7 1.3 -15.2 245 8.0 21.9 87.1 126 +00032304.SJT 2 11.9 1680 -119 896 119 61.1 1.1 -15.5 212 9.1 38.4 66.9 217 +00031622.ATT 2 9.4 1019 -7 1566 12 45.8 0.0 -17.5 249 8.0 34.4 53.7 159 +00021323.LRF 2 9.2 1256 -9 1066 82 46.9 0.8 -21.2 249 7.5 32.3 51.4 114 +00010323.MEI 2 13.4 1148 -15 769 241 57.2 2.6 -10.0 226 6.1 38.8 71.2 288 +00010319.GWO 2 12.8 1168 -9 770 202 66.4 2.4 -13.0 223 7.5 47.3 75.1 246 +03050500.UMN 2 13.8 2392 -10 773 341 66.3 8.2 -13.4 237 7.7 49.1 93.8 411 +03050500.JBR 2 15.7 2713 -22 862 266 57.8 6.9 -10.7 240 7.1 50.5 82.9 440 +03050421.TUL 2 16.1 3621 -15 843 147 63.1 5.3 -11.7 230 7.3 45.6 100.2 160 +03050421.MKC 2 13.7 2002 -67 478 479 68.4 8.5 -14.6 224 7.9 48.1 89.8 508 +03050420.P#F 2 15.7 3397 -1 660 166 58.5 5.5 -12.7 230 7.8 34.3 100.9 195 +03050321.P#T 2 12.7 3156 -2 1967 61 36.2 0.0 -9.8 247 7.5 27.2 67.1 207 +03042503.JAN 2 13.5 2568 -27 924 257 44.3 4.9 -15.4 255 7.7 41.1 76.9 279 +03041922.PNC 2 11.5 1157 -40 665 212 87.9 2.5 -17.9 223 7.3 46.5 111.5 242 +03041523.CDS 2 10.7 1020 -106 1534 326 74.0 1.0 -12.4 234 7.5 56.1 83.8 531 +03041522.LBB 2 8.8 883 -53 1986 116 77.2 0.0 -11.7 243 7.5 48.5 87.4 276 +03040702.CLN 2 13.1 488 -133 780 363 62.7 0.8 -11.4 244 7.1 33.6 74.1 411 +03040623.ESF 2 15.8 1847 -29 621 166 51.8 2.6 -11.0 246 6.8 26.8 50.8 161 +03032722.MIA 2 12.4 299 -31 1074 187 48.8 0.4 -10.5 261 5.8 20.5 87.0 197 +01061900.ROS 2 13.6 2218 -30 1076 140 67.7 2.9 -11.1 250 8.2 40.5 73.6 279 +01061401.LNK 2 17.2 4665 -15 1190 173 39.2 4.3 -10.5 215 8.3 32.6 50.7 217 +01061120.ILL 2 14.7 3400 -120 1255 270 56.1 3.4 -10.8 259 8.6 41.9 54.8 448 +01060222.LOZ 2 9.7 164 -10 898 117 51.4 0.2 -13.4 270 5.3 39.8 66.8 189 +01053000.AMA 2 13.0 2887 -76 1322 166 48.4 2.2 -10.1 246 8.4 38.6 50.6 216 +01052902.LHX 2 10.9 1698 -120 1285 185 52.1 1.0 -10.0 251 8.2 38.9 60.5 365 +01052118.OZW 2 12.5 494 -2 775 133 33.4 0.4 -10.3 188 5.6 34.2 36.9 174 +01052022.MIN 2 16.9 3331 -2 711 122 47.8 3.2 -11.0 244 7.3 36.0 67.7 201 +01051022.MIW 2 12.8 2912 -24 1091 65 36.4 1.0 -16.0 255 7.9 28.8 43.0 141 +01051001.FBL 2 9.5 2106 -90 1776 330 50.0 1.0 -16.6 265 8.2 42.9 50.3 516 +01050200.AUM 2 11.2 1434 -74 1331 179 38.8 0.9 -13.3 251 7.5 36.0 52.3 237 +01042202.GBD 2 12.6 2145 -40 777 165 61.8 3.5 -13.6 229 7.8 41.6 62.6 328 +01041423.P28 2 12.3 2168 -54 827 145 76.4 3.1 -16.2 256 8.3 45.0 89.5 235 +01041117.LWD 2 11.9 968 -3 632 282 77.0 2.7 -15.1 208 7.5 38.2 81.4 327 +01040918.BVI 2 10.7 1326 -11 1210 102 57.2 1.0 -15.4 266 7.7 32.1 32.1 174 +01022422.SGT 2 11.8 1020 -15 967 335 52.8 3.0 -14.3 213 7.7 53.6 64.9 450 +00110820.HEZ 2 15.9 2158 -6 881 236 47.1 4.0 -8.5 204 6.2 29.0 68.5 266 +00103122.HLC 2 11.0 1274 -14 954 110 47.4 1.1 -14.1 202 7.4 32.6 74.4 169 +00092022.DAY 2 13.9 1299 -7 971 215 63.4 2.8 -8.2 237 6.1 37.5 61.0 237 +00072601.OTG 2 14.5 2869 -49 1055 88 42.5 1.7 -12.6 290 7.2 33.4 41.3 161 +00072523.RWF 2 14.6 2791 -13 1068 96 39.4 1.6 -12.0 275 7.0 29.2 35.8 163 +00071122.BKX 2 14.7 1167 -47 944 134 42.8 1.1 -7.8 261 6.8 27.2 67.9 205 +00070601.SNY 2 13.6 2847 -18 1681 52 57.5 0.5 -7.4 248 8.1 19.0 74.4 122 +00052319.BWG 2 13.7 2114 -41 1128 167 38.6 2.0 -11.4 294 6.9 36.9 62.8 278 +00051722.LXN 2 14.0 3552 -16 910 111 27.5 1.8 -13.9 169 8.4 28.1 44.5 170 +00051200.ALO 2 16.5 4382 -13 1110 168 51.1 5.6 -7.9 254 6.7 33.2 51.6 199 +00050101.MWL 2 13.0 2207 -103 1176 253 47.3 2.4 -12.4 227 8.2 40.3 37.8 297 +00042323.SHV 2 13.4 2001 -19 928 216 58.9 4.2 -13.0 261 6.7 41.9 60.0 296 +04051923.GFK 2 11.2 967 -44 828 233 54.9 2.1 -16.6 243 7.2 39.5 86.1 229 +04051302.ICT 2 15.9 3157 -12 538 223 36.4 4.3 -9.4 232 6.4 23.8 51.5 245 +04051101.LIC 2 9.0 1549 -59 1592 233 43.4 1.0 -11.5 244 8.4 35.1 46.6 395 +04042022.PIA 2 12.4 1852 -11 728 320 36.4 3.6 -14.7 235 6.2 38.5 40.1 488 +04032718.DDC 2 10.0 1332 -8 893 190 41.4 1.7 -16.6 206 7.5 30.8 47.5 198 +04030418.ABI 2 10.7 626 -20 1108 319 46.5 1.4 -13.7 196 7.0 40.3 84.2 350 +03111718.HOU 2 16.4 1980 -1 445 137 48.2 2.2 -12.4 207 6.6 24.0 77.0 158 +03111223.MFD 2 8.3 64 -56 890 219 99.1 0.1 -15.7 261 5.7 55.1 123.1 275 +03111220.MIE 2 9.7 388 -1 757 123 91.0 0.5 -15.6 258 5.7 47.1 117.3 205 +03082201.JXN 2 17.2 3046 -36 1091 255 31.0 3.6 -5.9 285 6.6 34.4 33.2 304 +03072122.AVP 2 14.3 1810 -16 1228 162 51.1 1.9 -7.9 239 5.6 45.7 49.9 148 +03072104.CID 2 17.8 2344 -22 462 187 48.9 3.6 -7.0 291 7.0 34.2 63.6 237 +03072101.ALO 2 15.0 1859 -107 921 156 49.6 1.5 -8.0 297 7.0 28.2 58.2 248 +03062500.HON 2 17.0 3737 -23 1021 335 52.2 10.7 -7.4 227 7.5 43.4 61.6 550 +03062422.MHE 2 19.5 5088 -22 717 256 55.5 12.1 -8.0 228 7.9 40.9 58.4 422 +03062421.MHE 2 17.5 3584 -16 768 252 56.0 8.4 -7.9 220 7.8 38.8 57.2 348 +03062302.P#8 2 16.8 3414 -169 1003 367 38.7 1.7 -6.8 227 7.6 30.2 57.1 437 +03062223.P#8 2 17.7 4366 -39 972 253 38.8 7.2 -8.3 246 8.6 34.3 54.7 387 +03061001.P#9 2 12.6 2103 -97 1467 421 51.0 2.8 -11.2 266 7.9 45.5 63.9 651 +03053103.CMI 2 12.6 701 -119 899 482 64.7 1.8 -11.6 292 6.3 36.9 85.1 523 +03053101.ILX 2 12.4 784 -55 1108 474 76.0 3.2 -8.5 294 5.0 45.0 90.9 524 +03051100.UIN 2 14.7 2093 -27 738 302 63.1 6.3 -11.7 240 7.7 43.7 97.9 354 +03051004.C34 2 17.3 3493 -14 749 452 53.6 14.1 -8.8 228 7.7 32.1 77.0 511 +03050923.HBR 2 11.1 1389 -64 2135 137 56.8 0.0 -9.1 231 7.7 35.8 78.1 219 +03050900.C30 2 14.6 1749 -112 819 321 69.8 3.3 -8.9 227 6.8 57.0 72.2 306 +03050823.C34 2 17.9 3605 -25 669 342 65.2 12.3 -7.2 233 7.1 42.3 72.0 318 +03050822.W#N 2 17.4 3730 -13 635 141 70.0 5.3 -10.1 228 7.6 45.5 81.3 173 +03050821.LW1 2 19.1 5309 -6 876 145 63.2 7.7 -8.7 235 7.4 31.6 71.3 182 +03050807.ADM 2 17.1 3114 -53 730 439 47.4 10.6 -9.3 253 8.0 50.2 61.5 608 +03050805.SPS 2 16.0 2409 -148 836 382 44.4 2.4 -9.1 262 7.9 43.1 59.0 798 +03050703.PAH 2 15.8 2873 -49 602 390 36.8 6.9 -13.6 237 7.9 35.3 70.1 454 +03050701.CGI 2 15.1 2935 -47 799 431 61.0 12.6 -14.4 269 7.8 32.8 83.2 580 +03050504.MKL 2 15.6 2334 -16 833 615 59.6 14.3 -9.9 251 7.1 62.0 77.1 842 +03050501.LZK 2 15.9 2390 -18 719 361 67.0 8.6 -11.0 237 7.4 41.7 97.3 397 +99120301.GOK 2 10.2 1811 -12 858 234 47.2 3.3 -21.1 202 8.2 32.4 63.0 262 +99081601.JMS 2 13.6 1255 -165 1044 130 48.5 0.3 -9.9 240 8.1 30.2 89.4 174 +99070900.ONA 2 18.4 3379 -18 992 385 46.0 10.0 -5.8 275 6.5 42.9 49.4 571 +99070400.OSC 2 15.9 1760 -27 1078 101 26.7 0.7 -6.7 320 6.2 28.3 31.6 163 +99060620.HCO 2 14.6 3241 -5 904 65 29.6 1.0 -16.1 175 8.1 26.8 70.8 115 +99060500.IEN 2 12.1 2533 -37 1323 70 52.4 1.0 -11.4 201 8.2 32.9 60.1 191 +99060400.HLC 2 15.7 4348 -16 1101 154 38.3 3.9 -9.3 240 7.5 36.9 40.6 277 +99060200.TBN 2 14.9 2338 -19 838 136 37.3 2.0 -10.3 259 6.5 40.0 21.6 223 +99060123.MKO 2 17.3 3739 0 888 68 38.1 1.6 -10.6 279 7.9 32.2 23.0 135 +99060100.LIC 2 9.1 1877 -49 1439 56 56.8 0.6 -13.7 249 9.2 34.3 62.4 140 +99051621.OMA 2 16.1 4691 0 824 102 38.6 3.1 -14.5 223 8.8 33.7 41.5 176 +99051122.BMQ 2 15.0 3545 -92 1026 40 35.1 0.6 -12.3 259 8.0 21.8 29.6 59 +99050408.JCT 2 13.0 2082 -218 838 355 55.0 0.0 -11.2 254 8.3 46.8 58.7 506 +99050402.GOK 2 13.9 3154 -61 723 366 51.4 9.2 -14.6 240 8.2 36.8 57.5 441 +99050401.ICT 2 12.6 2748 -7 1016 257 31.8 3.7 -14.7 227 7.9 40.5 70.4 415 +99050323.OKC 2 15.2 4117 -15 733 308 43.5 9.2 -13.2 243 7.8 43.2 70.1 401 +99050300.HSI 2 8.0 203 -4 845 168 41.5 0.2 -17.7 222 6.7 28.6 32.1 221 +99042200.END 2 12.7 3301 -34 1156 225 46.1 4.8 -15.4 236 8.1 35.1 48.2 242 +04082700.RDD 2 18.4 3706 -37 940 184 41.0 4.7 -6.9 255 7.1 28.7 60.7 258 +04071823.GFK 2 16.7 3575 -36 1246 117 45.4 2.4 -7.9 310 6.8 35.1 45.5 292 +04071302.GRI 2 15.9 3090 -197 1538 152 29.0 0.0 -7.9 298 8.5 13.8 50.5 173 +04062402.OSH 2 11.1 1428 -30 700 187 62.2 2.7 -16.7 257 6.5 50.9 79.3 234 +04061620.LAA 2 12.3 1494 -63 908 129 51.4 1.5 -9.4 252 7.7 34.1 57.1 369 +04061300.W#N 2 16.4 3866 -17 1255 231 34.6 3.8 -9.2 251 7.9 37.4 44.2 387 +04060701.MOT 2 10.4 295 -316 1541 461 68.3 0.0 -8.4 254 6.7 33.2 82.6 561 +04060621.C02 2 9.9 1824 -59 2285 83 55.5 0.0 -10.8 234 7.9 39.7 69.2 64 +04053023.IND 2 17.3 2618 -10 577 361 58.6 9.2 -9.1 248 6.9 35.7 45.1 369 +04053020.SDF 2 16.6 2653 -2 807 250 52.4 5.8 -9.4 245 6.8 37.1 41.1 317 +04053002.OKC 2 15.5 2559 -32 1162 314 55.7 6.2 -7.3 244 7.0 35.6 70.5 434 +04053002.ICT 2 16.1 3240 -98 992 315 44.2 5.1 -10.4 245 7.9 25.8 56.2 399 +04053000.MCI 2 16.0 3437 -5 863 239 36.5 5.0 -12.8 232 8.3 27.4 42.9 372 +04052922.C33 2 16.5 4081 -4 1356 126 51.4 2.8 -7.8 244 7.4 36.9 74.7 248 +04052921.TOP 2 16.1 3843 -13 936 78 32.5 1.6 -12.5 233 8.0 17.3 39.0 190 +04052421.STJ 2 15.6 3982 -40 991 76 40.4 2.0 -11.9 234 7.7 26.3 67.6 270 +04052300.P#8 2 15.0 3882 -47 1262 228 54.5 5.9 -10.5 233 7.9 34.1 69.9 334 +04052221.MCK 2 13.2 3453 -37 1185 103 72.0 2.9 -12.3 231 8.6 35.5 82.5 224 +04052219.GLD 2 9.9 1898 -54 1700 22 59.0 0.1 -12.7 233 8.4 12.6 69.5 76 +04052122.CID 2 15.4 2960 -48 971 309 36.6 5.6 -11.5 268 7.4 36.1 50.0 390 +53031321.FWH 2 10.8 727 -98 981 119 51.2 0.5 -16.3 248 8.1 30.6 80.9 266 V +55052521.LTS 2 15.0 4060 -25 1509 322 66.4 6.4 -12.3 225 8.6 37.0 53.5 355 V +56041521.GUN 2 11.7 1189 -11 1302 251 72.4 2.1 -13.6 230 7.3 55.7 66.8 370 V +57040221.FWH 2 13.2 3580 -3 942 94 35.8 2.0 -15.8 189 7.9 26.1 52.8 122 V +57052021.TOP 2 14.0 2801 -2 920 142 55.7 3.7 -13.8 207 7.7 48.0 77.2 228 V +57052121.BYH 2 15.7 2854 -5 1106 236 49.7 5.0 -10.9 230 7.2 33.0 92.5 240 V +57061418.PIA 2 15.9 2118 -6 986 394 50.0 7.0 -8.6 252 6.9 52.8 52.1 496 V +59040100.FWH 2 12.6 3068 -26 987 124 42.8 2.7 -17.6 247 9.0 28.0 61.5 142 V +61050800.FSM 2 14.5 2844 -7 1215 261 61.7 5.8 -11.4 240 7.5 42.2 65.9 323 V +61050600.FSM 2 14.3 2667 -12 1121 245 65.5 5.8 -13.1 240 8.3 61.7 43.1 430 V +62052600.OKC 2 14.3 4171 -76 1591 154 33.3 1.2 -12.0 264 8.6 25.3 43.2 228 V +62080700.TOP 2 20.6 6024 -12 1167 160 42.3 5.7 -7.3 250 7.7 32.4 60.6 243 V +64050600.OMA 2 12.7 2395 -61 1048 349 68.6 7.4 -13.8 224 8.8 54.6 89.3 498 V +65041200.FNT 2 11.2 1814 -1 974 166 91.0 3.0 -17.7 250 7.7 46.4 91.6 372 V +66042800.FWH 2 14.1 3342 -17 1291 148 38.0 2.2 -11.8 265 7.2 39.3 49.0 269 V +66030400.HKS 2 12.2 1434 -10 831 138 47.6 1.6 -14.0 234 7.6 49.0 77.8 142 V +67061100.OKC 2 14.4 3497 0 1569 144 32.2 1.2 -11.0 235 8.7 35.0 51.1 260 V +68110400.VPS 2 12.8 1596 -2 812 129 50.5 1.7 -13.4 251 5.9 30.3 72.0 184 V +69041806.VPS 2 15.2 1013 -8 445 370 55.8 3.5 -11.0 248 6.9 42.3 73.3 439 V +69062400.TIK 2 18.4 4403 -4 776 317 37.5 8.7 -9.4 240 7.5 45.3 56.2 431 V +70100600.TIK 2 13.7 1865 -3 772 241 41.1 3.1 -12.2 230 6.7 35.4 55.6 335 V +71022200.JAN 2 12.8 938 -4 930 470 74.7 4.4 -11.8 211 6.7 57.8 77.3 590 V +73052800.MGM 2 16.4 2337 -2 1017 293 53.5 6.0 -7.9 239 6.2 45.6 45.2 386 V +73041600.VCT 2 15.4 2861 -37 1272 385 48.1 6.4 -12.9 231 8.1 35.7 72.2 377 V +74040400.MGM 2 14.8 2955 -2 1017 161 52.0 4.1 -12.8 235 8.2 39.5 59.4 253 V +74040400.BNA 2 14.6 2744 -31 970 209 77.8 5.7 -13.3 238 7.8 57.0 80.2 301 V +74040400.DAY 2 12.8 2185 -7 986 619 90.8 13.5 -13.1 235 7.1 71.9 91.6 919 V +75042500.UMN 2 15.7 5306 -1 837 145 53.3 6.8 -13.8 255 7.3 41.6 61.8 185 V +74060900.UMN 2 17.0 3643 -2 987 363 37.0 8.1 -6.7 231 7.6 41.4 27.5 508 V +75063000.BIS 2 13.6 3158 -76 1566 198 41.8 1.6 -12.3 233 8.6 26.8 55.7 204 V +76042000.SEP 2 13.7 3326 0 1092 305 45.1 6.9 -14.1 240 7.6 33.7 48.9 358 V +77040418.CKL 2 14.1 1633 0 994 247 66.8 4.0 -9.8 231 6.0 52.7 80.0 333 V +78060100.TOP 2 16.2 4279 -1 1160 267 35.7 5.7 -12.7 233 7.6 36.3 57.0 349 V +79041021.SEP 2 12.8 2186 -9 912 345 48.2 6.1 -13.1 228 8.1 42.9 54.3 468 V +79050300.OKC 2 13.9 2775 -4 877 218 73.2 6.0 -12.3 246 7.2 57.7 103.2 279 V +79033000.OMA 2 10.1 1322 -24 1155 223 56.4 2.4 -15.8 232 7.1 49.1 52.9 345 V +80040800.UMN 2 10.2 2256 -3 1473 97 39.6 0.8 -18.5 236 8.4 39.7 92.1 247 V +84060800.TOP 2 16.2 2284 -16 918 560 74.0 12.8 -6.0 237 6.2 49.1 84.6 705 V +84031600.1M1 2 12.2 2339 -1 1056 250 47.1 4.3 -14.9 251 6.9 30.4 55.5 292 V +86072900.OMA 2 16.4 4252 -21 1667 112 48.4 1.3 -10.6 268 8.6 28.2 81.3 151 V +87111600.GGG 2 12.8 1593 -8 723 298 61.9 4.8 -15.3 178 7.9 43.3 65.2 326 V +90061600.LBF 2 16.1 3827 -1 1050 21 42.1 0.5 -10.6 185 8.5 24.5 74.1 95 V +90060300.PAH 2 15.6 2246 -3 1039 274 47.1 4.7 -7.6 251 7.0 57.8 49.8 384 V +91042700.OUN 2 15.8 4387 -8 898 195 50.3 7.2 -11.5 242 7.0 44.2 54.9 370 V +92062800.AMA 2 14.6 3148 -3 1020 83 44.3 1.9 -10.3 249 7.9 32.7 52.7 220 V +92061700.OVN 2 18.7 4878 -1 1119 262 50.4 9.5 -6.5 237 6.9 46.6 64.6 473 V +93042500.OUN 2 11.6 2675 0 1209 113 49.6 2.0 -14.6 235 6.9 35.5 65.5 168 V +93050700.TOP 2 13.7 2046 -7 666 484 58.8 9.7 -13.1 217 7.0 55.4 51.4 644 V +93060700.LBF 2 15.9 4738 0 930 328 59.3 15.3 -8.6 229 7.6 41.9 67.6 583 V +94042600.SEP 2 12.9 2562 -34 1365 201 51.9 2.8 -11.5 258 7.4 41.3 51.0 198 V +95051900.BMX 2 15.7 2868 -5 989 239 39.3 4.5 -9.9 247 6.7 31.9 49.1 230 V +98040900.BMX 2 14.6 2259 -18 642 136 77.9 3.1 -13.9 240 7.9 50.3 100.1 290 V +98041700.BMX 2 14.7 2038 0 704 263 73.4 5.4 -11.9 245 6.8 36.3 98.6 327 V +99050400.OUN 2 13.4 3644 -22 1050 271 41.4 6.5 -14.9 225 8.4 32.0 37.7 343 V +00121618.BMX 2 12.0 1369 -1 737 279 66.9 3.8 -14.1 220 6.7 51.3 90.8 339 V +00092100.ILN 2 12.5 747 -19 1280 611 75.3 3.3 -7.5 240 5.4 64.7 73.0 810 V +01061400.OAX 2 16.8 4639 -1 1278 127 38.6 2.8 -11.3 215 9.0 35.2 48.5 145 V +01112412.JAN 2 13.0 1392 -2 773 366 50.4 4.3 -10.1 225 5.7 52.4 48.8 504 V +01112418.BMX 2 13.4 1498 -1 655 227 52.0 3.0 -11.3 220 6.1 43.1 61.9 319 V +02111018.ILN 2 11.3 1239 0 734 385 54.4 4.3 -13.7 230 6.6 49.5 103.8 417 V +02062400.ABR 2 17.1 4378 0 1112 85 50.6 2.8 -10.5 245 8.2 29.8 57.9 153 V +03050900.OUN 2 17.0 3871 -32 990 336 62.0 13.0 -6.9 235 6.3 53.9 80.1 364 V +94032718.CKL 2 15.5 1965 0 743 344 72.9 6.8 -9.1 233 6.3 54.7 56.0 403 V +81052300.OKC 2 13.1 2411 -70 1142 203 49.1 3.0 -13.7 235 9.0 37.6 49.1 249 V +65041100.LIT 2 12.7 1815 -1 1365 140 52.3 1.4 -11.1 248 7.2 39.4 64.4 212 V +53051121.FWH 2 13.2 1452 -55 1150 122 53.0 1.3 -11.2 248 7.3 40.4 64.4 209 V +90082900.PIA 2 21.0 6470 -2 974 110 33.6 4.0 -7.3 297 7.1 23.3 54.6 147 V +55042411.GUN 2 13.1 1784 -7 917 345 68.7 6.2 -12.7 248 7.1 44.1 85.9 375 V +56040321.HKS 2 13.0 1491 -14 1212 173 82.1 2.0 -12.4 221 7.5 52.1 107.5 267 V +56051221.MTC 2 13.8 2444 -8 1001 124 69.2 3.0 -14.4 266 7.5 25.2 94.3 162 V +60052000.TOP 2 14.3 3120 -23 1112 167 43.1 3.3 -13.3 213 8.2 32.6 58.1 244 V +66060900.TOP 2 15.9 2226 -24 819 296 59.5 6.5 -8.6 223 7.1 47.3 69.8 397 V +68082000.GRB 2 16.1 2780 -11 1217 173 50.0 3.1 -7.3 258 6.4 27.0 43.6 195 V +74040318.BNA 2 13.0 2906 -5 1157 205 63.1 5.0 -15.5 229 8.2 48.6 76.4 333 V +61051500.PIA 2 12.4 1259 -2 817 196 68.7 2.5 -13.0 202 6.6 36.7 80.9 205 V +54050121.TIK 2 13.0 1988 -17 709 242 56.2 4.5 -13.5 203 8.0 39.2 73.2 282 V +55060421.SLN 2 13.4 3594 -5 1422 36 25.3 0.3 -12.7 225 7.9 23.8 30.4 152 V +70061300.COU 2 16.5 3499 -11 949 204 64.2 7.2 -7.8 246 5.5 49.6 57.1 318 V +76032700.1M1 2 11.8 1820 -17 961 187 41.8 2.4 -17.1 230 8.2 57.3 71.8 243 V +04071318.ILX 2 19.0 4958 -10 1102 117 37.5 3.3 -10.9 305 7.9 33.8 45.3 197 V +68051600.LIT 2 15.6 2612 -4 971 250 52.8 5.7 -11.7 260 8.6 45.5 72.5 337 V +65031700.OKC 2 11.1 1628 -3 687 269 91.0 4.4 -17.9 235 7.1 58.8 114.4 325 V +00061300.DIK 1 11.1 1786 -3 1286 88 51.7 1.0 -13.3 237 7.5 40.6 50.2 180 +00061122.MOT 1 11.3 2235 -22 1420 120 55.4 1.4 -14.8 231 7.6 39.0 57.9 252 +00060802.JDN 1 7.4 755 -232 3045 106 49.5 0.0 -10.8 230 8.9 34.6 71.9 282 +00060402.OFK 1 10.0 668 -199 1628 156 44.9 0.0 -11.7 284 7.7 38.1 49.1 406 +00060402.NFW 1 16.8 1734 -9 639 117 28.9 1.0 -7.5 270 5.9 23.5 32.0 202 +00052719.MAR 1 16.0 4104 -12 1610 26 26.6 0.2 -12.4 258 8.8 17.5 43.3 95 +00052700.THK 1 14.7 3226 -62 1771 46 35.7 0.2 -9.0 238 8.3 28.1 55.2 83 +00052700.ADK 1 15.9 4170 -7 1457 60 38.4 0.9 -10.1 248 7.9 22.8 55.2 91 +00051202.LWC 1 16.0 3233 -93 1098 243 43.4 3.7 -7.0 245 6.5 28.2 57.5 246 +00050802.RWF 1 11.7 1550 -17 1609 79 45.4 0.4 -12.5 230 7.1 29.3 54.1 203 +00050702.TOR 1 8.6 1203 -94 1663 106 57.4 0.3 -15.3 235 9.1 39.5 72.5 258 +00042622.ONL 1 6.5 337 -109 1466 129 40.6 0.1 -21.7 284 8.4 30.1 73.0 229 +00042118.EZF 1 10.3 898 -4 877 28 58.9 0.3 -17.2 220 6.6 30.7 62.4 94 +00032902.CRS 1 14.5 2234 -6 743 161 50.8 3.0 -14.0 258 7.8 26.8 92.5 244 +00032823.DTO 1 12.9 2286 -24 1256 75 45.3 1.0 -14.5 246 7.7 20.6 88.2 121 +00032701.BAZ 1 14.1 1797 -31 945 101 61.6 1.8 -10.9 294 7.0 32.6 86.8 184 +00032623.MLC 1 11.7 1998 -24 1176 73 50.5 1.0 -14.4 296 6.9 29.7 68.1 193 +00032221.UPT 1 11.4 2370 -12 1181 167 63.0 3.2 -15.3 196 8.2 44.6 83.1 213 +00032207.ODO 1 11.4 1900 -1 561 280 54.6 4.9 -16.5 195 8.4 45.8 80.2 519 +00032207.DRT 1 13.4 2593 -107 837 215 40.0 2.3 -14.9 225 8.9 40.7 64.3 569 +00032201.DYS 1 9.6 140 -194 1028 77 44.2 0.0 -12.2 197 6.4 33.8 61.9 126 +00031523.END 1 9.1 877 -2 1153 56 37.8 0.3 -16.7 241 6.6 26.4 36.5 119 +00031023.BMQ 1 12.1 2702 -18 1209 70 48.2 1.2 -14.5 275 7.6 28.5 52.2 143 +00030823.MKE 1 11.0 1510 -13 1038 185 54.8 2.5 -16.1 213 6.7 42.7 47.9 221 +00030208.MAF 1 11.4 1969 -62 631 373 64.7 6.7 -16.7 225 8.8 39.2 68.5 410 +00022502.ARN 1 11.3 2487 -19 846 226 54.1 5.1 -16.8 208 8.1 38.3 67.9 247 +00022303.DLF 1 8.7 884 -128 1728 29 68.1 0.0 -16.1 277 7.8 32.4 70.9 86 +01042100.SUX 1 8.8 765 -22 1661 84 43.9 0.2 -16.8 206 7.9 27.0 64.5 204 +01041123.BIV 1 12.3 587 -74 777 368 64.3 1.8 -11.6 220 5.9 42.8 48.1 410 +01041107.ADH 1 11.8 556 -140 952 259 56.9 0.5 -12.1 207 7.2 40.1 68.6 271 +01041100.SUS 1 13.7 2171 -35 926 93 64.4 2.0 -12.3 258 6.5 38.6 74.7 252 +01041022.SZL 1 14.3 2693 -55 696 170 63.3 4.4 -12.9 245 6.7 37.7 83.2 242 +01040923.PIA 1 11.9 2755 -12 1469 63 57.1 0.9 -15.8 272 7.5 28.4 73.8 164 +00111220.HYI 1 15.0 1358 0 575 130 66.4 1.8 -11.5 257 7.0 30.5 99.4 240 +00110822.TUP 1 14.5 1023 -4 743 229 62.2 2.3 -9.9 225 6.6 34.8 71.9 291 +00110121.BIS 1 8.9 739 -22 512 134 42.6 0.7 -21.9 135 8.3 30.9 61.9 177 +00103122.FNB 1 12.8 1776 -6 916 106 37.0 1.2 -13.0 217 6.9 22.0 45.0 157 +00102922.LNK 1 10.2 657 -14 724 192 49.1 1.0 -16.4 188 6.2 32.0 43.8 218 +00102919.AUH 1 8.7 191 -3 740 83 38.8 0.1 -16.4 158 6.1 31.7 39.6 118 +00102900.JCT 1 12.1 704 -63 868 232 49.5 1.2 -10.5 218 7.0 32.5 72.8 338 +00102818.GOV 1 11.9 922 -5 443 156 35.8 0.9 -12.3 192 6.7 29.9 31.1 195 +00102423.ODO 1 12.0 1308 -7 918 73 40.2 0.6 -11.4 215 7.4 30.0 51.0 103 +00102300.TIK 1 13.8 1236 -5 453 143 32.3 1.0 -11.8 212 6.3 24.0 44.2 171 +00102123.WLT 1 12.4 655 -43 561 114 29.4 0.4 -11.7 196 5.0 24.0 39.6 153 +00090201.GXY 1 10.1 1399 -61 1894 64 48.6 0.1 -8.8 219 8.0 24.5 58.2 133 +00081501.OEO 1 16.6 2661 -111 1084 275 47.1 3.1 -7.7 281 7.5 38.3 69.3 408 +00072500.ANW 1 14.5 3660 -50 1579 99 43.1 1.1 -9.2 307 8.3 23.5 62.3 152 +00072302.LAA 1 11.0 1368 -108 1806 33 48.7 0.0 -8.9 325 7.7 25.9 61.1 115 +00072104.P28 1 14.3 1660 -216 1167 146 41.4 0.0 -9.2 286 7.8 30.2 58.9 374 +00072004.GLD 1 12.8 1625 -153 1450 69 50.3 0.2 -8.9 286 8.4 26.3 57.9 113 +00071823.SUS 1 17.9 2488 -23 946 101 35.0 1.5 -7.4 262 6.2 32.7 35.7 194 +00071023.GGW 1 11.5 1838 -22 1490 19 53.5 0.2 -11.1 239 6.6 29.9 73.1 81 +00070823.RPD 1 18.8 4320 -44 798 124 39.2 3.5 -8.3 282 6.7 21.3 43.9 183 +00070802.LJF 1 19.5 4388 -7 680 348 43.9 11.2 -9.0 258 8.4 34.1 50.6 438 +00070600.OVE 1 7.4 115 -46 1571 14 34.5 0.0 -17.8 243 7.0 10.2 60.4 40 +00070400.MCK 1 14.2 1661 -19 1452 131 41.3 0.8 -6.2 236 6.6 26.2 46.5 200 +00070222.RYV 1 15.9 2122 -22 737 96 36.0 1.2 -9.2 288 5.9 30.2 35.4 223 +00062923.GLD 1 11.9 2724 -35 2040 95 44.6 0.0 -10.0 295 8.8 34.1 62.4 180 +00062522.AMA 1 13.7 3217 -9 2155 26 36.2 0.0 -6.9 271 8.3 18.7 36.3 97 +00062501.HAO 1 13.1 422 -35 1552 152 35.2 0.2 -7.7 249 5.7 29.2 32.5 226 +00062019.MTO 1 15.3 938 -10 830 185 29.7 0.9 -7.9 246 6.3 38.8 17.7 268 +00062001.HSI 1 14.0 1763 -84 1164 234 40.3 1.8 -8.2 248 7.0 27.7 49.5 343 +00061621.IPT 1 16.3 2224 -6 898 126 25.2 1.2 -7.2 258 5.6 34.7 21.7 251 +00061323.PRT 1 14.6 3313 -86 1730 52 37.5 0.2 -7.5 265 8.2 21.9 60.1 117 +00061321.RDK 1 17.0 3477 -23 902 260 35.7 5.4 -9.8 237 7.9 30.5 30.4 304 +00061300.LBF 1 10.3 2216 -34 2374 46 34.8 0.0 -10.3 241 8.4 19.0 34.1 135 +00061300.GFK 1 11.1 1031 -80 1371 163 45.4 0.6 -13.5 239 7.2 30.8 40.7 248 +03031919.CSV 1 9.7 329 -12 552 167 68.4 0.6 -16.4 213 7.0 45.4 103.6 306 +03031917.CSV 1 9.6 129 -21 493 196 62.6 0.3 -16.0 222 6.7 61.8 100.8 422 +03031915.HSV 1 10.9 546 0 538 221 80.9 1.2 -16.0 224 6.4 51.0 103.8 393 +03031800.FSI 1 11.0 983 -10 789 157 47.9 1.2 -17.1 242 7.4 21.2 84.6 148 +03031722.SPS 1 10.7 981 -38 1183 127 34.3 0.6 -15.4 236 7.3 19.3 95.8 139 +03031721.HBR 1 10.6 1028 -46 917 133 27.4 0.6 -15.9 217 7.1 22.3 90.0 154 +01062101.DEN 1 8.5 516 -90 1464 2 57.2 0.0 -10.9 293 7.2 41.8 50.9 136 +01061403.DDC 1 14.7 4480 -83 1698 161 58.3 1.7 -11.1 234 9.3 30.0 58.2 280 +01061323.PQN 1 15.8 3695 -5 1047 117 31.9 2.2 -10.3 212 8.0 28.2 46.4 193 +01061000.MBS 1 8.3 401 -7 1604 78 43.1 0.1 -16.3 312 6.3 19.1 70.0 124 +01060923.BIS 1 13.0 2950 -51 1333 25 50.8 0.4 -12.4 272 7.7 30.4 52.9 158 +01060521.P28 1 15.5 2749 -10 880 99 38.9 1.8 -11.4 241 8.1 28.3 45.3 182 +01060521.CDS 1 15.0 3410 -11 1645 9 34.8 0.1 -9.6 266 8.0 23.5 28.9 110 +01060421.LIC 1 8.2 167 -117 1162 92 45.0 0.1 -12.6 233 7.5 32.1 65.5 170 +01060402.WLD 1 15.9 3250 -135 778 339 39.0 3.1 -9.4 254 8.1 35.7 49.4 535 +01060121.MXO 1 8.9 416 -12 968 81 51.7 0.3 -17.7 275 6.4 33.3 51.6 153 +01053000.CDS 1 13.5 2478 -201 1327 184 58.9 0.0 -9.9 240 8.4 43.6 59.7 269 +01052423.JCT 1 11.1 2121 -41 2081 21 42.8 0.0 -12.9 298 8.3 34.2 39.7 254 +01052423.BHM 1 10.8 1036 -32 1179 118 47.3 0.8 -14.7 258 6.9 44.8 49.5 280 +01051022.OLZ 1 11.3 1843 -33 1200 61 42.2 0.6 -15.7 256 7.4 31.2 46.0 179 +01050823.CNK 1 8.0 560 -40 1902 58 51.8 0.0 -16.7 317 7.3 21.6 51.7 171 +01050621.ILE 1 16.4 3719 -9 838 53 30.9 1.0 -13.1 261 7.0 24.3 54.4 118 +01050621.1F0 1 14.4 2826 -1 776 124 27.7 1.6 -13.9 256 6.8 24.7 55.3 157 +01050602.COT 1 16.2 2790 -11 863 180 42.4 3.6 -10.7 247 7.2 33.3 76.0 223 +01050601.HBR 1 10.8 1071 -47 991 113 60.9 1.2 -14.6 218 6.8 35.4 66.2 149 +01050600.WLD 1 10.9 813 -3 986 94 45.9 0.6 -13.4 211 6.5 34.0 50.5 174 +01050521.ACT 1 14.9 2393 -3 716 65 41.0 1.1 -11.6 229 6.7 21.6 53.3 125 +01050422.FNB 1 13.2 1315 -10 654 80 33.2 0.6 -12.0 205 5.5 25.5 43.0 144 +01050412.SPS 1 13.3 1511 -11 818 233 45.0 2.6 -11.2 211 5.9 37.5 53.7 290 +01050223.CDS 1 12.5 3652 -132 1895 166 31.7 0.2 -13.0 217 9.2 26.5 37.9 210 +01050123.RPD 1 11.7 2374 -31 1338 213 46.8 2.6 -14.3 249 7.2 38.7 54.2 348 +01050123.RGK 1 12.1 2710 -41 1464 239 44.1 2.6 -14.6 250 7.7 37.9 54.3 370 +01050100.TQE 1 9.6 1164 -13 1373 125 29.7 0.5 -16.8 267 7.6 24.5 30.9 158 +01050100.BGD 1 8.6 1497 -7 2135 23 54.7 0.0 -14.0 327 8.0 22.4 64.0 136 +01042300.OAX 1 11.5 527 -10 586 257 62.9 1.4 -12.4 193 5.9 51.0 62.5 288 +03060800.ECG 1 15.9 456 -52 671 256 26.7 0.5 -5.9 244 4.7 33.3 37.0 264 +03060500.CVS 1 8.5 804 -116 2160 108 56.7 0.0 -9.7 295 8.0 53.0 55.1 313 +03060422.TCC 1 10.6 1847 -48 1858 84 47.9 0.2 -10.4 290 8.6 41.0 53.3 227 +03060103.BFF 1 11.3 1434 -103 1288 72 46.7 0.4 -9.1 291 7.2 22.6 47.7 113 +03052820.PIA 1 11.7 1566 -31 860 135 36.1 1.3 -16.6 318 7.2 30.1 54.2 203 +03052323.V#L 1 10.7 657 -22 998 134 47.6 0.7 -13.2 312 7.1 36.4 63.1 269 +03051401.TXK 1 13.6 1354 -97 1023 210 48.8 1.5 -11.3 301 7.8 39.5 74.4 571 +03051323.C04 1 12.3 338 -272 641 212 57.3 0.0 -12.4 299 8.0 32.1 67.8 353 +03050920.FVX 1 13.5 1153 -108 1077 253 59.2 1.6 -11.6 288 7.8 44.4 56.6 335 +03050918.CHO 1 15.0 1961 -22 782 298 58.7 5.7 -11.4 296 7.3 46.4 63.9 473 +03050800.ABI 1 11.7 1368 -77 2113 150 68.5 0.0 -6.9 244 6.8 41.7 79.4 428 +03050721.ANB 1 14.0 798 -104 694 354 51.0 1.5 -9.4 268 6.5 39.0 46.7 422 +03050719.BMX 1 15.8 2069 -6 591 233 43.2 3.5 -10.7 274 6.8 31.7 48.0 302 +03050700.FAM 1 13.4 2397 -56 1026 270 72.9 6.1 -14.5 269 7.6 38.6 77.4 402 +03050518.MKL 1 15.9 2561 0 610 165 70.0 4.2 -11.5 253 7.0 46.3 90.9 195 +03050423.C35 1 15.5 2257 -12 619 309 68.9 7.0 -11.1 234 7.3 35.2 111.6 297 +03050421.ADM 1 16.6 3573 -3 898 108 77.1 3.9 -8.7 238 6.2 51.9 109.7 213 +03050320.BFF 1 7.9 1569 -35 1574 91 55.3 0.6 -17.6 237 9.1 30.0 121.3 150 +03050121.TUL 1 15.3 4038 -2 592 93 35.5 2.2 -13.9 263 7.7 27.5 53.2 205 +03043023.FOE 1 13.9 4015 -6 1059 116 26.7 2.0 -14.3 236 7.7 24.7 34.3 165 +03042821.BYI 1 4.3 220 -74 1877 74 40.4 0.0 -21.3 217 8.4 19.6 47.5 151 +03042522.MGM 1 13.1 2112 -13 1028 106 63.3 2.2 -14.2 266 6.8 41.2 42.5 199 +03042521.LWT 1 6.2 193 -34 1157 84 33.2 0.1 -19.0 194 7.6 23.8 44.0 191 +03042518.TCL 1 11.3 524 -50 815 216 66.5 1.1 -14.0 256 6.7 54.5 74.3 295 +03042423.PIB 1 13.2 710 -91 552 278 47.4 1.1 -13.2 256 7.3 29.9 47.5 367 +03042422.FOE 1 9.2 537 -24 443 119 31.9 0.3 -19.7 184 6.7 33.6 18.6 155 +03042419.BTR 1 14.3 2208 -2 816 43 52.0 0.8 -13.0 244 7.4 27.5 46.2 86 +03041923.MLC 1 12.8 1448 -52 744 271 64.7 3.9 -11.2 230 5.7 51.5 81.0 283 +03040618.JAN 1 12.9 801 -40 747 201 51.3 1.4 -14.4 243 7.5 28.4 87.0 298 +03040614.MLU 1 13.4 517 -86 382 358 50.8 1.2 -13.9 229 7.4 36.9 73.2 428 +03040601.FWD 1 11.1 461 -111 865 325 67.8 0.9 -13.5 245 6.9 40.1 93.4 563 +03040420.SPI 1 11.2 1687 -7 802 102 38.9 1.1 -17.7 252 7.6 39.5 59.0 176 +03032721.PBI 1 12.4 384 -64 873 185 47.9 0.5 -12.0 240 6.3 8.1 99.7 189 +03032720.TMB 1 13.5 878 -5 1007 102 59.6 0.9 -10.7 241 5.9 21.4 97.6 157 +04040822.ROW 1 7.6 885 -35 1457 25 42.6 0.1 -16.3 225 7.7 31.8 52.9 136 +04040616.VCT 1 13.2 671 0 457 159 42.0 0.8 -12.5 228 5.9 29.4 48.5 233 +04040615.CRP 1 14.5 1276 0 405 109 39.2 0.9 -12.3 238 7.0 30.2 44.3 209 +04032723.C33 1 12.5 2394 -14 752 342 44.2 6.0 -15.0 235 7.2 45.6 56.4 529 +04032721.C33 1 12.5 2248 -11 742 183 42.7 2.9 -14.5 230 7.1 29.5 50.7 257 +04032718.GAG 1 11.6 1959 -2 705 243 43.2 3.4 -16.1 217 7.9 33.2 51.9 263 +04020601.TCL 1 11.9 190 -48 628 310 45.1 0.4 -12.7 222 6.4 48.7 58.2 536 +03111803.GLS 1 16.5 1327 -28 566 364 46.5 3.8 -8.7 230 6.1 33.7 77.0 402 +03111722.GLS 1 10.1 1092 -23 682 103 65.1 1.1 -18.5 220 7.2 45.6 115.8 218 +03110520.IAD 1 13.7 626 -17 1058 109 35.5 0.4 -9.7 248 6.0 23.4 50.7 109 +03100923.GLS 1 18.1 1654 -5 454 164 35.3 1.6 -5.9 253 5.5 26.9 46.4 209 +03100523.C10 1 11.8 1332 -9 1262 56 39.6 0.4 -7.5 295 5.6 37.5 47.9 168 +03090807.MAF 1 11.7 777 -160 1418 169 29.0 0.1 -10.5 282 7.9 18.5 32.7 262 +03082523.RAD 1 12.0 1595 -36 1379 139 56.3 1.3 -11.7 280 6.3 16.2 82.0 142 +03080122.MIE 1 14.8 2465 -19 976 39 23.4 0.0 -10.9 251 6.4 10.2 49.8 63 +03072100.SUX 1 21.5 6268 -16 748 130 47.0 6.4 -7.5 313 7.3 28.4 42.4 175 +03072022.SUX 1 20.7 5887 -14 863 100 42.2 4.2 -7.3 304 7.8 47.1 46.8 375 +03072022.OFK 1 19.2 6004 -19 1398 33 31.9 0.6 -7.5 313 8.2 30.8 31.8 166 +03071922.STC 1 15.2 2711 -22 1042 103 46.1 2.1 -10.6 310 7.0 34.7 54.6 221 +03071102.NHK 1 16.5 987 -67 757 159 22.6 0.0 -7.7 240 6.4 20.9 29.8 187 +03070921.RWF 1 13.6 1319 -19 765 52 42.5 0.5 -10.8 262 7.0 23.9 51.9 91 +03070919.P#3 1 13.7 1228 -1 615 65 49.7 0.7 -10.0 258 6.5 18.9 58.3 80 +03070902.ATH 1 11.5 2088 -216 2152 184 48.4 0.0 -8.0 269 9.4 34.4 71.3 315 +03062823.BRD 1 10.3 984 -41 828 98 44.5 0.7 -16.0 285 5.9 30.4 65.1 168 +03062820.BJI 1 8.9 792 -1 1152 76 36.4 0.3 -17.5 276 6.2 21.6 57.0 122 +03062802.C22 1 8.5 251 -78 1075 74 33.2 0.1 -17.0 302 6.9 33.5 39.2 110 +03062800.P11 1 8.9 130 -58 757 94 34.6 0.1 -16.9 294 6.8 32.0 41.6 182 +03062223.GRI 1 18.1 5092 -19 1060 137 41.0 4.5 -7.9 238 8.0 29.8 45.3 215 +03062119.GCC 1 9.0 940 -32 1043 126 52.6 1.0 -13.9 234 7.3 37.7 61.9 271 +03061423.GLD 1 11.1 1240 -11 1151 21 28.6 0.1 -11.5 347 7.2 20.2 27.1 107 +03061202.9V9 1 11.9 1311 -150 1237 252 55.7 0.8 -12.0 277 7.7 34.4 64.5 403 +03061123.PIR 1 12.2 2019 -91 1257 201 52.8 1.9 -12.8 252 7.7 30.1 78.9 352 +03060922.AIH 1 12.2 3211 -62 1638 201 43.3 1.6 -13.0 253 9.0 35.4 67.6 306 +04052223.P#A 1 15.1 2952 -11 774 39 53.1 1.0 -12.0 243 7.6 22.0 68.8 112 +04052223.OAX 1 13.7 2734 -22 1169 83 52.1 1.6 -11.3 232 7.4 29.5 77.9 274 +04052201.OFK 1 14.7 3647 -8 1268 198 35.6 3.1 -11.0 240 7.8 35.9 59.8 310 +04052201.AIH 1 12.5 2491 -49 1041 183 43.4 3.2 -12.7 241 8.1 37.2 66.0 201 +04052122.GEG 1 8.3 1152 -51 831 61 20.9 0.0 -20.3 270 7.3 16.0 22.9 86 +04051821.PIA 1 13.2 1154 -20 811 45 38.0 0.3 -11.1 240 5.6 36.6 42.0 114 +04051701.C07 1 9.6 1682 -36 2011 261 50.5 0.0 -10.9 271 7.9 35.3 62.3 740 +04051700.GRI 1 11.3 1410 -72 1036 313 44.9 2.7 -14.9 227 8.2 36.5 55.1 498 +04051420.MBS 1 13.4 793 -7 834 109 40.9 0.6 -10.0 223 5.5 35.3 48.3 177 +04051416.SBN 1 13.7 499 0 429 86 47.3 0.3 -10.0 213 5.3 45.7 43.4 226 +04051323.G#4 1 15.5 3158 -12 977 153 38.7 3.1 -11.1 260 7.5 26.9 14.0 223 +04051223.C32 1 11.4 2949 -2 1894 52 53.9 0.2 -12.4 230 8.0 35.8 51.2 184 +04051117.VCT 1 16.3 1839 0 387 110 21.6 0.0 -10.4 236 6.4 21.8 22.3 236 +04043018.SPS 1 12.8 1694 -16 674 115 47.0 1.5 -14.9 221 8.0 24.4 40.3 122 +04042921.CDS 1 9.5 1110 -130 1817 -14 26.8 0.0 -14.5 244 8.2 30.9 40.8 112 +04042900.DRT 1 11.7 872 -12 771 192 46.2 1.3 -13.3 241 6.5 37.1 66.5 291 +04042320.SPS 1 14.3 3037 -1 1026 34 40.0 0.7 -13.4 226 7.4 18.9 49.8 60 +04042317.C11 1 10.4 439 -226 1267 41 38.3 0.0 -12.0 218 8.0 22.5 52.0 77 +04042300.FYV 1 11.8 1066 -33 829 252 39.7 1.8 -14.3 264 7.5 32.0 68.1 287 +04042222.TUL 1 13.0 1845 -5 720 136 58.2 2.4 -14.9 261 7.6 42.3 60.4 262 +04042220.P#P 1 13.3 2326 -1 748 134 58.8 3.1 -15.9 266 8.0 37.4 58.0 199 +04042200.GAG 1 10.8 1625 -5 908 47 32.4 0.4 -16.4 262 7.4 23.8 78.1 203 +04042122.G#1 1 7.3 762 -3 1736 51 74.4 0.1 -18.1 267 7.9 29.6 109.6 287 +04042100.TUL 1 10.6 632 -70 1159 363 52.0 1.5 -13.5 244 6.5 34.2 55.8 403 +04042023.GVS 1 10.8 283 0 524 272 32.9 0.4 -14.5 241 5.8 36.7 31.1 351 +04042022.C34 1 11.4 1441 -8 1212 105 50.3 1.0 -12.2 244 6.3 35.5 57.3 152 +04042019.HUF 1 9.9 107 -34 769 282 37.1 0.2 -14.7 239 5.8 35.7 36.3 292 +04042001.G#1 1 10.9 1585 -37 948 193 46.4 2.4 -14.6 237 7.8 39.5 70.5 374 +04041923.AMA 1 10.3 1602 -8 1272 103 41.6 0.8 -12.3 237 6.8 29.9 68.2 173 +04041823.HYR 1 9.5 788 -51 1551 610 67.8 2.1 -14.2 237 6.6 48.6 102.0 685 +04041822.YKN 1 8.5 781 -30 1937 -47 67.4 0.0 -14.5 231 7.3 50.2 99.2 231 +04041820.STC 1 9.5 1332 -37 1772 54 48.6 0.1 -15.2 231 8.6 26.3 87.5 167 +04041803.MCW 1 11.3 1606 -164 1042 529 61.4 2.0 -14.5 249 8.2 51.8 78.3 736 +04041800.FRM 1 6.2 0 -9999 2233 126 60.4 0.0 -15.8 250 8.3 48.2 86.0 376 +04041318.MHX 1 14.5 829 -6 376 471 48.2 3.1 -10.4 209 5.7 50.3 59.5 492 +04041101.HOU 1 14.2 1196 -29 574 -14 42.4 -0.1 -12.2 228 6.1 21.1 49.7 59 +04040922.MLC 1 9.5 826 -4 1253 59 50.6 0.3 -15.2 263 6.2 30.9 65.3 245 +04081001.LIC 1 13.1 2627 -14 833 10 31.8 0.1 -7.6 302 6.9 29.5 39.6 240 +04080923.LIC 1 12.3 2929 -24 1366 16 34.5 0.2 -7.1 291 7.3 33.3 41.5 174 +04080222.BH5 1 9.0 780 -79 2692 -22 40.8 0.0 -7.8 269 8.3 36.1 53.6 117 +04080101.FSD 1 15.5 3162 -71 1296 126 42.1 1.7 -10.0 298 7.7 29.5 43.5 211 +04071502.PWD 1 11.6 1241 -85 1817 -10 41.6 0.0 -9.7 293 7.4 25.5 68.5 104 +04071421.NHK 1 15.8 2262 -34 1229 29 22.0 0.0 -9.0 266 6.6 17.0 40.9 95 +04070822.CDR 1 8.4 1172 -184 2535 65 52.1 0.0 -10.6 252 9.0 39.8 58.2 155 +04070800.RSL 1 16.8 3857 -81 950 330 43.6 7.3 -6.9 302 7.3 32.9 43.0 525 +04062401.MSN 1 11.0 1731 -10 1132 139 52.2 1.8 -15.8 264 6.6 37.4 69.1 149 +04062202.AMA 1 14.9 2631 -32 851 69 48.2 1.5 -9.3 256 8.0 30.2 68.7 322 +04062201.AMA 1 13.9 2569 -24 1161 158 51.4 2.9 -9.1 264 8.2 37.1 79.6 378 +04062123.AMA 1 14.3 3017 -3 1129 34 46.0 0.7 -9.8 253 7.9 30.1 66.4 233 +04062100.LAA 1 13.7 2855 -58 1180 172 53.2 3.4 -9.9 265 8.0 19.8 59.2 173 +04062021.PUB 1 9.4 1660 -152 1943 219 45.3 0.1 -10.7 255 9.0 31.5 55.0 312 +04062019.COS 1 10.8 2562 -34 1009 45 38.2 0.7 -12.0 275 8.7 28.8 54.8 98 +04061501.HYS 1 14.0 3081 -123 1665 173 58.2 0.9 -9.0 287 8.2 39.1 57.5 526 +04061401.RDD 1 12.6 881 -112 1018 143 43.3 0.5 -9.7 283 6.4 45.8 43.1 223 +04061322.LNK 1 10.8 941 -69 1877 47 38.4 0.0 -9.3 287 5.7 33.3 45.8 183 +04061318.RQB 1 13.7 1000 -12 900 139 52.4 1.2 -10.7 233 6.1 36.9 55.2 229 +04061121.FRM 1 16.5 2686 -15 680 177 37.0 2.9 -11.0 219 7.7 18.6 49.4 252 +04061103.HSI 1 12.4 1209 -300 1522 316 36.6 0.0 -10.8 210 9.0 34.1 53.9 333 +04060921.APA 1 8.8 1388 -12 2068 90 27.2 0.0 -10.0 186 8.8 22.9 47.8 104 +04053022.SLO 1 18.2 3905 -16 909 156 45.8 4.6 -9.2 240 6.9 43.6 52.3 241 +04052701.PNC 1 15.4 2665 -48 1261 221 69.9 4.4 -8.5 266 6.3 33.5 88.2 272 +04052623.G011 1 12.4 1626 -109 1852 49 70.8 0.1 -9.9 262 7.1 37.0 94.0 147 +04052622.P#T 1 11.9 1612 -29 2366 155 49.7 0.0 -7.5 252 7.6 30.5 79.4 164 +04052602.ABI 1 14.8 1459 -96 876 180 51.9 1.6 -7.9 237 7.1 20.8 85.8 179 +04052500.FDR 1 16.4 3848 -41 1381 227 52.9 4.8 -10.3 248 8.8 44.6 77.8 373 +04052421.MCI 1 15.5 3926 -27 1068 147 47.7 4.3 -11.9 239 7.8 31.2 69.7 377 +04052421.CDS 1 11.5 2298 -45 2458 72 49.8 0.0 -9.7 246 8.0 26.4 75.8 113 +04052420.HSI 1 15.0 4625 -31 1086 83 34.0 2.0 -15.1 231 9.5 23.3 61.8 166 +04052420.BGM 1 11.0 1383 -50 1291 107 43.0 0.8 -13.2 261 6.4 38.3 57.1 215 +04052400.MKX 1 12.6 2101 -6 936 253 43.7 3.9 -15.6 243 8.0 47.2 76.4 303 +04052302.P#8 1 14.4 3064 -83 1357 338 64.2 5.2 -12.5 243 8.9 33.2 52.0 372 +04052301.P#A 1 15.3 2427 -11 641 38 43.9 0.7 -11.1 235 7.5 24.0 58.7 130 +04052301.OMA 1 15.2 2700 -10 801 171 47.0 3.6 -10.9 219 7.5 25.3 68.4 216 +99060823.N60 1 13.7 3155 -15 1051 78 41.1 1.6 -13.0 219 8.3 21.8 42.4 152 +99060620.MIW 1 16.5 2747 -2 728 95 46.5 2.0 -11.3 215 7.4 25.8 54.4 126 +99060619.DVL 1 13.3 2802 -18 814 23 14.6 0.0 -16.8 148 8.2 13.8 14.2 55 +99060522.LRJ 1 15.2 2964 -17 1289 56 44.7 0.9 -10.3 227 8.2 27.6 63.5 157 +99060405.VTN 1 12.9 2518 -114 1075 129 40.8 1.2 -11.7 252 8.4 33.9 47.9 180 +99060300.GTF 1 7.5 3 -80 1259 78 32.1 0.0 -12.7 166 6.6 32.1 44.8 172 +99060300.AMA 1 12.9 2756 -67 1541 95 38.7 0.7 -10.0 227 8.6 29.5 72.3 208 +99060123.SPI 1 14.9 2287 -19 881 194 49.6 3.7 -12.9 240 7.2 40.7 42.9 303 +99060110.MLC 1 16.0 1956 -157 477 193 43.7 0.8 -10.8 251 8.4 34.4 54.4 257 +99060101.RSL 1 13.0 1705 -20 907 93 50.1 1.3 -12.2 250 8.3 32.2 70.0 179 +99060100.SJT 1 10.8 1391 -136 2395 53 45.7 0.0 -8.1 279 8.0 23.3 44.1 151 +99060100.CSM 1 13.8 2748 -119 1593 116 55.1 0.7 -10.4 262 8.3 31.9 59.4 205 +99053122.LBL 1 12.8 2910 -27 1574 106 61.1 1.3 -11.1 247 8.1 34.8 75.6 204 +99053023.LXN 1 11.3 1917 -2 1506 20 24.9 0.0 -12.7 282 7.1 22.6 26.3 85 +99052700.INK 1 10.3 1701 -31 1781 9 53.5 0.0 -13.0 263 8.4 26.7 60.4 107 +99052521.ROW 1 8.6 1056 -1 2099 26 43.2 0.0 -11.4 250 7.4 17.0 57.8 56 +99051701.P28 1 14.1 3996 -25 1498 52 41.4 0.7 -12.2 235 7.9 28.4 44.1 137 +99050922.P07 1 10.6 1793 -96 2053 72 29.7 0.0 -11.9 197 8.5 25.8 74.2 77 +99050419.EWK 1 9.8 1172 -30 1060 87 56.5 0.9 -17.0 185 7.4 27.6 56.8 112 +99050401.ONL 1 9.2 1561 -17 1532 160 31.3 0.6 -15.4 205 7.3 24.3 33.6 208 +99050220.HDE 1 8.7 687 -3 649 100 31.9 0.4 -19.2 208 7.1 21.5 23.0 124 +99050122.MAF 1 12.3 1710 -9 776 232 56.9 3.8 -11.2 237 6.8 32.4 76.7 295 +99043021.INK 1 13.0 2707 -11 1033 174 50.2 3.8 -11.8 197 7.3 35.6 67.7 236 +99042421.AGS 1 9.7 443 -32 1749 52 54.7 0.1 -12.4 292 6.7 37.3 65.4 176 +99042300.MKO 1 13.6 2181 -13 1003 243 55.3 4.9 -11.4 253 7.8 35.3 67.1 248 +04082522.FOE 1 16.3 3285 -59 1225 128 33.5 1.7 -8.6 243 6.8 34.0 42.4 233 +04082423.DPA 1 15.3 616 -29 685 237 28.3 0.7 -6.6 213 5.2 26.6 21.5 254 +04082401.FOE 1 17.3 2862 -33 582 300 33.1 4.7 -7.7 274 6.8 24.8 34.1 345 +04082200.C07 1 12.4 2025 -24 1364 108 27.4 0.6 -7.7 278 6.6 14.0 41.6 288 +04081522.ATH 1 10.0 1320 -50 1754 133 37.4 0.3 -10.5 325 7.6 38.4 41.5 249 +04081420.HAT 1 16.9 1221 -20 693 281 41.3 2.4 -6.1 204 4.5 32.5 54.5 312 +04081219.FAY 1 15.4 835 -29 887 115 48.5 0.8 -7.1 211 5.4 29.3 50.5 134 +04081215.CAE 1 16.3 1332 -11 579 78 38.5 0.7 -8.3 217 5.9 37.1 28.4 136 +99112300.TUL 1 11.8 1383 -12 847 203 54.3 2.5 -15.7 217 6.9 37.0 60.1 264 +99092823.LAF 1 14.3 1880 -26 925 44 46.4 0.6 -9.8 226 5.9 31.8 53.4 131 +99092700.ICT 1 13.7 1942 -99 1005 119 45.8 1.2 -7.8 271 6.2 28.6 45.7 170 +99092003.OGD 1 5.9 7 -95 1490 6 35.4 0.0 -14.8 306 7.3 17.3 39.8 59 +99091023.OKM 1 14.1 1578 -173 1285 75 38.5 0.1 -9.8 284 6.9 29.7 41.2 205 +99090400.AKO 1 11.6 1401 -21 1298 3 44.8 0.0 -8.1 221 7.3 26.8 60.0 143 +99081920.SME 1 11.4 1158 -29 2080 34 42.9 0.0 -10.2 267 6.9 18.4 33.8 78 +99081621.GLD 1 14.3 3184 -9 1787 78 34.9 0.3 -7.0 231 7.7 23.6 46.0 131 +99081503.JDN 1 7.8 368 -225 2152 37 52.5 0.0 -11.9 242 8.0 36.8 72.2 220 +99080923.MKT 1 16.2 2484 -10 814 229 44.4 4.2 -9.7 289 7.7 38.9 63.1 274 +99073100.DMH 1 14.4 2057 -58 1629 66 38.0 0.3 -8.8 331 7.0 18.2 55.7 83 +99072800.COQ 1 11.9 957 -73 1267 208 61.5 1.2 -12.4 294 7.3 37.9 75.1 349 +99072300.ABR 1 15.9 3073 -48 1643 51 26.1 0.2 -7.9 237 7.7 10.4 43.4 60 +99072201.GGW 1 8.8 1107 -147 2618 58 49.5 0.0 -11.3 230 8.7 27.6 92.9 163 +99072022.OLZ 1 19.5 3709 -2 737 170 42.4 4.4 -5.2 268 5.5 29.8 44.8 294 +99071400.MOT 1 10.3 1025 -92 1759 96 63.9 0.2 -11.0 284 7.1 34.6 66.5 248 +99070300.LBF 1 18.3 5887 -62 1227 118 33.7 2.8 -6.4 235 9.0 23.9 55.3 163 +99070123.IPT 1 14.7 908 -27 884 203 33.0 1.0 -6.8 229 5.6 30.6 31.5 243 +99062922.GUY 1 13.7 3266 -87 2035 154 43.7 0.0 -7.8 283 9.0 32.3 53.8 237 +99062802.OGA 1 12.3 1529 -168 1178 203 64.3 0.5 -9.7 266 8.8 33.4 87.6 253 +99062701.MCK 1 16.5 3830 -43 1226 55 34.0 0.9 -7.8 258 8.2 20.8 57.0 152 +99062700.SNY 1 12.1 2217 -42 1612 24 49.9 0.2 -8.9 251 8.2 28.2 77.8 141 +99062300.MHE 1 14.1 1832 -74 977 196 23.4 0.0 -9.7 239 7.3 17.5 18.0 213 +00050901.AIZ 0 13.1 1987 -68 1453 84 35.7 0.5 -11.3 241 8.5 41.9 28.1 204 +00050722.SNY 0 9.8 2015 -39 1845 23 56.1 0.1 -12.4 245 8.7 34.2 64.8 128 +00050707.OGA 0 11.6 1205 -190 787 34 39.5 0.0 -11.3 236 8.2 22.0 47.2 115 +00050323.RBD 0 11.2 940 -3 1077 54 42.9 0.3 -14.6 290 6.2 28.9 58.4 174 +00043001.ABI 0 11.9 2549 -66 1686 111 39.6 0.5 -11.8 268 8.4 26.8 40.5 228 +00042423.LAA 0 5.4 613 -132 2566 97 54.0 0.0 -16.3 278 8.9 29.1 72.7 192 +00042422.EHA 0 6.7 706 -56 2143 58 53.8 0.0 -15.2 295 8.1 25.8 83.4 159 +00042021.BWG 0 11.2 1126 -13 1162 167 52.1 1.4 -13.5 240 7.4 46.8 53.8 253 +00042021.BNA 0 11.2 989 -26 1114 165 53.6 1.3 -13.7 242 7.7 45.4 65.0 244 +00042001.MCI 0 12.4 2093 -43 1300 141 61.9 2.1 -12.3 226 7.0 33.4 81.4 163 +00042000.JCT 0 13.1 2950 -156 1701 170 51.7 0.4 -9.4 253 8.2 40.5 71.8 240 +00041822.SJT 0 7.1 414 -185 3169 -7 49.4 0.0 -9.5 243 8.2 32.3 60.6 45 +00041620.SUS 0 9.5 579 -1 968 46 41.8 0.2 -18.1 247 6.6 30.2 69.5 154 +00041602.GRA 0 10.2 901 -182 1269 251 56.8 0.2 -17.0 244 8.6 34.1 76.8 276 +00033000.SHV 0 12.6 1635 -14 797 147 57.7 2.3 -15.2 267 7.2 33.9 91.9 219 +00032900.HYI 0 15.8 2875 -10 771 106 60.6 3.0 -11.6 251 7.3 36.4 82.8 192 +00032522.BNA 0 8.3 268 -8 1461 34 37.5 0.0 -16.9 270 6.2 23.2 61.3 60 +00032207.MAF 0 11.5 1952 0 562 249 54.6 4.4 -16.4 196 8.3 45.0 77.8 468 +00031600.CSM 0 8.3 808 -99 1327 59 34.5 0.1 -17.7 251 7.6 25.7 34.3 101 +00031022.BHM 0 10.3 614 -95 1034 103 48.9 0.4 -15.8 238 7.0 33.1 49.4 179 +00030923.LRD 0 13.5 2701 -7 1360 -13 41.3 -0.2 -12.5 256 7.5 20.8 59.4 95 +00030920.GFL 0 7.1 1 -425 1416 88 63.6 0.0 -18.7 242 8.1 39.6 77.0 165 +00030900.UNU 0 9.9 1306 -11 1121 172 50.6 1.7 -17.3 203 6.6 39.6 44.1 206 +00030900.CLI 0 9.4 673 -29 1009 196 53.3 1.2 -16.9 202 6.6 39.4 53.8 226 +00030302.PWG 0 12.0 1469 -17 1106 252 60.9 3.3 -12.2 259 6.1 45.0 75.3 323 +00030222.AFW 0 11.1 999 -6 913 256 68.3 2.6 -13.5 238 6.5 36.9 80.1 345 +00022606.CRS 0 13.3 2158 -10 637 191 48.7 3.3 -14.8 239 6.9 25.4 69.2 184 +00022523.FSD 0 7.3 495 -2 929 82 38.3 0.3 -21.9 172 7.7 30.1 52.5 83 +00022405.FAM 0 9.2 437 -46 772 315 46.8 1.1 -18.0 235 6.3 29.2 42.2 331 +00072222.BBW 0 11.9 1462 -1 1218 36 35.2 0.2 -11.1 328 6.5 26.6 43.9 124 +00072220.GLD 0 10.6 1162 -15 1699 26 39.9 0.1 -10.2 319 7.4 19.8 55.8 82 +00072122.BFF 0 9.8 1738 -8 2036 34 42.0 0.0 -9.9 297 7.7 36.2 48.9 131 +00072022.AKO 0 14.0 3465 -7 1063 22 46.2 0.6 -10.2 278 8.3 29.1 64.7 106 +00072000.BVX 0 17.4 3847 -11 1674 30 36.4 0.2 -7.1 298 6.9 26.0 29.2 130 +00071022.RCA 0 13.2 1916 -28 1452 23 41.1 0.2 -9.2 238 7.6 21.4 68.1 95 +00071001.LBF 0 14.7 2947 -100 1740 24 28.1 0.1 -5.6 239 7.8 23.6 37.9 109 +00070922.MHE 0 16.8 3556 -34 1430 6 40.7 0.1 -6.1 258 6.7 18.8 41.5 109 +00070922.GGW 0 13.3 2242 -12 1039 31 46.6 0.5 -11.4 226 7.4 18.7 71.4 74 +00070901.LWT 0 8.7 874 -65 1998 38 58.4 0.0 -11.5 232 8.1 32.4 92.6 236 +00070805.LVN 0 18.2 2722 -69 530 388 37.6 5.8 -9.2 261 8.1 22.9 53.3 407 +00070803.JDN 0 7.6 57 -220 2275 33 69.9 0.0 -11.7 240 7.8 39.2 84.5 167 +00070601.CUT 0 11.7 2058 -14 1543 37 55.5 0.3 -9.9 245 8.5 28.5 78.8 136 +00070523.MCK 0 16.4 3979 -55 1631 151 45.4 1.6 -6.8 254 8.1 24.5 59.5 231 +00070521.RAP 0 14.5 3135 -2 1289 15 44.0 0.3 -10.0 233 8.0 19.5 68.5 93 +00070501.2WX 0 11.2 1574 -93 1339 -29 47.6 -0.2 -12.4 230 8.6 28.2 78.4 64 +00070421.JDN 0 8.1 1033 -47 1927 -17 41.2 0.0 -15.0 209 7.9 26.2 68.3 49 +00070302.GGW 0 10.6 1484 -86 1685 121 67.7 0.4 -12.6 252 7.9 36.1 78.0 267 +00070222.FOD 0 17.4 3585 -43 1097 53 23.7 0.0 -9.5 292 7.5 16.4 31.4 91 +00070201.ABR 0 14.2 3411 -108 1790 100 24.5 0.0 -10.0 259 8.3 16.6 39.9 145 +00070123.ELO 0 13.3 2835 -49 1339 117 57.8 2.1 -13.1 291 7.7 31.9 66.7 228 +00070122.ABI 0 13.9 1505 -15 1776 40 26.6 0.1 -5.4 261 5.7 21.4 25.5 120 +00070100.JLN 0 15.5 2255 -3 786 81 43.6 1.3 -7.6 313 5.9 25.5 56.4 208 +00062923.ELM 0 8.8 332 -11 1098 19 33.4 0.0 -16.5 253 6.2 19.9 82.5 60 +00062923.D07 0 9.6 1600 -26 1649 30 42.4 0.1 -15.7 295 7.7 30.2 50.5 90 +00062901.LAM 0 11.8 506 -57 1728 28 25.5 0.0 -6.5 268 6.3 18.5 25.2 126 +00062519.AIO 0 14.7 2632 -77 1269 122 38.0 1.2 -10.6 279 7.3 29.0 32.0 250 +00062402.RCA 0 11.5 1507 -76 1200 0 40.3 0.0 -11.0 273 7.9 29.4 67.6 159 +00062322.SDA 0 16.8 4294 -9 1398 56 28.6 0.7 -9.2 284 7.3 21.1 46.7 160 +00061522.OKV 0 14.5 746 -31 749 130 32.3 0.5 -8.8 240 6.0 35.1 29.5 198 +00061323.P28 0 14.3 3106 -53 1734 60 41.3 0.3 -10.0 260 8.0 15.7 31.7 91 +00061122.DFS 0 13.5 3143 -11 1597 67 28.6 0.4 -8.2 251 7.7 28.8 45.0 62 +00060400.GLD 0 9.0 1430 -74 2560 51 35.6 0.0 -10.7 313 8.7 29.0 38.3 146 +00060221.CEF 0 12.1 326 -141 1452 156 38.5 0.1 -9.8 279 6.6 44.9 47.0 277 +00052701.SZL 0 13.7 1477 -23 1157 198 50.0 2.1 -9.7 244 6.7 38.9 69.4 232 +00052501.PPA 0 15.2 3731 -83 1597 78 46.6 0.7 -8.0 249 8.4 33.0 60.7 288 +00052501.ADK 0 16.3 4569 -134 1861 108 40.3 0.2 -7.8 255 8.7 36.4 49.3 291 +00052219.AVC 0 10.1 628 -1 1000 2 52.8 0.0 -13.8 256 5.9 28.0 59.1 95 +00052021.VPC 0 13.0 805 -6 1196 15 39.2 0.1 -9.8 231 6.1 19.7 47.6 87 +00050922.IRS 0 12.0 729 -2 928 68 49.6 0.4 -13.6 230 6.9 46.6 41.5 178 +01041105.JCT 0 14.1 1545 -229 832 346 71.9 0.0 -9.7 230 8.5 44.0 97.0 386 +01041004.IND 0 11.4 1318 -107 1240 185 57.8 1.1 -13.8 292 7.2 35.6 68.3 216 +01040321.UNO 0 12.3 1279 -42 722 107 57.2 1.3 -13.7 270 7.4 36.3 60.7 225 +01040300.BFF 0 5.0 0 -9999 1708 161 63.5 0.0 -17.8 241 7.5 37.7 81.7 433 +01032404.ABI 0 10.8 1700 -61 813 65 27.5 0.5 -18.2 289 8.0 17.4 46.6 180 +01031202.FTW 0 11.7 1341 -9 490 161 53.1 1.9 -17.9 240 7.3 37.5 47.3 201 +01031123.BWD 0 10.1 846 -18 912 76 47.4 0.5 -17.4 245 7.7 31.1 69.7 133 +01022500.TOP 0 7.3 153 -15 715 148 78.6 0.2 -21.3 203 6.8 32.9 92.4 170 +00110907.GZH 0 15.4 1005 -3 768 172 47.3 1.4 -7.8 213 6.0 36.2 52.6 220 +00110906.EET 0 14.9 674 -3 539 277 52.5 1.6 -8.6 217 5.7 41.9 58.8 327 +00110121.CID 0 12.2 1537 -17 1087 164 40.8 1.6 -12.1 210 6.0 36.7 41.3 225 +00102323.ELP 0 9.8 1432 -3 1298 24 68.0 0.2 -14.2 201 7.5 36.8 65.9 132 +00102212.MWL 0 13.4 1016 -7 525 152 31.3 0.8 -11.5 208 6.2 22.4 43.6 149 +00101423.INK 0 8.5 757 -27 2381 63 29.5 0.0 -10.8 243 7.2 27.3 48.1 91 +00101408.CNM 0 11.5 1524 -124 1147 79 34.2 0.3 -10.4 246 7.2 29.4 55.6 119 +00101400.SLN 0 11.5 577 -49 879 26 58.0 0.1 -11.3 234 5.7 28.9 63.6 76 +00100401.GCK 0 8.5 341 -281 1869 -16 53.4 0.0 -11.5 263 8.5 38.0 70.8 124 +00090523.GTF 0 7.6 277 -43 1393 8 65.8 0.0 -15.8 219 7.4 34.7 93.3 112 +00090300.ISN 0 10.7 654 -10 754 62 42.1 0.3 -13.8 225 6.8 27.3 72.5 95 +00090120.SLC 0 5.7 78 -67 2129 29 41.1 0.0 -14.3 198 7.4 15.4 53.6 53 +00081820.BUY 0 15.3 1702 -37 1351 58 34.7 0.4 -8.2 275 6.5 38.7 13.2 134 +00081723.IND 0 19.2 4115 -13 791 158 47.3 5.1 -7.9 275 6.9 37.5 49.8 224 +00081720.LEX 0 16.6 2579 -6 1129 81 36.5 1.1 -6.7 284 5.9 24.9 42.3 141 +00081420.AIT 0 16.2 2299 -120 690 282 52.2 3.0 -9.8 267 8.0 37.9 69.5 368 +00080623.CDJ 0 14.7 1350 -119 1250 43 35.9 0.1 -6.8 272 6.3 24.5 54.6 88 +00080601.HNR 0 18.6 4073 -16 990 54 37.6 1.4 -7.0 271 7.3 25.9 55.8 92 +00080522.AIA 0 7.8 312 -3 2875 0 43.4 0.0 -8.3 272 7.7 22.1 49.4 52 +00080502.PIR 0 14.4 2629 -128 1844 202 48.0 0.3 -7.4 270 7.5 30.4 64.1 318 +00080502.ANW 0 11.5 1035 -228 2157 138 37.9 0.0 -6.3 276 7.6 25.6 46.8 227 +00080222.FKL 0 13.7 1168 -22 892 104 26.2 0.5 -9.1 253 5.9 27.0 55.7 145 +00080202.LWT 0 8.3 700 -130 2701 50 46.5 0.0 -8.4 286 8.6 19.4 78.7 94 +00080202.GGW 0 10.8 1193 -207 1955 94 51.1 0.0 -9.6 293 8.0 25.1 71.3 230 +00072622.AIO 0 16.7 3711 -2 964 67 44.8 1.9 -10.2 324 7.6 29.1 43.1 186 +00072501.HON 0 13.9 2463 -99 1314 85 29.5 0.5 -11.1 271 8.3 13.2 40.3 91 +01060123.LWC 0 11.2 1268 -25 1421 113 62.6 0.8 -13.2 305 6.4 37.6 79.8 249 +01060122.P28 0 11.4 1141 -69 1552 80 51.2 0.3 -9.7 308 6.6 21.4 62.5 156 +01053100.CVN 0 8.5 1309 -86 2195 -18 45.9 0.0 -10.8 289 8.3 24.1 38.5 138 +01052801.END 0 13.1 2369 -85 1258 150 47.1 1.6 -12.5 280 8.2 39.8 67.4 370 +01052400.OKF 0 7.6 314 -55 2200 85 59.2 0.0 -15.3 298 7.1 43.3 63.3 244 +01052022.GRK 0 15.6 2852 -21 1408 32 40.1 0.4 -7.9 242 6.8 30.2 75.1 60 +01051801.RUL 0 11.1 1624 -134 2428 24 25.8 0.0 -8.5 258 8.1 18.9 46.6 76 +01051623.BIE 0 13.4 3208 -41 1905 35 30.0 0.1 -10.4 274 7.5 20.5 32.1 103 +01051218.DDH 0 8.9 325 -25 1493 21 36.4 0.0 -16.2 229 6.4 25.9 46.8 102 +01051000.OLU 0 9.6 2423 -73 2081 70 30.6 0.0 -15.8 265 8.8 23.7 36.8 157 +01050823.GBD 0 8.1 447 -90 1828 55 44.5 0.0 -15.8 323 7.4 25.4 50.6 207 +01050701.COT 0 15.9 3113 -16 1068 4 34.1 0.1 -12.2 267 8.1 10.5 56.5 73 +01050700.ADS 0 14.6 2915 -5 1038 115 37.4 2.0 -13.7 248 7.3 23.1 63.5 148 +01050623.BMQ 0 16.4 4217 -12 955 48 38.2 1.3 -13.0 257 7.5 27.3 64.9 143 +01050501.COT 0 14.3 1453 -9 1075 113 48.9 1.2 -9.9 226 7.0 33.1 73.5 169 +01050200.AUD 0 10.0 1544 -80 1896 85 31.2 0.1 -14.7 266 8.2 22.1 40.9 170 +01050101.SLN 0 10.5 1695 -66 1383 122 37.1 0.7 -16.7 295 8.0 24.3 61.4 188 +01050100.P28 0 9.9 1422 -94 1553 70 45.7 0.2 -15.7 309 7.8 24.3 54.0 188 +01042317.STE 0 9.5 775 -5 970 86 55.4 0.6 -18.0 210 6.8 38.9 110.9 170 +01042304.JCT 0 14.1 2210 -11 659 190 53.5 3.8 -11.8 248 7.8 31.4 55.1 214 +01042222.MWL 0 11.8 1193 -8 1373 116 46.2 0.7 -10.2 212 6.2 33.4 58.0 105 +01042123.PIA 0 12.1 1857 -13 1175 79 41.0 0.8 -13.4 257 7.5 25.7 51.8 94 +01042123.CDS 0 10.3 2000 -70 2105 81 55.8 0.0 -11.8 230 7.9 27.2 70.8 141 +01042102.SLN 0 11.5 2072 -206 1218 280 50.2 0.0 -15.1 239 8.7 44.2 73.5 374 +01041702.SJT 0 13.0 1793 -30 989 96 38.8 1.1 -10.9 296 7.0 26.3 65.2 260 +01041700.LBB 0 8.1 406 -65 1861 42 46.3 0.0 -12.1 288 7.1 32.9 80.6 256 +01041500.ABI 0 12.6 2222 -121 1474 76 59.9 0.5 -13.2 249 8.7 28.8 78.5 130 +01041423.ADM 0 14.2 1613 -86 524 248 67.7 3.1 -14.2 254 8.6 38.9 90.8 310 +01041422.PCS 0 13.6 2872 -90 1455 5 57.7 0.1 -10.8 245 8.2 21.5 77.6 85 +01041422.EMP 0 8.9 652 -15 1486 57 59.4 0.2 -16.8 254 7.2 31.9 84.7 218 +01041421.HBR 0 13.9 2647 -29 786 167 70.6 4.4 -14.3 255 8.2 39.1 91.1 239 +03050100.BRL 0 12.7 2707 -10 1047 121 47.3 2.5 -15.8 247 8.2 27.0 50.9 270 +03043021.AIA 0 12.3 2247 -53 863 158 49.0 2.8 -15.7 243 8.1 37.1 49.5 276 +03043003.LIC 0 8.7 1228 -82 574 264 52.2 2.2 -15.9 216 8.8 43.9 59.2 676 +03042900.APA 0 6.3 1056 -56 1639 56 35.9 0.1 -15.6 239 8.3 10.6 65.7 63 +03042600.HRL 0 12.4 1634 -219 1994 5 43.7 0.0 -11.1 286 8.3 25.0 72.5 36 +03042522.FTY 0 11.2 645 -12 811 160 61.6 1.0 -14.4 253 6.7 33.8 66.6 259 +03042520.ANB 0 11.5 783 -1 777 164 64.0 1.3 -14.0 259 6.2 36.4 64.7 319 +03042400.SEP 0 14.4 2485 -6 558 393 62.4 9.8 -14.6 238 7.9 39.1 92.6 485 +03042022.MKL 0 12.5 1017 -22 789 92 57.6 0.9 -14.3 251 6.9 29.0 70.2 188 +03042019.MEM 0 13.1 1682 -6 857 78 50.6 1.1 -14.2 252 7.3 29.0 57.0 148 +03041922.P#0 0 11.7 1623 -17 730 127 72.6 2.1 -19.4 223 7.9 35.5 102.9 148 +03041920.END 0 10.6 1171 -12 629 144 57.4 1.6 -21.0 215 8.4 39.0 99.4 219 +03041907.FDR 0 12.6 1046 -418 613 365 65.8 0.0 -13.9 207 8.9 40.5 101.8 352 +03040720.HOU 0 16.5 2215 -1 373 67 57.9 1.4 -11.4 231 7.6 30.3 77.2 191 +03040718.BPT 0 13.8 933 -139 741 16 59.0 0.1 -12.1 226 7.4 26.5 91.0 110 +03040717.LFT 0 14.1 780 -168 559 29 50.5 0.0 -12.0 233 7.3 29.3 84.8 74 +03040605.C12 0 11.3 655 -128 639 328 69.4 1.0 -14.6 250 7.3 45.3 111.0 697 +03040601.C11 0 12.1 2056 -4 832 109 75.1 2.2 -15.3 251 7.6 26.4 93.3 198 +03040400.LW1 0 13.3 2761 -1 682 153 54.3 3.8 -15.1 242 7.6 32.9 52.2 224 +03040322.HBR 0 9.5 1315 -38 1655 57 42.4 0.2 -14.8 235 7.5 33.0 47.0 130 +03032821.MBS 0 7.7 95 -1 1423 199 68.1 0.1 -17.6 223 6.6 48.9 65.7 252 +03032819.AZO 0 8.9 146 -2 830 200 60.9 0.3 -17.3 225 6.7 54.5 64.3 255 +03031722.SPS 0 10.7 981 -38 1183 127 34.3 0.6 -15.4 236 7.3 19.3 95.8 139 +03031720.SPS 0 10.2 947 -44 1140 35 24.3 0.0 -16.7 216 7.4 15.4 100.9 42 +03031221.PBI 0 14.2 1790 -2 1215 21 36.5 0.2 -12.1 258 7.7 2.8 67.6 -23 +03031218.FPR 0 15.8 2760 -2 892 -28 38.6 -0.5 -14.1 256 8.0 11.8 71.6 86 +01062102.ICT 0 13.9 1917 -38 976 89 37.8 1.1 -11.3 291 7.3 26.8 48.8 202 +01061623.JMS 0 8.9 600 -4 1096 41 40.5 0.2 -18.1 283 7.1 25.4 84.9 82 +01061122.RGK 0 14.3 3269 -77 1618 201 51.8 1.8 -10.9 265 8.4 35.2 56.2 397 +01060502.CSM 0 15.8 3992 -79 1412 107 34.9 1.2 -8.4 251 8.1 28.3 40.7 227 +01060501.LHX 0 8.3 615 -248 1957 94 44.0 0.0 -11.2 243 9.0 29.0 49.3 127 +03062823.RST 0 8.8 203 -71 1471 26 40.8 0.0 -12.1 287 4.8 15.4 60.6 57 +03062822.BH4 0 6.7 253 -82 2374 15 53.7 0.0 -12.2 288 8.0 39.8 64.9 352 +03062820.WSC 0 9.5 432 -25 1288 24 38.2 0.1 -13.2 292 5.0 20.7 57.7 45 +03062800.C07 0 9.3 1323 -51 2202 29 36.5 0.0 -9.3 311 7.4 12.9 41.7 81 +03062800.8V7 0 10.5 2208 -13 2023 82 42.3 0.0 -8.2 320 7.8 44.3 44.0 293 +03062722.8V7 0 11.1 2543 -6 1821 66 38.6 0.2 -8.4 315 7.5 40.0 47.0 258 +03062721.C07 0 8.9 1146 -29 2232 32 35.4 0.0 -9.2 306 7.2 11.7 50.1 74 +03062401.CYS 0 10.5 1054 -23 891 146 67.4 1.5 -8.4 210 6.6 44.6 77.5 258 +03062022.ROW 0 10.0 1448 -1 2438 18 41.2 0.0 -8.3 220 7.9 29.6 51.3 74 +03062022.CVS 0 12.0 1680 -21 1220 96 32.9 0.7 -8.5 224 7.2 20.3 41.0 110 +03062020.CVS 0 12.3 2087 -2 1100 14 22.8 0.0 -9.4 233 7.4 10.8 35.9 48 +03061501.CNM 0 11.3 2677 -1 2178 -48 31.4 0.0 -11.2 338 8.5 17.4 38.2 109 +03061423.HOB 0 9.6 1525 -68 2132 7 32.6 0.0 -11.5 330 8.5 14.0 32.3 24 +03061223.C11 0 20.9 5150 -8 501 190 32.5 5.3 -8.9 269 8.0 41.4 58.8 339 +03061221.AGC 0 13.1 691 -9 1032 158 35.1 0.6 -8.8 227 5.9 34.2 44.2 256 +03060401.TCC 0 11.4 1746 -91 1622 -15 59.6 -0.1 -9.6 288 8.2 44.8 48.7 398 +03060322.LBB 0 13.6 2239 -128 1199 80 45.2 0.5 -9.1 302 7.9 31.8 57.3 316 +03060302.LRD 0 17.3 3023 -81 1418 -4 35.4 0.0 -5.0 285 7.3 27.3 67.7 -12 +03053121.ILM 0 13.5 1237 -102 1265 394 58.4 2.3 -10.4 275 6.3 47.7 74.8 576 +03052001.ADM 0 16.8 3033 -19 1155 81 33.3 1.2 -8.4 288 7.5 14.5 61.0 188 +03051922.FSI 0 15.9 2088 -80 836 131 37.4 1.4 -8.3 246 8.1 40.1 50.7 385 +03051409.C12 0 13.9 2056 -415 1151 505 44.5 0.0 -12.7 290 9.5 25.4 80.3 466 +03051406.LW1 0 15.8 3351 -219 819 259 50.4 0.0 -11.8 274 8.3 12.9 74.5 238 +03051401.C11 0 13.9 3239 -178 1774 132 58.3 0.1 -9.9 286 8.2 22.1 60.4 192 +03051322.CDS 0 12.4 3323 -92 2274 79 49.1 0.0 -10.1 280 8.6 18.1 68.8 98 +03051223.MRF 0 11.6 1914 -2 1612 41 42.7 0.2 -6.0 279 6.7 33.9 49.2 174 +03051019.MLC 0 14.5 849 -221 615 158 58.7 0.0 -8.7 240 7.6 34.0 74.3 199 +03051017.P#Q 0 16.5 2801 -34 619 97 68.4 2.7 -9.2 235 7.2 32.3 77.8 168 +03051000.P#J 0 16.2 3929 -21 888 74 55.8 2.7 -12.5 247 7.6 33.6 64.7 227 +03050922.LEX 0 15.5 2304 -3 715 119 55.3 2.5 -9.5 278 7.4 32.8 69.7 185 +03050921.COU 0 16.1 4338 -12 941 67 45.4 2.2 -11.8 246 7.4 35.8 73.5 264 +03050920.SDF 0 15.2 2300 -15 871 88 52.2 1.8 -10.2 268 7.2 36.6 70.7 247 +03050520.MKL 0 15.8 2332 -17 581 247 71.6 5.8 -11.9 263 7.3 40.2 88.1 300 +03050223.BMX 0 15.4 3487 -10 686 61 44.2 1.6 -13.2 283 6.8 21.9 38.7 114 +03050221.HSV 0 13.0 2237 -40 946 139 42.3 2.2 -13.8 264 7.0 27.8 33.8 201 +03050221.ABL 0 13.6 3056 -5 1063 81 40.9 1.6 -14.7 280 7.2 27.0 27.0 130 +03050219.SJT 0 15.1 4252 -2 1189 17 38.9 0.4 -12.5 277 8.1 4.7 61.7 18 +03050219.ABL 0 12.9 2572 -28 1072 45 27.2 0.5 -13.7 261 6.7 22.6 36.0 82 +03050218.MSL 0 13.0 2367 -24 912 19 25.5 0.2 -14.5 257 7.4 24.2 40.8 60 +03050201.ACT 0 13.6 2339 -88 1301 -44 31.1 -0.3 -11.9 280 8.3 21.3 53.8 -77 +03050102.END 0 14.0 3853 -58 1033 227 43.6 5.8 -13.5 250 7.4 27.5 43.5 247 +03071221.AVL 0 11.9 710 -2 1196 56 37.5 0.2 -8.5 266 5.6 31.7 43.3 103 +03071201.FOE 0 16.7 3598 -41 1289 -96 59.4 -2.4 -10.2 313 7.9 33.9 54.8 89 +03071200.FOE 0 16.2 3683 -11 1441 -16 63.8 -0.3 -11.0 315 7.7 31.9 59.2 109 +03071123.P#H 0 12.6 927 -26 1632 97 59.9 0.3 -9.9 322 7.2 45.3 55.0 319 +03070904.PHP 0 14.6 2161 -292 1066 549 72.4 0.0 -8.6 260 8.8 53.5 55.7 683 +03070900.BH3 0 8.3 1108 -106 2627 277 55.8 0.0 -7.9 250 8.4 55.7 68.2 568 +03070723.LVS 0 8.8 850 -179 2135 85 20.0 0.0 -6.4 329 8.7 24.3 27.9 305 +03070720.DSM 0 18.0 4261 -35 1012 20 39.2 0.6 -9.9 262 8.0 13.2 34.7 79 +03070719.LVS 0 9.9 1337 -68 1800 12 22.3 0.0 -7.2 336 8.0 27.0 21.0 98 +03070600.VTN 0 11.6 1572 -201 1584 157 52.8 0.0 -9.5 273 8.2 30.3 50.1 293 +03070521.RAP 0 8.7 803 -208 2327 67 22.6 0.0 -11.2 272 8.5 6.7 33.0 46 +03070521.P#7 0 10.3 1147 -137 2084 84 43.4 0.0 -10.3 249 8.1 22.9 55.2 239 +03070517.BH3 0 8.9 1171 -147 2263 -14 27.2 0.0 -12.5 293 9.1 15.8 39.6 51 +03070305.GDV 0 9.1 634 -206 1972 120 22.6 0.0 -13.9 250 8.7 30.3 58.1 255 +03063018.AUG 0 11.8 1327 -56 1152 60 42.9 0.5 -12.3 267 5.3 24.4 72.0 118 +03081800.BH5 0 9.0 725 -5 2392 -33 27.4 0.0 -9.3 180 7.6 12.2 31.3 76 +03081322.XRW 0 16.6 1031 -16 519 88 21.6 0.0 -6.2 187 5.5 23.7 39.1 164 +03081202.SEP 0 12.7 373 -104 1300 -113 55.9 -0.2 -8.4 345 6.8 38.0 68.0 -12 +03081200.FWD 0 12.2 1050 -51 2135 -30 50.2 0.0 -8.8 339 6.7 35.0 52.7 68 +03081023.P#9 0 13.9 1702 0 1195 30 41.7 0.3 -9.2 346 6.8 25.8 56.8 104 +03080902.P#C 0 15.5 3216 -71 1472 8 27.4 0.1 -6.4 277 7.9 17.3 40.8 199 +03080900.MIB 0 15.0 3325 -48 1477 39 33.2 0.4 -9.0 291 7.7 10.7 43.9 102 +03080900.P#C 0 14.4 3127 -1 1826 10 25.0 0.0 -5.8 262 7.5 12.2 42.3 64 +03080622.GLD 0 12.9 3132 -2 2338 21 28.1 0.0 -7.1 306 8.2 14.7 32.7 115 +03080601.CNU 0 15.8 2262 -28 1629 -18 34.6 -0.1 -5.1 317 6.6 25.1 42.1 49 +03080600.SUX 0 15.5 1945 -3 996 54 38.2 0.7 -8.6 321 7.0 35.9 44.6 171 +03080521.TOP 0 16.0 2857 -24 1592 -7 30.8 0.0 -6.8 308 6.3 19.6 40.9 101 +03080520.DAN 0 15.0 2224 -8 858 8 18.6 0.0 -10.1 275 6.4 27.6 30.4 121 +03080422.P#R 0 15.1 1771 -64 1131 59 51.1 0.7 -8.5 326 6.5 23.7 72.7 144 +03080401.BVX 0 16.9 2856 -38 1072 96 33.8 1.4 -8.7 308 6.7 18.2 47.9 100 +03080202.LUS 0 9.3 520 -170 1828 -21 47.7 0.0 -8.2 291 7.9 30.7 60.7 11 +03080123.CRL 0 13.5 2544 -8 1131 18 35.3 0.2 -12.9 299 7.9 26.6 36.1 109 +03080103.MCW 0 11.0 914 -111 1515 8 24.1 0.0 -12.2 281 7.0 26.6 47.8 60 +03073123.C31 0 8.6 251 -238 2988 79 50.4 0.0 -8.0 311 8.0 29.8 74.4 268 +03073120.TVL 0 10.6 1275 -24 1488 33 34.5 0.1 -7.4 90 7.8 32.3 17.1 170 +03072700.IWD 0 15.1 1598 -19 1386 149 42.6 1.0 -6.1 276 5.9 27.7 60.4 150 +03071802.BH1 0 13.9 2073 -132 1543 52 64.4 0.2 -6.9 291 7.8 47.0 77.9 171 +03071721.RAP 0 14.6 3713 -127 1972 107 39.2 0.0 -6.2 280 8.5 31.5 54.8 181 +03071320.MSL 0 16.4 2839 -21 1060 37 23.4 0.0 -9.3 310 7.1 4.1 36.8 35 +03071320.DIK 0 9.2 2113 -26 3189 -19 27.9 0.0 -9.3 266 9.0 11.0 36.6 31 +04040721.P#U 0 11.2 1509 -10 1060 103 47.1 1.2 -15.7 268 6.4 35.8 60.8 191 +04040702.SPS 0 8.6 230 -53 980 110 36.0 0.2 -17.3 236 6.3 19.0 53.3 110 +04040700.FTW 0 10.4 641 -8 948 43 57.7 0.3 -14.3 228 6.4 22.9 60.1 83 +04040422.LRD 0 13.8 2148 -1 827 171 49.4 3.0 -12.9 244 7.0 31.5 38.8 217 +04040421.ALI 0 13.2 1124 -3 718 10 40.8 0.1 -13.2 238 7.0 18.0 35.9 100 +04032701.DHT 0 9.5 1004 -128 1142 153 30.2 0.3 -13.4 233 8.2 31.2 63.3 235 +04032623.RAP 0 8.7 1651 -52 1568 172 42.5 0.9 -15.5 205 8.0 26.0 46.8 264 +04031802.FSM 0 8.0 442 -99 1939 211 48.0 0.0 -17.1 278 7.5 37.8 72.5 338 +04031800.P#P 0 9.4 1357 -30 1585 127 45.0 0.5 -17.4 288 7.7 34.4 66.4 269 +04030121.ORD 0 7.2 534 -1 908 208 58.9 1.1 -23.3 222 6.6 37.3 72.6 297 +04030120.RFD 0 6.8 505 -7 892 172 55.3 0.8 -24.3 220 6.8 34.8 71.1 256 +04022416.MCO 0 13.1 534 -37 687 121 47.0 0.5 -10.8 255 5.0 28.8 81.9 156 +04022407.G#5 0 10.5 962 -124 801 -16 47.4 -0.1 -18.2 218 7.7 31.4 83.7 14 +04022316.MSY 0 11.3 0 -9999 417 436 51.3 0.0 -11.2 240 6.1 44.9 86.2 531 +04020601.BTR 0 11.7 57 -172 540 186 69.9 0.0 -13.3 214 7.0 48.1 87.1 199 +04020514.LFT 0 11.1 165 -244 1109 583 49.0 0.0 -11.7 217 6.5 46.0 63.5 611 +04020512.LCH 0 13.6 1421 -64 497 282 49.1 3.0 -12.5 222 6.8 41.7 68.1 319 +04011921.VRB 0 10.3 196 -20 878 -16 82.2 0.0 -14.0 242 5.1 46.9 123.3 207 +03112718.RUE 0 10.5 681 0 396 4 92.3 0.0 -20.1 238 7.0 35.8 100.8 153 +03110923.SAC 0 6.9 156 -14 892 38 24.7 0.0 -25.3 234 7.5 14.4 91.8 77 +03102818.CTY 0 16.5 1074 -53 594 181 37.6 1.2 -7.8 217 6.3 23.6 51.5 193 +03100822.VAD 0 14.1 1355 -7 765 -4 27.1 0.0 -11.2 277 6.4 13.9 52.0 68 +03092718.CBE 0 11.6 969 -2 1256 109 40.4 0.5 -12.3 213 6.1 33.1 58.2 137 +03092620.UIN 0 12.7 1139 -3 844 177 50.2 1.7 -14.6 266 7.9 42.7 77.1 266 +03092619.BRL 0 11.1 906 -34 824 125 50.2 1.0 -14.9 256 6.9 40.9 76.6 149 +03091200.MRF 0 9.8 747 -2 1645 9 36.3 0.0 -6.8 276 6.2 25.5 49.1 163 +03090900.MAF 0 9.9 1214 -1 2565 13 32.3 0.0 -8.4 313 7.4 22.4 35.6 163 +03083123.HUF 0 14.8 27 -163 471 268 39.8 0.0 -6.8 243 6.3 41.6 43.2 340 +03082601.P#4 0 12.9 980 -231 1606 140 42.5 0.0 -9.4 277 7.1 39.4 44.3 283 +03082600.ABR 0 14.2 3471 -76 1925 104 37.8 0.1 -11.4 289 8.6 27.8 43.9 143 +03082221.LOL 0 9.6 944 -94 1467 89 64.9 0.3 -12.3 188 8.3 46.4 77.0 299 +03082119.APX 0 14.4 2077 -120 1359 80 36.1 0.3 -8.3 255 7.1 34.1 35.4 132 +03082100.DLH 0 16.1 2503 -11 1009 166 39.5 2.7 -8.1 226 6.2 24.3 46.3 201 +04051501.PUB 0 3.9 204 -85 2585 153 55.2 0.0 -18.2 268 8.8 42.0 78.8 355 +04051423.COS 0 4.6 230 -87 1664 52 57.1 0.0 -18.0 274 8.2 45.2 68.4 179 +04051300.HBR 0 14.0 4148 -28 1710 172 41.2 1.4 -11.1 244 7.8 44.0 46.5 333 +04051100.LUS 0 8.3 917 -69 1429 204 53.5 0.8 -11.5 237 7.4 28.1 44.2 323 +04050923.CVS 0 5.9 554 -61 3040 -32 23.7 0.0 -12.6 309 9.6 17.1 15.5 78 +04050921.STC 0 9.9 1302 -52 1737 185 49.7 0.5 -14.2 264 7.5 46.1 49.8 400 +04050900.P#A 0 13.8 2438 -42 1008 193 29.0 2.3 -12.7 278 7.7 19.9 36.2 251 +04050822.BH3 0 5.3 996 -6 3054 49 48.0 0.0 -15.0 280 9.6 8.9 60.8 58 +04050522.RIC 0 8.3 824 -38 1493 133 43.8 0.4 -20.4 310 7.1 34.9 60.9 251 +04050101.FWD 0 13.9 2471 -39 907 158 44.9 2.9 -14.8 225 8.3 23.0 58.2 185 +04043021.C12 0 13.3 2483 -8 1029 37 45.1 0.7 -14.1 236 7.9 32.8 46.0 48 +04043020.DYS 0 14.1 2950 -10 638 71 52.3 1.8 -14.3 236 7.8 34.1 51.0 143 +04043018.ABI 0 12.0 2372 -1 1211 -3 32.6 0.0 -13.6 230 7.7 22.8 40.3 -22 +04042920.MLU 0 12.9 972 0 744 72 46.0 0.5 -14.5 232 6.6 29.2 45.8 176 +04042821.G#2 0 10.1 747 -3 1175 139 56.7 0.8 -14.7 252 7.4 32.3 53.8 179 +04042521.CDS 0 7.1 679 -5 2042 20 45.4 0.0 -17.7 276 7.7 27.7 76.8 88 +04042300.SGF 0 9.8 113 -134 794 263 69.4 0.1 -15.2 267 7.5 51.1 79.0 572 +04042300.P#P 0 14.6 2114 -9 448 155 49.9 2.7 -13.6 245 7.2 26.3 46.7 258 +04042223.C12 0 12.6 1615 -11 1173 56 54.8 0.7 -10.8 266 6.6 36.5 68.7 191 +04042222.UMN 0 10.5 412 -29 663 220 60.2 0.9 -17.5 254 8.2 45.7 67.6 357 +04042221.C34 0 11.2 1504 -22 1170 72 53.8 0.8 -15.5 265 7.8 38.9 55.3 252 +04042200.ADM 0 11.7 1347 -25 1310 194 51.9 1.6 -13.2 269 6.8 28.4 68.1 339 +04042122.C12 0 11.5 1550 -3 1449 83 53.3 0.6 -13.2 261 6.6 30.3 65.8 168 +04041921.HOB 0 11.3 2173 -1 1395 86 53.9 1.0 -10.9 235 6.7 32.7 83.0 143 +04041801.MFD 0 10.8 1224 -65 1060 185 23.7 0.0 -16.5 288 8.0 29.7 50.0 245 +04041723.MFD 0 11.9 2519 -15 1046 104 26.5 1.1 -15.5 303 7.2 29.2 37.6 184 +04041105.MFE 0 15.8 2222 -37 402 26 39.9 0.4 -11.6 248 7.5 2.1 69.3 23 +04041019.ILM 0 9.2 180 -45 1165 111 41.2 0.1 -16.1 267 6.0 29.7 69.5 345 +04041001.PRX 0 8.8 516 -75 1780 210 42.3 0.1 -14.1 270 6.7 37.6 59.1 314 +04040818.DAB 0 13.2 1058 -19 810 73 56.2 0.7 -15.8 264 7.7 33.6 94.9 186 +04040815.DHN 0 11.9 877 -2 522 78 53.9 0.6 -15.8 257 6.5 30.9 87.6 111 +04071305.CHE 0 17.6 3151 -107 771 181 49.7 2.9 -8.9 301 7.9 29.7 60.2 300 +04070104.HBR 0 15.7 1988 -45 801 174 24.0 0.0 -8.2 259 7.0 25.9 23.7 276 +04062402.FNT 0 10.0 608 -67 1046 219 50.4 1.0 -15.3 260 6.5 32.1 72.4 270 +04062222.BIS 0 7.2 504 -14 1518 9 56.3 0.0 -18.7 301 6.3 28.7 75.6 88 +04062023.DHT 0 8.4 905 -127 2633 107 47.8 0.0 -9.3 270 8.8 36.3 67.8 192 +04061902.G#1 0 13.2 1631 -27 1122 144 35.1 1.2 -8.6 284 7.3 37.4 58.3 408 +04061900.HDN 0 6.4 316 -26 1668 -40 51.4 0.0 -13.3 257 8.3 36.5 73.3 29 +04061820.FAM 0 15.9 1842 -13 923 65 31.0 0.6 -7.0 271 5.7 23.9 35.7 131 +04061800.LHX 0 12.7 2059 -86 777 206 47.3 2.5 -11.2 235 8.4 37.4 49.6 651 +04052700.CHE 0 8.9 347 -4 1255 145 31.1 0.2 -14.7 268 6.1 31.0 44.9 228 +04052623.TYS 0 14.7 1654 -44 919 199 50.1 2.8 -9.7 275 5.9 37.8 71.9 255 +04052623.OKC 0 15.9 3047 -69 1198 124 56.8 2.5 -7.9 261 6.8 24.4 82.9 79 +04052622.FSD 0 9.4 835 -34 1187 143 35.4 0.6 -17.3 267 7.3 33.1 47.2 271 +04052621.CSV 0 14.4 1608 -15 870 176 59.8 2.8 -9.3 268 6.2 35.9 58.7 237 +04052621.C33 0 13.6 2405 -23 1847 104 55.5 0.4 -9.6 256 7.5 30.4 80.9 72 +04052603.CAI 0 15.4 1463 -14 609 129 47.0 1.5 -11.0 277 7.2 31.6 59.9 153 +04052402.P#7 0 7.8 400 -213 1358 246 41.2 0.0 -15.5 247 8.2 35.3 62.4 412 +04052400.STL 0 16.1 3087 -3 604 162 45.4 3.8 -12.7 253 8.0 28.6 58.7 195 +04052400.CDR 0 5.8 117 -187 2181 178 56.7 0.0 -14.5 256 8.0 30.8 66.1 338 +04052323.BGM 0 14.6 2244 0 781 156 41.1 2.4 -11.9 272 7.8 30.1 44.7 249 +04052320.PIN 0 12.0 1300 -3 1376 120 33.7 0.6 -11.8 267 6.7 36.9 31.3 199 +04052300.ELM 0 12.4 1089 -41 1163 226 43.8 1.5 -9.7 281 5.7 46.2 46.0 359 +04052201.G#1 0 12.3 2404 -84 1771 261 33.8 0.6 -8.2 246 7.9 36.9 50.5 385 +04052201.SNY 0 7.0 484 -214 2287 78 62.8 0.0 -12.7 227 9.0 42.4 81.2 214 +04052123.HYS 0 12.7 3460 -27 2109 75 39.7 0.0 -10.8 236 8.6 29.0 45.1 157 +04052100.FKL 0 14.7 2440 -9 772 269 42.7 4.7 -10.6 299 6.4 28.6 49.2 346 +04052100.DEN 0 9.0 1781 -3 1934 76 49.3 0.1 -11.5 231 8.4 30.6 60.1 225 +04051723.DSM 0 13.3 1669 -24 854 23 36.8 0.2 -11.5 251 6.5 26.2 51.1 132 +04051723.PUB 0 9.2 546 -83 1212 147 55.3 0.5 -11.9 251 7.8 44.9 72.1 222 +04051601.9V9 0 7.5 608 -65 1315 120 61.8 0.5 -19.3 286 7.0 35.7 85.8 189 +04051521.PIR 0 6.8 724 -30 1545 91 60.8 0.3 -21.3 289 7.3 36.7 70.4 224 +04051520.Y26 0 7.0 965 -32 1206 89 60.4 0.7 -23.7 287 7.8 40.0 67.1 217 +99053023.P07 0 12.1 2286 -113 1897 53 39.7 0.1 -8.5 315 7.8 22.5 45.3 165 +99052800.FTW 0 12.2 1104 -4 954 41 33.8 0.3 -12.6 256 6.8 24.6 36.5 103 +99052503.FST 0 10.3 1116 -185 1882 122 53.5 0.0 -9.7 271 8.3 44.1 67.4 157 +99052502.INK 0 11.4 1576 -110 1665 119 56.3 0.4 -10.0 270 7.8 39.9 60.4 191 +99052420.ABQ 0 8.1 781 -71 1338 71 34.2 0.2 -13.9 212 8.5 24.7 44.7 132 +99052220.TUL 0 16.0 3471 -3 869 32 31.1 0.6 -12.1 269 7.3 20.4 36.1 91 +99052200.SNY 0 8.7 1439 -7 1674 53 48.7 0.2 -12.8 266 7.7 28.2 65.4 147 +99052123.RAP 0 8.6 1729 -70 1711 131 43.6 0.4 -16.2 256 8.7 23.0 67.0 178 +99052001.MOT 0 8.0 903 -1 1506 2 27.5 0.0 -17.4 240 7.0 14.4 59.7 47 +99051700.LAA 0 7.5 817 -141 1731 124 65.0 0.1 -15.0 234 8.6 43.8 78.0 361 +99050519.MVN 0 12.9 1777 -10 790 108 57.7 1.8 -14.1 237 6.6 41.0 44.8 194 +99043001.INK 0 12.4 2333 -60 967 95 52.8 1.8 -11.4 237 8.1 32.9 71.8 280 +99042900.BIL 0 6.5 60 -143 1109 133 46.8 0.0 -17.8 182 7.5 39.8 84.0 324 +99042800.EVV 0 9.5 305 -3 1146 22 26.2 0.0 -15.6 225 6.4 18.9 38.1 56 +99042701.OKC 0 8.9 873 -24 1056 47 27.4 0.2 -20.3 275 7.9 23.0 44.2 88 +99042322.LOZ 0 12.8 1995 -5 979 77 37.3 1.0 -11.6 287 6.9 30.4 44.4 71 +99042319.EZF 0 10.2 1142 -51 1722 106 57.2 0.3 -14.2 276 6.9 38.0 68.5 172 +99042203.GOK 0 12.3 2307 -132 894 364 53.9 3.4 -16.0 254 8.5 31.2 54.6 401 +99042123.BMI 0 11.6 1687 -24 839 261 53.4 3.9 -16.4 252 7.8 45.9 57.4 408 +04083002.GCK 0 10.7 1029 -108 1687 204 32.5 0.2 -8.1 315 6.8 29.0 26.2 278 +04083000.SUX 0 10.7 779 -7 1471 199 42.6 0.6 -12.9 289 6.7 36.3 45.9 296 +04082622.C23 0 10.2 983 -43 1349 25 41.1 0.1 -15.8 254 7.2 17.8 70.6 46 +04082621.MCW 0 15.4 2478 -27 1087 26 46.1 0.5 -9.9 239 7.0 37.9 68.9 181 +04082522.FSM 0 18.2 3688 -45 1240 101 33.9 1.6 -6.7 244 6.2 16.5 39.6 113 +04082522.BIS 0 10.2 2077 -41 1811 74 38.1 0.2 -15.2 230 8.4 22.8 43.2 103 +04082503.MHK 0 19.2 4217 -59 627 274 31.2 5.7 -7.9 224 7.5 31.4 51.8 392 +04082501.MHK 0 18.9 4262 -45 721 150 29.9 3.2 -7.4 240 7.1 28.3 50.9 241 +04082020.BGM 0 14.6 1425 -21 712 95 53.2 1.2 -9.5 238 5.9 38.1 53.7 106 +04082018.ORH 0 15.1 2067 -19 1051 47 40.0 0.6 -8.9 256 6.1 29.0 39.9 132 +04081918.LBE 0 14.4 1183 -7 597 105 39.9 0.8 -8.7 270 5.6 40.5 44.4 152 +04081901.PIA 0 13.9 1294 -107 1203 377 40.4 1.6 -7.9 277 5.6 39.8 43.3 465 +04081822.BRL 0 15.3 2600 -41 963 377 41.3 6.8 -9.4 276 6.6 42.5 42.9 508 +04081421.LIC 0 9.9 1288 -66 1242 15 32.2 0.1 -10.2 333 7.8 25.5 42.7 65 +04080321.OAX 0 18.7 4816 -44 1389 92 36.9 1.7 -5.9 259 7.0 23.6 38.1 189 +04080202.Y26 0 15.4 3187 -169 1209 336 55.2 1.6 -9.3 291 8.1 28.5 83.2 385 +04080123.Y22 0 8.5 1290 -28 3011 -1 45.9 0.0 -10.5 298 8.6 30.2 71.2 158 +04073101.GAG 0 14.4 2006 -116 1300 54 42.0 0.3 -6.2 308 6.7 14.8 44.7 98 +04072102.FSD 0 19.9 4659 -49 869 261 26.0 5.3 -5.9 278 7.3 28.0 37.4 426 +99081101.HLC 0 17.4 3928 -33 1289 71 38.3 1.3 -5.1 243 6.7 21.0 34.5 152 +99081023.AKO 0 14.9 2910 -32 1271 87 33.9 1.0 -6.5 232 7.6 22.7 45.7 163 +99080901.DIK 0 12.0 2409 -98 1891 48 58.5 0.1 -10.8 267 8.5 29.7 54.5 94 +99080822.2WX 0 10.3 1972 -32 2526 39 44.1 0.0 -8.8 262 8.3 27.2 41.0 117 +99080702.RAP 0 12.7 921 -36 1200 35 33.6 0.1 -6.6 268 6.3 20.0 48.7 72 +99080301.LWT 0 8.5 449 -155 1772 53 48.3 0.0 -10.3 278 7.8 29.4 70.4 131 +99073100.JKL 0 15.8 3605 -30 1833 89 22.3 0.0 -5.9 355 6.7 22.8 19.6 158 +99073020.IPT 0 15.0 2685 -12 1238 32 34.0 0.4 -8.7 319 6.3 16.0 50.7 72 +99072922.FVX 0 14.5 1431 -13 1556 81 34.3 0.3 -6.0 327 5.6 22.6 48.0 117 +99072902.XVG 0 12.7 1459 -186 1710 319 58.3 0.1 -9.5 302 7.7 41.9 73.8 381 +99072900.ADG 0 14.8 1974 -6 1415 63 37.3 0.5 -9.4 298 7.1 21.7 66.3 118 +99072420.MHT 0 14.8 1594 -17 1088 66 27.8 0.5 -9.7 275 6.5 25.2 56.1 134 +99072319.RAP 0 10.6 1320 -19 2145 52 38.7 0.0 -7.5 263 7.3 22.5 54.0 87 +99072300.FAR 0 16.2 2819 -34 1355 81 35.4 0.9 -8.5 247 7.6 27.9 55.9 137 +99071923.GDV 0 11.9 1807 -31 1654 21 41.3 0.1 -11.2 254 7.9 18.9 69.4 67 +99071302.FAR 0 12.1 1948 -48 1552 125 38.2 0.7 -12.5 297 7.2 27.2 61.0 158 +99071302.DVL 0 10.4 1453 -76 1761 69 42.5 0.1 -13.5 288 7.5 28.3 62.4 124 +99071300.OLF 0 9.2 1101 -38 2374 25 49.7 0.0 -10.3 281 7.3 26.5 65.7 106 +99071202.AIA 0 9.4 1094 -73 1844 -8 27.8 0.0 -11.3 327 8.0 26.7 47.0 79 +99070804.GDV 0 14.2 2058 -209 1364 472 61.7 0.0 -7.6 251 8.0 40.8 78.6 551 +99070421.ERY 0 19.1 3756 -61 791 95 32.9 1.8 -6.7 267 8.2 22.2 36.6 98 +99070207.SFD 0 9.5 32 -374 1535 254 82.4 0.0 -10.7 263 7.4 45.0 92.7 464 +99070103.SWO 0 18.3 2994 -18 703 229 51.1 5.8 -4.6 303 6.4 25.9 51.9 297 +99070103.GCK 0 15.2 2113 -124 873 95 73.0 1.0 -6.5 294 7.5 37.6 74.8 319 +99063023.LBF 0 9.7 291 -114 1136 0 76.3 0.0 -12.3 289 6.9 54.3 115.6 214 +99062801.BGD 0 13.8 2864 -63 2251 73 37.7 0.0 -5.0 266 8.5 22.5 43.1 130 +99062522.DIK 0 12.8 2775 -1 1732 -52 57.7 -0.4 -10.3 230 8.2 35.4 58.9 132 +99062501.VTN 0 11.7 1035 -41 1545 55 41.3 0.2 -8.2 282 6.6 23.6 41.7 120 +99062400.BGD 0 12.2 2544 -17 2195 10 13.6 0.0 -6.5 288 7.8 22.6 35.1 91 +99060601.P07 0 11.8 1543 -130 1771 -31 45.2 0.0 -8.7 243 7.9 18.4 58.3 32 +99060523.LBF 0 10.7 2070 -28 1957 91 62.6 0.1 -12.9 197 8.5 25.9 90.4 131 +99060302.IML 0 10.0 869 -198 1657 237 43.7 0.0 -11.0 225 8.5 39.8 66.5 421 +99060202.GCC 0 6.3 226 -83 1883 18 41.3 0.0 -15.4 262 8.3 26.0 42.6 126 +99060200.FTW 0 16.8 3982 -31 1338 62 35.0 1.0 -11.1 275 8.5 25.7 60.3 144 +99053102.MHK 0 11.6 903 -51 1360 108 32.8 0.3 -11.3 270 6.9 30.0 24.5 179 +99120303.ADM 0 9.7 1355 -50 974 250 42.8 2.4 -22.1 217 8.5 35.9 65.7 332 +99112303.RBD 0 13.2 1077 -16 789 138 48.1 1.2 -13.6 235 6.4 25.1 60.9 176 +99112302.HBR 0 8.7 124 -124 660 53 47.7 0.0 -17.1 219 6.7 41.5 75.7 132 +99100823.FSI 0 10.1 649 -14 1313 5 36.2 0.0 -13.6 219 6.3 14.3 67.9 56 +99092600.GKY 0 13.1 1483 -15 1429 43 28.0 0.2 -9.4 340 6.3 21.5 55.3 182 +99092522.D07 0 6.4 163 -199 2219 136 65.7 0.0 -15.8 242 8.3 31.8 105.7 206 +99092004.RRC 0 11.2 292 -200 1044 70 37.2 0.0 -11.2 270 6.7 28.8 60.6 216 +99092000.OKC 0 11.1 1068 -42 1896 56 39.5 0.0 -10.1 290 6.8 29.0 60.9 190 +99091923.CSM 0 11.9 1645 -3 1885 18 41.3 0.0 -9.8 280 7.0 27.5 64.0 178 +99091920.CGZ 0 11.2 802 -16 1905 19 39.1 0.0 -8.7 245 6.5 16.0 60.3 61 +99091207.SLP 0 15.6 2094 -69 507 92 45.4 1.3 -10.8 271 8.2 16.8 55.8 121 +99091200.LBL 0 11.9 1180 -121 1590 31 43.2 0.1 -9.0 275 7.8 25.7 65.5 84 +99091122.HLC 0 12.4 1517 -36 1221 59 37.8 0.4 -11.3 253 7.4 21.0 66.2 94 +99091101.AFW 0 13.1 1250 -24 1970 21 29.5 0.0 -7.4 297 6.2 21.7 52.8 139 +99082300.ABR 0 11.7 1432 -38 1851 61 40.1 0.1 -9.6 289 6.9 20.3 45.5 101 +99082104.HON 0 13.3 1187 -244 1155 197 38.1 0.0 -8.9 281 7.4 31.4 54.2 238 +99082100.LBF 0 9.8 20 -311 1794 44 34.8 0.0 -7.8 321 7.1 19.7 46.1 126 +99082022.DIK 0 11.7 1445 -10 1669 21 33.6 0.1 -7.8 298 6.3 17.8 36.0 58 +99081922.MLS 0 7.1 393 -105 3278 19 33.8 0.0 -10.0 244 8.6 22.0 37.3 120 +99081800.RRT 0 11.4 1524 -26 847 90 49.2 1.1 -17.7 268 7.3 32.2 62.0 126 +99081400.ALB 0 16.8 1843 -4 701 196 38.5 2.3 -6.3 249 5.8 29.9 48.4 252 +99081202.GCC 0 10.6 877 -99 1162 63 34.5 0.2 -10.2 218 7.5 17.7 54.6 98 diff --git a/ncep/gov.noaa.nws.ncep.ui.pgen/gov.noaa.nws.ncep.ui.pgen.ecl b/ncep/gov.noaa.nws.ncep.ui.pgen/gov.noaa.nws.ncep.ui.pgen.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/ncep/gov.noaa.nws.ncep.viz.cloudHeight/gov.noaa.nws.ncep.viz.cloudHeight.ecl b/ncep/gov.noaa.nws.ncep.viz.cloudHeight/gov.noaa.nws.ncep.viz.cloudHeight.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/ncep/gov.noaa.nws.ncep.viz.common/binding/binding.xml b/ncep/gov.noaa.nws.ncep.viz.common/binding/binding.xml index 4945fd69ba..b02535d84e 100644 --- a/ncep/gov.noaa.nws.ncep.viz.common/binding/binding.xml +++ b/ncep/gov.noaa.nws.ncep.viz.common/binding/binding.xml @@ -1,7 +1,7 @@ - - - - - - + + + + + + \ No newline at end of file diff --git a/ncep/gov.noaa.nws.ncep.viz.common/gov.noaa.nws.ncep.viz.common.ecl b/ncep/gov.noaa.nws.ncep.viz.common/gov.noaa.nws.ncep.viz.common.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/ncep/gov.noaa.nws.ncep.viz.gempak/gov.noaa.nws.ncep.viz.gempak.ecl b/ncep/gov.noaa.nws.ncep.viz.gempak/gov.noaa.nws.ncep.viz.gempak.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/ncep/gov.noaa.nws.ncep.viz.localization/gov.noaa.nws.ncep.viz.localization.ecl b/ncep/gov.noaa.nws.ncep.viz.localization/gov.noaa.nws.ncep.viz.localization.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/ncep/gov.noaa.nws.ncep.viz.overlays/gov.noaa.nws.ncep.viz.overlays.ecl b/ncep/gov.noaa.nws.ncep.viz.overlays/gov.noaa.nws.ncep.viz.overlays.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/ncep/gov.noaa.nws.ncep.viz.overlays/src/gov/noaa/nws/ncep/viz/overlays/resources/OverlayResourceGroup.java b/ncep/gov.noaa.nws.ncep.viz.overlays/src/gov/noaa/nws/ncep/viz/overlays/resources/OverlayResourceGroup.java index bdc09eaf8f..5fb6eba34f 100644 --- a/ncep/gov.noaa.nws.ncep.viz.overlays/src/gov/noaa/nws/ncep/viz/overlays/resources/OverlayResourceGroup.java +++ b/ncep/gov.noaa.nws.ncep.viz.overlays/src/gov/noaa/nws/ncep/viz/overlays/resources/OverlayResourceGroup.java @@ -1,182 +1,182 @@ -/** - * - */ -package gov.noaa.nws.ncep.viz.overlays.resources; - -import gov.noaa.nws.ncep.viz.resources.INatlCntrsResource; - -import org.opengis.referencing.crs.CoordinateReferenceSystem; - -import com.raytheon.uf.viz.core.IGraphicsTarget; -import com.raytheon.uf.viz.core.drawables.PaintProperties; -import com.raytheon.uf.viz.core.drawables.ResourcePair; -import com.raytheon.uf.viz.core.exception.VizException; -import com.raytheon.uf.viz.core.map.MapDescriptor; -import com.raytheon.uf.viz.core.rsc.AbstractVizResource; -import com.raytheon.uf.viz.core.rsc.LoadProperties; -import com.raytheon.uf.viz.core.rsc.ResourceList; -import com.raytheon.uf.viz.core.rsc.ResourceProperties; -import com.raytheon.uf.viz.core.rsc.capabilities.ColorableCapability; -import com.raytheon.uf.viz.core.rsc.capabilities.ImagingCapability; -import com.raytheon.uf.viz.core.rsc.capabilities.OutlineCapability; - -/** - * - * Provides a capability to support homogenous (same color, style, etc.) maps as - * a single resource - * - *
- * 
- * SOFTWARE HISTORY
+/**
  * 
- * Date         Ticket#    Engineer    Description
- * ------------ ---------- ----------- --------------------------
- * 03/08/09                ghull       Created from MapResourceGroup
- * 11/19/09                ghull       Incorporate to11d6 changes
- * 
- * 
- * - * @author chammack - * @version 1.0 - */ -public class OverlayResourceGroup extends - AbstractVizResource - implements INatlCntrsResource { - - protected IGraphicsTarget lastTarget; - - protected OverlayResourceGroup(OverlayResourceGroupData data, - LoadProperties loadProperties) { - super(data, loadProperties); - - this.resourceData.getResourceList().addPreAddListener( - new ResourceList.AddListener() { - - @SuppressWarnings("unchecked") - @Override - public void notifyAdd(ResourcePair rp) throws VizException { - addListener((AbstractVizResource) rp - .getResource()); - } - - }); - - } - - protected void addListener(AbstractVizResource rsc) - throws VizException { - - if (descriptor != null) { - rsc.setDescriptor(descriptor); - } - } - - /* - * (non-Javadoc) - * - * @see - * com.raytheon.viz.core.rsc.capabilities.IProjectableResource#project(org - * .opengis.referencing.crs.CoordinateReferenceSystem) - */ - @Override - public void project(CoordinateReferenceSystem mapData) throws VizException { - for (ResourcePair rp : this.resourceData.getResourceList()) { - AbstractVizResource rsc = rp.getResource(); - rsc.project(mapData); - } - } - - /* - * (non-Javadoc) - * - * @see com.raytheon.viz.core.rsc.IVizResource#dispose() - */ - @Override - public void disposeInternal() { - lastTarget = null; - for (ResourcePair rp : this.resourceData.getResourceList()) { - rp.getResource().dispose(); - } - } - - /* - * (non-Javadoc) - * - * @seecom.raytheon.viz.core.rsc.IVizResource#init(com.raytheon.viz.core. - * IGraphicsTarget) - */ - @Override - public void initInternal(IGraphicsTarget target) throws VizException { - } - - /* - * (non-Javadoc) - * - * @seecom.raytheon.viz.core.rsc.IVizResource#paint(com.raytheon.viz.core. - * IGraphicsTarget, com.raytheon.viz.core.PixelExtent, double, float) - */ - @Override - public void paintInternal(IGraphicsTarget target, PaintProperties paintProps) - throws VizException { - - int displayWidth = (int) (descriptor.getMapWidth() * paintProps - .getZoomLevel()); - - for (ResourcePair rp : this.resourceData.getResourceList()) { - AbstractVizResource resource = rp.getResource(); - ResourceProperties properties = rp.getProperties(); - - if (properties.isDisplayable(displayWidth)) { - PaintProperties newProps = new PaintProperties(paintProps); - - // keep these in sync -/* - resource.getCapabilities().addCapability( - getCapability(ColorableCapability.class)); - resource.getCapabilities().addCapability( - getCapability(OutlineCapability.class)); - - if (resource.hasCapability(ImagingCapability.class)) { - paintProps.setAlpha(resource.getCapability( - ImagingCapability.class).getAlpha()); - } -*/ - resource.paint(target, newProps); - } - } - } - - /* - * (non-Javadoc) - * - * @see - * com.raytheon.uf.viz.core.rsc.AbstractVizResource#setDescriptor(com.raytheon - * .uf.viz.core.drawables.IDescriptor) - */ - @SuppressWarnings("unchecked") - @Override - public void setDescriptor(MapDescriptor descriptor) { - - super.setDescriptor(descriptor); - for (ResourcePair rp : this.resourceData.getResourceList()) { - AbstractVizResource r = (AbstractVizResource) rp - .getResource(); - if (r != null) { - r.setDescriptor(descriptor); - } - } - } - - @Override - public void resourceAttrsModified() { - for (ResourcePair rp : this.resourceData.getResourceList()) { - INatlCntrsResource ncRsc = (INatlCntrsResource) rp.getResource(); - ncRsc.resourceAttrsModified(); - } - } - - @Override - public String toString() { - return this.resourceData.getResourceList().toString(); - } -} + */ +package gov.noaa.nws.ncep.viz.overlays.resources; + +import gov.noaa.nws.ncep.viz.resources.INatlCntrsResource; + +import org.opengis.referencing.crs.CoordinateReferenceSystem; + +import com.raytheon.uf.viz.core.IGraphicsTarget; +import com.raytheon.uf.viz.core.drawables.PaintProperties; +import com.raytheon.uf.viz.core.drawables.ResourcePair; +import com.raytheon.uf.viz.core.exception.VizException; +import com.raytheon.uf.viz.core.map.MapDescriptor; +import com.raytheon.uf.viz.core.rsc.AbstractVizResource; +import com.raytheon.uf.viz.core.rsc.LoadProperties; +import com.raytheon.uf.viz.core.rsc.ResourceList; +import com.raytheon.uf.viz.core.rsc.ResourceProperties; +import com.raytheon.uf.viz.core.rsc.capabilities.ColorableCapability; +import com.raytheon.uf.viz.core.rsc.capabilities.ImagingCapability; +import com.raytheon.uf.viz.core.rsc.capabilities.OutlineCapability; + +/** + * + * Provides a capability to support homogenous (same color, style, etc.) maps as + * a single resource + * + *
+ * 
+ * SOFTWARE HISTORY
+ * 
+ * Date         Ticket#    Engineer    Description
+ * ------------ ---------- ----------- --------------------------
+ * 03/08/09                ghull       Created from MapResourceGroup
+ * 11/19/09                ghull       Incorporate to11d6 changes
+ * 
+ * 
+ * + * @author chammack + * @version 1.0 + */ +public class OverlayResourceGroup extends + AbstractVizResource + implements INatlCntrsResource { + + protected IGraphicsTarget lastTarget; + + protected OverlayResourceGroup(OverlayResourceGroupData data, + LoadProperties loadProperties) { + super(data, loadProperties); + + this.resourceData.getResourceList().addPreAddListener( + new ResourceList.AddListener() { + + @SuppressWarnings("unchecked") + @Override + public void notifyAdd(ResourcePair rp) throws VizException { + addListener((AbstractVizResource) rp + .getResource()); + } + + }); + + } + + protected void addListener(AbstractVizResource rsc) + throws VizException { + + if (descriptor != null) { + rsc.setDescriptor(descriptor); + } + } + + /* + * (non-Javadoc) + * + * @see + * com.raytheon.viz.core.rsc.capabilities.IProjectableResource#project(org + * .opengis.referencing.crs.CoordinateReferenceSystem) + */ + @Override + public void project(CoordinateReferenceSystem mapData) throws VizException { + for (ResourcePair rp : this.resourceData.getResourceList()) { + AbstractVizResource rsc = rp.getResource(); + rsc.project(mapData); + } + } + + /* + * (non-Javadoc) + * + * @see com.raytheon.viz.core.rsc.IVizResource#dispose() + */ + @Override + public void disposeInternal() { + lastTarget = null; + for (ResourcePair rp : this.resourceData.getResourceList()) { + rp.getResource().dispose(); + } + } + + /* + * (non-Javadoc) + * + * @seecom.raytheon.viz.core.rsc.IVizResource#init(com.raytheon.viz.core. + * IGraphicsTarget) + */ + @Override + public void initInternal(IGraphicsTarget target) throws VizException { + } + + /* + * (non-Javadoc) + * + * @seecom.raytheon.viz.core.rsc.IVizResource#paint(com.raytheon.viz.core. + * IGraphicsTarget, com.raytheon.viz.core.PixelExtent, double, float) + */ + @Override + public void paintInternal(IGraphicsTarget target, PaintProperties paintProps) + throws VizException { + + int displayWidth = (int) (descriptor.getMapWidth() * paintProps + .getZoomLevel()); + + for (ResourcePair rp : this.resourceData.getResourceList()) { + AbstractVizResource resource = rp.getResource(); + ResourceProperties properties = rp.getProperties(); + + if (properties.isDisplayable(displayWidth)) { + PaintProperties newProps = new PaintProperties(paintProps); + + // keep these in sync +/* + resource.getCapabilities().addCapability( + getCapability(ColorableCapability.class)); + resource.getCapabilities().addCapability( + getCapability(OutlineCapability.class)); + + if (resource.hasCapability(ImagingCapability.class)) { + paintProps.setAlpha(resource.getCapability( + ImagingCapability.class).getAlpha()); + } +*/ + resource.paint(target, newProps); + } + } + } + + /* + * (non-Javadoc) + * + * @see + * com.raytheon.uf.viz.core.rsc.AbstractVizResource#setDescriptor(com.raytheon + * .uf.viz.core.drawables.IDescriptor) + */ + @SuppressWarnings("unchecked") + @Override + public void setDescriptor(MapDescriptor descriptor) { + + super.setDescriptor(descriptor); + for (ResourcePair rp : this.resourceData.getResourceList()) { + AbstractVizResource r = (AbstractVizResource) rp + .getResource(); + if (r != null) { + r.setDescriptor(descriptor); + } + } + } + + @Override + public void resourceAttrsModified() { + for (ResourcePair rp : this.resourceData.getResourceList()) { + INatlCntrsResource ncRsc = (INatlCntrsResource) rp.getResource(); + ncRsc.resourceAttrsModified(); + } + } + + @Override + public String toString() { + return this.resourceData.getResourceList().toString(); + } +} diff --git a/ncep/gov.noaa.nws.ncep.viz.resourceManager/gov.noaa.nws.ncep.viz.resourceManager.ecl b/ncep/gov.noaa.nws.ncep.viz.resourceManager/gov.noaa.nws.ncep.viz.resourceManager.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/ncep/gov.noaa.nws.ncep.viz.resources/gov.noaa.nws.ncep.viz.resources.ecl b/ncep/gov.noaa.nws.ncep.viz.resources/gov.noaa.nws.ncep.viz.resources.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/ncep/gov.noaa.nws.ncep.viz.rsc.airmet/gov.noaa.nws.ncep.viz.rsc.airmet.ecl b/ncep/gov.noaa.nws.ncep.viz.rsc.airmet/gov.noaa.nws.ncep.viz.rsc.airmet.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/ncep/gov.noaa.nws.ncep.viz.rsc.atcf/gov.noaa.nws.ncep.viz.rsc.atcf.ecl b/ncep/gov.noaa.nws.ncep.viz.rsc.atcf/gov.noaa.nws.ncep.viz.rsc.atcf.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/ncep/gov.noaa.nws.ncep.viz.rsc.convsigmet/gov.noaa.nws.ncep.viz.rsc.convsigmet.ecl b/ncep/gov.noaa.nws.ncep.viz.rsc.convsigmet/gov.noaa.nws.ncep.viz.rsc.convsigmet.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/ncep/gov.noaa.nws.ncep.viz.rsc.ffa/gov.noaa.nws.ncep.viz.rsc.ffa.ecl b/ncep/gov.noaa.nws.ncep.viz.rsc.ffa/gov.noaa.nws.ncep.viz.rsc.ffa.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/ncep/gov.noaa.nws.ncep.viz.rsc.ffg/gov.noaa.nws.ncep.viz.rsc.ffg.ecl b/ncep/gov.noaa.nws.ncep.viz.rsc.ffg/gov.noaa.nws.ncep.viz.rsc.ffg.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/ncep/gov.noaa.nws.ncep.viz.rsc.hrcn/gov.noaa.nws.ncep.viz.rsc.hrcn.ecl b/ncep/gov.noaa.nws.ncep.viz.rsc.hrcn/gov.noaa.nws.ncep.viz.rsc.hrcn.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/ncep/gov.noaa.nws.ncep.viz.rsc.idft/gov.noaa.nws.ncep.viz.rsc.idft.ecl b/ncep/gov.noaa.nws.ncep.viz.rsc.idft/gov.noaa.nws.ncep.viz.rsc.idft.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/ncep/gov.noaa.nws.ncep.viz.rsc.intlsig/gov.noaa.nws.ncep.viz.rsc.intlsig.ecl b/ncep/gov.noaa.nws.ncep.viz.rsc.intlsig/gov.noaa.nws.ncep.viz.rsc.intlsig.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/ncep/gov.noaa.nws.ncep.viz.rsc.lightning/gov.noaa.nws.ncep.viz.rsc.lightning.ecl b/ncep/gov.noaa.nws.ncep.viz.rsc.lightning/gov.noaa.nws.ncep.viz.rsc.lightning.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/ncep/gov.noaa.nws.ncep.viz.rsc.mosaic/gov.noaa.nws.ncep.viz.rsc.mosaic.ecl b/ncep/gov.noaa.nws.ncep.viz.rsc.mosaic/gov.noaa.nws.ncep.viz.rsc.mosaic.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/ncep/gov.noaa.nws.ncep.viz.rsc.mosaic/src/gov/noaa/nws/ncep/viz/rsc/mosaic/rsc/RadarImageResource.java b/ncep/gov.noaa.nws.ncep.viz.rsc.mosaic/src/gov/noaa/nws/ncep/viz/rsc/mosaic/rsc/RadarImageResource.java index 04448e0513..6f444b48a8 100644 --- a/ncep/gov.noaa.nws.ncep.viz.rsc.mosaic/src/gov/noaa/nws/ncep/viz/rsc/mosaic/rsc/RadarImageResource.java +++ b/ncep/gov.noaa.nws.ncep.viz.rsc.mosaic/src/gov/noaa/nws/ncep/viz/rsc/mosaic/rsc/RadarImageResource.java @@ -73,6 +73,7 @@ import com.raytheon.uf.viz.core.rsc.capabilities.ColorableCapability; import com.raytheon.uf.viz.core.rsc.capabilities.ImagingCapability; import com.raytheon.uf.viz.core.rsc.capabilities.OutlineCapability; import com.raytheon.uf.viz.core.rsc.hdf5.ImageTile; +import com.raytheon.uf.viz.core.rsc.hdf5.MeshCalculatorJob; import com.raytheon.uf.viz.core.style.DataMappingPreferences; import com.raytheon.uf.viz.core.style.DataMappingPreferences.DataMappingEntry; import com.raytheon.viz.awipstools.capabilities.RangeRingsOverlayCapability; @@ -321,21 +322,71 @@ public abstract class RadarImageResource extends tiltRecord.tile = new ImageTile(); } - tiltRecord.tile.coverage = buildCoverage(target, tiltRecord); - if (tiltRecord.tile.coverage.getMesh() == null) { - tiltRecord.tile.coverage.setMesh(buildMesh(target, tiltRecord)); + if (tiltRecord.tile.coverage == null) { + tiltRecord.tile.coverage = buildCoverage(target, tiltRecord); + } + + try { + RadarRecord record = populatedRecord; + + // Attempt to create envelope, adapted from AbstractTileSet + double maxExtent = RadarUtil.calculateExtent(record); + GridGeometry2D geom = RadarUtil.constructGridGeometry( + record.getCRS(), maxExtent, + Math.max(record.getNumBins(), record.getNumRadials())); + + MathTransform mt = geom.getGridToCRS(PixelInCell.CELL_CORNER); + + double[] ul = new double[3]; + double[] lr = new double[3]; + double[] in = new double[2]; + in[0] = 0; + in[1] = 0; + mt.transform(in, 0, ul, 0, 1); + in[0] = record.getNumRadials(); + in[1] = record.getNumBins(); + mt.transform(in, 0, lr, 0, 1); + + tiltRecord.tile.envelope = new ReferencedEnvelope(ul[0], lr[0], ul[1], lr[1], + record.getCRS()); + } catch (Exception e) { + statusHandler.handle(Priority.PROBLEM, + "Error constructing extent", e); + } + + tiltRecord.tile.rect = new Rectangle(0, 0, + populatedRecord.getNumBins(), populatedRecord.getNumRadials()); + + + if (tiltRecord.tile.coverage.getMesh() == null) { + IMesh mesh = buildMesh(target, tiltRecord); + + if (mesh != null) { + try { + MeshCalculatorJob.getInstance().requestLoad( + this, + mesh, + tiltRecord.tile, + CRS.findMathTransform(populatedRecord.getCRS(), + DefaultGeographicCRS.WGS84)); + } catch (FactoryException e) { + statusHandler.handle( + Priority.PROBLEM, + "Error finding math transform to lat/lon for radar record", + e); + } + } } - - Rectangle rect = new Rectangle(0, 0, populatedRecord.getNumBins(), - populatedRecord.getNumRadials()); tiltRecord.image = target.initializeRaster(CMDataPreparerManager - .getDataPreparer(BufferUtil.wrapDirect( - toImageData(tiltRecord.params, populatedRecord), - new Rectangle(0, 0, populatedRecord.getNumBins(), - populatedRecord.getNumRadials())), rect, - new int[] { rect.width, rect.height }), - tiltRecord.params); + .getDataPreparer(BufferUtil.wrapDirect( + toImageData(tiltRecord.params, populatedRecord), + new Rectangle(0, 0, populatedRecord.getNumBins(), + populatedRecord.getNumRadials())), + tiltRecord.tile.rect, new int[] { + tiltRecord.tile.rect.width, + tiltRecord.tile.rect.height }), + tiltRecord.params); } diff --git a/ncep/gov.noaa.nws.ncep.viz.rsc.mosaic/src/gov/noaa/nws/ncep/viz/rsc/mosaic/rsc/RadarRadialResource.java b/ncep/gov.noaa.nws.ncep.viz.rsc.mosaic/src/gov/noaa/nws/ncep/viz/rsc/mosaic/rsc/RadarRadialResource.java index bc67a70f60..8b008b2630 100644 --- a/ncep/gov.noaa.nws.ncep.viz.rsc.mosaic/src/gov/noaa/nws/ncep/viz/rsc/mosaic/rsc/RadarRadialResource.java +++ b/ncep/gov.noaa.nws.ncep.viz.rsc.mosaic/src/gov/noaa/nws/ncep/viz/rsc/mosaic/rsc/RadarRadialResource.java @@ -36,6 +36,7 @@ import com.raytheon.uf.viz.core.map.MapDescriptor; import com.raytheon.uf.viz.core.rsc.LoadProperties; import com.raytheon.uf.viz.core.rsc.ResourceType; import com.raytheon.uf.viz.core.rsc.capabilities.ColorMapCapability; +import com.raytheon.uf.viz.core.rsc.hdf5.MeshCalculatorJob; import com.raytheon.viz.awipstools.capabilities.EAVCapability; import com.raytheon.viz.awipstools.common.EstimatedActualVelocity; import com.raytheon.viz.radar.IRadarRecordMetadata; @@ -149,8 +150,17 @@ public class RadarRadialResource extends RadarImageResource { super.project(crs); for (RadarTimeRecord rtr : radarRecords.values()) { if (rtr.tile != null && rtr.tile.coverage.getMesh() != null) { - rtr.tile.coverage.getMesh().reproject( - descriptor.getGridGeometry()); + try { + MeshCalculatorJob.getInstance().requestLoad( + this, + rtr.tile.coverage.getMesh(), + rtr.tile, + CRS.findMathTransform(rtr.radarCacheObject.getMetadata().getCRS(), + DefaultGeographicCRS.WGS84)); + } catch (FactoryException e) { + statusHandler.handle(Priority.PROBLEM, + "Error constructing transform for mesh", e); + } } else { refreshDisplay = true; } diff --git a/ncep/gov.noaa.nws.ncep.viz.rsc.ncgrid/gov.noaa.nws.ncep.viz.rsc.ncgrid.ecl b/ncep/gov.noaa.nws.ncep.viz.rsc.ncgrid/gov.noaa.nws.ncep.viz.rsc.ncgrid.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/ncep/gov.noaa.nws.ncep.viz.rsc.ncradar/config.xml b/ncep/gov.noaa.nws.ncep.viz.rsc.ncradar/config.xml index 596bcfd723..7ee3e17380 100644 --- a/ncep/gov.noaa.nws.ncep.viz.rsc.ncradar/config.xml +++ b/ncep/gov.noaa.nws.ncep.viz.rsc.ncradar/config.xml @@ -1,20 +1,20 @@ diff --git a/ncep/gov.noaa.nws.ncep.viz.rsc.ncradar/gov.noaa.nws.ncep.viz.rsc.ncradar.ecl b/ncep/gov.noaa.nws.ncep.viz.rsc.ncradar/gov.noaa.nws.ncep.viz.rsc.ncradar.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/ncep/gov.noaa.nws.ncep.viz.rsc.ncradar/src/gov/noaa/nws/ncep/viz/rsc/ncradar/rsc/RadarImageResource.java b/ncep/gov.noaa.nws.ncep.viz.rsc.ncradar/src/gov/noaa/nws/ncep/viz/rsc/ncradar/rsc/RadarImageResource.java index 497fb6db5d..319025cbc2 100644 --- a/ncep/gov.noaa.nws.ncep.viz.rsc.ncradar/src/gov/noaa/nws/ncep/viz/rsc/ncradar/rsc/RadarImageResource.java +++ b/ncep/gov.noaa.nws.ncep.viz.rsc.ncradar/src/gov/noaa/nws/ncep/viz/rsc/ncradar/rsc/RadarImageResource.java @@ -78,6 +78,7 @@ import com.raytheon.uf.viz.core.rsc.capabilities.ColorableCapability; import com.raytheon.uf.viz.core.rsc.capabilities.ImagingCapability; import com.raytheon.uf.viz.core.rsc.capabilities.OutlineCapability; import com.raytheon.uf.viz.core.rsc.hdf5.ImageTile; +import com.raytheon.uf.viz.core.rsc.hdf5.MeshCalculatorJob; import com.raytheon.uf.viz.core.style.DataMappingPreferences; import com.raytheon.uf.viz.core.style.DataMappingPreferences.DataMappingEntry; import com.raytheon.viz.awipstools.capabilities.RangeRingsOverlayCapability; @@ -335,16 +336,64 @@ public abstract class RadarImageResource extends ColorMapParameters params = getColorMapParameters(target, populatedRecord); - PixelCoverage coverage = buildCoverage(target, populatedRecord); - if (coverage.getMesh() == null) { - coverage.setMesh(buildMesh(target, populatedRecord)); + ImageTile tile = new ImageTile(); + RadarRecord record = populatedRecord; + try { + // Attempt to create envelope, adapted from AbstractTileSet + double maxExtent = RadarUtil.calculateExtent(record); + GridGeometry2D geom = RadarUtil.constructGridGeometry( + record.getCRS(), maxExtent, + Math.max(record.getNumBins(), record.getNumRadials())); + + MathTransform mt = geom.getGridToCRS(PixelInCell.CELL_CORNER); + + double[] ul = new double[3]; + double[] lr = new double[3]; + double[] in = new double[2]; + in[0] = 0; + in[1] = 0; + mt.transform(in, 0, ul, 0, 1); + in[0] = record.getNumRadials(); + in[1] = record.getNumBins(); + mt.transform(in, 0, lr, 0, 1); + + tile.envelope = new ReferencedEnvelope(ul[0], lr[0], ul[1], lr[1], + record.getCRS()); + } catch (Exception e) { + statusHandler.handle(Priority.PROBLEM, "Error constructing extent", + e); } - IImage image = createImage(target, params, populatedRecord, - new Rectangle(0, 0, populatedRecord.getNumBins(), - populatedRecord.getNumRadials())); + tile.rect = new Rectangle(0, 0, populatedRecord.getNumBins(), + populatedRecord.getNumRadials()); + + if (tile.coverage == null) { + tile.coverage = buildCoverage(target, tile, populatedRecord); + } + + if (tile.coverage.getMesh() == null) { + IMesh mesh = buildMesh(target, populatedRecord); + + if (mesh != null) { + try { + MeshCalculatorJob.getInstance().requestLoad( + this, + mesh, + tile, + CRS.findMathTransform(populatedRecord.getCRS(), + DefaultGeographicCRS.WGS84)); + } catch (FactoryException e) { + statusHandler + .handle(Priority.PROBLEM, + "Error finding math transform to lat/lon for radar record", + e); + } + } + } + + IImage image = createImage(target, params, record, tile.rect); DrawableImage dImage = images.put(populatedRecord.getDataTime(), - new DrawableImage(image, coverage)); + new DrawableImage(image, tile.coverage)); if (dImage != null) { disposeImage(dImage); } @@ -699,7 +748,7 @@ public abstract class RadarImageResource extends return null; } - public PixelCoverage buildCoverage(IGraphicsTarget target, + public PixelCoverage buildCoverage(IGraphicsTarget target, ImageTile tile, VizRadarRecord timeRecord) throws VizException { return new PixelCoverage(new Coordinate(0, 0), 0, 0); } diff --git a/ncep/gov.noaa.nws.ncep.viz.rsc.ncradar/src/gov/noaa/nws/ncep/viz/rsc/ncradar/rsc/image/RadarRasterResource.java b/ncep/gov.noaa.nws.ncep.viz.rsc.ncradar/src/gov/noaa/nws/ncep/viz/rsc/ncradar/rsc/image/RadarRasterResource.java index f9d0f9fb83..f5dd26bd64 100644 --- a/ncep/gov.noaa.nws.ncep.viz.rsc.ncradar/src/gov/noaa/nws/ncep/viz/rsc/ncradar/rsc/image/RadarRasterResource.java +++ b/ncep/gov.noaa.nws.ncep.viz.rsc.ncradar/src/gov/noaa/nws/ncep/viz/rsc/ncradar/rsc/image/RadarRasterResource.java @@ -10,14 +10,12 @@ package gov.noaa.nws.ncep.viz.rsc.ncradar.rsc.image; import java.awt.Rectangle; import java.util.HashMap; -import org.geotools.coverage.grid.GridGeometry2D; import org.geotools.referencing.CRS; import org.geotools.referencing.crs.DefaultGeographicCRS; import org.opengis.referencing.FactoryException; import org.opengis.referencing.crs.CoordinateReferenceSystem; import com.raytheon.uf.common.dataplugin.radar.RadarRecord; -import com.raytheon.uf.common.dataplugin.radar.util.RadarUtil; import com.raytheon.uf.common.dataquery.requests.RequestConstraint; import com.raytheon.uf.common.status.UFStatus.Priority; import com.raytheon.uf.common.time.DataTime; @@ -129,19 +127,22 @@ public class RadarRasterResource extends RadarImageResource { } @Override - public PixelCoverage buildCoverage(IGraphicsTarget target, + public PixelCoverage buildCoverage(IGraphicsTarget target, ImageTile tile, VizRadarRecord timeRecord) throws VizException { if (sharedCoverage == null) { - double maxExtent = RadarUtil.calculateExtent(timeRecord); - GridGeometry2D geom = RadarUtil.constructGridGeometry( - timeRecord.getCRS(), - maxExtent, - Math.max(timeRecord.getNumBins(), - timeRecord.getNumRadials())); + sharedCoverage = super.buildCoverage(target, tile, timeRecord); - sharedCoverage = super.buildCoverage(target, timeRecord); - sharedCoverage.setMesh(target.getExtension(IMapMeshExtension.class) - .constructMesh(geom, descriptor.getGridGeometry())); + IMesh mesh = target.getExtension(IMapMeshExtension.class) + .constructMesh(descriptor); + try { + mesh.calculateMesh(sharedCoverage, tile, CRS.findMathTransform( + timeRecord.getCRS(), DefaultGeographicCRS.WGS84)); + } catch (FactoryException e) { + statusHandler + .handle(Priority.PROBLEM, + "Error finding math transform to lat/lon for radar record", + e); + } } return sharedCoverage; } diff --git a/ncep/gov.noaa.nws.ncep.viz.rsc.ncscat/gov.noaa.nws.ncep.viz.rsc.ncscat.ecl b/ncep/gov.noaa.nws.ncep.viz.rsc.ncscat/gov.noaa.nws.ncep.viz.rsc.ncscat.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/ncep/gov.noaa.nws.ncep.viz.rsc.nonconvsigmet/gov.noaa.nws.ncep.viz.rsc.nonconvsigmet.ecl b/ncep/gov.noaa.nws.ncep.viz.rsc.nonconvsigmet/gov.noaa.nws.ncep.viz.rsc.nonconvsigmet.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/ncep/gov.noaa.nws.ncep.viz.rsc.pgen/gov.noaa.nws.ncep.viz.rsc.pgen.ecl b/ncep/gov.noaa.nws.ncep.viz.rsc.pgen/gov.noaa.nws.ncep.viz.rsc.pgen.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/ncep/gov.noaa.nws.ncep.viz.rsc.plotdata/gov.noaa.nws.ncep.viz.rsc.plotdata.ecl b/ncep/gov.noaa.nws.ncep.viz.rsc.plotdata/gov.noaa.nws.ncep.viz.rsc.plotdata.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/ncep/gov.noaa.nws.ncep.viz.rsc.satellite/gov.noaa.nws.ncep.viz.rsc.satellite.ecl b/ncep/gov.noaa.nws.ncep.viz.rsc.satellite/gov.noaa.nws.ncep.viz.rsc.satellite.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/ncep/gov.noaa.nws.ncep.viz.rsc.satellite/src/gov/noaa/nws/ncep/viz/rsc/satellite/rsc/McidasFileBasedTileSet.java b/ncep/gov.noaa.nws.ncep.viz.rsc.satellite/src/gov/noaa/nws/ncep/viz/rsc/satellite/rsc/McidasFileBasedTileSet.java index 21e4710597..b95f501aae 100644 --- a/ncep/gov.noaa.nws.ncep.viz.rsc.satellite/src/gov/noaa/nws/ncep/viz/rsc/satellite/rsc/McidasFileBasedTileSet.java +++ b/ncep/gov.noaa.nws.ncep.viz.rsc.satellite/src/gov/noaa/nws/ncep/viz/rsc/satellite/rsc/McidasFileBasedTileSet.java @@ -6,7 +6,6 @@ package gov.noaa.nws.ncep.viz.rsc.satellite.rsc; import java.awt.Rectangle; import java.util.Map; import org.geotools.coverage.grid.GridGeometry2D; -import org.geotools.geometry.GeneralEnvelope; import org.geotools.geometry.jts.ReferencedEnvelope; import org.opengis.referencing.datum.PixelInCell; @@ -16,7 +15,6 @@ import org.opengis.referencing.operation.MathTransform; import com.raytheon.uf.common.dataplugin.PluginDataObject; import com.raytheon.uf.common.datastorage.StorageException; -import com.raytheon.uf.common.geospatial.MapUtil; import com.raytheon.uf.common.status.IUFStatusHandler; import com.raytheon.uf.common.status.UFStatus; import com.raytheon.uf.common.status.UFStatus.Priority; @@ -98,11 +96,7 @@ public class McidasFileBasedTileSet extends SatFileBasedTileSet { } try { - ReferencedEnvelope mapEnv = new ReferencedEnvelope( - this.mapDescriptor.getGridGeometry().getEnvelope()); - mapEnv = mapEnv.transform(MapUtil.LATLON_PROJECTION, false); - GeneralEnvelope generalMapEnv = new GeneralEnvelope(mapEnv); - generalMapEnv.normalize(false); + startY = 0; for (int j = 0; j < totalTilesY; j++) { startY = j * (inTileSize); @@ -133,23 +127,18 @@ public class McidasFileBasedTileSet extends SatFileBasedTileSet { mathTransform[level].transform(in, 0, lr, 0, 1); ReferencedEnvelope env = new ReferencedEnvelope(ul[0], - lr[0], ul[1], lr[1], - gridGeometry[0].getCoordinateReferenceSystem()); - GeneralEnvelope generalEnv = new GeneralEnvelope( - env.transform(MapUtil.LATLON_PROJECTION, false)); - // tiles which cross the dateline will almost always be - // created since normalizing changes their range to - // -180,180. If this is causing problems then instead of - // normalizing we should split envelopes that cross the - // dateline. - generalEnv.normalize(false); - // only create the tile if env overlaps the map - if (generalEnv.intersects(generalMapEnv, true)) { + lr[0], ul[1], lr[1], gridGeometry[0] + .getCoordinateReferenceSystem()); tiles[i][j] = new ImageTile(); - tiles[i][j].setGridGeometry(new Rectangle(startX, - startY, effectiveWidth, effectiveHeight), env); - } + + tiles[i][j].rect = new Rectangle(startX, startY, + effectiveWidth, effectiveHeight); + + tiles[i][j].envelope = env; + tiles[i][j].elevation = this.elevation; + tiles[i][j].rect.width = effectiveWidth; + tiles[i][j].rect.height = effectiveHeight; } } @@ -235,7 +224,6 @@ public class McidasFileBasedTileSet extends SatFileBasedTileSet { continue; } - ReferencedEnvelope envelope = tile.getEnvelope(); //if (this.sharedGeometryTileSet != null) { // ImageTile baseTile = sharedGeometryTileSet.tileSet // .getTileSet().get(level)[i][j]; @@ -248,8 +236,9 @@ public class McidasFileBasedTileSet extends SatFileBasedTileSet { double[] ur = new double[2]; try { - envelope = tile.getEnvelope().transform( - mapDescriptor.getCRS(), false); + ReferencedEnvelope envelope = ((ReferencedEnvelope) tile.envelope) + .transform(mapDescriptor.getCRS(), + false); ll[0] = envelope.getMinX(); ll[1] = envelope.getMinY(); @@ -262,25 +251,20 @@ public class McidasFileBasedTileSet extends SatFileBasedTileSet { lr[0] = envelope.getMaxX(); lr[1] = envelope.getMinY(); - mapDescriptor.getGridGeometry() - .getGridToCRS().inverse() - .transform(ul, 0, ul, 0, 1); - mapDescriptor.getGridGeometry() - .getGridToCRS().inverse() - .transform(ll, 0, ll, 0, 1); - mapDescriptor.getGridGeometry() - .getGridToCRS().inverse() - .transform(lr, 0, lr, 0, 1); - mapDescriptor.getGridGeometry() - .getGridToCRS().inverse() - .transform(ur, 0, ur, 0, 1); + mapDescriptor.getGridGeometry().getGridToCRS() + .inverse().transform(ul, 0, ul, 0, 1); + mapDescriptor.getGridGeometry().getGridToCRS() + .inverse().transform(ll, 0, ll, 0, 1); + mapDescriptor.getGridGeometry().getGridToCRS() + .inverse().transform(lr, 0, lr, 0, 1); + mapDescriptor.getGridGeometry().getGridToCRS() + .inverse().transform(ur, 0, ur, 0, 1); } catch (Throwable t) { // Skip tile on error statusHandler.handle(Priority.VERBOSE, - "Error reprojecting tile " + i - + ":" + j + " at level " - + level, t); + "Error reprojecting tile " + i + ":" + + j + " at level " + level, t); ul = ll = lr = ur = null; tileLevel[i][j] = null; } @@ -290,21 +274,19 @@ public class McidasFileBasedTileSet extends SatFileBasedTileSet { tile.coverage = null; } else { - Coordinate ulc = new Coordinate(ul[0], - ul[1], 0); - Coordinate llc = new Coordinate(ll[0], - ll[1], 0); - Coordinate lrc = new Coordinate(lr[0], - lr[1], 0); - Coordinate urc = new Coordinate(ur[0], - ur[1], 0); + Coordinate ulc = new Coordinate(ul[0], ul[1], 0); + Coordinate llc = new Coordinate(ll[0], ll[1], 0); + Coordinate lrc = new Coordinate(lr[0], lr[1], 0); + Coordinate urc = new Coordinate(ur[0], ur[1], 0); tile.coverage = new PixelCoverage(ulc, urc, lrc, llc); } - } else if (envelope != null) { - tile.coverage = mapDescriptor - .worldToPixel(envelope); + } else { + if (tile.envelope != null) { + tile.coverage = mapDescriptor + .worldToPixel(tile.envelope); + } } } diff --git a/ncep/gov.noaa.nws.ncep.viz.rsc.stormtrack/gov.noaa.nws.ncep.viz.rsc.stormtrack.ecl b/ncep/gov.noaa.nws.ncep.viz.rsc.stormtrack/gov.noaa.nws.ncep.viz.rsc.stormtrack.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/ncep/gov.noaa.nws.ncep.viz.rsc.svrl/gov.noaa.nws.ncep.viz.rsc.svrl.ecl b/ncep/gov.noaa.nws.ncep.viz.rsc.svrl/gov.noaa.nws.ncep.viz.rsc.svrl.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/ncep/gov.noaa.nws.ncep.viz.rsc.warn/gov.noaa.nws.ncep.viz.rsc.warn.ecl b/ncep/gov.noaa.nws.ncep.viz.rsc.warn/gov.noaa.nws.ncep.viz.rsc.warn.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/ncep/gov.noaa.nws.ncep.viz.rsc.wavesat/gov.noaa.nws.ncep.viz.rsc.wavesat.ecl b/ncep/gov.noaa.nws.ncep.viz.rsc.wavesat/gov.noaa.nws.ncep.viz.rsc.wavesat.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/ncep/gov.noaa.nws.ncep.viz.rsc.wcn/gov.noaa.nws.ncep.viz.rsc.wcn.ecl b/ncep/gov.noaa.nws.ncep.viz.rsc.wcn/gov.noaa.nws.ncep.viz.rsc.wcn.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/ncep/gov.noaa.nws.ncep.viz.rsc.wcp/gov.noaa.nws.ncep.viz.rsc.wcp.ecl b/ncep/gov.noaa.nws.ncep.viz.rsc.wcp/gov.noaa.nws.ncep.viz.rsc.wcp.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/ncep/gov.noaa.nws.ncep.viz.rsc.wou/gov.noaa.nws.ncep.viz.rsc.wou.ecl b/ncep/gov.noaa.nws.ncep.viz.rsc.wou/gov.noaa.nws.ncep.viz.rsc.wou.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/ncep/gov.noaa.nws.ncep.viz.rsc.wstm/gov.noaa.nws.ncep.viz.rsc.wstm.ecl b/ncep/gov.noaa.nws.ncep.viz.rsc.wstm/gov.noaa.nws.ncep.viz.rsc.wstm.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/ncep/gov.noaa.nws.ncep.viz.rsc.wtch/gov.noaa.nws.ncep.viz.rsc.wtch.ecl b/ncep/gov.noaa.nws.ncep.viz.rsc.wtch/gov.noaa.nws.ncep.viz.rsc.wtch.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/ncep/gov.noaa.nws.ncep.viz.tools/gov.noaa.nws.ncep.viz.tools.ecl b/ncep/gov.noaa.nws.ncep.viz.tools/gov.noaa.nws.ncep.viz.tools.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/ncep/gov.noaa.nws.ncep.viz.ui.display/gov.noaa.nws.ncep.viz.ui.display.ecl b/ncep/gov.noaa.nws.ncep.viz.ui.display/gov.noaa.nws.ncep.viz.ui.display.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/ncep/gov.noaa.nws.ncep.viz.ui.locator/gov.noaa.nws.ncep.viz.ui.locator.ecl b/ncep/gov.noaa.nws.ncep.viz.ui.locator/gov.noaa.nws.ncep.viz.ui.locator.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/ncep/gov.noaa.nws.ncep.viz.ui.perspectives/gov.noaa.nws.ncep.viz.ui.perspectives.ecl b/ncep/gov.noaa.nws.ncep.viz.ui.perspectives/gov.noaa.nws.ncep.viz.ui.perspectives.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/ncep/gov.noaa.nws.ncep.viz.ui.seek/gov.noaa.nws.ncep.viz.ui.seek.ecl b/ncep/gov.noaa.nws.ncep.viz.ui.seek/gov.noaa.nws.ncep.viz.ui.seek.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/pythonPackages/pythonPackages.ecl b/pythonPackages/pythonPackages.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/rpms/awips2.ade/tar.baseline/javadoc/conf/overview.html b/rpms/awips2.ade/tar.baseline/javadoc/conf/overview.html index de63b935c2..a78fd5fbe7 100755 --- a/rpms/awips2.ade/tar.baseline/javadoc/conf/overview.html +++ b/rpms/awips2.ade/tar.baseline/javadoc/conf/overview.html @@ -1,5 +1,5 @@ - + This document contains the API Specification for the AWIPS II System. Documentation -includes both CAVE and EDEX as well as contributed code. +includes both CAVE and EDEX as well as contributed code. diff --git a/rpms/awips2.core/Installer.database-server-configuration/configuration/postgresql.conf b/rpms/awips2.core/Installer.database-server-configuration/configuration/postgresql.conf index 579d03d0d3..5749541485 100644 --- a/rpms/awips2.core/Installer.database-server-configuration/configuration/postgresql.conf +++ b/rpms/awips2.core/Installer.database-server-configuration/configuration/postgresql.conf @@ -1,471 +1,471 @@ -# ----------------------------- -# PostgreSQL configuration file -# ----------------------------- -# -# This file consists of lines of the form: -# -# name = value -# -# (The '=' is optional.) White space may be used. Comments are introduced -# with '#' anywhere on a line. The complete list of option names and -# allowed values can be found in the PostgreSQL documentation. The -# commented-out settings shown in this file represent the default values. -# -# Please note that re-commenting a setting is NOT sufficient to revert it -# to the default value, unless you restart the server. -# -# Any option can also be given as a command line switch to the server, -# e.g., 'postgres -c log_connections=on'. Some options can be changed at -# run-time with the 'SET' SQL command. -# -# This file is read on server startup and when the server receives a -# SIGHUP. If you edit the file on a running system, you have to SIGHUP the -# server for the changes to take effect, or use "pg_ctl reload". Some -# settings, which are marked below, require a server shutdown and restart -# to take effect. -# -# Memory units: kB = kilobytes MB = megabytes GB = gigabytes -# Time units: ms = milliseconds s = seconds min = minutes h = hours d = days - - -#--------------------------------------------------------------------------- -# FILE LOCATIONS -#--------------------------------------------------------------------------- - -# The default values of these variables are driven from the -D command line -# switch or PGDATA environment variable, represented here as ConfigDir. - -#data_directory = 'ConfigDir' # use data in another directory - # (change requires restart) -#hba_file = 'ConfigDir/pg_hba.conf' # host-based authentication file - # (change requires restart) -#ident_file = 'ConfigDir/pg_ident.conf' # ident configuration file - # (change requires restart) - -# If external_pid_file is not explicitly set, no extra PID file is written. -#external_pid_file = '(none)' # write an extra PID file - # (change requires restart) - - -#--------------------------------------------------------------------------- -# CONNECTIONS AND AUTHENTICATION -#--------------------------------------------------------------------------- - -# - Connection Settings - - -listen_addresses = '*' # what IP address(es) to listen on; - # comma-separated list of addresses; - # defaults to 'localhost', '*' = all - # (change requires restart) -#port = 5432 # (change requires restart) -max_connections = 300 # (change requires restart) -# Note: increasing max_connections costs ~400 bytes of shared memory per -# connection slot, plus lock space (see max_locks_per_transaction). You -# might also need to raise shared_buffers to support more connections. -#superuser_reserved_connections = 3 # (change requires restart) -#unix_socket_directory = '' # (change requires restart) -#unix_socket_group = '' # (change requires restart) -#unix_socket_permissions = 0777 # octal - # (change requires restart) -#bonjour_name = '' # defaults to the computer name - # (change requires restart) - -# - Security & Authentication - - -#authentication_timeout = 1min # 1s-600s -#ssl = off # (change requires restart) -#password_encryption = on -#db_user_namespace = off - -# Kerberos -#krb_server_keyfile = '' # (change requires restart) -#krb_srvname = 'postgres' # (change requires restart) -#krb_server_hostname = '' # empty string matches any keytab entry - # (change requires restart) -#krb_caseins_users = off # (change requires restart) - -# - TCP Keepalives - -# see 'man 7 tcp' for details - -#tcp_keepalives_idle = 0 # TCP_KEEPIDLE, in seconds; - # 0 selects the system default -#tcp_keepalives_interval = 0 # TCP_KEEPINTVL, in seconds; - # 0 selects the system default -#tcp_keepalives_count = 0 # TCP_KEEPCNT; - # 0 selects the system default - - -#--------------------------------------------------------------------------- -# RESOURCE USAGE (except WAL) -#--------------------------------------------------------------------------- - -# - Memory - - -shared_buffers = 2048MB # min 128kB or max_connections*16kB - # (change requires restart) -temp_buffers = 16MB # min 800kB -#max_prepared_transactions = 5 # can be 0 or more - # (change requires restart) -# Note: increasing max_prepared_transactions costs ~600 bytes of shared memory -# per transaction slot, plus lock space (see max_locks_per_transaction). -work_mem = 64MB # min 64kB -maintenance_work_mem = 32MB # min 1MB -#max_stack_depth = 2MB # min 100kB - -# - Free Space Map - - -max_fsm_pages = 153600 # min max_fsm_relations*16, 6 bytes each - # (change requires restart) -#max_fsm_relations = 1000 # min 100, ~70 bytes each - # (change requires restart) - -# - Kernel Resource Usage - - -#max_files_per_process = 1000 # min 25 - # (change requires restart) -#shared_preload_libraries = '' # (change requires restart) - -# - Cost-Based Vacuum Delay - - -#vacuum_cost_delay = 0 # 0-1000 milliseconds -#vacuum_cost_page_hit = 1 # 0-10000 credits -#vacuum_cost_page_miss = 10 # 0-10000 credits -#vacuum_cost_page_dirty = 20 # 0-10000 credits -#vacuum_cost_limit = 200 # 0-10000 credits - -# - Background writer - - -#bgwriter_delay = 200ms # 10-10000ms between rounds -#bgwriter_lru_percent = 1.0 # 0-100% of LRU buffers scanned/round -#bgwriter_lru_maxpages = 5 # 0-1000 buffers max written/round -#bgwriter_all_percent = 0.333 # 0-100% of all buffers scanned/round -#bgwriter_all_maxpages = 5 # 0-1000 buffers max written/round - - -#--------------------------------------------------------------------------- -# WRITE AHEAD LOG -#--------------------------------------------------------------------------- - -# - Settings - - -fsync = off # turns forced synchronization on or off -#wal_sync_method = fsync # the default is the first option - # supported by the operating system: - # open_datasync - # fdatasync - # fsync - # fsync_writethrough - # open_sync -#full_page_writes = on # recover from partial page writes -#wal_buffers = 64kB # min 32kB - # (change requires restart) -commit_delay = 50000 # range 0-100000, in microseconds -commit_siblings = 5 # range 1-1000 - -# - Checkpoints - - -checkpoint_segments = 10 # in logfile segments, min 1, 16MB each -#checkpoint_timeout = 5min # range 30s-1h -#checkpoint_warning = 30s # 0 is off - -# - Archiving - - -#archive_command = '' # command to use to archive a logfile segment -#archive_timeout = 0 # force a logfile segment switch after this - # many seconds; 0 is off - - -#--------------------------------------------------------------------------- -# QUERY TUNING -#--------------------------------------------------------------------------- - -# - Planner Method Configuration - - -#enable_bitmapscan = on -#enable_hashagg = on -#enable_hashjoin = on -#enable_indexscan = on -#enable_mergejoin = on -#enable_nestloop = on -#enable_seqscan = on -#enable_sort = on -#enable_tidscan = on - -# - Planner Cost Constants - - -#seq_page_cost = 1.0 # measured on an arbitrary scale -#random_page_cost = 4.0 # same scale as above -#cpu_tuple_cost = 0.01 # same scale as above -#cpu_index_tuple_cost = 0.005 # same scale as above -#cpu_operator_cost = 0.0025 # same scale as above -effective_cache_size = 2048MB - -# - Genetic Query Optimizer - - -#geqo = on -#geqo_threshold = 12 -#geqo_effort = 5 # range 1-10 -#geqo_pool_size = 0 # selects default based on effort -#geqo_generations = 0 # selects default based on effort -#geqo_selection_bias = 2.0 # range 1.5-2.0 - -# - Other Planner Options - - -#default_statistics_target = 10 # range 1-1000 -#constraint_exclusion = off -#from_collapse_limit = 8 -#join_collapse_limit = 8 # 1 disables collapsing of explicit - # JOINs - - -#--------------------------------------------------------------------------- -# ERROR REPORTING AND LOGGING -#--------------------------------------------------------------------------- - -# - Where to Log - - -#log_destination = 'stderr' # Valid values are combinations of - # stderr, syslog and eventlog, - # depending on platform. - -# This is used when logging to stderr: -logging_collector = on # Enable capturing of stderr into log - # files - # (change requires restart) - -# These are only used if redirect_stderr is on: -log_directory = 'pg_log' # Directory where log files are written - # Can be absolute or relative to PGDATA -#log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log' # Log file name pattern. - # Can include strftime() escapes -log_truncate_on_rotation = on # If on, any existing log file of the same - # name as the new log file will be - # truncated rather than appended to. But - # such truncation only occurs on - # time-driven rotation, not on restarts - # or size-driven rotation. Default is - # off, meaning append to existing files - # in all cases. -log_rotation_age = 1d # Automatic rotation of logfiles will - # happen after that time. 0 to - # disable. -log_rotation_size = 0 # Automatic rotation of logfiles will - # happen after that much log - # output. 0 to disable. - -# These are relevant when logging to syslog: -#syslog_facility = 'LOCAL0' -#syslog_ident = 'postgres' - - -# - When to Log - - -#client_min_messages = notice # Values, in order of decreasing detail: - # debug5 - # debug4 - # debug3 - # debug2 - # debug1 - # log - # notice - # warning - # error - -#log_min_messages = notice # Values, in order of decreasing detail: - # debug5 - # debug4 - # debug3 - # debug2 - # debug1 - # info - # notice - # warning - # error - # log - # fatal - # panic - -#log_error_verbosity = default # terse, default, or verbose messages - -log_min_error_statement = log # Values in order of increasing severity: - # debug5 - # debug4 - # debug3 - # debug2 - # debug1 - # info - # notice - # warning - # error - # log - # fatal - # panic (effectively off) - -#log_min_duration_statement = -1 # -1 is disabled, 0 logs all statements - # and their durations. - -#silent_mode = off # DO NOT USE without syslog or - # redirect_stderr - # (change requires restart) - -# - What to Log - - -#debug_print_parse = off -#debug_print_rewritten = off -#debug_print_plan = off -#debug_pretty_print = off -#log_connections = off -#log_disconnections = off -#log_duration = off -log_line_prefix='%t %x %d : %h : ' - # Special values: - # %u = user name - # %d = database name - # %r = remote host and port - # %h = remote host - # %p = PID - # %t = timestamp (no milliseconds) - # %m = timestamp with milliseconds - # %i = command tag - # %c = session id - # %l = session line number - # %s = session start timestamp - # %x = transaction id - # %q = stop here in non-session - # processes - # %% = '%' - # e.g. '<%u%%%d> ' -#log_statement = 'none' # none, ddl, mod, all -#log_hostname = off - - -#--------------------------------------------------------------------------- -# RUNTIME STATISTICS -#--------------------------------------------------------------------------- - -# - Query/Index Statistics Collector - - -#stats_command_string = on -#update_process_title = on - -#stats_block_level = off -track_counts = on -#stats_reset_on_server_start = off # (change requires restart) - - -# - Statistics Monitoring - - -#log_parser_stats = off -#log_planner_stats = off -#log_executor_stats = off -#log_statement_stats = off - - -#--------------------------------------------------------------------------- -# AUTOVACUUM PARAMETERS -#--------------------------------------------------------------------------- - -autovacuum = on # enable autovacuum subprocess? - # 'on' requires stats_start_collector - # and stats_row_level to also be on -#autovacuum_naptime = 1min # time between autovacuum runs -#autovacuum_vacuum_threshold = 500 # min # of tuple updates before - # vacuum -#autovacuum_analyze_threshold = 250 # min # of tuple updates before - # analyze -#autovacuum_vacuum_scale_factor = 0.2 # fraction of rel size before - # vacuum -#autovacuum_analyze_scale_factor = 0.1 # fraction of rel size before - # analyze -#autovacuum_freeze_max_age = 200000000 # maximum XID age before forced vacuum - # (change requires restart) -#autovacuum_vacuum_cost_delay = -1 # default vacuum cost delay for - # autovacuum, -1 means use - # vacuum_cost_delay -#autovacuum_vacuum_cost_limit = -1 # default vacuum cost limit for - # autovacuum, -1 means use - # vacuum_cost_limit - - -#--------------------------------------------------------------------------- -# CLIENT CONNECTION DEFAULTS -#--------------------------------------------------------------------------- - -# - Statement Behavior - - -#search_path = '"$user",public' # schema names -#default_tablespace = '' # a tablespace name, '' uses - # the default -#check_function_bodies = on -#default_transaction_isolation = 'read committed' -#default_transaction_read_only = off -#statement_timeout = 0 # 0 is disabled -#vacuum_freeze_min_age = 100000000 - -# - Locale and Formatting - - -datestyle = 'iso, mdy' -timezone = GMT # actually, defaults to TZ - # environment setting -#timezone_abbreviations = 'Default' # select the set of available timezone - # abbreviations. Currently, there are - # Default - # Australia - # India - # However you can also create your own - # file in share/timezonesets/. -#extra_float_digits = 0 # min -15, max 2 -#client_encoding = 'en_US.UTF-8' # actually, defaults to database - # encoding - -# These settings are initialized by initdb -- they might be changed -lc_messages = 'en_US.UTF-8' # locale for system error message - # strings -lc_monetary = 'en_US.UTF-8' # locale for monetary formatting -lc_numeric = 'en_US.UTF-8' # locale for number formatting -lc_time = 'en_US.UTF-8' # locale for time formatting - -# - Other Defaults - - -#explain_pretty_print = on -#dynamic_library_path = '$libdir' -#local_preload_libraries = '' - - -#--------------------------------------------------------------------------- -# LOCK MANAGEMENT -#--------------------------------------------------------------------------- - -#deadlock_timeout = 1s -#max_locks_per_transaction = 64 # min 10 - # (change requires restart) -# Note: each lock table slot uses ~270 bytes of shared memory, and there are -# max_locks_per_transaction * (max_connections + max_prepared_transactions) -# lock table slots. - - -#--------------------------------------------------------------------------- -# VERSION/PLATFORM COMPATIBILITY -#--------------------------------------------------------------------------- - -# - Previous Postgres Versions - - -#add_missing_from = off -#array_nulls = on -#backslash_quote = safe_encoding # on, off, or safe_encoding -#default_with_oids = off -#escape_string_warning = on -#standard_conforming_strings = off -#regex_flavor = advanced # advanced, extended, or basic -#sql_inheritance = on - -# - Other Platforms & Clients - - -#transform_null_equals = off - - -#--------------------------------------------------------------------------- -# CUSTOMIZED OPTIONS -#--------------------------------------------------------------------------- - -#custom_variable_classes = '' # list of custom variable class names +# ----------------------------- +# PostgreSQL configuration file +# ----------------------------- +# +# This file consists of lines of the form: +# +# name = value +# +# (The '=' is optional.) White space may be used. Comments are introduced +# with '#' anywhere on a line. The complete list of option names and +# allowed values can be found in the PostgreSQL documentation. The +# commented-out settings shown in this file represent the default values. +# +# Please note that re-commenting a setting is NOT sufficient to revert it +# to the default value, unless you restart the server. +# +# Any option can also be given as a command line switch to the server, +# e.g., 'postgres -c log_connections=on'. Some options can be changed at +# run-time with the 'SET' SQL command. +# +# This file is read on server startup and when the server receives a +# SIGHUP. If you edit the file on a running system, you have to SIGHUP the +# server for the changes to take effect, or use "pg_ctl reload". Some +# settings, which are marked below, require a server shutdown and restart +# to take effect. +# +# Memory units: kB = kilobytes MB = megabytes GB = gigabytes +# Time units: ms = milliseconds s = seconds min = minutes h = hours d = days + + +#--------------------------------------------------------------------------- +# FILE LOCATIONS +#--------------------------------------------------------------------------- + +# The default values of these variables are driven from the -D command line +# switch or PGDATA environment variable, represented here as ConfigDir. + +#data_directory = 'ConfigDir' # use data in another directory + # (change requires restart) +#hba_file = 'ConfigDir/pg_hba.conf' # host-based authentication file + # (change requires restart) +#ident_file = 'ConfigDir/pg_ident.conf' # ident configuration file + # (change requires restart) + +# If external_pid_file is not explicitly set, no extra PID file is written. +#external_pid_file = '(none)' # write an extra PID file + # (change requires restart) + + +#--------------------------------------------------------------------------- +# CONNECTIONS AND AUTHENTICATION +#--------------------------------------------------------------------------- + +# - Connection Settings - + +listen_addresses = '*' # what IP address(es) to listen on; + # comma-separated list of addresses; + # defaults to 'localhost', '*' = all + # (change requires restart) +#port = 5432 # (change requires restart) +max_connections = 300 # (change requires restart) +# Note: increasing max_connections costs ~400 bytes of shared memory per +# connection slot, plus lock space (see max_locks_per_transaction). You +# might also need to raise shared_buffers to support more connections. +#superuser_reserved_connections = 3 # (change requires restart) +#unix_socket_directory = '' # (change requires restart) +#unix_socket_group = '' # (change requires restart) +#unix_socket_permissions = 0777 # octal + # (change requires restart) +#bonjour_name = '' # defaults to the computer name + # (change requires restart) + +# - Security & Authentication - + +#authentication_timeout = 1min # 1s-600s +#ssl = off # (change requires restart) +#password_encryption = on +#db_user_namespace = off + +# Kerberos +#krb_server_keyfile = '' # (change requires restart) +#krb_srvname = 'postgres' # (change requires restart) +#krb_server_hostname = '' # empty string matches any keytab entry + # (change requires restart) +#krb_caseins_users = off # (change requires restart) + +# - TCP Keepalives - +# see 'man 7 tcp' for details + +#tcp_keepalives_idle = 0 # TCP_KEEPIDLE, in seconds; + # 0 selects the system default +#tcp_keepalives_interval = 0 # TCP_KEEPINTVL, in seconds; + # 0 selects the system default +#tcp_keepalives_count = 0 # TCP_KEEPCNT; + # 0 selects the system default + + +#--------------------------------------------------------------------------- +# RESOURCE USAGE (except WAL) +#--------------------------------------------------------------------------- + +# - Memory - + +shared_buffers = 2048MB # min 128kB or max_connections*16kB + # (change requires restart) +temp_buffers = 16MB # min 800kB +#max_prepared_transactions = 5 # can be 0 or more + # (change requires restart) +# Note: increasing max_prepared_transactions costs ~600 bytes of shared memory +# per transaction slot, plus lock space (see max_locks_per_transaction). +work_mem = 64MB # min 64kB +maintenance_work_mem = 32MB # min 1MB +#max_stack_depth = 2MB # min 100kB + +# - Free Space Map - + +max_fsm_pages = 3500000 # min max_fsm_relations*16, 6 bytes each + # (change requires restart) +max_fsm_relations = 1500 # min 100, ~70 bytes each + # (change requires restart) + +# - Kernel Resource Usage - + +#max_files_per_process = 1000 # min 25 + # (change requires restart) +#shared_preload_libraries = '' # (change requires restart) + +# - Cost-Based Vacuum Delay - + +#vacuum_cost_delay = 0 # 0-1000 milliseconds +#vacuum_cost_page_hit = 1 # 0-10000 credits +#vacuum_cost_page_miss = 10 # 0-10000 credits +#vacuum_cost_page_dirty = 20 # 0-10000 credits +#vacuum_cost_limit = 200 # 0-10000 credits + +# - Background writer - + +#bgwriter_delay = 200ms # 10-10000ms between rounds +#bgwriter_lru_percent = 1.0 # 0-100% of LRU buffers scanned/round +#bgwriter_lru_maxpages = 5 # 0-1000 buffers max written/round +#bgwriter_all_percent = 0.333 # 0-100% of all buffers scanned/round +#bgwriter_all_maxpages = 5 # 0-1000 buffers max written/round + + +#--------------------------------------------------------------------------- +# WRITE AHEAD LOG +#--------------------------------------------------------------------------- + +# - Settings - + +fsync = off # turns forced synchronization on or off +#wal_sync_method = fsync # the default is the first option + # supported by the operating system: + # open_datasync + # fdatasync + # fsync + # fsync_writethrough + # open_sync +#full_page_writes = on # recover from partial page writes +#wal_buffers = 64kB # min 32kB + # (change requires restart) +commit_delay = 50000 # range 0-100000, in microseconds +commit_siblings = 5 # range 1-1000 + +# - Checkpoints - + +checkpoint_segments = 10 # in logfile segments, min 1, 16MB each +#checkpoint_timeout = 5min # range 30s-1h +#checkpoint_warning = 30s # 0 is off + +# - Archiving - + +#archive_command = '' # command to use to archive a logfile segment +#archive_timeout = 0 # force a logfile segment switch after this + # many seconds; 0 is off + + +#--------------------------------------------------------------------------- +# QUERY TUNING +#--------------------------------------------------------------------------- + +# - Planner Method Configuration - + +#enable_bitmapscan = on +#enable_hashagg = on +#enable_hashjoin = on +#enable_indexscan = on +#enable_mergejoin = on +#enable_nestloop = on +#enable_seqscan = on +#enable_sort = on +#enable_tidscan = on + +# - Planner Cost Constants - + +#seq_page_cost = 1.0 # measured on an arbitrary scale +#random_page_cost = 4.0 # same scale as above +#cpu_tuple_cost = 0.01 # same scale as above +#cpu_index_tuple_cost = 0.005 # same scale as above +#cpu_operator_cost = 0.0025 # same scale as above +effective_cache_size = 2048MB + +# - Genetic Query Optimizer - + +#geqo = on +#geqo_threshold = 12 +#geqo_effort = 5 # range 1-10 +#geqo_pool_size = 0 # selects default based on effort +#geqo_generations = 0 # selects default based on effort +#geqo_selection_bias = 2.0 # range 1.5-2.0 + +# - Other Planner Options - + +#default_statistics_target = 10 # range 1-1000 +#constraint_exclusion = off +#from_collapse_limit = 8 +#join_collapse_limit = 8 # 1 disables collapsing of explicit + # JOINs + + +#--------------------------------------------------------------------------- +# ERROR REPORTING AND LOGGING +#--------------------------------------------------------------------------- + +# - Where to Log - + +#log_destination = 'stderr' # Valid values are combinations of + # stderr, syslog and eventlog, + # depending on platform. + +# This is used when logging to stderr: +logging_collector = on # Enable capturing of stderr into log + # files + # (change requires restart) + +# These are only used if redirect_stderr is on: +log_directory = 'pg_log' # Directory where log files are written + # Can be absolute or relative to PGDATA +#log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log' # Log file name pattern. + # Can include strftime() escapes +log_truncate_on_rotation = on # If on, any existing log file of the same + # name as the new log file will be + # truncated rather than appended to. But + # such truncation only occurs on + # time-driven rotation, not on restarts + # or size-driven rotation. Default is + # off, meaning append to existing files + # in all cases. +log_rotation_age = 1d # Automatic rotation of logfiles will + # happen after that time. 0 to + # disable. +log_rotation_size = 0 # Automatic rotation of logfiles will + # happen after that much log + # output. 0 to disable. + +# These are relevant when logging to syslog: +#syslog_facility = 'LOCAL0' +#syslog_ident = 'postgres' + + +# - When to Log - + +#client_min_messages = notice # Values, in order of decreasing detail: + # debug5 + # debug4 + # debug3 + # debug2 + # debug1 + # log + # notice + # warning + # error + +#log_min_messages = notice # Values, in order of decreasing detail: + # debug5 + # debug4 + # debug3 + # debug2 + # debug1 + # info + # notice + # warning + # error + # log + # fatal + # panic + +#log_error_verbosity = default # terse, default, or verbose messages + +log_min_error_statement = log # Values in order of increasing severity: + # debug5 + # debug4 + # debug3 + # debug2 + # debug1 + # info + # notice + # warning + # error + # log + # fatal + # panic (effectively off) + +#log_min_duration_statement = -1 # -1 is disabled, 0 logs all statements + # and their durations. + +#silent_mode = off # DO NOT USE without syslog or + # redirect_stderr + # (change requires restart) + +# - What to Log - + +#debug_print_parse = off +#debug_print_rewritten = off +#debug_print_plan = off +#debug_pretty_print = off +#log_connections = off +#log_disconnections = off +#log_duration = off +log_line_prefix='%t %x %d : %h : ' + # Special values: + # %u = user name + # %d = database name + # %r = remote host and port + # %h = remote host + # %p = PID + # %t = timestamp (no milliseconds) + # %m = timestamp with milliseconds + # %i = command tag + # %c = session id + # %l = session line number + # %s = session start timestamp + # %x = transaction id + # %q = stop here in non-session + # processes + # %% = '%' + # e.g. '<%u%%%d> ' +#log_statement = 'none' # none, ddl, mod, all +#log_hostname = off + + +#--------------------------------------------------------------------------- +# RUNTIME STATISTICS +#--------------------------------------------------------------------------- + +# - Query/Index Statistics Collector - + +#stats_command_string = on +#update_process_title = on + +#stats_block_level = off +track_counts = on +#stats_reset_on_server_start = off # (change requires restart) + + +# - Statistics Monitoring - + +#log_parser_stats = off +#log_planner_stats = off +#log_executor_stats = off +#log_statement_stats = off + + +#--------------------------------------------------------------------------- +# AUTOVACUUM PARAMETERS +#--------------------------------------------------------------------------- + +autovacuum = on # enable autovacuum subprocess? + # 'on' requires stats_start_collector + # and stats_row_level to also be on +#autovacuum_naptime = 1min # time between autovacuum runs +#autovacuum_vacuum_threshold = 500 # min # of tuple updates before + # vacuum +#autovacuum_analyze_threshold = 250 # min # of tuple updates before + # analyze +#autovacuum_vacuum_scale_factor = 0.2 # fraction of rel size before + # vacuum +#autovacuum_analyze_scale_factor = 0.1 # fraction of rel size before + # analyze +#autovacuum_freeze_max_age = 200000000 # maximum XID age before forced vacuum + # (change requires restart) +#autovacuum_vacuum_cost_delay = -1 # default vacuum cost delay for + # autovacuum, -1 means use + # vacuum_cost_delay +#autovacuum_vacuum_cost_limit = -1 # default vacuum cost limit for + # autovacuum, -1 means use + # vacuum_cost_limit + + +#--------------------------------------------------------------------------- +# CLIENT CONNECTION DEFAULTS +#--------------------------------------------------------------------------- + +# - Statement Behavior - + +#search_path = '"$user",public' # schema names +#default_tablespace = '' # a tablespace name, '' uses + # the default +#check_function_bodies = on +#default_transaction_isolation = 'read committed' +#default_transaction_read_only = off +#statement_timeout = 0 # 0 is disabled +#vacuum_freeze_min_age = 100000000 + +# - Locale and Formatting - + +datestyle = 'iso, mdy' +timezone = GMT # actually, defaults to TZ + # environment setting +#timezone_abbreviations = 'Default' # select the set of available timezone + # abbreviations. Currently, there are + # Default + # Australia + # India + # However you can also create your own + # file in share/timezonesets/. +#extra_float_digits = 0 # min -15, max 2 +#client_encoding = 'en_US.UTF-8' # actually, defaults to database + # encoding + +# These settings are initialized by initdb -- they might be changed +lc_messages = 'en_US.UTF-8' # locale for system error message + # strings +lc_monetary = 'en_US.UTF-8' # locale for monetary formatting +lc_numeric = 'en_US.UTF-8' # locale for number formatting +lc_time = 'en_US.UTF-8' # locale for time formatting + +# - Other Defaults - + +#explain_pretty_print = on +#dynamic_library_path = '$libdir' +#local_preload_libraries = '' + + +#--------------------------------------------------------------------------- +# LOCK MANAGEMENT +#--------------------------------------------------------------------------- + +#deadlock_timeout = 1s +#max_locks_per_transaction = 64 # min 10 + # (change requires restart) +# Note: each lock table slot uses ~270 bytes of shared memory, and there are +# max_locks_per_transaction * (max_connections + max_prepared_transactions) +# lock table slots. + + +#--------------------------------------------------------------------------- +# VERSION/PLATFORM COMPATIBILITY +#--------------------------------------------------------------------------- + +# - Previous Postgres Versions - + +#add_missing_from = off +#array_nulls = on +#backslash_quote = safe_encoding # on, off, or safe_encoding +#default_with_oids = off +#escape_string_warning = on +#standard_conforming_strings = off +#regex_flavor = advanced # advanced, extended, or basic +#sql_inheritance = on + +# - Other Platforms & Clients - + +#transform_null_equals = off + + +#--------------------------------------------------------------------------- +# CUSTOMIZED OPTIONS +#--------------------------------------------------------------------------- + +#custom_variable_classes = '' # list of custom variable class names diff --git a/rpms/awips2.core/Installer.database-standalone-configuration/configuration/postgresql.conf b/rpms/awips2.core/Installer.database-standalone-configuration/configuration/postgresql.conf index 42b6429cdc..c32335a4eb 100644 --- a/rpms/awips2.core/Installer.database-standalone-configuration/configuration/postgresql.conf +++ b/rpms/awips2.core/Installer.database-standalone-configuration/configuration/postgresql.conf @@ -1,471 +1,471 @@ -# ----------------------------- -# PostgreSQL configuration file -# ----------------------------- -# -# This file consists of lines of the form: -# -# name = value -# -# (The '=' is optional.) White space may be used. Comments are introduced -# with '#' anywhere on a line. The complete list of option names and -# allowed values can be found in the PostgreSQL documentation. The -# commented-out settings shown in this file represent the default values. -# -# Please note that re-commenting a setting is NOT sufficient to revert it -# to the default value, unless you restart the server. -# -# Any option can also be given as a command line switch to the server, -# e.g., 'postgres -c log_connections=on'. Some options can be changed at -# run-time with the 'SET' SQL command. -# -# This file is read on server startup and when the server receives a -# SIGHUP. If you edit the file on a running system, you have to SIGHUP the -# server for the changes to take effect, or use "pg_ctl reload". Some -# settings, which are marked below, require a server shutdown and restart -# to take effect. -# -# Memory units: kB = kilobytes MB = megabytes GB = gigabytes -# Time units: ms = milliseconds s = seconds min = minutes h = hours d = days - - -#--------------------------------------------------------------------------- -# FILE LOCATIONS -#--------------------------------------------------------------------------- - -# The default values of these variables are driven from the -D command line -# switch or PGDATA environment variable, represented here as ConfigDir. - -#data_directory = 'ConfigDir' # use data in another directory - # (change requires restart) -#hba_file = 'ConfigDir/pg_hba.conf' # host-based authentication file - # (change requires restart) -#ident_file = 'ConfigDir/pg_ident.conf' # ident configuration file - # (change requires restart) - -# If external_pid_file is not explicitly set, no extra PID file is written. -#external_pid_file = '(none)' # write an extra PID file - # (change requires restart) - - -#--------------------------------------------------------------------------- -# CONNECTIONS AND AUTHENTICATION -#--------------------------------------------------------------------------- - -# - Connection Settings - - -listen_addresses = '*' # what IP address(es) to listen on; - # comma-separated list of addresses; - # defaults to 'localhost', '*' = all - # (change requires restart) -#port = 5432 # (change requires restart) -max_connections = 300 # (change requires restart) -# Note: increasing max_connections costs ~400 bytes of shared memory per -# connection slot, plus lock space (see max_locks_per_transaction). You -# might also need to raise shared_buffers to support more connections. -#superuser_reserved_connections = 3 # (change requires restart) -#unix_socket_directory = '' # (change requires restart) -#unix_socket_group = '' # (change requires restart) -#unix_socket_permissions = 0777 # octal - # (change requires restart) -#bonjour_name = '' # defaults to the computer name - # (change requires restart) - -# - Security & Authentication - - -#authentication_timeout = 1min # 1s-600s -#ssl = off # (change requires restart) -#password_encryption = on -#db_user_namespace = off - -# Kerberos -#krb_server_keyfile = '' # (change requires restart) -#krb_srvname = 'postgres' # (change requires restart) -#krb_server_hostname = '' # empty string matches any keytab entry - # (change requires restart) -#krb_caseins_users = off # (change requires restart) - -# - TCP Keepalives - -# see 'man 7 tcp' for details - -#tcp_keepalives_idle = 0 # TCP_KEEPIDLE, in seconds; - # 0 selects the system default -#tcp_keepalives_interval = 0 # TCP_KEEPINTVL, in seconds; - # 0 selects the system default -#tcp_keepalives_count = 0 # TCP_KEEPCNT; - # 0 selects the system default - - -#--------------------------------------------------------------------------- -# RESOURCE USAGE (except WAL) -#--------------------------------------------------------------------------- - -# - Memory - - -shared_buffers = 128MB # min 128kB or max_connections*16kB - # (change requires restart) -temp_buffers = 16MB # min 800kB -#max_prepared_transactions = 5 # can be 0 or more - # (change requires restart) -# Note: increasing max_prepared_transactions costs ~600 bytes of shared memory -# per transaction slot, plus lock space (see max_locks_per_transaction). -work_mem = 8MB # min 64kB -maintenance_work_mem = 32MB # min 1MB -#max_stack_depth = 2MB # min 100kB - -# - Free Space Map - - -max_fsm_pages = 153600 # min max_fsm_relations*16, 6 bytes each - # (change requires restart) -#max_fsm_relations = 1000 # min 100, ~70 bytes each - # (change requires restart) - -# - Kernel Resource Usage - - -#max_files_per_process = 1000 # min 25 - # (change requires restart) -#shared_preload_libraries = '' # (change requires restart) - -# - Cost-Based Vacuum Delay - - -#vacuum_cost_delay = 0 # 0-1000 milliseconds -#vacuum_cost_page_hit = 1 # 0-10000 credits -#vacuum_cost_page_miss = 10 # 0-10000 credits -#vacuum_cost_page_dirty = 20 # 0-10000 credits -#vacuum_cost_limit = 200 # 0-10000 credits - -# - Background writer - - -#bgwriter_delay = 200ms # 10-10000ms between rounds -#bgwriter_lru_percent = 1.0 # 0-100% of LRU buffers scanned/round -#bgwriter_lru_maxpages = 5 # 0-1000 buffers max written/round -#bgwriter_all_percent = 0.333 # 0-100% of all buffers scanned/round -#bgwriter_all_maxpages = 5 # 0-1000 buffers max written/round - - -#--------------------------------------------------------------------------- -# WRITE AHEAD LOG -#--------------------------------------------------------------------------- - -# - Settings - - -fsync = off # turns forced synchronization on or off -#wal_sync_method = fsync # the default is the first option - # supported by the operating system: - # open_datasync - # fdatasync - # fsync - # fsync_writethrough - # open_sync -#full_page_writes = on # recover from partial page writes -#wal_buffers = 64kB # min 32kB - # (change requires restart) -commit_delay = 50000 # range 0-100000, in microseconds -commit_siblings = 5 # range 1-1000 - -# - Checkpoints - - -checkpoint_segments = 10 # in logfile segments, min 1, 16MB each -#checkpoint_timeout = 5min # range 30s-1h -#checkpoint_warning = 30s # 0 is off - -# - Archiving - - -#archive_command = '' # command to use to archive a logfile segment -#archive_timeout = 0 # force a logfile segment switch after this - # many seconds; 0 is off - - -#--------------------------------------------------------------------------- -# QUERY TUNING -#--------------------------------------------------------------------------- - -# - Planner Method Configuration - - -#enable_bitmapscan = on -#enable_hashagg = on -#enable_hashjoin = on -#enable_indexscan = on -#enable_mergejoin = on -#enable_nestloop = on -#enable_seqscan = on -#enable_sort = on -#enable_tidscan = on - -# - Planner Cost Constants - - -#seq_page_cost = 1.0 # measured on an arbitrary scale -#random_page_cost = 4.0 # same scale as above -#cpu_tuple_cost = 0.01 # same scale as above -#cpu_index_tuple_cost = 0.005 # same scale as above -#cpu_operator_cost = 0.0025 # same scale as above -effective_cache_size = 512MB - -# - Genetic Query Optimizer - - -#geqo = on -#geqo_threshold = 12 -#geqo_effort = 5 # range 1-10 -#geqo_pool_size = 0 # selects default based on effort -#geqo_generations = 0 # selects default based on effort -#geqo_selection_bias = 2.0 # range 1.5-2.0 - -# - Other Planner Options - - -#default_statistics_target = 10 # range 1-1000 -#constraint_exclusion = off -#from_collapse_limit = 8 -#join_collapse_limit = 8 # 1 disables collapsing of explicit - # JOINs - - -#--------------------------------------------------------------------------- -# ERROR REPORTING AND LOGGING -#--------------------------------------------------------------------------- - -# - Where to Log - - -#log_destination = 'stderr' # Valid values are combinations of - # stderr, syslog and eventlog, - # depending on platform. - -# This is used when logging to stderr: -logging_collector = on # Enable capturing of stderr into log - # files - # (change requires restart) - -# These are only used if redirect_stderr is on: -log_directory = 'pg_log' # Directory where log files are written - # Can be absolute or relative to PGDATA -#log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log' # Log file name pattern. - # Can include strftime() escapes -log_truncate_on_rotation = on # If on, any existing log file of the same - # name as the new log file will be - # truncated rather than appended to. But - # such truncation only occurs on - # time-driven rotation, not on restarts - # or size-driven rotation. Default is - # off, meaning append to existing files - # in all cases. -log_rotation_age = 1d # Automatic rotation of logfiles will - # happen after that time. 0 to - # disable. -log_rotation_size = 0 # Automatic rotation of logfiles will - # happen after that much log - # output. 0 to disable. - -# These are relevant when logging to syslog: -#syslog_facility = 'LOCAL0' -#syslog_ident = 'postgres' - - -# - When to Log - - -#client_min_messages = notice # Values, in order of decreasing detail: - # debug5 - # debug4 - # debug3 - # debug2 - # debug1 - # log - # notice - # warning - # error - -#log_min_messages = notice # Values, in order of decreasing detail: - # debug5 - # debug4 - # debug3 - # debug2 - # debug1 - # info - # notice - # warning - # error - # log - # fatal - # panic - -#log_error_verbosity = default # terse, default, or verbose messages - -log_min_error_statement = log # Values in order of increasing severity: - # debug5 - # debug4 - # debug3 - # debug2 - # debug1 - # info - # notice - # warning - # error - # log - # fatal - # panic (effectively off) - -#log_min_duration_statement = -1 # -1 is disabled, 0 logs all statements - # and their durations. - -#silent_mode = off # DO NOT USE without syslog or - # redirect_stderr - # (change requires restart) - -# - What to Log - - -#debug_print_parse = off -#debug_print_rewritten = off -#debug_print_plan = off -#debug_pretty_print = off -#log_connections = off -#log_disconnections = off -#log_duration = off -log_line_prefix='%t %x %d : %h : ' - # Special values: - # %u = user name - # %d = database name - # %r = remote host and port - # %h = remote host - # %p = PID - # %t = timestamp (no milliseconds) - # %m = timestamp with milliseconds - # %i = command tag - # %c = session id - # %l = session line number - # %s = session start timestamp - # %x = transaction id - # %q = stop here in non-session - # processes - # %% = '%' - # e.g. '<%u%%%d> ' -#log_statement = 'none' # none, ddl, mod, all -#log_hostname = off - - -#--------------------------------------------------------------------------- -# RUNTIME STATISTICS -#--------------------------------------------------------------------------- - -# - Query/Index Statistics Collector - - -#stats_command_string = on -#update_process_title = on - -#stats_block_level = off -track_counts = on -#stats_reset_on_server_start = off # (change requires restart) - - -# - Statistics Monitoring - - -#log_parser_stats = off -#log_planner_stats = off -#log_executor_stats = off -#log_statement_stats = off - - -#--------------------------------------------------------------------------- -# AUTOVACUUM PARAMETERS -#--------------------------------------------------------------------------- - -autovacuum = on # enable autovacuum subprocess? - # 'on' requires stats_start_collector - # and stats_row_level to also be on -#autovacuum_naptime = 1min # time between autovacuum runs -#autovacuum_vacuum_threshold = 500 # min # of tuple updates before - # vacuum -#autovacuum_analyze_threshold = 250 # min # of tuple updates before - # analyze -#autovacuum_vacuum_scale_factor = 0.2 # fraction of rel size before - # vacuum -#autovacuum_analyze_scale_factor = 0.1 # fraction of rel size before - # analyze -#autovacuum_freeze_max_age = 200000000 # maximum XID age before forced vacuum - # (change requires restart) -#autovacuum_vacuum_cost_delay = -1 # default vacuum cost delay for - # autovacuum, -1 means use - # vacuum_cost_delay -#autovacuum_vacuum_cost_limit = -1 # default vacuum cost limit for - # autovacuum, -1 means use - # vacuum_cost_limit - - -#--------------------------------------------------------------------------- -# CLIENT CONNECTION DEFAULTS -#--------------------------------------------------------------------------- - -# - Statement Behavior - - -#search_path = '"$user",public' # schema names -#default_tablespace = '' # a tablespace name, '' uses - # the default -#check_function_bodies = on -#default_transaction_isolation = 'read committed' -#default_transaction_read_only = off -#statement_timeout = 0 # 0 is disabled -#vacuum_freeze_min_age = 100000000 - -# - Locale and Formatting - - -datestyle = 'iso, mdy' -timezone = GMT # actually, defaults to TZ - # environment setting -#timezone_abbreviations = 'Default' # select the set of available timezone - # abbreviations. Currently, there are - # Default - # Australia - # India - # However you can also create your own - # file in share/timezonesets/. -#extra_float_digits = 0 # min -15, max 2 -#client_encoding = 'en_US.UTF-8' # actually, defaults to database - # encoding - -# These settings are initialized by initdb -- they might be changed -lc_messages = 'en_US.UTF-8' # locale for system error message - # strings -lc_monetary = 'en_US.UTF-8' # locale for monetary formatting -lc_numeric = 'en_US.UTF-8' # locale for number formatting -lc_time = 'en_US.UTF-8' # locale for time formatting - -# - Other Defaults - - -#explain_pretty_print = on -#dynamic_library_path = '$libdir' -#local_preload_libraries = '' - - -#--------------------------------------------------------------------------- -# LOCK MANAGEMENT -#--------------------------------------------------------------------------- - -#deadlock_timeout = 1s -#max_locks_per_transaction = 64 # min 10 - # (change requires restart) -# Note: each lock table slot uses ~270 bytes of shared memory, and there are -# max_locks_per_transaction * (max_connections + max_prepared_transactions) -# lock table slots. - - -#--------------------------------------------------------------------------- -# VERSION/PLATFORM COMPATIBILITY -#--------------------------------------------------------------------------- - -# - Previous Postgres Versions - - -#add_missing_from = off -#array_nulls = on -#backslash_quote = safe_encoding # on, off, or safe_encoding -#default_with_oids = off -#escape_string_warning = on -#standard_conforming_strings = off -#regex_flavor = advanced # advanced, extended, or basic -#sql_inheritance = on - -# - Other Platforms & Clients - - -#transform_null_equals = off - - -#--------------------------------------------------------------------------- -# CUSTOMIZED OPTIONS -#--------------------------------------------------------------------------- - -#custom_variable_classes = '' # list of custom variable class names +# ----------------------------- +# PostgreSQL configuration file +# ----------------------------- +# +# This file consists of lines of the form: +# +# name = value +# +# (The '=' is optional.) White space may be used. Comments are introduced +# with '#' anywhere on a line. The complete list of option names and +# allowed values can be found in the PostgreSQL documentation. The +# commented-out settings shown in this file represent the default values. +# +# Please note that re-commenting a setting is NOT sufficient to revert it +# to the default value, unless you restart the server. +# +# Any option can also be given as a command line switch to the server, +# e.g., 'postgres -c log_connections=on'. Some options can be changed at +# run-time with the 'SET' SQL command. +# +# This file is read on server startup and when the server receives a +# SIGHUP. If you edit the file on a running system, you have to SIGHUP the +# server for the changes to take effect, or use "pg_ctl reload". Some +# settings, which are marked below, require a server shutdown and restart +# to take effect. +# +# Memory units: kB = kilobytes MB = megabytes GB = gigabytes +# Time units: ms = milliseconds s = seconds min = minutes h = hours d = days + + +#--------------------------------------------------------------------------- +# FILE LOCATIONS +#--------------------------------------------------------------------------- + +# The default values of these variables are driven from the -D command line +# switch or PGDATA environment variable, represented here as ConfigDir. + +#data_directory = 'ConfigDir' # use data in another directory + # (change requires restart) +#hba_file = 'ConfigDir/pg_hba.conf' # host-based authentication file + # (change requires restart) +#ident_file = 'ConfigDir/pg_ident.conf' # ident configuration file + # (change requires restart) + +# If external_pid_file is not explicitly set, no extra PID file is written. +#external_pid_file = '(none)' # write an extra PID file + # (change requires restart) + + +#--------------------------------------------------------------------------- +# CONNECTIONS AND AUTHENTICATION +#--------------------------------------------------------------------------- + +# - Connection Settings - + +listen_addresses = '*' # what IP address(es) to listen on; + # comma-separated list of addresses; + # defaults to 'localhost', '*' = all + # (change requires restart) +#port = 5432 # (change requires restart) +max_connections = 300 # (change requires restart) +# Note: increasing max_connections costs ~400 bytes of shared memory per +# connection slot, plus lock space (see max_locks_per_transaction). You +# might also need to raise shared_buffers to support more connections. +#superuser_reserved_connections = 3 # (change requires restart) +#unix_socket_directory = '' # (change requires restart) +#unix_socket_group = '' # (change requires restart) +#unix_socket_permissions = 0777 # octal + # (change requires restart) +#bonjour_name = '' # defaults to the computer name + # (change requires restart) + +# - Security & Authentication - + +#authentication_timeout = 1min # 1s-600s +#ssl = off # (change requires restart) +#password_encryption = on +#db_user_namespace = off + +# Kerberos +#krb_server_keyfile = '' # (change requires restart) +#krb_srvname = 'postgres' # (change requires restart) +#krb_server_hostname = '' # empty string matches any keytab entry + # (change requires restart) +#krb_caseins_users = off # (change requires restart) + +# - TCP Keepalives - +# see 'man 7 tcp' for details + +#tcp_keepalives_idle = 0 # TCP_KEEPIDLE, in seconds; + # 0 selects the system default +#tcp_keepalives_interval = 0 # TCP_KEEPINTVL, in seconds; + # 0 selects the system default +#tcp_keepalives_count = 0 # TCP_KEEPCNT; + # 0 selects the system default + + +#--------------------------------------------------------------------------- +# RESOURCE USAGE (except WAL) +#--------------------------------------------------------------------------- + +# - Memory - + +shared_buffers = 128MB # min 128kB or max_connections*16kB + # (change requires restart) +temp_buffers = 16MB # min 800kB +#max_prepared_transactions = 5 # can be 0 or more + # (change requires restart) +# Note: increasing max_prepared_transactions costs ~600 bytes of shared memory +# per transaction slot, plus lock space (see max_locks_per_transaction). +work_mem = 8MB # min 64kB +maintenance_work_mem = 32MB # min 1MB +#max_stack_depth = 2MB # min 100kB + +# - Free Space Map - + +max_fsm_pages = 3500000 # min max_fsm_relations*16, 6 bytes each + # (change requires restart) +max_fsm_relations = 1500 # min 100, ~70 bytes each + # (change requires restart) + +# - Kernel Resource Usage - + +#max_files_per_process = 1000 # min 25 + # (change requires restart) +#shared_preload_libraries = '' # (change requires restart) + +# - Cost-Based Vacuum Delay - + +#vacuum_cost_delay = 0 # 0-1000 milliseconds +#vacuum_cost_page_hit = 1 # 0-10000 credits +#vacuum_cost_page_miss = 10 # 0-10000 credits +#vacuum_cost_page_dirty = 20 # 0-10000 credits +#vacuum_cost_limit = 200 # 0-10000 credits + +# - Background writer - + +#bgwriter_delay = 200ms # 10-10000ms between rounds +#bgwriter_lru_percent = 1.0 # 0-100% of LRU buffers scanned/round +#bgwriter_lru_maxpages = 5 # 0-1000 buffers max written/round +#bgwriter_all_percent = 0.333 # 0-100% of all buffers scanned/round +#bgwriter_all_maxpages = 5 # 0-1000 buffers max written/round + + +#--------------------------------------------------------------------------- +# WRITE AHEAD LOG +#--------------------------------------------------------------------------- + +# - Settings - + +fsync = off # turns forced synchronization on or off +#wal_sync_method = fsync # the default is the first option + # supported by the operating system: + # open_datasync + # fdatasync + # fsync + # fsync_writethrough + # open_sync +#full_page_writes = on # recover from partial page writes +#wal_buffers = 64kB # min 32kB + # (change requires restart) +commit_delay = 50000 # range 0-100000, in microseconds +commit_siblings = 5 # range 1-1000 + +# - Checkpoints - + +checkpoint_segments = 10 # in logfile segments, min 1, 16MB each +#checkpoint_timeout = 5min # range 30s-1h +#checkpoint_warning = 30s # 0 is off + +# - Archiving - + +#archive_command = '' # command to use to archive a logfile segment +#archive_timeout = 0 # force a logfile segment switch after this + # many seconds; 0 is off + + +#--------------------------------------------------------------------------- +# QUERY TUNING +#--------------------------------------------------------------------------- + +# - Planner Method Configuration - + +#enable_bitmapscan = on +#enable_hashagg = on +#enable_hashjoin = on +#enable_indexscan = on +#enable_mergejoin = on +#enable_nestloop = on +#enable_seqscan = on +#enable_sort = on +#enable_tidscan = on + +# - Planner Cost Constants - + +#seq_page_cost = 1.0 # measured on an arbitrary scale +#random_page_cost = 4.0 # same scale as above +#cpu_tuple_cost = 0.01 # same scale as above +#cpu_index_tuple_cost = 0.005 # same scale as above +#cpu_operator_cost = 0.0025 # same scale as above +effective_cache_size = 512MB + +# - Genetic Query Optimizer - + +#geqo = on +#geqo_threshold = 12 +#geqo_effort = 5 # range 1-10 +#geqo_pool_size = 0 # selects default based on effort +#geqo_generations = 0 # selects default based on effort +#geqo_selection_bias = 2.0 # range 1.5-2.0 + +# - Other Planner Options - + +#default_statistics_target = 10 # range 1-1000 +#constraint_exclusion = off +#from_collapse_limit = 8 +#join_collapse_limit = 8 # 1 disables collapsing of explicit + # JOINs + + +#--------------------------------------------------------------------------- +# ERROR REPORTING AND LOGGING +#--------------------------------------------------------------------------- + +# - Where to Log - + +#log_destination = 'stderr' # Valid values are combinations of + # stderr, syslog and eventlog, + # depending on platform. + +# This is used when logging to stderr: +logging_collector = on # Enable capturing of stderr into log + # files + # (change requires restart) + +# These are only used if redirect_stderr is on: +log_directory = 'pg_log' # Directory where log files are written + # Can be absolute or relative to PGDATA +#log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log' # Log file name pattern. + # Can include strftime() escapes +log_truncate_on_rotation = on # If on, any existing log file of the same + # name as the new log file will be + # truncated rather than appended to. But + # such truncation only occurs on + # time-driven rotation, not on restarts + # or size-driven rotation. Default is + # off, meaning append to existing files + # in all cases. +log_rotation_age = 1d # Automatic rotation of logfiles will + # happen after that time. 0 to + # disable. +log_rotation_size = 0 # Automatic rotation of logfiles will + # happen after that much log + # output. 0 to disable. + +# These are relevant when logging to syslog: +#syslog_facility = 'LOCAL0' +#syslog_ident = 'postgres' + + +# - When to Log - + +#client_min_messages = notice # Values, in order of decreasing detail: + # debug5 + # debug4 + # debug3 + # debug2 + # debug1 + # log + # notice + # warning + # error + +#log_min_messages = notice # Values, in order of decreasing detail: + # debug5 + # debug4 + # debug3 + # debug2 + # debug1 + # info + # notice + # warning + # error + # log + # fatal + # panic + +#log_error_verbosity = default # terse, default, or verbose messages + +log_min_error_statement = log # Values in order of increasing severity: + # debug5 + # debug4 + # debug3 + # debug2 + # debug1 + # info + # notice + # warning + # error + # log + # fatal + # panic (effectively off) + +#log_min_duration_statement = -1 # -1 is disabled, 0 logs all statements + # and their durations. + +#silent_mode = off # DO NOT USE without syslog or + # redirect_stderr + # (change requires restart) + +# - What to Log - + +#debug_print_parse = off +#debug_print_rewritten = off +#debug_print_plan = off +#debug_pretty_print = off +#log_connections = off +#log_disconnections = off +#log_duration = off +log_line_prefix='%t %x %d : %h : ' + # Special values: + # %u = user name + # %d = database name + # %r = remote host and port + # %h = remote host + # %p = PID + # %t = timestamp (no milliseconds) + # %m = timestamp with milliseconds + # %i = command tag + # %c = session id + # %l = session line number + # %s = session start timestamp + # %x = transaction id + # %q = stop here in non-session + # processes + # %% = '%' + # e.g. '<%u%%%d> ' +#log_statement = 'none' # none, ddl, mod, all +#log_hostname = off + + +#--------------------------------------------------------------------------- +# RUNTIME STATISTICS +#--------------------------------------------------------------------------- + +# - Query/Index Statistics Collector - + +#stats_command_string = on +#update_process_title = on + +#stats_block_level = off +track_counts = on +#stats_reset_on_server_start = off # (change requires restart) + + +# - Statistics Monitoring - + +#log_parser_stats = off +#log_planner_stats = off +#log_executor_stats = off +#log_statement_stats = off + + +#--------------------------------------------------------------------------- +# AUTOVACUUM PARAMETERS +#--------------------------------------------------------------------------- + +autovacuum = on # enable autovacuum subprocess? + # 'on' requires stats_start_collector + # and stats_row_level to also be on +#autovacuum_naptime = 1min # time between autovacuum runs +#autovacuum_vacuum_threshold = 500 # min # of tuple updates before + # vacuum +#autovacuum_analyze_threshold = 250 # min # of tuple updates before + # analyze +#autovacuum_vacuum_scale_factor = 0.2 # fraction of rel size before + # vacuum +#autovacuum_analyze_scale_factor = 0.1 # fraction of rel size before + # analyze +#autovacuum_freeze_max_age = 200000000 # maximum XID age before forced vacuum + # (change requires restart) +#autovacuum_vacuum_cost_delay = -1 # default vacuum cost delay for + # autovacuum, -1 means use + # vacuum_cost_delay +#autovacuum_vacuum_cost_limit = -1 # default vacuum cost limit for + # autovacuum, -1 means use + # vacuum_cost_limit + + +#--------------------------------------------------------------------------- +# CLIENT CONNECTION DEFAULTS +#--------------------------------------------------------------------------- + +# - Statement Behavior - + +#search_path = '"$user",public' # schema names +#default_tablespace = '' # a tablespace name, '' uses + # the default +#check_function_bodies = on +#default_transaction_isolation = 'read committed' +#default_transaction_read_only = off +#statement_timeout = 0 # 0 is disabled +#vacuum_freeze_min_age = 100000000 + +# - Locale and Formatting - + +datestyle = 'iso, mdy' +timezone = GMT # actually, defaults to TZ + # environment setting +#timezone_abbreviations = 'Default' # select the set of available timezone + # abbreviations. Currently, there are + # Default + # Australia + # India + # However you can also create your own + # file in share/timezonesets/. +#extra_float_digits = 0 # min -15, max 2 +#client_encoding = 'en_US.UTF-8' # actually, defaults to database + # encoding + +# These settings are initialized by initdb -- they might be changed +lc_messages = 'en_US.UTF-8' # locale for system error message + # strings +lc_monetary = 'en_US.UTF-8' # locale for monetary formatting +lc_numeric = 'en_US.UTF-8' # locale for number formatting +lc_time = 'en_US.UTF-8' # locale for time formatting + +# - Other Defaults - + +#explain_pretty_print = on +#dynamic_library_path = '$libdir' +#local_preload_libraries = '' + + +#--------------------------------------------------------------------------- +# LOCK MANAGEMENT +#--------------------------------------------------------------------------- + +#deadlock_timeout = 1s +#max_locks_per_transaction = 64 # min 10 + # (change requires restart) +# Note: each lock table slot uses ~270 bytes of shared memory, and there are +# max_locks_per_transaction * (max_connections + max_prepared_transactions) +# lock table slots. + + +#--------------------------------------------------------------------------- +# VERSION/PLATFORM COMPATIBILITY +#--------------------------------------------------------------------------- + +# - Previous Postgres Versions - + +#add_missing_from = off +#array_nulls = on +#backslash_quote = safe_encoding # on, off, or safe_encoding +#default_with_oids = off +#escape_string_warning = on +#standard_conforming_strings = off +#regex_flavor = advanced # advanced, extended, or basic +#sql_inheritance = on + +# - Other Platforms & Clients - + +#transform_null_equals = off + + +#--------------------------------------------------------------------------- +# CUSTOMIZED OPTIONS +#--------------------------------------------------------------------------- + +#custom_variable_classes = '' # list of custom variable class names diff --git a/rpms/awips2.edex/awips2.edex.ecl b/rpms/awips2.edex/awips2.edex.ecl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/rpms/legal/FOSS_licenses/CherryPy/CheryPyLICENSE.txt b/rpms/legal/FOSS_licenses/CherryPy/CheryPyLICENSE.txt index 196dd58083..3a71a5d4df 100755 --- a/rpms/legal/FOSS_licenses/CherryPy/CheryPyLICENSE.txt +++ b/rpms/legal/FOSS_licenses/CherryPy/CheryPyLICENSE.txt @@ -1,25 +1,25 @@ -Copyright (c) 2004-2009, CherryPy Team (team@cherrypy.org) -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 the CherryPy Team 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. +Copyright (c) 2004-2009, CherryPy Team (team@cherrypy.org) +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 the CherryPy Team 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. diff --git a/rpms/legal/FOSS_licenses/apache/Apache1.1.txt b/rpms/legal/FOSS_licenses/apache/Apache1.1.txt index 26190d1261..42f5843f18 100755 --- a/rpms/legal/FOSS_licenses/apache/Apache1.1.txt +++ b/rpms/legal/FOSS_licenses/apache/Apache1.1.txt @@ -1,28 +1,28 @@ -Apache Software License -Version 1.1 - -Copyright (c) 2000 The Apache Software Foundation. All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - -2. 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. - -3. The end-user documentation included with the redistribution, if any, must include the following acknowledgment: - -"This product includes software developed by the Apache Software Foundation (http://www.apache.org/)." - -Alternately, this acknowledgment may appear in the software itself, if and wherever such third-party acknowledgments normally appear. - -4. The names "Apache" and "Apache Software Foundation" must not be used to endorse or promote products derived from this software without prior written permission. For written permission, please contact apache@apache.org. - -5. Products derived from this software may not be called "Apache", nor may "Apache" appear in their name, without prior written permission of the Apache Software Foundation. - -THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED 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 APACHE SOFTWARE FOUNDATION OR ITS 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. - - - --------------------------------------------------------------------------------- - -This software consists of voluntary contributions made by many individuals on behalf of the Apache Software Foundation. For more information on the Apache Software Foundation, please see . +Apache Software License +Version 1.1 + +Copyright (c) 2000 The Apache Software Foundation. All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + +2. 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. + +3. The end-user documentation included with the redistribution, if any, must include the following acknowledgment: + +"This product includes software developed by the Apache Software Foundation (http://www.apache.org/)." + +Alternately, this acknowledgment may appear in the software itself, if and wherever such third-party acknowledgments normally appear. + +4. The names "Apache" and "Apache Software Foundation" must not be used to endorse or promote products derived from this software without prior written permission. For written permission, please contact apache@apache.org. + +5. Products derived from this software may not be called "Apache", nor may "Apache" appear in their name, without prior written permission of the Apache Software Foundation. + +THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED 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 APACHE SOFTWARE FOUNDATION OR ITS 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. + + + +-------------------------------------------------------------------------------- + +This software consists of voluntary contributions made by many individuals on behalf of the Apache Software Foundation. For more information on the Apache Software Foundation, please see . diff --git a/rpms/legal/FOSS_licenses/apache/LICENSE-2.0.txt b/rpms/legal/FOSS_licenses/apache/LICENSE-2.0.txt index 29f81d812f..261eeb9e9f 100644 --- a/rpms/legal/FOSS_licenses/apache/LICENSE-2.0.txt +++ b/rpms/legal/FOSS_licenses/apache/LICENSE-2.0.txt @@ -1,201 +1,201 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/rpms/legal/FOSS_licenses/jai_image_io/LICENSE-jai_imageio.txt b/rpms/legal/FOSS_licenses/jai_image_io/LICENSE-jai_imageio.txt index 3763c3088c..76531c808c 100755 --- a/rpms/legal/FOSS_licenses/jai_image_io/LICENSE-jai_imageio.txt +++ b/rpms/legal/FOSS_licenses/jai_image_io/LICENSE-jai_imageio.txt @@ -1,135 +1,135 @@ -Sun Microsystems, Inc. ("Sun") ENTITLEMENT for SOFTWARE - -Licensee/Company: Entity receiving Software. - -Effective Date: Date of delivery of the Software to You. - -Software: Java Advanced Imaging Image I/O Tools 1.1. - -License Term: Perpetual (subject to termination under the SLA). - -Licensed Unit: Software Copy. - -Licensed unit Count: Unlimited. - -Permitted Uses: - -1. You may reproduce and use the Software for Your own Individual, Commercial and Research and Instructional Use only for the purposes of designing, developing, testing, and running Your applets and applications ("Programs"). - -2. Subject to the terms and conditions of this Agreement and restrictions and exceptions set forth in the Software's documentation, You may reproduce and distribute portions of Software identified as a redistributable in the documentation (each a "Redistributable"), provided that You comply with the following (note that You may be entitled to reproduce and distribute other portions of the Software not defined in the documentation as a Redistributable under certain other licenses as described in the THIRDPARTYLICENSEREADME, if applicable): - -(a) You distribute Redistributable complete and unmodified and only bundled as part of Your Programs, - -(b) Your Programs add significant and primary functionality to the Redistributable, - -(c) You distribute Redistributable for the sole purpose of running Your Programs, - -(d) You do not distribute additional software intended to replace any -component(s) of the Redistributable, - -(e) You do not remove or alter any proprietary legends or notices contained in or on the Redistributable. - -(f) You only distribute the Redistributable subject to a license agreement that protects Sun's interests consistent with the terms contained in this -Agreement, and - -(g) You agree to defend and indemnify Sun and its licensors from and against any damages, costs, liabilities, settlement amounts and/or expenses (including attorneys' fees) incurred in connection with any claim, lawsuit or action by any third party that arises or results from the use or distribution of any and all Programs and/or Redistributable. - -3. Java Technology Restrictions. You may not create, modify, or change the behavior of, or authorize Your licensees to create, modify, or change the behavior of, classes, interfaces, or subpackages that are in any way identified as "java", "javax", "sun" or similar convention as specified by Sun in any naming convention designation. - - -Sun Microsystems, Inc. ("Sun") -SOFTWARE LICENSE AGREEMENT - -READ THE TERMS OF THIS AGREEMENT ("AGREEMENT") CAREFULLY BEFORE OPENING SOFTWARE MEDIA PACKAGE. BY OPENING SOFTWARE MEDIA PACKAGE, YOU AGREE TO THE TERMS OF THIS AGREEMENT. IF YOU ARE ACCESSING SOFTWARE ELECTRONICALLY, INDICATE YOUR ACCEPTANCE OF THESE TERMS BY SELECTING THE "ACCEPT" BUTTON AT THE END OF THIS AGREEMENT. IF YOU DO NOT AGREE TO ALL OF THE TERMS, PROMPTLY RETURN THE UNUSED SOFTWARE TO YOUR PLACE OF PURCHASE FOR A REFUND OR, IF SOFTWARE IS ACCESSED ELECTRONICALLY, SELECT THE "DECLINE" (OR "EXIT") BUTTON AT THE END OF THIS AGREEMENT. IF YOU HAVE SEPARATELY AGREED TO LICENSE TERMS ("MASTER TERMS") FOR YOUR LICENSE TO THIS SOFTWARE, THEN SECTIONS 1-6 OF THIS AGREEMENT ("SUPPLEMENTAL LICENSE TERMS") SHALL SUPPLEMENT AND SUPERSEDE THE MASTER TERMS IN RELATION TO THIS SOFTWARE. - -1. Definitions. - -(a) "Entitlement" means the collective set of applicable documents authorized by Sun evidencing your obligation to pay associated fees (if any) for the license, associated Services, and the authorized scope of use of Software under this Agreement. - -(b) "Licensed Unit" means the unit of measure by which your use of Software and/or Service is licensed, as described in your Entitlement. - -(c) "Permitted Use" means the licensed Software use(s) authorized in this Agreement as specified in your Entitlement. The Permitted Use for any bundled Sun software not specified in your Entitlement will be evaluation use as provided in Section 3. - -(d) "Service" means the service(s) that Sun or its delegate will provide, if any, as selected in your Entitlement and as further described in the applicable service listings at www.sun.com/service/servicelist. - -(e) "Software" means the Sun software described in your Entitlement. Also, certain software may be included for evaluation use under Section 3. - -(f) "You" and "Your" means the individual or legal entity specified in the Entitlement, or for evaluation purposes, the entity performing the evaluation. - -2. License Grant and Entitlement. - -Subject to the terms of your Entitlement, Sun grants you a nonexclusive, nontransferable limited license to use Software for its Permitted Use for the license term. Your Entitlement will specify (a) Software licensed, (b) the Permitted Use, (c) the license term, and (d) the Licensed Units. - -Additionally, if your Entitlement includes Services, then it will also specify the (e) Service and (f) service term. - -If your rights to Software or Services are limited in duration and the date such rights begin is other than the purchase date, your Entitlement will provide that beginning date(s). - -The Entitlement may be delivered to you in various ways depending on the manner in which you obtain Software and Services, for example, the Entitlement may be provided in your receipt, invoice or your contract with Sun or authorized Sun reseller. It may also be in electronic format if you download Software. - -3. Permitted Use. - -As selected in your Entitlement, one or more of the following Permitted Uses will apply to your use of Software. Unless you have an Entitlement that expressly permits it, you may not use Software for any of the other Permitted Uses. If you don't have an Entitlement, or if your Entitlement doesn't cover additional software delivered to you, then such software is for your Evaluation Use. - -(a) Evaluation Use. You may evaluate Software internally for a period of 90 days from your first use. - -(b) Research and Instructional Use. You may use Software internally to design, develop and test, and also to provide instruction on such uses. - -(c) Individual Use. You may use Software internally for personal, individual use. - -(d) Commercial Use. You may use Software internally for your own commercial purposes. - -(e) Service Provider Use. You may make Software functionality accessible (but not by providing Software itself or through outsourcing services) to your end users in an extranet deployment, but not to your affiliated companies or to government agencies. - -4. Licensed Units. - -Your Permitted Use is limited to the number of Licensed Units stated in your Entitlement. If you require additional Licensed Units, you will need additional Entitlement(s). - -5. Restrictions. - -(a) The copies of Software provided to you under this Agreement are licensed, not sold, to you by Sun. Sun reserves all rights not expressly granted. (b) You may make a single archival copy of Software, but otherwise may not copy, modify, or distribute Software. However if the Sun documentation accompanying Software lists specific portions of Software, such as header files, class libraries, reference source code, and/or redistributable files, that may be handled differently, you may do so only as provided in the Sun documentation. (c) You may not rent, lease, lend or encumber Software. (d) Unless enforcement is prohibited by applicable law, you may not decompile, or reverse engineer Software. (e) The terms and conditions of this Agreement will apply to any Software updates, provided to you at Sun's discretion, that replace and/or supplement the original Software, unless such update contains a separate license. (f) You may not publish or provide the results of any benchmark or comparison tests run on Software to any third party without the prior written consent of Sun. (g) Software is confidential and copyrighted. (h) Unless otherwise specified, if Software is delivered with embedded or bundled software that enables functionality of Software, you may not use such software on a stand-alone basis or use any portion of such software to interoperate with any program(s) other than Software. (i) Software may contain programs that perform automated collection of system data and/or automated software updating services. System data collected through such programs may be used by Sun, its subcontractors, and its service delivery partners for the purpose of providing you with remote system services and/or improving Sun's software and systems. (j) Software is not designed, licensed or intended for use in the design, construction, operation or maintenance of any nuclear facility and Sun and its licensors disclaim any express or implied warranty of fitness for such uses. (k) No right, title or interest in or to any trademark, service mark, logo or trade name of Sun or its licensors is granted under this Agreement. - -6. Term and Termination. - -The license and service term are set forth in your Entitlement(s). Your rights under this Agreement will terminate immediately without notice from Sun if you materially breach it or take any action in derogation of Sun's and/or its licensors' rights to Software. Sun may terminate this Agreement should any Software become, or in Sun's reasonable opinion likely to become, the subject of a claim of intellectual property infringement or trade secret misappropriation. Upon termination, you will cease use of, and destroy, Software and confirm compliance in writing to Sun. Sections 1, 5, 6, 7, and 9-15 will survive termination of the Agreement. - -7. Java Compatibility and Open Source. - -Software may contain Java technology. You may not create additional classes to, or modifications of, the Java technology, except under compatibility requirements available under a separate agreement available at www.java.net. - -Sun supports and benefits from the global community of open source developers, and thanks the community for its important contributions and open standards-based technology, which Sun has adopted into many of its products. - -Please note that portions of Software may be provided with notices and open source licenses from such communities and third parties that govern the use of those portions, and any licenses granted hereunder do not alter any rights and obligations you may have under such open source licenses, however, the disclaimer of warranty and limitation of liability provisions in this Agreement will apply to all Software in this distribution. - -8. Limited Warranty. - -Sun warrants to you that for a period of 90 days from the date of purchase, as evidenced by a copy of the receipt, the media on which Software is furnished (if any) will be free of defects in materials and workmanship under normal use. Except for the foregoing, Software is provided "AS IS". Your exclusive remedy and Sun's entire liability under this limited warranty will be at Sun's option to replace Software media or refund the fee paid for Software. Some states do not allow limitations on certain implied warranties, so the above may not apply to you. This limited warranty gives you specific legal rights. You may have others, which vary from state to state. - -9. Disclaimer of Warranty. - -UNLESS SPECIFIED IN THIS AGREEMENT, ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT ARE DISCLAIMED, EXCEPT TO THE EXTENT THAT THESE DISCLAIMERS ARE HELD TO BE LEGALLY INVALID. - -10. Limitation of Liability. - -TO THE EXTENT NOT PROHIBITED BY LAW, IN NO EVENT WILL SUN OR ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR SPECIAL, INDIRECT, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER CAUSED REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF OR RELATED TO THE USE OF OR INABILITY TO USE SOFTWARE, EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. In no event will Sun's liability to you, whether in contract, tort (including negligence), or otherwise, exceed the amount paid by you for Software under this Agreement. The foregoing limitations will apply even if the above stated warranty fails of its essential purpose. Some states do not allow the exclusion of incidental or consequential damages, so some of the terms above may not be applicable to you. - -11. Export Regulations. - -All Software, documents, technical data, and any other materials delivered under this Agreement are subject to U.S. export control laws and may be subject to export or import regulations in other countries. You agree to comply strictly with these laws and regulations and acknowledge that you have the responsibility to obtain any licenses to export, re-export, or import as may be required after delivery to you. - -12. U.S. Government Restricted Rights. - -If Software is being acquired by or on behalf of the U.S. Government or by a U.S. Government prime contractor or subcontractor (at any tier), then the Government's rights in Software and accompanying documentation will be only as set forth in this Agreement; this is in accordance with 48 CFR 227.7201 through 227.7202-4 (for Department of Defense (DOD) acquisitions) and with 48 CFR 2.101 and 12.212 (for non-DOD acquisitions). - -13. Governing Law. - -Any action related to this Agreement will be governed by California law and controlling U.S. federal law. No choice of law rules of any jurisdiction will apply. - -14. Severability. - -If any provision of this Agreement is held to be unenforceable, this Agreement will remain in effect with the provision omitted, unless omission would frustrate the intent of the parties, in which case this Agreement will immediately terminate. - -15. Integration. - -This Agreement, including any terms contained in your Entitlement, is the entire agreement between you and Sun relating to its subject matter. It supersedes all prior or contemporaneous oral or written communications, proposals, representations and warranties and prevails over any conflicting or additional terms of any quote, order, acknowledgment, or other communication between the parties relating to its subject matter during the term of this Agreement. No modification of this Agreement will be binding, unless in writing and signed by an authorized representative of each party. - -Please contact Sun Microsystems, Inc. 4150 Network Circle, Santa Clara, California 95054 if you have questions. +Sun Microsystems, Inc. ("Sun") ENTITLEMENT for SOFTWARE + +Licensee/Company: Entity receiving Software. + +Effective Date: Date of delivery of the Software to You. + +Software: Java Advanced Imaging Image I/O Tools 1.1. + +License Term: Perpetual (subject to termination under the SLA). + +Licensed Unit: Software Copy. + +Licensed unit Count: Unlimited. + +Permitted Uses: + +1. You may reproduce and use the Software for Your own Individual, Commercial and Research and Instructional Use only for the purposes of designing, developing, testing, and running Your applets and applications ("Programs"). + +2. Subject to the terms and conditions of this Agreement and restrictions and exceptions set forth in the Software's documentation, You may reproduce and distribute portions of Software identified as a redistributable in the documentation (each a "Redistributable"), provided that You comply with the following (note that You may be entitled to reproduce and distribute other portions of the Software not defined in the documentation as a Redistributable under certain other licenses as described in the THIRDPARTYLICENSEREADME, if applicable): + +(a) You distribute Redistributable complete and unmodified and only bundled as part of Your Programs, + +(b) Your Programs add significant and primary functionality to the Redistributable, + +(c) You distribute Redistributable for the sole purpose of running Your Programs, + +(d) You do not distribute additional software intended to replace any +component(s) of the Redistributable, + +(e) You do not remove or alter any proprietary legends or notices contained in or on the Redistributable. + +(f) You only distribute the Redistributable subject to a license agreement that protects Sun's interests consistent with the terms contained in this +Agreement, and + +(g) You agree to defend and indemnify Sun and its licensors from and against any damages, costs, liabilities, settlement amounts and/or expenses (including attorneys' fees) incurred in connection with any claim, lawsuit or action by any third party that arises or results from the use or distribution of any and all Programs and/or Redistributable. + +3. Java Technology Restrictions. You may not create, modify, or change the behavior of, or authorize Your licensees to create, modify, or change the behavior of, classes, interfaces, or subpackages that are in any way identified as "java", "javax", "sun" or similar convention as specified by Sun in any naming convention designation. + + +Sun Microsystems, Inc. ("Sun") +SOFTWARE LICENSE AGREEMENT + +READ THE TERMS OF THIS AGREEMENT ("AGREEMENT") CAREFULLY BEFORE OPENING SOFTWARE MEDIA PACKAGE. BY OPENING SOFTWARE MEDIA PACKAGE, YOU AGREE TO THE TERMS OF THIS AGREEMENT. IF YOU ARE ACCESSING SOFTWARE ELECTRONICALLY, INDICATE YOUR ACCEPTANCE OF THESE TERMS BY SELECTING THE "ACCEPT" BUTTON AT THE END OF THIS AGREEMENT. IF YOU DO NOT AGREE TO ALL OF THE TERMS, PROMPTLY RETURN THE UNUSED SOFTWARE TO YOUR PLACE OF PURCHASE FOR A REFUND OR, IF SOFTWARE IS ACCESSED ELECTRONICALLY, SELECT THE "DECLINE" (OR "EXIT") BUTTON AT THE END OF THIS AGREEMENT. IF YOU HAVE SEPARATELY AGREED TO LICENSE TERMS ("MASTER TERMS") FOR YOUR LICENSE TO THIS SOFTWARE, THEN SECTIONS 1-6 OF THIS AGREEMENT ("SUPPLEMENTAL LICENSE TERMS") SHALL SUPPLEMENT AND SUPERSEDE THE MASTER TERMS IN RELATION TO THIS SOFTWARE. + +1. Definitions. + +(a) "Entitlement" means the collective set of applicable documents authorized by Sun evidencing your obligation to pay associated fees (if any) for the license, associated Services, and the authorized scope of use of Software under this Agreement. + +(b) "Licensed Unit" means the unit of measure by which your use of Software and/or Service is licensed, as described in your Entitlement. + +(c) "Permitted Use" means the licensed Software use(s) authorized in this Agreement as specified in your Entitlement. The Permitted Use for any bundled Sun software not specified in your Entitlement will be evaluation use as provided in Section 3. + +(d) "Service" means the service(s) that Sun or its delegate will provide, if any, as selected in your Entitlement and as further described in the applicable service listings at www.sun.com/service/servicelist. + +(e) "Software" means the Sun software described in your Entitlement. Also, certain software may be included for evaluation use under Section 3. + +(f) "You" and "Your" means the individual or legal entity specified in the Entitlement, or for evaluation purposes, the entity performing the evaluation. + +2. License Grant and Entitlement. + +Subject to the terms of your Entitlement, Sun grants you a nonexclusive, nontransferable limited license to use Software for its Permitted Use for the license term. Your Entitlement will specify (a) Software licensed, (b) the Permitted Use, (c) the license term, and (d) the Licensed Units. + +Additionally, if your Entitlement includes Services, then it will also specify the (e) Service and (f) service term. + +If your rights to Software or Services are limited in duration and the date such rights begin is other than the purchase date, your Entitlement will provide that beginning date(s). + +The Entitlement may be delivered to you in various ways depending on the manner in which you obtain Software and Services, for example, the Entitlement may be provided in your receipt, invoice or your contract with Sun or authorized Sun reseller. It may also be in electronic format if you download Software. + +3. Permitted Use. + +As selected in your Entitlement, one or more of the following Permitted Uses will apply to your use of Software. Unless you have an Entitlement that expressly permits it, you may not use Software for any of the other Permitted Uses. If you don't have an Entitlement, or if your Entitlement doesn't cover additional software delivered to you, then such software is for your Evaluation Use. + +(a) Evaluation Use. You may evaluate Software internally for a period of 90 days from your first use. + +(b) Research and Instructional Use. You may use Software internally to design, develop and test, and also to provide instruction on such uses. + +(c) Individual Use. You may use Software internally for personal, individual use. + +(d) Commercial Use. You may use Software internally for your own commercial purposes. + +(e) Service Provider Use. You may make Software functionality accessible (but not by providing Software itself or through outsourcing services) to your end users in an extranet deployment, but not to your affiliated companies or to government agencies. + +4. Licensed Units. + +Your Permitted Use is limited to the number of Licensed Units stated in your Entitlement. If you require additional Licensed Units, you will need additional Entitlement(s). + +5. Restrictions. + +(a) The copies of Software provided to you under this Agreement are licensed, not sold, to you by Sun. Sun reserves all rights not expressly granted. (b) You may make a single archival copy of Software, but otherwise may not copy, modify, or distribute Software. However if the Sun documentation accompanying Software lists specific portions of Software, such as header files, class libraries, reference source code, and/or redistributable files, that may be handled differently, you may do so only as provided in the Sun documentation. (c) You may not rent, lease, lend or encumber Software. (d) Unless enforcement is prohibited by applicable law, you may not decompile, or reverse engineer Software. (e) The terms and conditions of this Agreement will apply to any Software updates, provided to you at Sun's discretion, that replace and/or supplement the original Software, unless such update contains a separate license. (f) You may not publish or provide the results of any benchmark or comparison tests run on Software to any third party without the prior written consent of Sun. (g) Software is confidential and copyrighted. (h) Unless otherwise specified, if Software is delivered with embedded or bundled software that enables functionality of Software, you may not use such software on a stand-alone basis or use any portion of such software to interoperate with any program(s) other than Software. (i) Software may contain programs that perform automated collection of system data and/or automated software updating services. System data collected through such programs may be used by Sun, its subcontractors, and its service delivery partners for the purpose of providing you with remote system services and/or improving Sun's software and systems. (j) Software is not designed, licensed or intended for use in the design, construction, operation or maintenance of any nuclear facility and Sun and its licensors disclaim any express or implied warranty of fitness for such uses. (k) No right, title or interest in or to any trademark, service mark, logo or trade name of Sun or its licensors is granted under this Agreement. + +6. Term and Termination. + +The license and service term are set forth in your Entitlement(s). Your rights under this Agreement will terminate immediately without notice from Sun if you materially breach it or take any action in derogation of Sun's and/or its licensors' rights to Software. Sun may terminate this Agreement should any Software become, or in Sun's reasonable opinion likely to become, the subject of a claim of intellectual property infringement or trade secret misappropriation. Upon termination, you will cease use of, and destroy, Software and confirm compliance in writing to Sun. Sections 1, 5, 6, 7, and 9-15 will survive termination of the Agreement. + +7. Java Compatibility and Open Source. + +Software may contain Java technology. You may not create additional classes to, or modifications of, the Java technology, except under compatibility requirements available under a separate agreement available at www.java.net. + +Sun supports and benefits from the global community of open source developers, and thanks the community for its important contributions and open standards-based technology, which Sun has adopted into many of its products. + +Please note that portions of Software may be provided with notices and open source licenses from such communities and third parties that govern the use of those portions, and any licenses granted hereunder do not alter any rights and obligations you may have under such open source licenses, however, the disclaimer of warranty and limitation of liability provisions in this Agreement will apply to all Software in this distribution. + +8. Limited Warranty. + +Sun warrants to you that for a period of 90 days from the date of purchase, as evidenced by a copy of the receipt, the media on which Software is furnished (if any) will be free of defects in materials and workmanship under normal use. Except for the foregoing, Software is provided "AS IS". Your exclusive remedy and Sun's entire liability under this limited warranty will be at Sun's option to replace Software media or refund the fee paid for Software. Some states do not allow limitations on certain implied warranties, so the above may not apply to you. This limited warranty gives you specific legal rights. You may have others, which vary from state to state. + +9. Disclaimer of Warranty. + +UNLESS SPECIFIED IN THIS AGREEMENT, ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT ARE DISCLAIMED, EXCEPT TO THE EXTENT THAT THESE DISCLAIMERS ARE HELD TO BE LEGALLY INVALID. + +10. Limitation of Liability. + +TO THE EXTENT NOT PROHIBITED BY LAW, IN NO EVENT WILL SUN OR ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR SPECIAL, INDIRECT, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER CAUSED REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF OR RELATED TO THE USE OF OR INABILITY TO USE SOFTWARE, EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. In no event will Sun's liability to you, whether in contract, tort (including negligence), or otherwise, exceed the amount paid by you for Software under this Agreement. The foregoing limitations will apply even if the above stated warranty fails of its essential purpose. Some states do not allow the exclusion of incidental or consequential damages, so some of the terms above may not be applicable to you. + +11. Export Regulations. + +All Software, documents, technical data, and any other materials delivered under this Agreement are subject to U.S. export control laws and may be subject to export or import regulations in other countries. You agree to comply strictly with these laws and regulations and acknowledge that you have the responsibility to obtain any licenses to export, re-export, or import as may be required after delivery to you. + +12. U.S. Government Restricted Rights. + +If Software is being acquired by or on behalf of the U.S. Government or by a U.S. Government prime contractor or subcontractor (at any tier), then the Government's rights in Software and accompanying documentation will be only as set forth in this Agreement; this is in accordance with 48 CFR 227.7201 through 227.7202-4 (for Department of Defense (DOD) acquisitions) and with 48 CFR 2.101 and 12.212 (for non-DOD acquisitions). + +13. Governing Law. + +Any action related to this Agreement will be governed by California law and controlling U.S. federal law. No choice of law rules of any jurisdiction will apply. + +14. Severability. + +If any provision of this Agreement is held to be unenforceable, this Agreement will remain in effect with the provision omitted, unless omission would frustrate the intent of the parties, in which case this Agreement will immediately terminate. + +15. Integration. + +This Agreement, including any terms contained in your Entitlement, is the entire agreement between you and Sun relating to its subject matter. It supersedes all prior or contemporaneous oral or written communications, proposals, representations and warranties and prevails over any conflicting or additional terms of any quote, order, acknowledgment, or other communication between the parties relating to its subject matter during the term of this Agreement. No modification of this Agreement will be binding, unless in writing and signed by an authorized representative of each party. + +Please contact Sun Microsystems, Inc. 4150 Network Circle, Santa Clara, California 95054 if you have questions. diff --git a/rpms/legal/FOSS_licenses/java/COPYRIGHT.txt b/rpms/legal/FOSS_licenses/java/COPYRIGHT.txt index a93ebcd6fe..dfeefa0a01 100755 --- a/rpms/legal/FOSS_licenses/java/COPYRIGHT.txt +++ b/rpms/legal/FOSS_licenses/java/COPYRIGHT.txt @@ -1,81 +1,81 @@ -Copyright \251 2008 Sun Microsystems, Inc., 4150 Network Circle, Santa -Clara, California 95054, U.S.A. All rights reserved. - -Sun Microsystems, Inc. has intellectual property rights relating to -technology embodied in the product that is described in this document. -In particular, and without limitation, these intellectual property -rights may include one or more of the U.S. patents listed at -http://www.sun.com/patents and one or more additional patents or -pending patent applications in the U.S. and in other countries. - -THIS PRODUCT CONTAINS CONFIDENTIAL INFORMATION AND TRADE SECRETS OF SUN -MICROSYSTEMS, INC. USE, DISCLOSURE OR REPRODUCTION IS PROHIBITED -WITHOUT THE PRIOR EXPRESS WRITTEN PERMISSION OF SUN MICROSYSTEMS, INC. - -U.S. Government Rights - Commercial software. Government users are -subject to the Sun Microsystems, Inc. standard license agreement and -applicable provisions of the FAR and its supplements. - -Use is subject to license terms. - -This distribution may include materials developed by third parties. - -Sun, Sun Microsystems, the Sun logo, Java, Jini and Java SE are -trademarks or registered trademarks of Sun Microsystems, Inc. in the -U.S. and other countries. - -Products covered by and information contained in this service manual -are controlled by U.S. Export Control laws and may be subject to the -export or import laws in other countries. Nuclear, missile, chemical -biological weapons or nuclear maritime end uses or end users, whether -direct or indirect, are strictly prohibited. Export or reexport to -countries subject to U.S. embargo or to entities identified on U.S. -export exclusion lists, including, but not limited to, the denied -persons and specially designated nationals lists is strictly -prohibited. - - -Copyright © 2008 Sun Microsystems, Inc., 4150 Network Circle, Santa -Clara, California 95054, Etats-Unis. Tous droits réservés. - -Sun Microsystems, Inc. détient les droits de propriété intellectuelle -relatifs à la technologie incorporée dans le produit qui est décrit dans -ce document. En particulier, et ce sans limitation, ces droits de -propriété intellectuelle peuvent inclure un ou plus des brevets américains -listés à l'adresse http://www.sun.com/patents et un ou les brevets -supplémentaires ou les applications de brevet en attente aux Etats - -Unis et dans les autres pays. - -CE PRODUIT CONTIENT DES INFORMATIONS CONFIDENTIELLES ET DES SECRETS -COMMERCIAUX DE SUN MICROSYSTEMS, INC. SON UTILISATION, SA DIVULGATION -ET SA REPRODUCTION SONT INTERDITES SANS L AUTORISATION EXPRESSE, ECRITE -ET PREALABLE DE SUN MICROSYSTEMS, INC. - -Droits du gouvernement des États-Unis - logiciel commercial. Les -droits des utilisateur du gouvernement des États-Unis sont -soumis aux termes de la licence standard Sun Microsystems et -aux conditions appliquées de la FAR et de ces compléments. - -L'utilisation est soumise aux termes de la Licence. - -Cette distribution peut inclure des élements développés par des tiers. - -Sun, Sun Microsystems, le logo Sun, Java, Jini et Java SE sont des -marques de fabrique ou des marques déposées de Sun Microsystems, Inc. aux -Etats-Unis et dans d'autres pays. - -Les produits qui font l'objet de ce manuel d'entretien et les -informations qu'il contient sont regis par la legislation americaine en -matiere de controle des exportations et peuvent etre soumis au droit -d'autres pays dans le domaine des exportations et importations. Les -utilisations finales, ou utilisateurs finaux, pour des armes -nucleaires, des missiles, des armes biologiques et chimiques ou du -nucleaire maritime, directement ou indirectement, sont strictement -interdites. Les exportations ou reexportations vers des pays sous -embargo des Etats-Unis, ou vers des entites figurant sur les listes -d'exclusion d'exportation americaines, y compris, mais de maniere non -exclusive, la liste de personnes qui font objet d'un ordre de ne pas -participer, d'une facon directe ou indirecte, aux exportations des -produits ou des services qui sont regi par la legislation americaine en -matiere de controle des exportations et la liste de ressortissants -specifiquement designes, sont rigoureusement interdites. +Copyright \251 2008 Sun Microsystems, Inc., 4150 Network Circle, Santa +Clara, California 95054, U.S.A. All rights reserved. + +Sun Microsystems, Inc. has intellectual property rights relating to +technology embodied in the product that is described in this document. +In particular, and without limitation, these intellectual property +rights may include one or more of the U.S. patents listed at +http://www.sun.com/patents and one or more additional patents or +pending patent applications in the U.S. and in other countries. + +THIS PRODUCT CONTAINS CONFIDENTIAL INFORMATION AND TRADE SECRETS OF SUN +MICROSYSTEMS, INC. USE, DISCLOSURE OR REPRODUCTION IS PROHIBITED +WITHOUT THE PRIOR EXPRESS WRITTEN PERMISSION OF SUN MICROSYSTEMS, INC. + +U.S. Government Rights - Commercial software. Government users are +subject to the Sun Microsystems, Inc. standard license agreement and +applicable provisions of the FAR and its supplements. + +Use is subject to license terms. + +This distribution may include materials developed by third parties. + +Sun, Sun Microsystems, the Sun logo, Java, Jini and Java SE are +trademarks or registered trademarks of Sun Microsystems, Inc. in the +U.S. and other countries. + +Products covered by and information contained in this service manual +are controlled by U.S. Export Control laws and may be subject to the +export or import laws in other countries. Nuclear, missile, chemical +biological weapons or nuclear maritime end uses or end users, whether +direct or indirect, are strictly prohibited. Export or reexport to +countries subject to U.S. embargo or to entities identified on U.S. +export exclusion lists, including, but not limited to, the denied +persons and specially designated nationals lists is strictly +prohibited. + + +Copyright © 2008 Sun Microsystems, Inc., 4150 Network Circle, Santa +Clara, California 95054, Etats-Unis. Tous droits réservés. + +Sun Microsystems, Inc. détient les droits de propriété intellectuelle +relatifs à la technologie incorporée dans le produit qui est décrit dans +ce document. En particulier, et ce sans limitation, ces droits de +propriété intellectuelle peuvent inclure un ou plus des brevets américains +listés à l'adresse http://www.sun.com/patents et un ou les brevets +supplémentaires ou les applications de brevet en attente aux Etats - +Unis et dans les autres pays. + +CE PRODUIT CONTIENT DES INFORMATIONS CONFIDENTIELLES ET DES SECRETS +COMMERCIAUX DE SUN MICROSYSTEMS, INC. SON UTILISATION, SA DIVULGATION +ET SA REPRODUCTION SONT INTERDITES SANS L AUTORISATION EXPRESSE, ECRITE +ET PREALABLE DE SUN MICROSYSTEMS, INC. + +Droits du gouvernement des États-Unis - logiciel commercial. Les +droits des utilisateur du gouvernement des États-Unis sont +soumis aux termes de la licence standard Sun Microsystems et +aux conditions appliquées de la FAR et de ces compléments. + +L'utilisation est soumise aux termes de la Licence. + +Cette distribution peut inclure des élements développés par des tiers. + +Sun, Sun Microsystems, le logo Sun, Java, Jini et Java SE sont des +marques de fabrique ou des marques déposées de Sun Microsystems, Inc. aux +Etats-Unis et dans d'autres pays. + +Les produits qui font l'objet de ce manuel d'entretien et les +informations qu'il contient sont regis par la legislation americaine en +matiere de controle des exportations et peuvent etre soumis au droit +d'autres pays dans le domaine des exportations et importations. Les +utilisations finales, ou utilisateurs finaux, pour des armes +nucleaires, des missiles, des armes biologiques et chimiques ou du +nucleaire maritime, directement ou indirectement, sont strictement +interdites. Les exportations ou reexportations vers des pays sous +embargo des Etats-Unis, ou vers des entites figurant sur les listes +d'exclusion d'exportation americaines, y compris, mais de maniere non +exclusive, la liste de personnes qui font objet d'un ordre de ne pas +participer, d'une facon directe ou indirecte, aux exportations des +produits ou des services qui sont regi par la legislation americaine en +matiere de controle des exportations et la liste de ressortissants +specifiquement designes, sont rigoureusement interdites. diff --git a/rpms/legal/FOSS_licenses/java/LICENSE.txt b/rpms/legal/FOSS_licenses/java/LICENSE.txt index c78b042fc5..e51e07f5cd 100755 --- a/rpms/legal/FOSS_licenses/java/LICENSE.txt +++ b/rpms/legal/FOSS_licenses/java/LICENSE.txt @@ -1,342 +1,342 @@ -Sun Microsystems, Inc. Binary Code License Agreement - -for the JAVA SE DEVELOPMENT KIT (JDK), VERSION 6 - -SUN MICROSYSTEMS, INC. ("SUN") IS WILLING TO LICENSE THE -SOFTWARE IDENTIFIED BELOW TO YOU ONLY UPON THE CONDITION -THAT YOU ACCEPT ALL OF THE TERMS CONTAINED IN THIS BINARY -CODE LICENSE AGREEMENT AND SUPPLEMENTAL LICENSE TERMS -(COLLECTIVELY "AGREEMENT"). PLEASE READ THE AGREEMENT -CAREFULLY. BY DOWNLOADING OR INSTALLING THIS SOFTWARE, YOU -ACCEPT THE TERMS OF THE AGREEMENT. INDICATE ACCEPTANCE BY -SELECTING THE "ACCEPT" BUTTON AT THE BOTTOM OF THE -AGREEMENT. IF YOU ARE NOT WILLING TO BE BOUND BY ALL THE -TERMS, SELECT THE "DECLINE" BUTTON AT THE BOTTOM OF THE -AGREEMENT AND THE DOWNLOAD OR INSTALL PROCESS WILL NOT -CONTINUE. - -1. DEFINITIONS. "Software" means the identified above in -binary form, any other machine readable materials -(including, but not limited to, libraries, source files, -header files, and data files), any updates or error -corrections provided by Sun, and any user manuals, -programming guides and other documentation provided to you -by Sun under this Agreement. "General Purpose Desktop -Computers and Servers" means computers, including desktop, -laptop and tablet computers, or servers, used for general -computing functions under end user control (such as but not -specifically limited to email, general purpose Internet -browsing, and office suite productivity tools). -The use of Software in systems and solutions that provide -dedicated functionality (other than as mentioned above) or -designed for use in embedded or function-specific software -applications, for example but not limited to: Software -embedded in or bundled with industrial control systems, -wireless mobile telephones, wireless handheld devices, -kiosks, TV/STB, Blu-ray Disc devices, telematics and -network control switching equipment, printers and storage -management systems, and other related systems are excluded -from this definition and not licensed under this -Agreement. "Programs" means Java technology applets and -applications intended to run on the Java Platform Standard -Edition (Java SE) platform on Java-enabled General Purpose -Desktop Computers and Servers. - -2. LICENSE TO USE. Subject to the terms and conditions of -this Agreement, including, but not limited to the Java -Technology Restrictions of the Supplemental License Terms, -Sun grants you a non-exclusive, non-transferable, limited -license without license fees to reproduce and use -internally Software complete and unmodified for the sole -purpose of running Programs. Additional licenses for -developers and/or publishers are granted in the -Supplemental License Terms. - -3. RESTRICTIONS. Software is confidential and copyrighted. -Title to Software and all associated intellectual property -rights is retained by Sun and/or its licensors. Unless -enforcement is prohibited by applicable law, you may not -modify, decompile, or reverse engineer Software. You -acknowledge that Licensed Software is not designed or -intended for use in the design, construction, operation or -maintenance of any nuclear facility. Sun Microsystems, Inc. -disclaims any express or implied warranty of fitness for -such uses. No right, title or interest in or to any -trademark, service mark, logo or trade name of Sun or its -licensors is granted under this Agreement. Additional -restrictions for developers and/or publishers licenses are -set forth in the Supplemental License Terms. - -4. LIMITED WARRANTY. Sun warrants to you that for a period -of ninety (90) days from the date of purchase, as evidenced -by a copy of the receipt, the media on which Software is -furnished (if any) will be free of defects in materials and -workmanship under normal use. Except for the foregoing, -Software is provided "AS IS". Your exclusive remedy and -Sun's entire liability under this limited warranty will be -at Sun's option to replace Software media or refund the fee -paid for Software. Any implied warranties on the Software -are limited to 90 days. Some states do not allow -limitations on duration of an implied warranty, so the -above may not apply to you. This limited warranty gives you -specific legal rights. You may have others, which vary from -state to state. - -5. DISCLAIMER OF WARRANTY. UNLESS SPECIFIED IN THIS -AGREEMENT, ALL EXPRESS OR IMPLIED CONDITIONS, -REPRESENTATIONS AND WARRANTIES, INCLUDING ANY IMPLIED -WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -PURPOSE OR NON-INFRINGEMENT ARE DISCLAIMED, EXCEPT TO THE -EXTENT THAT THESE DISCLAIMERS ARE HELD TO BE LEGALLY -INVALID. - -6. LIMITATION OF LIABILITY. TO THE EXTENT NOT PROHIBITED BY -LAW, IN NO EVENT WILL SUN OR ITS LICENSORS BE LIABLE FOR -ANY LOST REVENUE, PROFIT OR DATA, OR FOR SPECIAL, INDIRECT, -CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER -CAUSED REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT -OF OR RELATED TO THE USE OF OR INABILITY TO USE SOFTWARE, -EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGES. In no event will Sun's liability to you, whether -in contract, tort (including negligence), or otherwise, -exceed the amount paid by you for Software under this -Agreement. The foregoing limitations will apply even if the -above stated warranty fails of its essential purpose. Some -states do not allow the exclusion of incidental or -consequential damages, so some of the terms above may not -be applicable to you. - -7. TERMINATION. This Agreement is effective until -terminated. You may terminate this Agreement at any time by -destroying all copies of Software. This Agreement will -terminate immediately without notice from Sun if you fail -to comply with any provision of this Agreement. Either -party may terminate this Agreement immediately should any -Software become, or in either party's opinion be likely to -become, the subject of a claim of infringement of any -intellectual property right. Upon Termination, you must -destroy all copies of Software. - -8. EXPORT REGULATIONS. All Software and technical data -delivered under this Agreement are subject to US export -control laws and may be subject to export or import -regulations in other countries. You agree to comply -strictly with all such laws and regulations and acknowledge -that you have the responsibility to obtain such licenses to -export, re-export, or import as may be required after -delivery to you. - -9. TRADEMARKS AND LOGOS. You acknowledge and agree as -between you and Sun that Sun owns the SUN, SOLARIS, JAVA, -JINI, FORTE, and iPLANET trademarks and all SUN, SOLARIS, -JAVA, JINI, FORTE, and iPLANET-related trademarks, service -marks, logos and other brand designations ("Sun Marks"), -and you agree to comply with the Sun Trademark and Logo -Usage Requirements currently located at -http://www.sun.com/policies/trademarks. Any use you make of -the Sun Marks inures to Sun's benefit. - -10. U.S. GOVERNMENT RESTRICTED RIGHTS. If Software is being -acquired by or on behalf of the U.S. Government or by a -U.S. Government prime contractor or subcontractor (at any -tier), then the Government's rights in Software and -accompanying documentation will be only as set forth in -this Agreement; this is in accordance with 48 CFR 227.7201 -through 227.7202-4 (for Department of Defense (DOD) -acquisitions) and with 48 CFR 2.101 and 12.212 (for non-DOD -acquisitions). - -11. GOVERNING LAW. Any action related to this Agreement -will be governed by California law and controlling U.S. -federal law. No choice of law rules of any jurisdiction -will apply. - -12. SEVERABILITY. If any provision of this Agreement is -held to be unenforceable, this Agreement will remain in -effect with the provision omitted, unless omission would -frustrate the intent of the parties, in which case this -Agreement will immediately terminate. - -13. INTEGRATION. This Agreement is the entire agreement -between you and Sun relating to its subject matter. It -supersedes all prior or contemporaneous oral or written -communications, proposals, representations and warranties -and prevails over any conflicting or additional terms of -any quote, order, acknowledgment, or other communication -between the parties relating to its subject matter during -the term of this Agreement. No modification of this -Agreement will be binding, unless in writing and signed by -an authorized representative of each party. - -SUPPLEMENTAL LICENSE TERMS - -These Supplemental License Terms add to or modify the terms -of the Binary Code License Agreement. Capitalized terms not -defined in these Supplemental Terms shall have the same -meanings ascribed to them in the Binary Code License -Agreement . These Supplemental Terms shall supersede any -inconsistent or conflicting terms in the Binary Code -License Agreement, or in any license contained within the -Software. - -A. Software Internal Use and Development License Grant. -Subject to the terms and conditions of this Agreement and -restrictions and exceptions set forth in the Software -"README" file incorporated herein by reference, including, -but not limited to the Java Technology Restrictions of -these Supplemental Terms, Sun grants you a non-exclusive, -non-transferable, limited license without fees to reproduce -internally and use internally the Software complete and -unmodified for the purpose of designing, developing, and -testing your Programs. - -B. License to Distribute Software. Subject to the terms and -conditions of this Agreement and restrictions and -exceptions set forth in the Software README file, -including, but not limited to the Java Technology -Restrictions of these Supplemental Terms, Sun grants you a -non-exclusive, non-transferable, limited license without -fees to reproduce and distribute the Software, provided -that (i) you distribute the Software complete and -unmodified and only bundled as part of, and for the sole -purpose of running, your Programs, (ii) the Programs add -significant and primary functionality to the Software, -(iii) you do not distribute additional software intended to -replace any component(s) of the Software, (iv) you do not -remove or alter any proprietary legends or notices -contained in the Software, (v) you only distribute the -Software subject to a license agreement that protects Sun's -interests consistent with the terms contained in this -Agreement, and (vi) you agree to defend and indemnify Sun -and its licensors from and against any damages, costs, -liabilities, settlement amounts and/or expenses (including -attorneys' fees) incurred in connection with any claim, -lawsuit or action by any third party that arises or results -from the use or distribution of any and all Programs and/or -Software. - -C. License to Distribute Redistributables. Subject to the -terms and conditions of this Agreement and restrictions and -exceptions set forth in the Software README file, including -but not limited to the Java Technology Restrictions of -these Supplemental Terms, Sun grants you a non-exclusive, -non-transferable, limited license without fees to reproduce -and distribute those files specifically identified as -redistributable in the Software "README" file -("Redistributables") provided that: (i) you distribute the -Redistributables complete and unmodified, and only bundled -as part of Programs, (ii) the Programs add significant and -primary functionality to the Redistributables, (iii) you do -not distribute additional software intended to supersede -any component(s) of the Redistributables (unless otherwise -specified in the applicable README file), (iv) you do not -remove or alter any proprietary legends or notices -contained in or on the Redistributables, (v) you only -distribute the Redistributables pursuant to a license -agreement that protects Sun's interests consistent with the -terms contained in the Agreement, (vi) you agree to defend -and indemnify Sun and its licensors from and against any -damages, costs, liabilities, settlement amounts and/or -expenses (including attorneys' fees) incurred in connection -with any claim, lawsuit or action by any third party that -arises or results from the use or distribution of any and -all Programs and/or Software. - -D. Java Technology Restrictions. You may not create, -modify, or change the behavior of, or authorize your -licensees to create, modify, or change the behavior of, -classes, interfaces, or subpackages that are in any way -identified as "java", "javax", "sun" or similar convention -as specified by Sun in any naming convention designation. - -E. Distribution by Publishers. This section pertains to -your distribution of the Software with your printed book or -magazine (as those terms are commonly used in the industry) -relating to Java technology ("Publication"). Subject to and -conditioned upon your compliance with the restrictions and -obligations contained in the Agreement, in addition to the -license granted in Paragraph 1 above, Sun hereby grants to -you a non-exclusive, nontransferable limited right to -reproduce complete and unmodified copies of the Software on -electronic media (the "Media") for the sole purpose of -inclusion and distribution with your Publication(s), -subject to the following terms: (i) You may not distribute -the Software on a stand-alone basis; it must be distributed -with your Publication(s); (ii) You are responsible for -downloading the Software from the applicable Sun web site; -(iii) You must refer to the Software as JavaTM SE -Development Kit 6; (iv) The Software must be reproduced in -its entirety and without any modification whatsoever -(including, without limitation, the Binary Code License and -Supplemental License Terms accompanying the Software and -proprietary rights notices contained in the Software); -(v) The Media label shall include the following -information: Copyright 2006, Sun Microsystems, Inc. All -rights reserved. Use is subject to license terms. Sun, Sun -Microsystems, the Sun logo, Solaris, Java, the Java Coffee -Cup logo, J2SE, and all trademarks and logos based on Java -are trademarks or registered trademarks of Sun -Microsystems, Inc. in the U.S. and other countries. This -information must be placed on the Media label in such a -manner as to only apply to the Sun Software; (vi) You must -clearly identify the Software as Sun's product on the Media -holder or Media label, and you may not state or imply that -Sun is responsible for any third-party software contained -on the Media; (vii) You may not include any third party -software on the Media which is intended to be a replacement -or substitute for the Software; (viii) You shall indemnify -Sun for all damages arising from your failure to comply -with the requirements of this Agreement. In addition, you -shall defend, at your expense, any and all claims brought -against Sun by third parties, and shall pay all damages -awarded by a court of competent jurisdiction, or such -settlement amount negotiated by you, arising out of or in -connection with your use, reproduction or distribution of -the Software and/or the Publication. Your obligation to -provide indemnification under this section shall arise -provided that Sun: (a) provides you prompt notice of the -claim; (b) gives you sole control of the defense and -settlement of the claim; (c) provides you, at your expense, -with all available information, assistance and authority to -defend; and (d) has not compromised or settled such claim -without your prior written consent; and (ix) You shall -provide Sun with a written notice for each Publication; -such notice shall include the following information: (1) -title of Publication, (2) author(s), (3) date of -Publication, and (4) ISBN or ISSN numbers. Such notice -shall be sent to Sun Microsystems, Inc., 4150 Network -Circle, M/S USCA12-110, Santa Clara, California 95054, -U.S.A , Attention: Contracts Administration. - -F. Source Code. Software may contain source code that, -unless expressly licensed for other purposes, is provided -solely for reference purposes pursuant to the terms of this -Agreement. Source code may not be redistributed unless -expressly provided for in this Agreement. - -G. Third Party Code. Additional copyright notices and -license terms applicable to portions of the Software are -set forth in the THIRDPARTYLICENSEREADME.txt file. In -addition to any terms and conditions of any third party -opensource/freeware license identified in the -THIRDPARTYLICENSEREADME.txt file, the disclaimer of -warranty and limitation of liability provisions in -paragraphs 5 and 6 of the Binary Code License Agreement -shall apply to all Software in this distribution. - -H. Termination for Infringement. Either party may terminate -this Agreement immediately should any Software become, or -in either party's opinion be likely to become, the subject -of a claim of infringement of any intellectual property -right. - -I. Installation and Auto-Update. The Software's -installation and auto-update processes transmit a limited -amount of data to Sun (or its service provider) about those -specific processes to help Sun understand and optimize -them. Sun does not associate the data with personally -identifiable information. You can find more information -about the data Sun collects at http://java.com/data/. - -For inquiries please contact: Sun Microsystems, Inc., 4150 -Network Circle, Santa Clara, California 95054, U.S.A. +Sun Microsystems, Inc. Binary Code License Agreement + +for the JAVA SE DEVELOPMENT KIT (JDK), VERSION 6 + +SUN MICROSYSTEMS, INC. ("SUN") IS WILLING TO LICENSE THE +SOFTWARE IDENTIFIED BELOW TO YOU ONLY UPON THE CONDITION +THAT YOU ACCEPT ALL OF THE TERMS CONTAINED IN THIS BINARY +CODE LICENSE AGREEMENT AND SUPPLEMENTAL LICENSE TERMS +(COLLECTIVELY "AGREEMENT"). PLEASE READ THE AGREEMENT +CAREFULLY. BY DOWNLOADING OR INSTALLING THIS SOFTWARE, YOU +ACCEPT THE TERMS OF THE AGREEMENT. INDICATE ACCEPTANCE BY +SELECTING THE "ACCEPT" BUTTON AT THE BOTTOM OF THE +AGREEMENT. IF YOU ARE NOT WILLING TO BE BOUND BY ALL THE +TERMS, SELECT THE "DECLINE" BUTTON AT THE BOTTOM OF THE +AGREEMENT AND THE DOWNLOAD OR INSTALL PROCESS WILL NOT +CONTINUE. + +1. DEFINITIONS. "Software" means the identified above in +binary form, any other machine readable materials +(including, but not limited to, libraries, source files, +header files, and data files), any updates or error +corrections provided by Sun, and any user manuals, +programming guides and other documentation provided to you +by Sun under this Agreement. "General Purpose Desktop +Computers and Servers" means computers, including desktop, +laptop and tablet computers, or servers, used for general +computing functions under end user control (such as but not +specifically limited to email, general purpose Internet +browsing, and office suite productivity tools). +The use of Software in systems and solutions that provide +dedicated functionality (other than as mentioned above) or +designed for use in embedded or function-specific software +applications, for example but not limited to: Software +embedded in or bundled with industrial control systems, +wireless mobile telephones, wireless handheld devices, +kiosks, TV/STB, Blu-ray Disc devices, telematics and +network control switching equipment, printers and storage +management systems, and other related systems are excluded +from this definition and not licensed under this +Agreement. "Programs" means Java technology applets and +applications intended to run on the Java Platform Standard +Edition (Java SE) platform on Java-enabled General Purpose +Desktop Computers and Servers. + +2. LICENSE TO USE. Subject to the terms and conditions of +this Agreement, including, but not limited to the Java +Technology Restrictions of the Supplemental License Terms, +Sun grants you a non-exclusive, non-transferable, limited +license without license fees to reproduce and use +internally Software complete and unmodified for the sole +purpose of running Programs. Additional licenses for +developers and/or publishers are granted in the +Supplemental License Terms. + +3. RESTRICTIONS. Software is confidential and copyrighted. +Title to Software and all associated intellectual property +rights is retained by Sun and/or its licensors. Unless +enforcement is prohibited by applicable law, you may not +modify, decompile, or reverse engineer Software. You +acknowledge that Licensed Software is not designed or +intended for use in the design, construction, operation or +maintenance of any nuclear facility. Sun Microsystems, Inc. +disclaims any express or implied warranty of fitness for +such uses. No right, title or interest in or to any +trademark, service mark, logo or trade name of Sun or its +licensors is granted under this Agreement. Additional +restrictions for developers and/or publishers licenses are +set forth in the Supplemental License Terms. + +4. LIMITED WARRANTY. Sun warrants to you that for a period +of ninety (90) days from the date of purchase, as evidenced +by a copy of the receipt, the media on which Software is +furnished (if any) will be free of defects in materials and +workmanship under normal use. Except for the foregoing, +Software is provided "AS IS". Your exclusive remedy and +Sun's entire liability under this limited warranty will be +at Sun's option to replace Software media or refund the fee +paid for Software. Any implied warranties on the Software +are limited to 90 days. Some states do not allow +limitations on duration of an implied warranty, so the +above may not apply to you. This limited warranty gives you +specific legal rights. You may have others, which vary from +state to state. + +5. DISCLAIMER OF WARRANTY. UNLESS SPECIFIED IN THIS +AGREEMENT, ALL EXPRESS OR IMPLIED CONDITIONS, +REPRESENTATIONS AND WARRANTIES, INCLUDING ANY IMPLIED +WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR +PURPOSE OR NON-INFRINGEMENT ARE DISCLAIMED, EXCEPT TO THE +EXTENT THAT THESE DISCLAIMERS ARE HELD TO BE LEGALLY +INVALID. + +6. LIMITATION OF LIABILITY. TO THE EXTENT NOT PROHIBITED BY +LAW, IN NO EVENT WILL SUN OR ITS LICENSORS BE LIABLE FOR +ANY LOST REVENUE, PROFIT OR DATA, OR FOR SPECIAL, INDIRECT, +CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER +CAUSED REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT +OF OR RELATED TO THE USE OF OR INABILITY TO USE SOFTWARE, +EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. In no event will Sun's liability to you, whether +in contract, tort (including negligence), or otherwise, +exceed the amount paid by you for Software under this +Agreement. The foregoing limitations will apply even if the +above stated warranty fails of its essential purpose. Some +states do not allow the exclusion of incidental or +consequential damages, so some of the terms above may not +be applicable to you. + +7. TERMINATION. This Agreement is effective until +terminated. You may terminate this Agreement at any time by +destroying all copies of Software. This Agreement will +terminate immediately without notice from Sun if you fail +to comply with any provision of this Agreement. Either +party may terminate this Agreement immediately should any +Software become, or in either party's opinion be likely to +become, the subject of a claim of infringement of any +intellectual property right. Upon Termination, you must +destroy all copies of Software. + +8. EXPORT REGULATIONS. All Software and technical data +delivered under this Agreement are subject to US export +control laws and may be subject to export or import +regulations in other countries. You agree to comply +strictly with all such laws and regulations and acknowledge +that you have the responsibility to obtain such licenses to +export, re-export, or import as may be required after +delivery to you. + +9. TRADEMARKS AND LOGOS. You acknowledge and agree as +between you and Sun that Sun owns the SUN, SOLARIS, JAVA, +JINI, FORTE, and iPLANET trademarks and all SUN, SOLARIS, +JAVA, JINI, FORTE, and iPLANET-related trademarks, service +marks, logos and other brand designations ("Sun Marks"), +and you agree to comply with the Sun Trademark and Logo +Usage Requirements currently located at +http://www.sun.com/policies/trademarks. Any use you make of +the Sun Marks inures to Sun's benefit. + +10. U.S. GOVERNMENT RESTRICTED RIGHTS. If Software is being +acquired by or on behalf of the U.S. Government or by a +U.S. Government prime contractor or subcontractor (at any +tier), then the Government's rights in Software and +accompanying documentation will be only as set forth in +this Agreement; this is in accordance with 48 CFR 227.7201 +through 227.7202-4 (for Department of Defense (DOD) +acquisitions) and with 48 CFR 2.101 and 12.212 (for non-DOD +acquisitions). + +11. GOVERNING LAW. Any action related to this Agreement +will be governed by California law and controlling U.S. +federal law. No choice of law rules of any jurisdiction +will apply. + +12. SEVERABILITY. If any provision of this Agreement is +held to be unenforceable, this Agreement will remain in +effect with the provision omitted, unless omission would +frustrate the intent of the parties, in which case this +Agreement will immediately terminate. + +13. INTEGRATION. This Agreement is the entire agreement +between you and Sun relating to its subject matter. It +supersedes all prior or contemporaneous oral or written +communications, proposals, representations and warranties +and prevails over any conflicting or additional terms of +any quote, order, acknowledgment, or other communication +between the parties relating to its subject matter during +the term of this Agreement. No modification of this +Agreement will be binding, unless in writing and signed by +an authorized representative of each party. + +SUPPLEMENTAL LICENSE TERMS + +These Supplemental License Terms add to or modify the terms +of the Binary Code License Agreement. Capitalized terms not +defined in these Supplemental Terms shall have the same +meanings ascribed to them in the Binary Code License +Agreement . These Supplemental Terms shall supersede any +inconsistent or conflicting terms in the Binary Code +License Agreement, or in any license contained within the +Software. + +A. Software Internal Use and Development License Grant. +Subject to the terms and conditions of this Agreement and +restrictions and exceptions set forth in the Software +"README" file incorporated herein by reference, including, +but not limited to the Java Technology Restrictions of +these Supplemental Terms, Sun grants you a non-exclusive, +non-transferable, limited license without fees to reproduce +internally and use internally the Software complete and +unmodified for the purpose of designing, developing, and +testing your Programs. + +B. License to Distribute Software. Subject to the terms and +conditions of this Agreement and restrictions and +exceptions set forth in the Software README file, +including, but not limited to the Java Technology +Restrictions of these Supplemental Terms, Sun grants you a +non-exclusive, non-transferable, limited license without +fees to reproduce and distribute the Software, provided +that (i) you distribute the Software complete and +unmodified and only bundled as part of, and for the sole +purpose of running, your Programs, (ii) the Programs add +significant and primary functionality to the Software, +(iii) you do not distribute additional software intended to +replace any component(s) of the Software, (iv) you do not +remove or alter any proprietary legends or notices +contained in the Software, (v) you only distribute the +Software subject to a license agreement that protects Sun's +interests consistent with the terms contained in this +Agreement, and (vi) you agree to defend and indemnify Sun +and its licensors from and against any damages, costs, +liabilities, settlement amounts and/or expenses (including +attorneys' fees) incurred in connection with any claim, +lawsuit or action by any third party that arises or results +from the use or distribution of any and all Programs and/or +Software. + +C. License to Distribute Redistributables. Subject to the +terms and conditions of this Agreement and restrictions and +exceptions set forth in the Software README file, including +but not limited to the Java Technology Restrictions of +these Supplemental Terms, Sun grants you a non-exclusive, +non-transferable, limited license without fees to reproduce +and distribute those files specifically identified as +redistributable in the Software "README" file +("Redistributables") provided that: (i) you distribute the +Redistributables complete and unmodified, and only bundled +as part of Programs, (ii) the Programs add significant and +primary functionality to the Redistributables, (iii) you do +not distribute additional software intended to supersede +any component(s) of the Redistributables (unless otherwise +specified in the applicable README file), (iv) you do not +remove or alter any proprietary legends or notices +contained in or on the Redistributables, (v) you only +distribute the Redistributables pursuant to a license +agreement that protects Sun's interests consistent with the +terms contained in the Agreement, (vi) you agree to defend +and indemnify Sun and its licensors from and against any +damages, costs, liabilities, settlement amounts and/or +expenses (including attorneys' fees) incurred in connection +with any claim, lawsuit or action by any third party that +arises or results from the use or distribution of any and +all Programs and/or Software. + +D. Java Technology Restrictions. You may not create, +modify, or change the behavior of, or authorize your +licensees to create, modify, or change the behavior of, +classes, interfaces, or subpackages that are in any way +identified as "java", "javax", "sun" or similar convention +as specified by Sun in any naming convention designation. + +E. Distribution by Publishers. This section pertains to +your distribution of the Software with your printed book or +magazine (as those terms are commonly used in the industry) +relating to Java technology ("Publication"). Subject to and +conditioned upon your compliance with the restrictions and +obligations contained in the Agreement, in addition to the +license granted in Paragraph 1 above, Sun hereby grants to +you a non-exclusive, nontransferable limited right to +reproduce complete and unmodified copies of the Software on +electronic media (the "Media") for the sole purpose of +inclusion and distribution with your Publication(s), +subject to the following terms: (i) You may not distribute +the Software on a stand-alone basis; it must be distributed +with your Publication(s); (ii) You are responsible for +downloading the Software from the applicable Sun web site; +(iii) You must refer to the Software as JavaTM SE +Development Kit 6; (iv) The Software must be reproduced in +its entirety and without any modification whatsoever +(including, without limitation, the Binary Code License and +Supplemental License Terms accompanying the Software and +proprietary rights notices contained in the Software); +(v) The Media label shall include the following +information: Copyright 2006, Sun Microsystems, Inc. All +rights reserved. Use is subject to license terms. Sun, Sun +Microsystems, the Sun logo, Solaris, Java, the Java Coffee +Cup logo, J2SE, and all trademarks and logos based on Java +are trademarks or registered trademarks of Sun +Microsystems, Inc. in the U.S. and other countries. This +information must be placed on the Media label in such a +manner as to only apply to the Sun Software; (vi) You must +clearly identify the Software as Sun's product on the Media +holder or Media label, and you may not state or imply that +Sun is responsible for any third-party software contained +on the Media; (vii) You may not include any third party +software on the Media which is intended to be a replacement +or substitute for the Software; (viii) You shall indemnify +Sun for all damages arising from your failure to comply +with the requirements of this Agreement. In addition, you +shall defend, at your expense, any and all claims brought +against Sun by third parties, and shall pay all damages +awarded by a court of competent jurisdiction, or such +settlement amount negotiated by you, arising out of or in +connection with your use, reproduction or distribution of +the Software and/or the Publication. Your obligation to +provide indemnification under this section shall arise +provided that Sun: (a) provides you prompt notice of the +claim; (b) gives you sole control of the defense and +settlement of the claim; (c) provides you, at your expense, +with all available information, assistance and authority to +defend; and (d) has not compromised or settled such claim +without your prior written consent; and (ix) You shall +provide Sun with a written notice for each Publication; +such notice shall include the following information: (1) +title of Publication, (2) author(s), (3) date of +Publication, and (4) ISBN or ISSN numbers. Such notice +shall be sent to Sun Microsystems, Inc., 4150 Network +Circle, M/S USCA12-110, Santa Clara, California 95054, +U.S.A , Attention: Contracts Administration. + +F. Source Code. Software may contain source code that, +unless expressly licensed for other purposes, is provided +solely for reference purposes pursuant to the terms of this +Agreement. Source code may not be redistributed unless +expressly provided for in this Agreement. + +G. Third Party Code. Additional copyright notices and +license terms applicable to portions of the Software are +set forth in the THIRDPARTYLICENSEREADME.txt file. In +addition to any terms and conditions of any third party +opensource/freeware license identified in the +THIRDPARTYLICENSEREADME.txt file, the disclaimer of +warranty and limitation of liability provisions in +paragraphs 5 and 6 of the Binary Code License Agreement +shall apply to all Software in this distribution. + +H. Termination for Infringement. Either party may terminate +this Agreement immediately should any Software become, or +in either party's opinion be likely to become, the subject +of a claim of infringement of any intellectual property +right. + +I. Installation and Auto-Update. The Software's +installation and auto-update processes transmit a limited +amount of data to Sun (or its service provider) about those +specific processes to help Sun understand and optimize +them. Sun does not associate the data with personally +identifiable information. You can find more information +about the data Sun collects at http://java.com/data/. + +For inquiries please contact: Sun Microsystems, Inc., 4150 +Network Circle, Santa Clara, California 95054, U.S.A. diff --git a/rpms/legal/FOSS_licenses/java/README.html b/rpms/legal/FOSS_licenses/java/README.html index 91239b6f00..e6d19d4dbe 100755 --- a/rpms/legal/FOSS_licenses/java/README.html +++ b/rpms/legal/FOSS_licenses/java/README.html @@ -1,719 +1,719 @@ - - - - - - - - README -- Java Platform, Standard Edition Development Kit - - - -

README

- -

JavaTM Platform, - Standard Edition 6
- Development Kit

- -

JDKTM 6

- -

Contents

- - - -

Introduction

- -
- Thank you for downloading this release of the JavaTM Platform, Standard Edition Development Kit - (JDKTM). The JDK is a development - environment for building applications, applets, and components using the - Java programming language. -
- -
- The JDK includes tools useful for developing and testing programs written - in the Java programming language and running on the JavaTM platform. -
- -

System Requirements & - Installation

- -
- System requirements, installation instructions and troubleshooting tips - are located on the Java Software web site at: -
- -
- JDK 6 - Installation Instructions -
- -

JDKTM - Documentation

- -
- The on-line JavaTM Platform, Standard Edition (Java SE) - Documentation contains API specifications, feature descriptions, - developer guides, reference pages for JDKTM tools and utilities, demos, and links to related - information. This documentation is also available in a download bundle - which you can install on your machine. To obtain the documentation bundle, - see the download - page. For API documentation, refer to the The - JavaTM Platform, Standard Edition API - Specification This provides brief descriptions of the API with an - emphasis on specifications, not on code examples. -
- -

Release Notes

- -
- See the Java SE 6 Release - Notes on the Java Software web site for additional information - pertaining to this release. Please check the on-line release notes - occasionally for the latest information as they will be updated as needed. -
- -

Compatibility

- -
- See Compatibility - with Previous Releases on the Java Software web site for the list of - known compatibility issues. Every effort has been made to support programs - written for previous versions of the JavaTM platform. Although some incompatible changes were - necessary, most software should migrate to the current version with no - reprogramming. Any failure to do so is considered a bug, except for a - small number of cases where compatibility was deliberately broken, as - described on our compatibility web page. Some compatibility-breaking - changes were required to close potential security holes or to fix - implementation or design bugs. -
- -

Bug Reports and Feedback

- -
- The Bug Database - web site lets you search for and examine existing bug reports, submit your - own bug reports, and tell us which bug fixes matter most to you. To - directly submit a bug or request a feature, fill out this form: -
- -
- http://bugs.sun.com/services/bugreport/index.jsp -
- -
- You can send feedback to the Java SE documentation - team. You can also send comments directly to Java Software engineering - team email addresses. -
- -
- Note - Please do not seek technical support through the Bug - Database or our development teams. For support options, see Support and Services on the - Java Software web site. -
- -

Contents of the JDKTM

- -
- This section contains a general summary of the files and directories in - the JDKTM. For details on the files and - directories, see the JDK - File Structure section of the Java SE documentation for your platform. -
- -
-
-
-
Development Tools
- -
(In the bin/ subdirectory) Tools and utilities that - will help you develop, execute, debug, and document programs written - in the JavaTM programming language. - For further information, see the tool - documentation.
-
- -
Runtime Environment
- -
(In the jre/ subdirectory) An implementation of the - Java Runtime Environment (JRETM) for - use by the JDK. The JRE includes a JavaTM Virtual Machine (JVMTM), class libraries, and other files that support - the execution of programs written in the JavaTM programming language.
-
- -
Additional Libraries
- -
(In the lib/ subdirectory) Additional class libraries - and support files required by the development tools.
-
- -
Demo Applets and Applications
- -
(In the demo/ subdirectory) Examples, with source - code, of programming for the JavaTM - platform. These include examples that use Swing and other - JavaTM Foundation Classes, and the - JavaTM Platform Debugger - Architecture.
-
- -
Sample Code
- -
(In the sample subdirectory) Samples, with source - code, of programming for certain Java API's.
-
- -
C header Files
- -
(In the include/ subdirectory) Header files that - support native-code programming using the Java Native - Interface, the JVMTM - Tool Interface, and other functionality of the - JavaTM platform.
-
- -
Source Code
- -
(In src.zip) JavaTM - programming language source files for all classes that make up the - Java core API (that is, sources files for the java.*, javax.* and - some org.* packages, but not for com.sun.* packages). This source code - is provided for informational purposes only, to help developers learn - and use the JavaTM programming - language. These files do not include platform-specific implementation - code and cannot be used to rebuild the class libraries. To extract - these file, use any common zip utility. Or, you may use the Jar - utility in the JDK's bin/ directory:
-
- jar xvf src.zip
-
-
-
- -

The Java Runtime Environment - (JRETM)

- -
- The JavaTM Runtime Environment - (JRETM) is available as a separately - downloadable product. See the download web site. -
- -
- The JRE allows you to run applications written in the JavaTM programming language. Like the JDKTM, it contains the JavaTM Virtual Machine (JVMTM), classes comprising the JavaTM platform API, and supporting files. Unlike the JDK, - it does not contain development tools such as compilers and debuggers. -
- -
- You can freely redistribute the JRE with your application, according to - the terms of the JRE license. Once you have developed your application - using the JDK, you can ship it with the JRE so your end-users will have a - JavaTM platform on which to run your - software. -
- -

Redistribution

- -
-
-
- NOTE - The license for this software does not allow the redistribution - of beta and other pre-release versions. -
-
-
- -
- Subject to the terms and conditions of the Software License Agreement and - the obligations, restrictions, and exceptions set forth below, You may - reproduce and distribute the Software (and also portions of Software - identified below as Redistributable), provided that: -
- -
-
    -
  1. you distribute the Software complete and unmodified and only bundled - as part of Your applets and applications ("Programs"),
  2. - -
  3. your Programs add significant and primary functionality to the - Software,
  4. - -
  5. your Programs are only intended to run on Java-enabled general - purpose desktop computers and servers,
  6. - -
  7. you distribute Software for the sole purpose of running your - Programs,
  8. - -
  9. you do not distribute additional software intended to replace any - component(s) of the Software,
  10. - -
  11. you do not remove or alter any proprietary legends or notices - contained in or on the Software,
  12. - -
  13. you only distribute the Software subject to a license agreement that - protects Sun's interests consistent with the terms contained in this - Agreement, and
  14. - -
  15. you agree to defend and indemnify Sun and its licensors from and - against any damages, costs, liabilities, settlement amounts and/or - expenses (including attorneys' fees) incurred in connection with any - claim, lawsuit or action by any third party that arises or results from - the use or distribution of any and all Programs and/or Software.
  16. -
-
- -
- The term "vendors" used here refers to licensees, developers, and - independent software vendors (ISVs) who license and distribute the - JavaTM Development Kit - (JDKTM) with their programs. -
- -
- Vendors must follow the terms of the Java Development Kit Binary Code - License agreement. -
- -

Required vs. Optional Files

- -
- The files that make up the JavaTM - Development Kit (JDKTM) are divided into - two categories: required and optional. Optional files may be excluded from - redistributions of the JDK at the vendor's discretion. -
- -
- The following section contains a list of the files and directories that - may optionally be omitted from redistributions of the JDK. All files not - in these lists of optional files must be included in redistributions of - the JDK. -
- -

Optional Files and Directories

- -
- The following files may be optionally excluded from redistributions. These - files are located in the jdk1.6.0_<version> directory, where - <version> is the update version number. SolarisTM and Linux filenames and separators are shown. Windows - executables have the ".exe" suffix. Corresponding files with - _g in the name can also be excluded. The corresponding man - pages should be excluded for any excluded executables (with paths listed - below beginning with bin/, for the SolarisTM Operating System and Linux). -
- -
-
-
-
jre/lib/charsets.jar
- -
Character conversion classes
- -
jre/lib/ext/
- -
sunjce_provider.jar - the SunJCE provider for Java - Cryptography APIs
- localedata.jar - contains many of the resources needed - for non US English locales
- ldapsec.jar - contains security features supported by the - LDAP service provider
- dnsns.jar - for the InetAddress wrapper of JNDI DNS - provider
- -
bin/rmid and jre/bin/rmid
- -
Java RMI Activation System Daemon
- -
bin/rmiregistry and - jre/bin/rmiregistry
- -
Java Remote Object Registry
- -
bin/tnameserv and jre/bin/tnameserv
- -
Java IDL Name Server
- -
bin/keytool and jre/bin/keytool
- -
Key and Certificate Management Tool
- -
bin/kinit and jre/bin/kinit
- -
Used to obtain and cache Kerberos ticket-granting tickets
- -
bin/klist and jre/bin/klist
- -
Kerberos display entries in credentials cache and keytab
- -
bin/ktab and jre/bin/ktab
- -
Kerberos key table manager
- -
bin/policytool and - jre/bin/policytool
- -
Policy File Creation and Management Tool
- -
bin/orbd and jre/bin/orbd
- -
Object Request Broker Daemon
- -
bin/servertool and - jre/bin/servertool
- -
Java IDL Server Tool
- -
bin/javaws, jre/bin/javaws, - jre/lib/javaws/ and jre/lib/javaws.jar
- -
Java Web Start
- -
db/
- -
- Java DB, Sun Microsystems's distribution of the Apache Derby - database technology. Default installation locations are: - -
    -
  • Solaris: /opt/SUNWjavadb
  • - -
  • Linux: /opt/sun/javadb
  • - -
  • Windows: C:\Program Files\Sun\JavaDB
  • -
For information on Java DB and Derby, including user and API - documentation, the capabilities of Java DB and further resources, - see the index.html file in the above directories. -
- -
demo/
- -
Demo Applets and Applications
- -
sample/
- -
Sample Code
- -
src.zip
- -
Archive of source files
-
-
-
- -

Redistributable JDKTM Files

- -
- The limited set of files and directories from the JDK listed below may be - included in vendor redistributions of the JavaTM Runtime Environment (JRETM). They cannot be redistributed separately, and must - accompany an identically versioned JRE distribution. All paths are - relative to the top-level directory of the JDK. The corresponding man - pages should be included for any included executables (with paths listed - below beginning with bin/, for the SolarisTM Operating System and Linux). -
- -
-
-
-
jre/lib/cmm/PYCC.pf
- -
Color profile. This file is required only if one wishes to convert - between the PYCC color space and another color space.
- -
All .ttf font files in the - jre/lib/fonts/ directory.
- -
Note that the LucidaSansRegular.ttf font is already contained in - the JRE, so there is no need to bring that file over from the - JDK.
- -
jre/lib/audio/soundbank.gm
- -
This MIDI soundbank is present in the JDK, but it has been removed - from the JRE in order to reduce the size of the JRE download bundle. - However, a soundbank file is necessary for MIDI playback, and - therefore the JDK's soundbank.gm file may be included in - redistributions of the JRE at the vendor's discretion. Several - versions of enhanced MIDI soundbanks are available from the Java Sound - web site: http://java.sun.com/products/java-media/sound/. - These alternative soundbanks may be included in redistributions of the - JRE.
- -
The javac bytecode compiler, consisting of the following - files:
- -
bin/javac [SolarisTM Operating System and Linux]
- bin/sparcv9/javac [SolarisTM Operating System (SPARC(R) Platform Edition)]
- bin/amd64/javac [SolarisTM Operating System (AMD)]
- bin/javac.exe [Microsoft Windows]
- lib/tools.jar [All platforms]
- -
The Annotation Processing Tool, consisting of the following - files:
- -
lib/tools.jar [All platforms]
- bin/apt [SolarisTM - Operating System and Linux]
- bin/sparcv9/apt [SolarisTM Operating System (SPARC(R) Platform Edition)]
- bin/amd64/apt [SolarisTM Operating System (AMD)]
- bin/apt.exe [Microsoft Windows]
- -
lib/jconsole.jar
- -
The Jconsole application. NOTE: The Jconsole application requires - the dynamic attach mechanism.
- -
The dynamic attach mechanism consisting of the following - files:
- -
lib/tools.jar [All platforms]
- jre/lib/sparc/libattach.so [SolarisTM Operating System (SPARC(R) Platform Edition) and - Linux]
- jre/lib/sparcv9/libattach.so [SolarisTM Operating System (SPARC(R) Platform Edition) and - Linux]
- jre/lib/i386/libattach.so [SolarisTM Operating System (x86) and Linux]
- jre/lib/amd64/libattach.so [SolarisTM Operating System (AMD) and Linux]
- jre\bin\attach.dll [Microsoft Windows]
- -
The Java Platform Debugger Architecture implementation consisting - of the files shown in the dynamic attach section above, and the - following files:
- -
lib/tools.jar [All platforms]
- lib/sa-jdi.jar [All platforms]
- jre/lib/sparc/libsaproc.so [SolarisTM Operating System (SPARC(R) Platform Edition) and - Linux]
- jre/lib/sparcv9/libsaproc.so [SolarisTM Operating System (SPARC(R) Platform Edition) and - Linux]
- jre/lib/i386/libsaproc.so [SolarisTM Operating System (x86) and Linux]
- jre/lib/amd64/libsaproc.so [SolarisTM Operating System (AMD) and Linux]
- -
jre\bin\server\
- -
On Microsoft Windows platforms, the JDK includes both the Java - HotSpotTM Server VM and Java - HotSpotTM Client VM. However, the - JRE for Microsoft Windows platforms includes only the Java - HotSpotTM Client VM. Those wishing - to use the Java HotSpotTM Server VM - with the JRE may copy the JDK's jre\bin\server folder to - a bin\server directory in the JRE. Software vendors may - redistribute the Java HotSpotTM - Server VM with their redistributions of the JRE.
-
-
-
- -

Unlimited Strength Java Cryptography Extension

- -
- Due to import control restrictions for some countries, the Java - Cryptography Extension (JCE) policy files shipped with the JDK and the JRE - allow strong but limited cryptography to be used. These files are located - at
-
- <java-home>/lib/security/local_policy.jar
- <java-home>/lib/security/US_export_policy.jar
-
- where <java-home> is the jre directory of - the JDK or the top-level directory of the JRE. -
- -
- An unlimited strength version of these files indicating no restrictions on - cryptographic strengths is available on the JDK web site for those living - in eligible countries. Those living in eligible countries may download the - unlimited strength version and replace the strong cryptography jar files - with the unlimited strength files. -
- -

The cacerts Certificates File

- -
- Root CA certificates may be added to or removed from the Java SE - certificate file located at -
- -
- <java-home>/lib/security/cacerts -
- -
- For more information, see - The cacerts Certificates File section in the keytool documentation. -
- -

Java Endorsed Standards Override - Mechanism

- -
- From time to time it is necessary to update the Java platform in order to - incorporate newer versions of standards that are created outside of the - Java Community ProcessSM (JCPSM http://www.jcp.org/) (Endorsed - Standards), or in order to update the version of a technology included - in the platform to correspond to a later standalone version of that - technology (Standalone Technologies). -
- -
- The Endorsed Standards Override Mechanism provides a means whereby - later versions of classes and interfaces that implement Endorsed Standards - or Standalone Technologies may be incorporated into the Java Platform. -
- -
- For more information on the Endorsed Standards Override Mechanism, - including the list of platform packages that it may be used to override, - see -
- -
- http://java.sun.com/javase/6/docs/technotes/guides/standards/ -
- -

Java DB

- -
- This distribution bundles Java DB, Sun Microsystems' distribution of the - Apache Derby pure Java database technology. Default installation locations - are: - -
    -
  • Solaris: /opt/SUNWjavadb
  • - -
  • Linux: /opt/sun/javadb
  • - -
  • Windows: C:\Program Files\Sun\JavaDB
  • -
- -

For information on Java DB and Derby, including user and API - documentation, the capabilities of Java DB and further resources, see the - index.html file in the above directories.

-
- -

Web Pages

- -
- For additional information, refer to these Sun Microsystems pages on the - World Wide Web: -
- -
-
-
-
http://java.sun.com/
- -
The Java Software web site, with the latest information on Java - technology, product information, news, and features.
- -
http://java.sun.com/docs
- -
JavaTM platform Documentation - provides access to white papers, the Java Tutorial and other - documents.
- -
http://developer.java.sun.com
- -
Developer Services web site (Free registration required). - Additional technical information, news, and features; user forums; - support information, and much more.
- -
http://java.sun.com/products/
- -
Java Technology Products & API
-
-
-
-
- -

The JavaTM Development - Kit (JDKTM) is a product of Sun - MicrosystemsTM, Inc.
-
- Copyright © 2008 Sun Microsystems, Inc.
- 4150 Network Circle, Santa Clara, California 95054, U.S.A.
- All rights reserved.

- - - - + + + + + + + + README -- Java Platform, Standard Edition Development Kit + + + +

README

+ +

JavaTM Platform, + Standard Edition 6
+ Development Kit

+ +

JDKTM 6

+ +

Contents

+ + + +

Introduction

+ +
+ Thank you for downloading this release of the JavaTM Platform, Standard Edition Development Kit + (JDKTM). The JDK is a development + environment for building applications, applets, and components using the + Java programming language. +
+ +
+ The JDK includes tools useful for developing and testing programs written + in the Java programming language and running on the JavaTM platform. +
+ +

System Requirements & + Installation

+ +
+ System requirements, installation instructions and troubleshooting tips + are located on the Java Software web site at: +
+ +
+ JDK 6 + Installation Instructions +
+ +

JDKTM + Documentation

+ +
+ The on-line JavaTM Platform, Standard Edition (Java SE) + Documentation contains API specifications, feature descriptions, + developer guides, reference pages for JDKTM tools and utilities, demos, and links to related + information. This documentation is also available in a download bundle + which you can install on your machine. To obtain the documentation bundle, + see the download + page. For API documentation, refer to the The + JavaTM Platform, Standard Edition API + Specification This provides brief descriptions of the API with an + emphasis on specifications, not on code examples. +
+ +

Release Notes

+ +
+ See the Java SE 6 Release + Notes on the Java Software web site for additional information + pertaining to this release. Please check the on-line release notes + occasionally for the latest information as they will be updated as needed. +
+ +

Compatibility

+ +
+ See Compatibility + with Previous Releases on the Java Software web site for the list of + known compatibility issues. Every effort has been made to support programs + written for previous versions of the JavaTM platform. Although some incompatible changes were + necessary, most software should migrate to the current version with no + reprogramming. Any failure to do so is considered a bug, except for a + small number of cases where compatibility was deliberately broken, as + described on our compatibility web page. Some compatibility-breaking + changes were required to close potential security holes or to fix + implementation or design bugs. +
+ +

Bug Reports and Feedback

+ +
+ The Bug Database + web site lets you search for and examine existing bug reports, submit your + own bug reports, and tell us which bug fixes matter most to you. To + directly submit a bug or request a feature, fill out this form: +
+ +
+ http://bugs.sun.com/services/bugreport/index.jsp +
+ +
+ You can send feedback to the Java SE documentation + team. You can also send comments directly to Java Software engineering + team email addresses. +
+ +
+ Note - Please do not seek technical support through the Bug + Database or our development teams. For support options, see Support and Services on the + Java Software web site. +
+ +

Contents of the JDKTM

+ +
+ This section contains a general summary of the files and directories in + the JDKTM. For details on the files and + directories, see the JDK + File Structure section of the Java SE documentation for your platform. +
+ +
+
+
+
Development Tools
+ +
(In the bin/ subdirectory) Tools and utilities that + will help you develop, execute, debug, and document programs written + in the JavaTM programming language. + For further information, see the tool + documentation.
+
+ +
Runtime Environment
+ +
(In the jre/ subdirectory) An implementation of the + Java Runtime Environment (JRETM) for + use by the JDK. The JRE includes a JavaTM Virtual Machine (JVMTM), class libraries, and other files that support + the execution of programs written in the JavaTM programming language.
+
+ +
Additional Libraries
+ +
(In the lib/ subdirectory) Additional class libraries + and support files required by the development tools.
+
+ +
Demo Applets and Applications
+ +
(In the demo/ subdirectory) Examples, with source + code, of programming for the JavaTM + platform. These include examples that use Swing and other + JavaTM Foundation Classes, and the + JavaTM Platform Debugger + Architecture.
+
+ +
Sample Code
+ +
(In the sample subdirectory) Samples, with source + code, of programming for certain Java API's.
+
+ +
C header Files
+ +
(In the include/ subdirectory) Header files that + support native-code programming using the Java Native + Interface, the JVMTM + Tool Interface, and other functionality of the + JavaTM platform.
+
+ +
Source Code
+ +
(In src.zip) JavaTM + programming language source files for all classes that make up the + Java core API (that is, sources files for the java.*, javax.* and + some org.* packages, but not for com.sun.* packages). This source code + is provided for informational purposes only, to help developers learn + and use the JavaTM programming + language. These files do not include platform-specific implementation + code and cannot be used to rebuild the class libraries. To extract + these file, use any common zip utility. Or, you may use the Jar + utility in the JDK's bin/ directory:
+
+ jar xvf src.zip
+
+
+
+ +

The Java Runtime Environment + (JRETM)

+ +
+ The JavaTM Runtime Environment + (JRETM) is available as a separately + downloadable product. See the download web site. +
+ +
+ The JRE allows you to run applications written in the JavaTM programming language. Like the JDKTM, it contains the JavaTM Virtual Machine (JVMTM), classes comprising the JavaTM platform API, and supporting files. Unlike the JDK, + it does not contain development tools such as compilers and debuggers. +
+ +
+ You can freely redistribute the JRE with your application, according to + the terms of the JRE license. Once you have developed your application + using the JDK, you can ship it with the JRE so your end-users will have a + JavaTM platform on which to run your + software. +
+ +

Redistribution

+ +
+
+
+ NOTE - The license for this software does not allow the redistribution + of beta and other pre-release versions. +
+
+
+ +
+ Subject to the terms and conditions of the Software License Agreement and + the obligations, restrictions, and exceptions set forth below, You may + reproduce and distribute the Software (and also portions of Software + identified below as Redistributable), provided that: +
+ +
+
    +
  1. you distribute the Software complete and unmodified and only bundled + as part of Your applets and applications ("Programs"),
  2. + +
  3. your Programs add significant and primary functionality to the + Software,
  4. + +
  5. your Programs are only intended to run on Java-enabled general + purpose desktop computers and servers,
  6. + +
  7. you distribute Software for the sole purpose of running your + Programs,
  8. + +
  9. you do not distribute additional software intended to replace any + component(s) of the Software,
  10. + +
  11. you do not remove or alter any proprietary legends or notices + contained in or on the Software,
  12. + +
  13. you only distribute the Software subject to a license agreement that + protects Sun's interests consistent with the terms contained in this + Agreement, and
  14. + +
  15. you agree to defend and indemnify Sun and its licensors from and + against any damages, costs, liabilities, settlement amounts and/or + expenses (including attorneys' fees) incurred in connection with any + claim, lawsuit or action by any third party that arises or results from + the use or distribution of any and all Programs and/or Software.
  16. +
+
+ +
+ The term "vendors" used here refers to licensees, developers, and + independent software vendors (ISVs) who license and distribute the + JavaTM Development Kit + (JDKTM) with their programs. +
+ +
+ Vendors must follow the terms of the Java Development Kit Binary Code + License agreement. +
+ +

Required vs. Optional Files

+ +
+ The files that make up the JavaTM + Development Kit (JDKTM) are divided into + two categories: required and optional. Optional files may be excluded from + redistributions of the JDK at the vendor's discretion. +
+ +
+ The following section contains a list of the files and directories that + may optionally be omitted from redistributions of the JDK. All files not + in these lists of optional files must be included in redistributions of + the JDK. +
+ +

Optional Files and Directories

+ +
+ The following files may be optionally excluded from redistributions. These + files are located in the jdk1.6.0_<version> directory, where + <version> is the update version number. SolarisTM and Linux filenames and separators are shown. Windows + executables have the ".exe" suffix. Corresponding files with + _g in the name can also be excluded. The corresponding man + pages should be excluded for any excluded executables (with paths listed + below beginning with bin/, for the SolarisTM Operating System and Linux). +
+ +
+
+
+
jre/lib/charsets.jar
+ +
Character conversion classes
+ +
jre/lib/ext/
+ +
sunjce_provider.jar - the SunJCE provider for Java + Cryptography APIs
+ localedata.jar - contains many of the resources needed + for non US English locales
+ ldapsec.jar - contains security features supported by the + LDAP service provider
+ dnsns.jar - for the InetAddress wrapper of JNDI DNS + provider
+ +
bin/rmid and jre/bin/rmid
+ +
Java RMI Activation System Daemon
+ +
bin/rmiregistry and + jre/bin/rmiregistry
+ +
Java Remote Object Registry
+ +
bin/tnameserv and jre/bin/tnameserv
+ +
Java IDL Name Server
+ +
bin/keytool and jre/bin/keytool
+ +
Key and Certificate Management Tool
+ +
bin/kinit and jre/bin/kinit
+ +
Used to obtain and cache Kerberos ticket-granting tickets
+ +
bin/klist and jre/bin/klist
+ +
Kerberos display entries in credentials cache and keytab
+ +
bin/ktab and jre/bin/ktab
+ +
Kerberos key table manager
+ +
bin/policytool and + jre/bin/policytool
+ +
Policy File Creation and Management Tool
+ +
bin/orbd and jre/bin/orbd
+ +
Object Request Broker Daemon
+ +
bin/servertool and + jre/bin/servertool
+ +
Java IDL Server Tool
+ +
bin/javaws, jre/bin/javaws, + jre/lib/javaws/ and jre/lib/javaws.jar
+ +
Java Web Start
+ +
db/
+ +
+ Java DB, Sun Microsystems's distribution of the Apache Derby + database technology. Default installation locations are: + +
    +
  • Solaris: /opt/SUNWjavadb
  • + +
  • Linux: /opt/sun/javadb
  • + +
  • Windows: C:\Program Files\Sun\JavaDB
  • +
For information on Java DB and Derby, including user and API + documentation, the capabilities of Java DB and further resources, + see the index.html file in the above directories. +
+ +
demo/
+ +
Demo Applets and Applications
+ +
sample/
+ +
Sample Code
+ +
src.zip
+ +
Archive of source files
+
+
+
+ +

Redistributable JDKTM Files

+ +
+ The limited set of files and directories from the JDK listed below may be + included in vendor redistributions of the JavaTM Runtime Environment (JRETM). They cannot be redistributed separately, and must + accompany an identically versioned JRE distribution. All paths are + relative to the top-level directory of the JDK. The corresponding man + pages should be included for any included executables (with paths listed + below beginning with bin/, for the SolarisTM Operating System and Linux). +
+ +
+
+
+
jre/lib/cmm/PYCC.pf
+ +
Color profile. This file is required only if one wishes to convert + between the PYCC color space and another color space.
+ +
All .ttf font files in the + jre/lib/fonts/ directory.
+ +
Note that the LucidaSansRegular.ttf font is already contained in + the JRE, so there is no need to bring that file over from the + JDK.
+ +
jre/lib/audio/soundbank.gm
+ +
This MIDI soundbank is present in the JDK, but it has been removed + from the JRE in order to reduce the size of the JRE download bundle. + However, a soundbank file is necessary for MIDI playback, and + therefore the JDK's soundbank.gm file may be included in + redistributions of the JRE at the vendor's discretion. Several + versions of enhanced MIDI soundbanks are available from the Java Sound + web site: http://java.sun.com/products/java-media/sound/. + These alternative soundbanks may be included in redistributions of the + JRE.
+ +
The javac bytecode compiler, consisting of the following + files:
+ +
bin/javac [SolarisTM Operating System and Linux]
+ bin/sparcv9/javac [SolarisTM Operating System (SPARC(R) Platform Edition)]
+ bin/amd64/javac [SolarisTM Operating System (AMD)]
+ bin/javac.exe [Microsoft Windows]
+ lib/tools.jar [All platforms]
+ +
The Annotation Processing Tool, consisting of the following + files:
+ +
lib/tools.jar [All platforms]
+ bin/apt [SolarisTM + Operating System and Linux]
+ bin/sparcv9/apt [SolarisTM Operating System (SPARC(R) Platform Edition)]
+ bin/amd64/apt [SolarisTM Operating System (AMD)]
+ bin/apt.exe [Microsoft Windows]
+ +
lib/jconsole.jar
+ +
The Jconsole application. NOTE: The Jconsole application requires + the dynamic attach mechanism.
+ +
The dynamic attach mechanism consisting of the following + files:
+ +
lib/tools.jar [All platforms]
+ jre/lib/sparc/libattach.so [SolarisTM Operating System (SPARC(R) Platform Edition) and + Linux]
+ jre/lib/sparcv9/libattach.so [SolarisTM Operating System (SPARC(R) Platform Edition) and + Linux]
+ jre/lib/i386/libattach.so [SolarisTM Operating System (x86) and Linux]
+ jre/lib/amd64/libattach.so [SolarisTM Operating System (AMD) and Linux]
+ jre\bin\attach.dll [Microsoft Windows]
+ +
The Java Platform Debugger Architecture implementation consisting + of the files shown in the dynamic attach section above, and the + following files:
+ +
lib/tools.jar [All platforms]
+ lib/sa-jdi.jar [All platforms]
+ jre/lib/sparc/libsaproc.so [SolarisTM Operating System (SPARC(R) Platform Edition) and + Linux]
+ jre/lib/sparcv9/libsaproc.so [SolarisTM Operating System (SPARC(R) Platform Edition) and + Linux]
+ jre/lib/i386/libsaproc.so [SolarisTM Operating System (x86) and Linux]
+ jre/lib/amd64/libsaproc.so [SolarisTM Operating System (AMD) and Linux]
+ +
jre\bin\server\
+ +
On Microsoft Windows platforms, the JDK includes both the Java + HotSpotTM Server VM and Java + HotSpotTM Client VM. However, the + JRE for Microsoft Windows platforms includes only the Java + HotSpotTM Client VM. Those wishing + to use the Java HotSpotTM Server VM + with the JRE may copy the JDK's jre\bin\server folder to + a bin\server directory in the JRE. Software vendors may + redistribute the Java HotSpotTM + Server VM with their redistributions of the JRE.
+
+
+
+ +

Unlimited Strength Java Cryptography Extension

+ +
+ Due to import control restrictions for some countries, the Java + Cryptography Extension (JCE) policy files shipped with the JDK and the JRE + allow strong but limited cryptography to be used. These files are located + at
+
+ <java-home>/lib/security/local_policy.jar
+ <java-home>/lib/security/US_export_policy.jar
+
+ where <java-home> is the jre directory of + the JDK or the top-level directory of the JRE. +
+ +
+ An unlimited strength version of these files indicating no restrictions on + cryptographic strengths is available on the JDK web site for those living + in eligible countries. Those living in eligible countries may download the + unlimited strength version and replace the strong cryptography jar files + with the unlimited strength files. +
+ +

The cacerts Certificates File

+ +
+ Root CA certificates may be added to or removed from the Java SE + certificate file located at +
+ +
+ <java-home>/lib/security/cacerts +
+ +
+ For more information, see + The cacerts Certificates File section in the keytool documentation. +
+ +

Java Endorsed Standards Override + Mechanism

+ +
+ From time to time it is necessary to update the Java platform in order to + incorporate newer versions of standards that are created outside of the + Java Community ProcessSM (JCPSM http://www.jcp.org/) (Endorsed + Standards), or in order to update the version of a technology included + in the platform to correspond to a later standalone version of that + technology (Standalone Technologies). +
+ +
+ The Endorsed Standards Override Mechanism provides a means whereby + later versions of classes and interfaces that implement Endorsed Standards + or Standalone Technologies may be incorporated into the Java Platform. +
+ +
+ For more information on the Endorsed Standards Override Mechanism, + including the list of platform packages that it may be used to override, + see +
+ +
+ http://java.sun.com/javase/6/docs/technotes/guides/standards/ +
+ +

Java DB

+ +
+ This distribution bundles Java DB, Sun Microsystems' distribution of the + Apache Derby pure Java database technology. Default installation locations + are: + +
    +
  • Solaris: /opt/SUNWjavadb
  • + +
  • Linux: /opt/sun/javadb
  • + +
  • Windows: C:\Program Files\Sun\JavaDB
  • +
+ +

For information on Java DB and Derby, including user and API + documentation, the capabilities of Java DB and further resources, see the + index.html file in the above directories.

+
+ +

Web Pages

+ +
+ For additional information, refer to these Sun Microsystems pages on the + World Wide Web: +
+ +
+
+
+
http://java.sun.com/
+ +
The Java Software web site, with the latest information on Java + technology, product information, news, and features.
+ +
http://java.sun.com/docs
+ +
JavaTM platform Documentation + provides access to white papers, the Java Tutorial and other + documents.
+ +
http://developer.java.sun.com
+ +
Developer Services web site (Free registration required). + Additional technical information, news, and features; user forums; + support information, and much more.
+ +
http://java.sun.com/products/
+ +
Java Technology Products & API
+
+
+
+
+ +

The JavaTM Development + Kit (JDKTM) is a product of Sun + MicrosystemsTM, Inc.
+
+ Copyright © 2008 Sun Microsystems, Inc.
+ 4150 Network Circle, Santa Clara, California 95054, U.S.A.
+ All rights reserved.

+ + + + diff --git a/rpms/legal/FOSS_licenses/java/THIRDPARTYLICENSEREADME.txt b/rpms/legal/FOSS_licenses/java/THIRDPARTYLICENSEREADME.txt index c5837c2f51..2fc19dc819 100755 --- a/rpms/legal/FOSS_licenses/java/THIRDPARTYLICENSEREADME.txt +++ b/rpms/legal/FOSS_licenses/java/THIRDPARTYLICENSEREADME.txt @@ -1,2289 +1,2289 @@ -DO NOT TRANSLATE OR LOCALIZE. - -%% The following software may be included in this product: CS CodeViewer v1.0; Use of any of this software is governed by the terms of the license below: -Copyright 1999 by CoolServlets.com. - -Any errors or suggested improvements to this class can be reported as instructed on CoolServlets.com. We hope you enjoy this program... your comments will encourage further development! -This software is distributed under the terms of the BSD License. -Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. -2. 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 name of CoolServlets.com 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 COOLSERVLETS.COM 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 AUTHOR 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 INANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." - -%% The following software may be included in this product: Crimson v1.1.1 ; Use of any of this software is governed by the terms of the license below: -/* -* The Apache Software License, Version 1.1 -* -* -* Copyright (c) 1999-2000 The Apache Software Foundation. All rights * reserved. -* -* Redistribution and use in source and binary forms, with or without -* modification, are permitted provided that the following conditions -* are met: -* -* 1. Redistributions of source code must retain the above copyright -* notice, this list of conditions and the following disclaimer. -* -* 2. 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. -* -* 3. The end-user documentation included with the redistribution, -* if any, must include the following acknowledgment: -* "This product includes software developed by the -* Apache Software Foundation (http://www.apache.org/)." -* Alternately, this acknowledgment may appear in the software itself, -* if and wherever such third-party acknowledgments normally appear. -* -* 4. The names "Crimson" and "Apache Software Foundation" must -* not be used to endorse or promote products derived from this -* software without prior written permission. For written -* permission, please contact apache@apache.org. -* -* 5. Products derived from this software may not be called "Apache", -* nor may "Apache" appear in their name, without prior written -* permission of the Apache Software Foundation. -* -* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED 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 APACHE SOFTWARE FOUNDATION OR -* ITS 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. -* ====================================================================* -* This software consists of voluntary contributions made by many -* individuals on behalf of the Apache Software Foundation and was -* originally based on software copyright (c) 1999, International -* Business Machines, Inc., http://www.ibm.com. For more -* information on the Apache Software Foundation, please see -* . -*/ - - -%% The following software may be included in this product: Xalan J2; Use of any of this software is governed by the terms of the license below: - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. - - You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. - - - - -%% The following software may be included in this product: NSIS 1.0j; Use of any of this software is governed by the terms of the license below: -Copyright (C) 1999-2000 Nullsoft, Inc. -This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. Justin Frankel justin@nullsoft.com" - -%% Some Portions licensed from IBM are available at: -http://www.ibm.com/software/globalization/icu/ - -%% Portions Copyright Eastman Kodak Company 1992 - -%% Lucida is a registered trademark or trademark of Bigelow & Holmes in the U.S. and other countries. - -%% Portions licensed from Taligent, Inc. - -%% The following software may be included in this product:IAIK PKCS Wrapper; Use of any of this software is governed by the terms of the license below: - -Copyright (c) 2002 Graz University of Technology. All rights reserved. -Redistribution and use in source and binary forms, with or without modification,are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - -2. 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. - -3. The end-user documentation included with the redistribution, if any, must include the following acknowledgment: - - "This product includes software developed by IAIK of Graz University of Technology." - - Alternately, this acknowledgment may appear in the software itself, if and wherever such third-party acknowledgments normally appear. - -4. The names "Graz University of Technology" and "IAIK of Graz University of Technology" must not be used to endorse or promote products derived from this software without prior written permission. - -5. Products derived from this software may not be called "IAIK PKCS Wrapper", nor may "IAIK" appear in their name, without prior written permission of Graz University of Technology. - -THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED 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 LICENSOR 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. - -%% The following software may be included in this product: Document Object Model (DOM) v. Level 3; Use of any of this software is governed by the terms of the license below: -W3Cýý SOFTWARE NOTICE AND LICENSE - -http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231 - -This work (and included software, documentation such as READMEs, or other related items) is being -provided by the copyright holders under the following license. By obtaining, using and/or copying this work, you -(the licensee) agree that you have read, understood, and will comply with the following terms and conditions. - -Permission to copy, modify, and distribute this software and its documentation, with or without modification, for -any purpose and without fee or royalty is hereby granted, provided that you include the following on ALL copies -of the software and documentation or portions thereof, including modifications: - 1.The full text of this NOTICE in a location viewable to users of the redistributed or derivative work. - 2.Any pre-existing intellectual property disclaimers, notices, or terms and conditions. If none exist, the - W3C Software Short Notice should be included (hypertext is preferred, text is permitted) within the body - of any redistributed or derivative code. - 3.Notice of any changes or modifications to the files, including the date changes were made. (We - recommend you provide URIs to the location from which the code is derived.) -THIS SOFTWARE AND DOCUMENTATION IS PROVIDED "AS IS," AND COPYRIGHT HOLDERS MAKENO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO, -WARRANTIES OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THEUSE OF THE SOFTWARE OR DOCUMENTATION WILL NOT INFRINGE ANY THIRD PARTY PATENTS,COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS. - -COPYRIGHT HOLDERS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL ORCONSEQUENTIAL DAMAGES ARISING OUT OF ANY USE OF THE SOFTWARE OR DOCUMENTATION. -The name and trademarks of copyright holders may NOT be used in advertising or publicity pertaining to the -software without specific, written prior permission. Title to copyright in this software and any associated -documentation will at all times remain with copyright holders. - -____________________________________ - -This formulation of W3C's notice and license became active on December 31 2002. This version removes the -copyright ownership notice such that this license can be used with materials other than those owned by the -W3C, reflects that ERCIM is now a host of the W3C, includes references to this specific dated version of the -license, and removes the ambiguous grant of "use". Otherwise, this version is the same as the previous -version and is written so as to preserve the Free Software Foundation's assessment of GPL compatibility and -OSI's certification under the Open Source Definition. Please see our Copyright FAQ for common questions -about using materials from our site, including specific terms and conditions for packages like libwww, Amaya, -and Jigsaw. Other questions about this notice can be directed to -site-policy@w3.org. - -%% The following software may be included in this product: Xalan, Xerces; Use of any of this software is governed by the terms of the license below: /* - * The Apache Software License, Version 1.1 - * - * - * Copyright (c) 1999-2003 The Apache Software Foundation. All rights * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. * - * 2. 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. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, * if and wherever such third-party acknowledgments normally appear. * - * 4. The names "Xerces" and "Apache Software Foundation" must - * not be used to endorse or promote products derived from this - * software without prior written permission. For written - * permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * nor may "Apache" appear in their name, without prior written - * permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED 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 APACHE SOFTWARE FOUNDATION OR - * ITS 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. - * ==================================================================== * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation and was - * originally based on software copyright (c) 1999, International - * Business Machines, Inc., http://www.ibm.com. For more - * information on the Apache Software Foundation, please see - * - -%% The following software may be included in this product: W3C XML Conformance Test Suites v. 20020606; Use of any of this software is governed by the terms of the license below: -W3Cýý SOFTWARE NOTICE AND LICENSE -Copyright ýý 1994-2002 World Wide Web Consortium, (Massachusetts Institute ofTechnology, Institut National de Recherche en Informatique et en Automatique,Keio University). All Rights Reserved. http://www.w3.org/Consortium/Legal/ -This W3C work (including software, documents, or other related items) is beingprovided by the copyright holders under the following license. By obtaining,using and/or copying this work, you (the licensee) agree that you have read,understood, and will comply with the following terms and conditions: - -Permission to use, copy, modify, and distribute this software and its -documentation, with or without modification, for any purpose and without fee orroyalty is hereby granted, provided that you include the following on ALL copiesof the software and documentation or portions thereof, including modifications,that you make: - - 1. The full text of this NOTICE in a location viewable to users of theredistributed or derivative work. - 2. Any pre-existing intellectual property disclaimers, notices, or terms andconditions. If none exist, a short notice of the following form (hypertext ispreferred, text is permitted) should be used within the body of any -redistributed or derivative code: "Copyright ýý [$date-of-software] World WideWeb Consortium, (Massachusetts Institute of Technology, Institut National deRecherche en Informatique et en Automatique, Keio University). All RightsReserved. http://www.w3.org/Consortium/Legal/" - 3. Notice of any changes or modifications to the W3C files, including thedate changes were made. (We recommend you provide URIs to the location fromwhich the code is derived.) - -THIS SOFTWARE AND DOCUMENTATION IS PROVIDED "AS IS," AND COPYRIGHT HOLDERS MAKENO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITEDTO, WARRANTIES OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THATTHE USE OF THE SOFTWARE OR DOCUMENTATION WILL NOT INFRINGE ANY THIRD PARTYPATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS. - -COPYRIGHT HOLDERS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL ORCONSEQUENTIAL DAMAGES ARISING OUT OF ANY USE OF THE SOFTWARE OR DOCUMENTATION. -The name and trademarks of copyright holders may NOT be used in advertising orpublicity pertaining to the software without specific, written prior permission.Title to copyright in this software and any associated documentation will at alltimes remain with copyright holders. - -____________________________________ - -This formulation of W3C's notice and license became active on August 14 1998 soas to improve compatibility with GPL. This version ensures that W3C softwarelicensing terms are no more restrictive than GPL and consequently W3C softwaremay be distributed in GPL packages. See the older formulation for the policyprior to this date. Please see our Copyright FAQ for common questions aboutusing materials from our site, including specific terms and conditions forpackages like libwww, Amaya, and Jigsaw. Other questions about this notice canbe directed to site-policy@w3.org. - -%% The following software may be included in this product: W3C XML Schema Test Collection v. 1.16.2; Use of any of this software is governed by the terms of the license below: W3Cýýýý DOCUMENT NOTICE AND LICENSE -Copyright ýýýý 1994-2002 World Wide Web Consortium, (Massachusetts Institute ofTechnology, Institut National de Recherche en Informatique et en Automatique,Keio University). All Rights Reserved. -http://www.w3.org/Consortium/Legal/ - -Public documents on the W3C site are provided by the copyright holders under thefollowing license. The software or Document Type Definitions (DTDs) associatedwith W3C specifications are governed by the Software Notice. By using and/orcopying this document, or the W3C document from which this statement is linked,you (the licensee) agree that you have read, understood, and will comply withthe following terms and conditions: - -Permission to use, copy, and distribute the contents of this document, or theW3C document from which this statement is linked, in any medium for any purposeand without fee or royalty is hereby granted, provided that you include thefollowing on ALL copies of the document, or portions thereof, that you use: - 1. A link or URL to the original W3C document. - 2. The pre-existing copyright notice of the original author, or if it doesn'texist, a notice of the form: "Copyright ýýýý [$date-of-document] World Wide WebConsortium, (Massachusetts Institute of Technology, Institut National deRecherche en Informatique et en Automatique, Keio University). All RightsReserved. http://www.w3.org/Consortium/Legal/" (Hypertext is preferred, but atextual representation is permitted.) - 3. If it exists, the STATUS of the W3C document. - -When space permits, inclusion of the full text of this NOTICE should beprovided. We request that authorship attribution be provided in any software,documents, or other items or products that you create pursuant to the -implementation of the contents of this document, or any portion thereof. -No right to create modifications or derivatives of W3C documents is grantedpursuant to this license. However, if additional requirements (documented in theCopyright FAQ) are satisfied, the right to create modifications or derivativesis sometimes granted by the W3C to individuals complying with those requirements. -THIS DOCUMENT IS PROVIDED "AS IS," AND COPYRIGHT HOLDERS MAKE NO REPRESENTATIONSOR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, WARRANTIES OFMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT, OR TITLE;THAT THE CONTENTS OF THE DOCUMENT ARE SUITABLE FOR ANY PURPOSE; NOR THAT THEIMPLEMENTATION OF SUCH CONTENTS WILL NOT INFRINGE ANY THIRD PARTY PATENTS,COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS. - -COPYRIGHT HOLDERS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL ORCONSEQUENTIAL DAMAGES ARISING OUT OF ANY USE OF THE DOCUMENT OR THE PERFORMANCEOR IMPLEMENTATION OF THE CONTENTS THEREOF. - -The name and trademarks of copyright holders may NOT be used in advertising orpublicity pertaining to this document or its contents without specific, writtenprior permission. Title to copyright in this document will at all times remainwith copyright holders. - ----------------------------------------------------------------------------- -This formulation of W3C's notice and license became active on April 05 1999 soas to account for the treatment of DTDs, schema's and bindings. See the olderformulation for the policy prior to this date. Please see our Copyright FAQ forcommon questions about using materials from our site, including specific termsand conditions for packages like libwww, Amaya, and Jigsaw. Other questionsabout this notice can be directed to site-policy@w3.org. -webmaster -(last updated by reagle on 1999/04/99.) - - - -%% The following software may be included in this product: Mesa 3-D graphics library v. 5; Use of any of this software is governed by the terms of the license below: core Mesa code include/GL/gl.h Brian Paul Mesa - -GLX driver include/GL/glx.h Brian Paul Mesa - -Ext registry include/GL/glext.h SGI SGI Free B - include/GL/glxext.h - -Mesa license: - -The Mesa distribution consists of several components. Different copyrights andlicenses apply to different components. For example, GLUT is copyrighted by MarkKilgard, some demo programs are copyrighted by SGI, some of the Mesa devicedrivers are copyrighted by their authors. See below for a list of Mesa'scomponents and the copyright/license for each. - -The core Mesa library is licensed according to the terms of the XFree86copyright (an MIT-style license). This allows integration with the XFree86/DRIproject. Unless otherwise stated, the Mesa source code and documentation islicensed as follows: - -Copyright (C) 1999-2003 Brian Paul All Rights Reserved. - -Permission is hereby granted, free of charge, to any person obtaining acopy of this software and associated documentation files (the "Software"),to deal in the Software without restriction, including without limitationthe 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 includedin all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESSOR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALLBRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER INAN 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. -SGI FREE SOFTWARE LICENSE B (Version 1.1 [02/22/2000]) -1. Definitions. -1.1 "Additional Notice Provisions" means such additional provisions as appear in the Notice in Original Code under the heading "Additional Notice Provisions."1.2 "Covered Code" means the Original Code or Modifications, or any combination thereof.1.3 "Hardware" means any physical device that accepts input, processes input, stores the results of processing, and/or provides output.1.4 "Larger Work" means a work that combines Covered Code or portions thereof with code not governed by the terms of this License.1.5 "Licensable" means having the right to grant, to the maximum extent possible, whether at the time of the initial grant or subsequently acquired, any and all of the rights conveyed herein.1.6 "License" means this document. -1.7 "Licensed Patents" means patent claims Licensable by SGI that are infringed by the use or sale of Original Code or any Modifications provided by SGI, or any combination thereof.1.8 "Modifications" means any addition to or deletion from the substance or structure of the Original Code or any previous Modifications. When Covered Code is released as a series of files, a Modification is: A. Any addition to the contents of a file containing Original Code and/or addition to or deletion from the contents of a file containing previous Modifications.B. Any new file that contains any part of the Original Code or previous Modifications.1.9 "Notice" means any notice in Original Code or Covered Code, as required by and in compliance with this License.1.10 "Original Code" means source code of computer software code that is described in the source code Notice required by Exhibit A as Original Code, and updates and error corrections specifically thereto.1.11 "Recipient" means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License or a future version of this License issued under Section 8. For legal entities, "Recipient" includes any entity that controls, is controlled by, or is under common control with Recipient. For purposes of this definition, "control" of an entity means (a) the power, direct or indirect, to direct or manage such entity, or (b) ownership of fifty percent (50%) or more of the outstanding shares or beneficial ownership of such entity.1.12 "Recipient Patents" means patent claims Licensable by a Recipient that are infringed by the use or sale of Original Code or any Modifications provided by SGI, or any combination thereof. 1.13 "SGI" means Silicon Graphics, Inc. -1.14 "SGI Patents" means patent claims Licensable by SGI other than the Licensed Patents.2. License Grant and Restrictions. -2.1 SGI License Grant. Subject to the terms of this License and any third party intellectual property claims, for the duration of intellectual property protections inherent in the Original Code, SGI hereby grants Recipient a worldwide, royalty-free, non-exclusive license, to do the following: (i) under copyrights Licensable by SGI, to reproduce, distribute, create derivative works from, and, to the extent applicable, display and perform the Original Code and/or any Modifications provided by SGI alone and/or as part of a Larger Work; and (ii) under any Licensable Patents, to make, have made, use, sell, offer for sale, import and/or otherwise transfer the Original Code and/or any Modifications provided by SGI. Recipient accepts the terms and conditions of this License by undertaking any of the aforementioned actions. The patent license shall apply to the Covered Code if, at the time any related Modification is added, such addition of the Modification causes such combination to be covered by the Licensed Patents. The patent license in Section 2.1(ii) shall not apply to any other combinations that include the Modification. No patent license is provided under SGI Patents for infringements of SGI Patents by Modifications not provided by SGI or combinations of Original Code and Modifications not provided by SGI. 2.2 Recipient License Grant. Subject to the terms of this License and any third party intellectual property claims, Recipient hereby grants SGI and any other Recipients a worldwide, royalty-free, non-exclusive license, under any Recipient Patents, to make, have made, use, sell, offer for sale, import and/or otherwise transfer the Original Code and/or any Modifications provided by SGI.2.3 No License For Hardware Implementations. The licenses granted in Section 2.1 and 2.2 are not applicable to implementation in Hardware of the algorithms embodied in the Original Code or any Modifications provided by SGI .3. Redistributions. -3.1 Retention of Notice/Copy of License. The Notice set forth in Exhibit A, below, must be conspicuously retained or included in any and all redistributions of Covered Code. For distributions of the Covered Code in source code form, the Notice must appear in every file that can include a text comments field; in executable form, the Notice and a copy of this License must appear in related documentation or collateral where the Recipient's rights relating to Covered Code are described. Any Additional Notice Provisions which actually appears in the Original Code must also be retained or included in any and all redistributions of Covered Code.3.2 Alternative License. Provided that Recipient is in compliance with the terms of this License, Recipient may, so long as without derogation of any of SGI's rights in and to the Original Code, distribute the source code and/or executable version(s) of Covered Code under (1) this License; (2) a license identical to this License but for only such changes as are necessary in order to clarify Recipient's role as licensor of Modifications; and/or (3) a license of Recipient's choosing, containing terms different from this License, provided that the license terms include this Section 3 and Sections 4, 6, 7, 10, 12, and 13, which terms may not be modified or superseded by any other terms of such license. If Recipient elects to use any license other than this License, Recipient must make it absolutely clear that any of its terms which differ from this License are offered by Recipient alone, and not by SGI. It is emphasized that this License is a limited license, and, regardless of the license form employed by Recipient in accordance with this Section 3.2, Recipient may relicense only such rights, in Original Code and Modifications by SGI, as it has actually been granted by SGI in this License.3.3 Indemnity. Recipient hereby agrees to indemnify SGI for any liability incurred by SGI as a result of any such alternative license terms Recipient offers.4. Termination. This License and the rights granted hereunder will terminate automatically if Recipient breaches any term herein and fails to cure such breach within 30 days thereof. Any sublicense to the Covered Code that is properly granted shall survive any termination of this License, absent termination by the terms of such sublicense. Provisions that, by their nature, must remain in effect beyond the termination of this License, shall survive.5. No Trademark Or Other Rights. This License does not grant any rights to: (i) any software apart from the Covered Code, nor shall any other rights or licenses not expressly granted hereunder arise by implication, estoppel or otherwise with respect to the Covered Code; (ii) any trade name, trademark or service mark whatsoever, including without limitation any related right for purposes of endorsement or promotion of products derived from the Covered Code, without prior written permission of SGI; or (iii) any title to or ownership of the Original Code, which shall at all times remains with SGI. All rights in the Original Code not expressly granted under this License are reserved. 6. Compliance with Laws; Non-Infringement. There are various worldwide laws, regulations, and executive orders applicable to dispositions of Covered Code, including without limitation export, re-export, and import control laws, regulations, and executive orders, of the U.S. government and other countries, and Recipient is reminded it is obliged to obey such laws, regulations, and executive orders. Recipient may not distribute Covered Code that (i) in any way infringes (directly or contributorily) any intellectual property rights of any kind of any other person or entity or (ii) breaches any representation or warranty, express, implied or statutory, to which, under any applicable law, it might be deemed to have been subject.7. Claims of Infringement. If Recipient learns of any third party claim that any disposition of Covered Code and/or functionality wholly or partially infringes the third party's intellectual property rights, Recipient will promptly notify SGI of such claim.8. Versions of the License. SGI may publish revised and/or new versions of the License from time to time, each with a distinguishing version number. Once Covered Code has been published under a particular version of the License, Recipient may, for the duration of the license, continue to use it under the terms of that version, or choose to use such Covered Code under the terms of any subsequent version published by SGI. Subject to the provisions of Sections 3 and 4 of this License, only SGI may modify the terms applicable to Covered Code created under this License.9. DISCLAIMER OF WARRANTY. COVERED CODE IS PROVIDED "AS IS." ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS ARE DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. SGI ASSUMES NO RISK AS TO THE QUALITY AND PERFORMANCE OF THE SOFTWARE. SHOULD THE SOFTWARE PROVE DEFECTIVE IN ANY RESPECT, SGI ASSUMES NO COST OR LIABILITY FOR SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY IS AN ESSENTIAL PART OF THIS LICENSE. NO USE OF ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT SUBJECT TO THIS DISCLAIMER.10. LIMITATION OF LIABILITY. UNDER NO CIRCUMSTANCES NOR LEGAL THEORY, WHETHER TORT (INCLUDING, WITHOUT LIMITATION, NEGLIGENCE OR STRICT LIABILITY), CONTRACT, OR OTHERWISE, SHALL SGI OR ANY SGI LICENSOR BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL, WORK STOPPAGE, LOSS OF DATA, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY RESULTING FROM SGI's NEGLIGENCE TO THE EXTENT APPLICABLE LAW PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THAT EXCLUSION AND LIMITATION MAY NOT APPLY TO RECIPIENT.11. Indemnity. Recipient shall be solely responsible for damages arising, directly or indirectly, out of its utilization of rights under this License. Recipient will defend, indemnify and hold harmless Silicon Graphics, Inc. from and against any loss, liability, damages, costs or expenses (including the payment of reasonable attorneys fees) arising out of Recipient's use, modification, reproduction and distribution of the Covered Code or out of any representation or warranty made by Recipient.12. U.S. Government End Users. The Covered Code is a "commercial item" consisting of "commercial computer software" as such terms are defined in title 48 of the Code of Federal Regulations and all U.S. Government End Users acquire only the rights set forth in this License and are subject to the terms of this License.13. Miscellaneous. This License represents the complete agreement concerning the its subject matter. If any provision of this License is held to be unenforceable, such provision shall be reformed so as to achieve as nearly as possible the same legal and economic effect as the original provision and the remainder of this License will remain in effect. This License shall be governed by and construed in accordance with the laws of the United States and the State of California as applied to agreements entered into and to be performed entirely within California between California residents. Any litigation relating to this License shall be subject to the exclusive jurisdiction of the Federal Courts of the Northern District of California (or, absent subject matter jurisdiction in such courts, the courts of the State of California), with venue lying exclusively in Santa Clara County, California, with the losing party responsible for costs, including without limitation, court costs and reasonable attorneys fees and expenses. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any law or regulation that provides that the language of a contract shall be construed against the drafter shall not apply to this License. -Exhibit A -License Applicability. Except to the extent portions of this file are made subject to an alternative license as permitted in the SGI Free Software License B, Version 1.1 (the "License"), the contents of this file are subject only to the provisions of the License. You may not use this file except in compliance with the License. You may obtain a copy of the License at Silicon Graphics, Inc., attn: Legal Services, 1600 Amphitheatre Parkway, Mountain View, CA 94043-1351, or at: http://oss.sgi.com/projects/FreeB -Note that, as provided in the License, the Software is distributed on an "AS IS" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT.Original Code. The Original Code is: [name of software, version number, and release date], developed by Silicon Graphics, Inc. The Original Code is Copyright (c) [dates of first publication, as appearing in the Notice in the Original Code] Silicon Graphics, Inc. Copyright in any portions created by third parties is as indicated elsewhere herein. All Rights Reserved.Additional Notice Provisions: [such additional provisions, if any, as appear in the Notice in the Original Code under the heading "Additional Notice Provisions"] -%% The following software may be included in this product: Byte Code Engineering Library (BCEL) v. 5; Use of any of this software is governed by the terms of the license below: - Apache Software License - - /* -==================================================================== * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. Allrights - * reserved. - * - * Redistribution and use in source and binary forms, withor without - * modification, are permitted provided that the followingconditions - * are met: - * - * 1. Redistributions of source code must retain the abovecopyright - * notice, this list of conditions and the followingdisclaimer. - * - * 2. Redistributions in binary form must reproduce theabove copyright - * notice, this list of conditions and the followingdisclaimer in - * the documentation and/or other materials providedwith the - * distribution. - * - * 3. The end-user documentation included with theredistribution, - * if any, must include the following acknowledgment: * "This product includes software developed by the * Apache Software Foundation -(http://www.apache.org/)." - * Alternately, this acknowledgment may appear in thesoftware itself, - * if and wherever such third-party acknowledgmentsnormally appear. - * - * 4. The names "Apache" and "Apache Software Foundation"and - * "Apache BCEL" must not be used to endorse or promoteproducts - * derived from this software without prior writtenpermission. For - * written permission, please contact apache@apache.org. * - * 5. Products derived from this software may not be called"Apache", - * "Apache BCEL", nor may "Apache" appear in their name,without - * prior written permission of the Apache SoftwareFoundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED ORIMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIEDWARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSEARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWAREFOUNDATION OR - * ITS 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) HOWEVERCAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICTLIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING INANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THEPOSSIBILITY OF - * SUCH DAMAGE. - * -==================================================================== * - * This software consists of voluntary contributions madeby many - * individuals on behalf of the Apache Software -Foundation. For more - - - * information on the Apache Software Foundation, pleasesee - * . - */ - - - -%% The following software may be included in this product: Regexp, Regular Expression Package v. 1.2; Use of any of this software is governed by the terms of the license below: The Apache Software License, Version 1.1 -Copyright (c) 2001 The Apache Software Foundation. All rights -reserved. -Redistribution and use in source and binary forms, with or without modification,are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - -2. 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. - -3. The end-user documentation included with the redistribution, -if any, must include the following acknowledgment: -"This product includes software developed by the -Apache Software Foundation (http://www.apache.org/)." -Alternately, this acknowledgment may appear in the software itself, -if and wherever such third-party acknowledgments normally appear. - -4. The names "Apache" and "Apache Software Foundation" and -"Apache Turbine" must not be used to endorse or promote products -derived from this software without prior written permission. For -written permission, please contact apache@apache.org. - -5. Products derived from this software may not be called "Apache", -"Apache Turbine", nor may "Apache" appear in their name, without -prior written permission of the Apache Software Foundation. - -THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED 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 APACHE SOFTWARE FOUNDATION OR -ITS 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. - -==================================================================== -This software consists of voluntary contributions made by many -individuals on behalf of the Apache Software Foundation. For more -information on the Apache Software Foundation, please see - -http://www.apache.org. - -%% The following software may be included in this product: CUP Parser Generator for Java v. 0.10k; Use of any of this software is governed by the terms of the license below: CUP Parser Generator Copyright Notice, License, and Disclaimer - -Copyright 1996-1999 by Scott Hudson, Frank Flannery, C. Scott Ananian -Permission to use, copy, modify, and distribute this software and its -documentation for any purpose and without fee is hereby granted, provided thatthe above copyright notice appear in all copies and that both the copyrightnotice and this permission notice and warranty disclaimer appear in -supporting documentation, and that the names of the authors or their employersnot be used in advertising or publicity pertaining to distribution of -the software without specific, written prior permission. - -The authors and their employers disclaim all warranties with regard to thissoftware, including all implied warranties of merchantability and -fitness. In no event shall the authors or their employers be liable for anyspecial, indirect or consequential damages or any damages whatsoever -resulting from loss of use, data or profits, whether in an action of contract,negligence or other tortious action, arising out of or in connection withthe use or performance of this software. - -%% The following software may be included in this product: JLex: A Lexical Analyzer Generator for Java v. 1.2.5; Use of any of this software is governed by the terms of the license below: JLEX COPYRIGHT NOTICE, LICENSE AND DISCLAIMER. - -Copyright 1996-2003 by Elliot Joel Berk and C. Scott Ananian - -Permission to use, copy, modify, and distribute this software and its -documentation for any purpose -and without fee is hereby granted, provided that the above copyright noticeappear in all copies -and that both the copyright notice and this permission notice and warrantydisclaimer appear in -supporting documentation, and that the name of the authors or their employersnot be used in -advertising or publicity pertaining to distribution of the software withoutspecific, written prior -permission. - -The authors and their employers disclaim all warranties with regard to thissoftware, including all -implied warranties of merchantability and fitness. In no event shall the authorsor their employers -be liable for any special, indirect or consequential damages or any damageswhatsoever resulting -from loss of use, data or profits, whether in an action of contract, negligenceor other tortious -action, arising out of or in connection with the use or performance of thissoftware. - -Java is a trademark of Sun Microsystems, Inc. References to the Java programminglanguage in -relation to JLex are not meant to imply that Sun endorses this -product. - -%% The following software may be included in this product: SAX v. 2.0.1; Use of any of this software is governed by the terms of the license below: Copyright Status - - SAX is free! - - In fact, it's not possible to own a license to SAX, since it's been placed in the public - domain. - - No Warranty - - Because SAX is released to the public domain, there is no warranty for the design or for - the software implementation, to the extent permitted by applicable law. Except when - otherwise stated in writing the copyright holders and/or other parties provide SAX "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 SAX is with you. Should SAX prove defective, you - assume the cost of all necessary servicing, repair or correction. - - 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 SAX, be liable to you for - damages, including any general, special, incidental or consequential damages arising out of - the use or inability to use SAX (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 SAX to - operate with any other programs), even if such holder or other party has been advised of - the possibility of such damages. - - Copyright Disclaimers - - This page includes statements to that effect by David Megginson, who would have been - able to claim copyright for the original work. - SAX 1.0 - - Version 1.0 of the Simple API for XML (SAX), created collectively by the membership of - the XML-DEV mailing list, is hereby released into the public domain. - - No one owns SAX: you may use it freely in both commercial and non-commercial - applications, bundle it with your software distribution, include it on a CD-ROM, list the - source code in a book, mirror the documentation at your own web site, or use it in any - other way you see fit. - - David Megginson, sax@megginson.com - 1998-05-11 - - SAX 2.0 - - I hereby abandon any property rights to SAX 2.0 (the Simple API for XML), and release - all of the SAX 2.0 source code, compiled code, and documentation contained in this - distribution into the Public Domain. SAX comes with NO WARRANTY or guarantee of - fitness for any purpose. - - David Megginson, david@megginson.com - 2000-05-05 - -%% The following software may be included in this product: Cryptix; Use of any of this software is governed by the terms of the license below: -Cryptix General License - -Copyright © 1995-2003 The Cryptix Foundation Limited. All rights reserved. -Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions aremet: - - 1.Redistributions of source code must retain the copyright notice, this list of conditions and the following disclaimer. 2.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. -THIS SOFTWARE IS PROVIDED BY THE CRYPTIX FOUNDATION LIMITED AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS ORIMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FORA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE CRYPTIX FOUNDATION LIMITED OR CONTRIBUTORS BELIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOTLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESSINTERRUPTION) 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 OFTHE POSSIBILITY OF SUCH DAMAGE. - -%% The following software may be included in this product: W3C XML Schema Test Collection; Use of any of this software is governed by the terms of the license below: -W3C® DOCUMENT NOTICE AND LICENSE -Copyright © 1994-2002 World Wide Web Consortium, (Massachusetts Institute ofTechnology, Institut National de Recherche en Informatique et en Automatique,Keio University). All Rights Reserved. -http://www.w3.org/Consortium/Legal/ - -Public documents on the W3C site are provided by the copyright holders under thefollowing license. The software or Document Type Definitions (DTDs) associatedwith W3C specifications are governed by the Software Notice. By using and/orcopying this document, or the W3C document from which this statement is linked,you (the licensee) agree that you have read, understood, and will comply withthe following terms and conditions: - -Permission to use, copy, and distribute the contents of this document, or theW3C document from which this statement is linked, in any medium for any purposeand without fee or royalty is hereby granted, provided that you include thefollowing on ALL copies of the document, or portions thereof, that you use: - 1. A link or URL to the original W3C document. - 2. The pre-existing copyright notice of the original author, or if it doesn'texist, a notice of the form: "Copyright © [$date-of-document] World Wide WebConsortium, (Massachusetts Institute of Technology, Institut National deRecherche en Informatique et en Automatique, Keio University). All RightsReserved. http://www.w3.org/Consortium/Legal/" (Hypertext is preferred, but atextual representation is permitted.) - 3. If it exists, the STATUS of the W3C document. - -When space permits, inclusion of the full text of this NOTICE should beprovided. We request that authorship attribution be provided in any software,documents, or other items or products that you create pursuant to the -implementation of the contents of this document, or any portion thereof. -No right to create modifications or derivatives of W3C documents is grantedpursuant to this license. However, if additional requirements (documented in theCopyright FAQ) are satisfied, the right to create modifications or derivativesis sometimes granted by the W3C to individuals complying with those requirements. -THIS DOCUMENT IS PROVIDED "AS IS," AND COPYRIGHT HOLDERS MAKE NO REPRESENTATIONSOR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, WARRANTIES OFMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT, OR TITLE;THAT THE CONTENTS OF THE DOCUMENT ARE SUITABLE FOR ANY PURPOSE; NOR THAT THEIMPLEMENTATION OF SUCH CONTENTS WILL NOT INFRINGE ANY THIRD PARTY PATENTS,COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS. - -COPYRIGHT HOLDERS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL ORCONSEQUENTIAL DAMAGES ARISING OUT OF ANY USE OF THE DOCUMENT OR THE PERFORMANCEOR IMPLEMENTATION OF THE CONTENTS THEREOF. - -The name and trademarks of copyright holders may NOT be used in advertising orpublicity pertaining to this document or its contents without specific, writtenprior permission. Title to copyright in this document will at all times remainwith copyright holders. - ----------------------------------------------------------------------------- -This formulation of W3C's notice and license became active on April 05 1999 soas to account for the treatment of DTDs, schema's and bindings. See the olderformulation for the policy prior to this date. Please see our Copyright FAQ forcommon questions about using materials from our site, including specific termsand conditions for packages like libwww, Amaya, and Jigsaw. Other questionsabout this notice can be directed to site-policy@w3.org. -webmaster -(last updated by reagle on 1999/04/99.) - -%% The following software may be included in this product: Stax API; Use of any of this software is governed by the terms of the license below: -Streaming API for XML (JSR-173) Specification -Reference Implementation -License Agreement - -READ THE TERMS OF THIS (THE "AGREEMENT") CAREFULLY BEFORE VIEWING OR USING THESOFTWARE LICENS -ED HEREUNDER. BY VIEWING OR USING THE SOFTWARE, YOU AGREE TO THE TERMS OF THISAGREEMENT. IF -YOU ARE ACCESSING THE SOFTWARE ELECTRONICALLY, INDICATE YOUR ACCEPTANCE OF THESETERMS BY SELE -CTING THE "ACCEPT" BUTTON AT THE END OF THIS AGREEMENT. IF YOU DO NOT AGREE TOALL THESE TERMS -, PROMPTLY RETURN THE UNUSED SOFTWARE TO ORIGINAL CONTRIBUTOR, DEFINED HEREIN. -1.0 DEFINITIONS. - -1.1. "BEA" means BEA Systems, Inc., the licensor of the Original Code. -1.2. "Contributor" means BEA and each entity that creates or contributes to thecreation of Mo -difications. - -1.3. "Covered Code" means the Original Code or Modifications or the combinationof the Origina -l Code and Modifications, in each case including portions thereof and -corresponding documentat -ion released with the source code. - -1.4. "Executable" means Covered Code in any form other than Source Code. -1.5. "FCS" means first commercial shipment of a product. - -1.6. "Modifications" means any addition to or deletion from the substance orstructure of eith -er the Original Code or any previous Modifications. When Covered Code isreleased as a series -of files, a Modification is: - -(a) Any addition to or deletion from the contents of a file containing OriginalCode or previ -ous Modifications. - -(b) Any new file that contains any part of the Original Code or previousModifications. - -1.7. "Original Code" means Source Code of computer software code ReferenceImplementation. - -1.8. "Patent Claims" means any patent claim(s), now owned or hereafter acquired,including wit -hout limitation, method, process, and apparatus claims, in any patent for whichthe grantor ha -s the right to grant a license. - -1.9. "Reference Implementation" means the prototype or "proof of concept"implementaÂtion of -the Specification developed and made available for license by or on behalf of BEA. -1.10. "Source Code" means the preferred form of the Covered Code for makingmodifications to i -t, including all modules it contains, plus any associated documentation,interface definition -files, scripts used to control compilation and installation of an Executable, orsource code d -ifferential comparisons against either the Original Code or another well known,available Cove -red Code of the Contributor's choice. - -1.11. "Specification" means the written specification for the Streaming API forXML , Java te -chnology developed pursuant to the Java Community Process. -1.12. "Technology Compatibility Kit" or "TCK" means the documentation, testingtools and test -suites associated with the Specification as may be revised by BEA from time totime, that is p -rovided so that an implementer of the SpecifiÂcation may determine if itsimplementation is co -mpliant with the Specification. - -1.13. "You" (or "Your") means an individual or a legal entity exercising rightsunder, and com -plying with all of the terms of, this Agreement or a future version of thisAgreement issued u -nder Section 6.1. For legal entities, "You" includes any entity which controls,is controlled -by, or is under common control with You. For purposes of this definition,"control" means (a) -the power, direct or indirect, to cause the direction or management of suchentity, whether by - contract or otherwise, or (b) ownership of more than fifty percent (50%) of theoutstanding s -hares or beneficial ownership of such entity. - -2.0 SOURCE CODE LICENSE. - -2.1. Copyright Grant. Subject to the terms of this Agreement, each Contributorhereby grants -You a non-exclusive, worldwide, royalty-free copyright license to reproduce,prepare derivativ -e works of, publicly display, publicly perform, distribute and sublicense theCovered Code of -such Contributor, if any, and such derivative works, in Source Code andExecutable form. - -2.2. Patent Grant. Subject to the terms of this Agreement, each Contributorhereby grants Yo -u a non-exclusive, worldwide, royalty-free patent license under the PatentClaims to make, use -, sell, offer to sell, import and otherwise transfer the Covered Code preparedand provided by - such Contributor, if any, in Source Code and Executable form. This patentlicense shall apply - to the Covered Code if, at the time a Modification is added by the Contributor,such addition - of the Modification causes such combination to be covered by the Patent Claims.The patent li -cense shall not apply to any other combinations which include the Modification. -2.3. Conditions to Grants. You understand that although each Contributorgrants the licenses - to the Covered Code prepared by it, no assurances are provided by anyContributor that the Co -vered Code does not infringe the patent or other intellectual property rights ofany other ent -ity. Each Contributor disclaims any liability to You for claims brought by anyother entity ba -sed on infringement of intellectual property rights or otherwise. As a conditionto exercising - the rights and licenses granted hereunder, You hereby assume sole -responsibility to secure an -y other intellectual property rights needed, if any. For example, if a thirdparty patent lice -nse is required to allow You to distribute Covered Code, it is Your -responsibility to acquire -that license before distributing such code. - -2.4. Contributors' Representation. Each Contributor represents that to itsknowledge it has -sufficient copyright rights in the Covered Code it provides , if any, to grantthe copyright l -icense set forth in this Agreement. - -3.0 DISTRIBUION RESTRICTIONS. - -3.1. Application of Agreement. - -The Modifications which You create or to which You contribute are governed bythe terms of thi -s Agreement, including without limitation Section 2.0. The Source Code versionof Covered Code - may be distributed only under the terms of this Agreement or a future versionof this Agreeme -nt released under Section 6.1, and You must include a copy of this Agreementwith every copy o -f the Source Code You distribute. You may not offer or impose any terms on anySource Code ver -sion that alters or restricts the applicable version of this Agreement or therecipients' righ -ts hereunder. However, You may include an additional document offering theadditional rights d -escribed in Section 3.3. - -3.2. Description of Modifications. - -You must cause all Covered Code to which You contribute to contain a filedocumenting the chan -ges You made to create that Covered Code and the date of any change. You mustinclude a promin -ent statement that the Modification is derived, directly or indirectly, fromOriginal Code pro -vided by BEA and including the name of BEA in (a) the Source Code, and (b) inany notice in an - Executable version or related documentation in which You describe the origin orownership of -the Covered Code. - -%% The following software may be included in this product: X Window System; Use of any of this software is governed by the terms of the license below: -Copyright The Open Group - -Permission to use, copy, modify, distribute, and sell this software and itsdocumentation for any purpose is hereby granted without fee, provided that theabove copyright notice appear in all copies and that both that copyright noticeand this permission notice appear in supporting documentation. - -The above copyright notice and this permission notice shall be included in allcopies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS ORIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESSFOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE OPEN GROUPBE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OFCONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THESOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the name of The Open Group shall not be usedin advertising or otherwise to promote the sale, use or other dealings in thisSoftware without prior written authorization from The Open Group. - -Portions also covered by other licenses as noted in the above URL. - -%% The following software may be included in this product: dom4j v. 1.6; Use of any of this software is governed by the terms of the license below: -Redistribution and use of this software and associated documentation -("Software"), with or without modification, are permitted provided that thefollowing conditions are met: - - 1. Redistributions of source code must retain copyright statements andnotices. Redistributions must also contain a copy of this document. - 2. Redistributions in binary form must reproduce the above copyright notice,this list of conditions and the following disclaimer in the documentation and/orother materials provided with the distribution. - 3. The name "DOM4J" must not be used to endorse or promote products derivedfrom this Software without prior written permission of MetaStuff, Ltd. Forwritten permission, please contact dom4j-info@metastuff.com. - 4. Products derived from this Software may not be called "DOM4J" nor may"DOM4J" appear in their names without prior written permission of MetaStuff,Ltd. DOM4J is a registered trademark of MetaStuff, Ltd. - 5. Due credit should be given to the DOM4J Project - http://www.dom4j.org -THIS SOFTWARE IS PROVIDED BY METASTUFF, LTD. AND CONTRIBUTORS ``AS IS'' AND ANYEXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIEDWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE AREDISCLAIMED. IN NO EVENT SHALL METASTUFF, LTD. OR ITS CONTRIBUTORS BE LIABLE FORANY 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 ONANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THISSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -Copyright 2001-2005 (C) MetaStuff, Ltd. All Rights Reserved. - -%% The following software may be included in this product: Retroweaver; Use of any of this software is governed by the terms of the license below: -Copyright (c) February 2004, Toby Reyelts -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 Toby Reyelts nor the names of his 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, STRICTLIABILITY, -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. - -%% The following software may be included in this product: stripper; Use of any of this software is governed by the terms of the license below: -Stripper : debug information stripper - Copyright (c) 2003 Kohsuke Kawaguchi - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. 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. 3. Neither the name of the copyright holders 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. - - -%% The following software may be included in this product: libpng official PNG reference library; Use of any of this software is governed by the terms of the license below: -This copy of the libpng notices is provided for your convenience. In case ofany discrepancy between this copy and the notices in the file png.h that isincluded in the libpng distribution, the latter shall prevail. - -COPYRIGHT NOTICE, DISCLAIMER, and LICENSE: - -If you modify libpng you may insert additional notices immediately followingthis sentence. - -libpng version 1.2.6, December 3, 2004, is -Copyright (c) 2004 Glenn Randers-Pehrson, and is -distributed according to the same disclaimer and license as libpng-1.2.5with the following individual added to the list of Contributing Authors - Cosmin Truta - -libpng versions 1.0.7, July 1, 2000, through 1.2.5 - October 3, 2002, areCopyright (c) 2000-2002 Glenn Randers-Pehrson, and are -distributed according to the same disclaimer and license as libpng-1.0.6with the following individuals added to the list of Contributing Authors - Simon-Pierre Cadieux - Eric S. Raymond - Gilles Vollant - -and with the following additions to the disclaimer: - - There is no warranty against interference with your enjoyment of the library or against infringement. There is no warranty that our - efforts or the library will fulfill any of your particular purposes or needs. This library is provided with all faults, and the entire risk of satisfactory quality, performance, accuracy, and effort is with the user. - -libpng versions 0.97, January 1998, through 1.0.6, March 20, 2000, areCopyright (c) 1998, 1999 Glenn Randers-Pehrson, and are -distributed according to the same disclaimer and license as libpng-0.96,with the following individuals added to the list of Contributing Authors: - Tom Lane - Glenn Randers-Pehrson - Willem van Schaik - -libpng versions 0.89, June 1996, through 0.96, May 1997, are -Copyright (c) 1996, 1997 Andreas Dilger -Distributed according to the same disclaimer and license as libpng-0.88,with the following individuals added to the list of Contributing Authors: - John Bowler - Kevin Bracey - Sam Bushell - Magnus Holmgren - Greg Roelofs - Tom Tanner - -libpng versions 0.5, May 1995, through 0.88, January 1996, are -Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc. - -For the purposes of this copyright and license, "Contributing Authors"is defined as the following set of individuals: - - Andreas Dilger - Dave Martindale - Guy Eric Schalnat - Paul Schmidt - Tim Wegner - -The PNG Reference Library is supplied "AS IS". The Contributing Authorsand Group 42, Inc. disclaim all warranties, expressed or implied, -including, without limitation, the warranties of merchantability and offitness for any purpose. The Contributing Authors and Group 42, Inc. -assume no liability for direct, indirect, incidental, special, exemplary,or consequential damages, which may result from the use of the PNG -Reference Library, even if advised of the possibility of such damage. - -Permission is hereby granted to use, copy, modify, and distribute thissource code, or portions hereof, for any purpose, without fee, subjectto the following restrictions: - -1. The origin of this source code must not be misrepresented. - -2. Altered versions must be plainly marked as such and must not - be misrepresented as being the original source. - -3. This Copyright notice may not be removed or altered from any - source or altered source distribution. - -The Contributing Authors and Group 42, Inc. specifically permit, withoutfee, and encourage the use of this source code as a component to -supporting the PNG file format in commercial products. If you use thissource code in a product, acknowledgment is not required but would be -appreciated. - - -A "png_get_copyright" function is available, for convenient use in "about"boxes and the like: - - printf("%s",png_get_copyright(NULL)); - -Also, the PNG logo (in PNG format, of course) is supplied in the -files "pngbar.png" and "pngbar.jpg (88x31) and "pngnow.png" (98x31). - -Libpng is OSI Certified Open Source Software. OSI Certified Open Source is acertification mark of the Open Source Initiative. - -Glenn Randers-Pehrson -glennrp at users.sourceforge.net -December 3, 2004 - -%% The following software may be included in this product: Libungif - An uncompressed GIF library; Use of any of this software is governed by the terms of the license below: -The GIFLIB distribution is Copyright (c) 1997 Eric S. Raymond - -Permission is hereby granted, free of charge, to any person obtaining a copyof this software and associated documentation files (the "Software"), to dealin the Software without restriction, including without limitation the rightsto use, copy, modify, merge, publish, distribute, sublicense, and/or sellcopies 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 inall copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS ORIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THEAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHERLIABILITY, 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 INTHE SOFTWARE. - - -%% The following software may be included in this product: Ant; Use of any of this software is governed by the terms of the license below: -License -The Apache Software License Version 2.0 - -The Apache Software License Version 2.0 applies to all releases of Ant startingwith ant 1.6.1 - -/* - * Apache License - * Version 2.0, January 2004 - * http://www.apache.org/licenses/ - * - * TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - * - * 1. Definitions. - * - * "License" shall mean the terms and conditions for use, reproduction, * and distribution as defined by Sections 1 through 9 of this document. * - * "Licensor" shall mean the copyright owner or entity authorized by * the copyright owner that is granting the License. - * - * "Legal Entity" shall mean the union of the acting entity and all * other entities that control, are controlled by, or are under common * control with that entity. For the purposes of this definition, * "control" means (i) the power, direct or indirect, to cause the * direction or management of such entity, whether by contract or * otherwise, or (ii) ownership of fifty percent (50%) or more of the * outstanding shares, or (iii) beneficial ownership of such entity. * - * "You" (or "Your") shall mean an individual or Legal Entity - * exercising permissions granted by this License. - * - * "Source" form shall mean the preferred form for making modifications, * including but not limited to software source code, documentation * source, and configuration files. - * - * "Object" form shall mean any form resulting from mechanical - * transformation or translation of a Source form, including but - * not limited to compiled object code, generated documentation, - * and conversions to other media types. - * - * "Work" shall mean the work of authorship, whether in Source or * Object form, made available under the License, as indicated by a * copyright notice that is included in or attached to the work - * (an example is provided in the Appendix below). - * - * "Derivative Works" shall mean any work, whether in Source or Object * form, that is based on (or derived from) the Work and for which the * editorial revisions, annotations, elaborations, or other modifications * represent, as a whole, an original work of authorship. For the purposes * of this License, Derivative Works shall not include works that remain * separable from, or merely link (or bind by name) to the interfaces of, * the Work and Derivative Works thereof. - * - * "Contribution" shall mean any work of authorship, including - * the original version of the Work and any modifications or additions * to that Work or Derivative Works thereof, that is intentionally * submitted to Licensor for inclusion in the Work by the copyright owner * or by an individual or Legal Entity authorized to submit on behalf of * the copyright owner. For the purposes of this definition, "submitted" * means any form of electronic, verbal, or written communication sent * to the Licensor or its representatives, including but not limited to * communication on electronic mailing lists, source code control systems, * and issue tracking systems that are managed by, or on behalf of, the * Licensor for the purpose of discussing and improving the Work, but * excluding communication that is conspicuously marked or otherwise * designated in writing by the copyright owner as "Not a Contribution." * - * "Contributor" shall mean Licensor and any individual or Legal Entity * on behalf of whom a Contribution has been received by Licensor and * subsequently incorporated within the Work. - * - * 2. Grant of Copyright License. Subject to the terms and conditions of * this License, each Contributor hereby grants to You a perpetual, * worldwide, non-exclusive, no-charge, royalty-free, irrevocable * copyright license to reproduce, prepare Derivative Works of, - * publicly display, publicly perform, sublicense, and distribute the * Work and such Derivative Works in Source or Object form. - * - * 3. Grant of Patent License. Subject to the terms and conditions of * this License, each Contributor hereby grants to You a perpetual, * worldwide, non-exclusive, no-charge, royalty-free, irrevocable * (except as stated in this section) patent license to make, have made, * use, offer to sell, sell, import, and otherwise transfer the Work, * where such license applies only to those patent claims licensable * by such Contributor that are necessarily infringed by their - * Contribution(s) alone or by combination of their Contribution(s) * with the Work to which such Contribution(s) was submitted. If You * institute patent litigation against any entity (including a - * cross-claim or counterclaim in a lawsuit) alleging that the Work * or a Contribution incorporated within the Work constitutes direct * or contributory patent infringement, then any patent licenses - * granted to You under this License for that Work shall terminate * as of the date such litigation is filed. - * - * 4. Redistribution. You may reproduce and distribute copies of the * Work or Derivative Works thereof in any medium, with or without * modifications, and in Source or Object form, provided that You * meet the following conditions: - * - * (a) You must give any other recipients of the Work or - * Derivative Works a copy of this License; and - * - * (b) You must cause any modified files to carry prominent notices * stating that You changed the files; and - * - * (c) You must retain, in the Source form of any Derivative Works * that You distribute, all copyright, patent, trademark, and * attribution notices from the Source form of the Work, - * excluding those notices that do not pertain to any part of * the Derivative Works; and - * - * (d) If the Work includes a "NOTICE" text file as part of its - * distribution, then any Derivative Works that You distribute must * include a readable copy of the attribution notices contained * within such NOTICE file, excluding those notices that do not * pertain to any part of the Derivative Works, in at least one * of the following places: within a NOTICE text file distributed * as part of the Derivative Works; within the Source form or * documentation, if provided along with the Derivative Works; or, * within a display generated by the Derivative Works, if and * wherever such third-party notices normally appear. The contents * of the NOTICE file are for informational purposes only and * do not modify the License. You may add Your own attribution * notices within Derivative Works that You distribute, alongside * or as an addendum to the NOTICE text from the Work, provided * that such additional attribution notices cannot be construed * as modifying the License. - * - * You may add Your own copyright statement to Your modifications and * may provide additional or different license terms and conditions * for use, reproduction, or distribution of Your modifications, or * for any such Derivative Works as a whole, provided Your use, - * reproduction, and distribution of the Work otherwise complies with * the conditions stated in this License. - * - * 5. Submission of Contributions. Unless You explicitly state otherwise, * any Contribution intentionally submitted for inclusion in the Work * by You to the Licensor shall be under the terms and conditions of * this License, without any additional terms or conditions. - * Notwithstanding the above, nothing herein shall supersede or modify * the terms of any separate license agreement you may have executed * with Licensor regarding such Contributions. - * - * 6. Trademarks. This License does not grant permission to use the trade * names, trademarks, service marks, or product names of the Licensor, * except as required for reasonable and customary use in describing the * origin of the Work and reproducing the content of the NOTICE file. * - * 7. Disclaimer of Warranty. Unless required by applicable law or - * agreed to in writing, Licensor provides the Work (and each - * Contributor provides its Contributions) on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or * implied, including, without limitation, any warranties or conditions * of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - * PARTICULAR PURPOSE. You are solely responsible for determining the * appropriateness of using or redistributing the Work and assume any * risks associated with Your exercise of permissions under this License. * - * 8. Limitation of Liability. In no event and under no legal theory, * whether in tort (including negligence), contract, or otherwise, * unless required by applicable law (such as deliberate and grossly * negligent acts) or agreed to in writing, shall any Contributor be * liable to You for damages, including any direct, indirect, special, * incidental, or consequential damages of any character arising as a * result of this License or out of the use or inability to use the * Work (including but not limited to damages for loss of goodwill, * work stoppage, computer failure or malfunction, or any and all * other commercial damages or losses), even if such Contributor - * has been advised of the possibility of such damages. - * - * 9. Accepting Warranty or Additional Liability. While redistributing * the Work or Derivative Works thereof, You may choose to offer, * and charge a fee for, acceptance of support, warranty, indemnity, * or other liability obligations and/or rights consistent with this * License. However, in accepting such obligations, You may act only * on Your own behalf and on Your sole responsibility, not on behalf * of any other Contributor, and only if You agree to indemnify, - * defend, and hold each Contributor harmless for any liability - * incurred by, or claims asserted against, such Contributor by reason * of your accepting any such warranty or additional liability. - * - * END OF TERMS AND CONDITIONS - * - * APPENDIX: How to apply the Apache License to your work. - * - * To apply the Apache License to your work, attach the following * boilerplate notice, with the fields enclosed by brackets "[]" - * replaced with your own identifying information. (Don't include * the brackets!) The text should be enclosed in the appropriate * comment syntax for the file format. We also recommend that a - * file or class name and description of purpose be included on the * same "printed page" as the copyright notice for easier - * identification within third-party archives. - * - * Copyright [yyyy] Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. - */ - - -You can download the original license file here. - -The License is accompanied by a NOTICE - - ========================================================================= == NOTICE file corresponding to the section 4 d of == == the Apache License, Version 2.0, == == in this case for the Apache Ant distribution. == ========================================================================= - This product includes software developed by - The Apache Software Foundation (http://www.apache.org/). - - This product includes also software developed by : - - the W3C consortium (http://www.w3c.org) , - - the SAX project (http://www.saxproject.org) - - Please read the different LICENSE files present in the root directory of this distribution. - - The names "Ant" and "Apache Software Foundation" must not be used to endorse or promote products derived from this software without prior written permission. For written permission, please contact - apache@apache.org. - -The Apache Software License, Version 1.1 - -The Apache Software License, Version 1.1, applies to all versions of up to ant1.6.0 included. - -/* - * ============================================================================ * The Apache Software License, Version 1.1 - * ============================================================================ * - * Copyright (C) 2000-2003 The Apache Software Foundation. All - * rights reserved. - * - * Redistribution and use in source and binary forms, with or without modifica- * tion, are permitted provided that the following conditions are met: * - * 1. Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. - * - * 2. 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. - * - * 3. The end-user documentation included with the redistribution, if any, must * include the following acknowledgment: "This product includes software * developed by the Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowledgment may appear in the software itself, if * and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Ant" and "Apache Software Foundation" must not be used to * endorse or promote products derived from this software without prior * written permission. For written permission, please contact - * apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", nor may * "Apache" appear in their name, without prior written permission of the * Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED 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 * APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- * DING, 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. - * - * This software consists of voluntary contributions made by many individuals * on behalf of the Apache Software Foundation. For more information on the * Apache Software Foundation, please see . - * - */ - - -%% The following software may be included in this product: XML Resolver library; Use of any of this software is governed by the terms of the license below: - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. - - You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. - - -%% The following software may be included in this product: ICU4J; Use of any of this software is governed by the terms of the license below: -ICU License - ICU 1.8.1 and later COPYRIGHT AND PERMISSION NOTICE Cop -yright (c) -1995-2003 International Business Machines Corporation and others All rightsreserved. Permission is hereby granted, free of charge, to any person obtaininga copy of this software and associated documentation files (the "Software"), todeal in the Software without restriction, including without limitation therights to use, copy, modify, merge, publish, distribute, and/or sell copies ofthe Software, and to permit persons to whom the Software is furnished to do so,provided that the above copyright notice(s) and this permission notice appear inall copies of the Software and that both the above copyright notice(s) and thispermission notice appear in supporting documentation. THE SOFTWARE IS PROVIDED"AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOTLIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSEAND NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHTHOLDER OR HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANYSPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTINGFROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCEOR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE ORPERFORMANCE OF THIS SOFTWARE. Except as contained in this notice, the name of acopyright holder shall not be used in advertising or otherwise to promote thesale, use or other dealings in this Software without prior written authorizationof the copyright holder. - - -%% The following software may be included in this product: NekoHTML; Use of any of this software is governed by the terms of the license below: -The CyberNeko Software License, Version 1.0 - - -(C) Copyright 2002,2003, Andy Clark. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. 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. - -3. The end-user documentation included with the redistribution, - if any, must include the following acknowledgment: - "This product includes software developed by Andy Clark." - Alternately, this acknowledgment may appear in the software itself, if and wherever such third-party acknowledgments normally appear. - -4. The names "CyberNeko" and "NekoHTML" must not be used to endorse - or promote products derived from this software without prior - written permission. For written permission, please contact - andy@cyberneko.net. - -5. Products derived from this software may not be called "CyberNeko", - nor may "CyberNeko" appear in their name, without prior written - permission of the author. - -THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED 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 AUTHOR OR OTHER 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. - -==================================================================== -This license is based on the Apache Software License, version 1.1 - - -%% The following software may be included in this product: Jing; Use of any of this software is governed by the terms of the license below: -Jing Copying Conditions - -Copyright (c) 2001-2003 Thai Open Source Software Center Ltd -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/orother materials provided with the distribution. - * Neither the name of the Thai Open Source Software Center Ltd nor the namesof its contributors may be used to endorse or promote products derived from thissoftware without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" ANDANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIEDWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE AREDISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANYDIRECT, 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 ONANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THISSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -%% The following software may be included in this product: RelaxNGCC; Use of any of this software is governed by the terms of the license below: -Copyright (c) 2000-2003 Daisuke Okajima and Kohsuke Kawaguchi. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - -2. 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. - -3. The end-user documentation included with the redistribution, if -any, must include the following acknowledgment: - - "This product includes software developed by Daisuke Okajima - and Kohsuke Kawaguchi (http://relaxngcc.sf.net/)." - -Alternately, this acknowledgment may appear in the software itself, -if and wherever such third-party acknowledgments normally appear. - -4. The names of the copyright holders must not be used to endorse or -promote products derived from this software without prior written -permission. For written permission, please contact the copyright -holders. - -5. Products derived from this software may not be called "RELAXNGCC", -nor may "RELAXNGCC" appear in their name, without prior written -permission of the copyright holders. - -THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED 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 APACHE SOFTWARE FOUNDATION OR ITS 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. - - -%% The following software may be included in this product: RELAX NG Object Model/Parser; Use of any of this software is governed by the terms of the license below: -The MIT License - -Copyright (c) - -Permission is hereby granted, free of charge, to any person obtaining a copy ofthis software and associated documentation files (the "Software"), to deal inthe Software without restriction, including without limitation the rights touse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies ofthe 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 allcopies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS ORIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESSFOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS ORCOPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHERIN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR INCONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -%% The following software may be included in this product: XFree86-VidMode Extension; Use of any of this software is governed by the terms of the license below: -Version 1.1 of -XFree86ýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýý ProjectLicence. - - Copyright (C) 1994-2004 The -XFree86ýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýProject, Inc. All rights reserved. - - Permission is hereby granted, free of charge, to any person obtaining a copyof this software and associated documentation files (the "Software"), to deal inthe Software without restriction, including without limitation the rights touse, copy, modify, merge, publish, distribute, sublicence, and/or sell copies ofthe Software, and to permit persons to whom the Software is furnished to do so,subject to the following conditions: - - 1. Redistributions of source code must retain the above copyright notice,this list of conditions, and the following disclaimer. - 2. Redistributions in binary form must reproduce the above copyrightnotice, this list of conditions and the following disclaimer in the -documentation and/or other materials provided with the distribution, and in thesame place and form as other copyright, license and disclaimer information. 3. The end-user documentation included with the redistribution, if any,must include the following acknowledgment: "This product includes softwaredeveloped by The XFree86 Project, Inc (http://www.xfree86.org/) and itscontributors", in the same place and form as other third-party acknowledgments.Alternately, this acknowledgment may appear in the software itself, in the sameform and location as other such third-party acknowledgments. - 4. Except as contained in this notice, the name of The XFree86 Project,Inc shall not be used in advertising or otherwise to promote the sale, use orother dealings in this Software without prior written authorization from TheXFree86 Project, Inc. - - THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY ANDFITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE XFREE86PROJECT, INC OR ITS 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; ORBUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER INCONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISINGIN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITYOF SUCH DAMAGE. - - -%% The following software may be included in this product: RelaxNGCC; Use of any of this software is governed by the terms of the license below: -This is version 2003-May-08 of the Info-ZIP copyright and license. -The definitive version of this document should be available at -ftp://ftp.info-zip.org/pub/infozip/license.html indefinitely. - - -Copyright (c) 1990-2003 Info-ZIP. All rights reserved. - -For the purposes of this copyright and license, "Info-ZIP" is defined asthe following set of individuals: - - Mark Adler, John Bush, Karl Davis, Harald Denker, Jean-Michel Dubois, Jean-loup Gailly, Hunter Goatley, Ian Gorman, Chris Herborth, Dirk Haase, Greg Hartwig, Robert Heath, Jonathan Hudson, Paul Kienitz, David Kirschbaum, Johnny Lee, Onno van der Linden, Igor Mandrichenko, Steve P. Miller, Sergio Monesi, Keith Owens, George Petrov, Greg Roelofs, Kai Uwe Rommel, Steve Salisbury, Dave Smith, Christian Spieler, Antoine Verheijen, - Paul von Behren, Rich Wales, Mike White - -This software is provided "as is," without warranty of any kind, expressor implied. In no event shall Info-ZIP or its contributors be held liablefor any direct, indirect, incidental, special or consequential damagesarising out of the use of or inability to use this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute itfreely, subject to the following restrictions: - - 1. Redistributions of source code must retain the above copyright notice, definition, disclaimer, and this list of conditions. - - 2. Redistributions in binary form (compiled executables) must reproduce the above copyright notice, definition, disclaimer, and this list of conditions in documentation and/or other materials provided with the distribution. The sole exception to this condition is redistribution of a standard UnZipSFX binary (including SFXWiz) as part of a - self-extracting archive; that is permitted without inclusion of this license, as long as the normal SFX banner has not been removed from the binary or disabled. - - 3. Altered versions--including, but not limited to, ports to new operating systems, existing ports with new graphical interfaces, and dynamic, shared, or static library versions--must be plainly marked as such and must not be misrepresented as being the original source. Such altered versions also must not be misrepresented as being Info-ZIP releases--including, but not limited to, labeling of the altered versions with the names "Info-ZIP" (or any variation thereof, including, but not limited to, different capitalizations), "Pocket UnZip," "WiZ" or "MacZip" without the explicit permission of Info-ZIP. Such altered versions are further prohibited from misrepresentative use of the Zip-Bugs or Info-ZIP e-mail addresses or of the Info-ZIP URL(s). - 4. Info-ZIP retains the right to use the names "Info-ZIP," "Zip," "UnZip," "UnZipSFX," "WiZ," "Pocket UnZip," "Pocket Zip," and "MacZip" for its own source and binary releases. - - -%% The following software may be included in this product: XML Security; Use of any of this software is governed by the terms of the license below: - The Apache Software License, - Version 1.1 - - - PDF - - - Copyright (C) 2002 The Apache SoftwareFoundation. - All rights reserved. Redistribution anduse in - source and binary forms, with or withoutmodifica- - tion, are permitted provided that thefollowing - conditions are met: 1. Redistributions ofsource - code must retain the above copyrightnotice, this - list of conditions and the followingdisclaimer. - 2. Redistributions in binary form mustreproduce - the above copyright notice, this list of conditions and the following disclaimerin the - documentation and/or other materialsprovided with - the distribution. 3. The end-userdocumentation - included with the redistribution, if any,must - include the following acknowledgment:"This - product includes software developed bythe Apache - Software Foundation -(http://www.apache.org/)." - Alternately, this acknowledgment mayappear in the - software itself, if and wherever suchthird-party - acknowledgments normally appear. 4. Thenames - "Apache Forrest" and "Apache SoftwareFoundation" - must not be used to endorse or promoteproducts - derived from this software without priorwritten - permission. For written permission,please contact - apache@apache.org. 5. Products derivedfrom this - software may not be called "Apache", normay - "Apache" appear in their name, withoutprior - written permission of the Apache Software Foundation. THIS SOFTWARE IS PROVIDED``AS IS'' - AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THEIMPLIED - WARRANTIES OF MERCHANTABILITY AND FITNESSFOR A - PARTICULAR PURPOSE ARE DISCLAIMED. IN NOEVENT - SHALL THE APACHE SOFTWARE FOUNDATION ORITS - CONTRIBUTORS BE LIABLE FOR ANY DIRECT,INDIRECT, - INCIDENTAL, SPECIAL, EXEMPLARY, ORCONSEQUENTIAL - DAMAGES (INCLU- DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS ORSERVICES; LOSS - OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANYTHEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICTLIABILITY, - OR TORT (INCLUDING NEGLIGENCE OROTHERWISE) - ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THEPOSSIBILITY OF - SUCH DAMAGE. This software consists ofvoluntary - contributions made by many individuals onbehalf - of the Apache Software Foundation. Formore - information on the Apache SoftwareFoundation, - please see . - -%% The following software may be included in this product: Regexp, Regular Expression Package v. 1.2; Use of any of this software is governed by the terms of the license below: The Apache Software License, Version 1.1 -Copyright (c) 2001 The Apache Software Foundation. All rights -reserved. -Redistribution and use in source and binary forms, with or without modification,are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - -2. 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. - -3. The end-user documentation included with the redistribution, -if any, must include the following acknowledgment: -"This product includes software developed by the -Apache Software Foundation (http://www.apache.org/)." -Alternately, this acknowledgment may appear in the software itself, -if and wherever such third-party acknowledgments normally appear. - -4. The names "Apache" and "Apache Software Foundation" and -"Apache Turbine" must not be used to endorse or promote products -derived from this software without prior written permission. For -written permission, please contact apache@apache.org. - -5. Products derived from this software may not be called "Apache", -"Apache Turbine", nor may "Apache" appear in their name, without -prior written permission of the Apache Software Foundation. - -THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED 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 APACHE SOFTWARE FOUNDATION OR -ITS 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. - -==================================================================== -This software consists of voluntary contributions made by many -individuals on behalf of the Apache Software Foundation. For more -information on the Apache Software Foundation, please see - -http://www.apache.org. - - -%% The following software may be included in this product: Visual Studio. Use of any of this software is governed by the terms of the license below: - -END-USER LICENSE AGREEMENT FOR MICROSOFT SOFTWARE -IMPORTANT-READ CAREFULLY: This End-User License Agreement ("EULA") is a legal -agreement between you (either an individual or a single entity) and Microsoft Corporation ("Microsoft) for the Microsoft software that accompanies this EULA, which includes computer software and may include associated media, printed materials, "online" or electronic documentation, and Internet-based services ("Software"). An amendment or addendum to this EULA may accompany the Software. YOU AGREE TO BE BOUND BY THE TERMS OF THIS EULA BY INSTALLING, COPYING, OR OTHERWISE USING THE SOFTWARE. IF YOU DO NOT AGREE, DO NOT INSTALL, COPY, OR USE THE SOFTWARE; YOU MAY RETURN IT TO YOUR PLACE OF PURCHASE (IF APPLICABLE) FOR A FULL REFUND. - -MICROSOFT SOFTWARE LICENSE - -1. GRANTS OF LICENSE. Microsoft grants you the rights described in this EULA -provided that you comply with all terms and conditions of this EULA. NOTE: Microsoft is not -licensing to you any rights with respect to Crystal Reports for Microsoft Visual Studio .NET; -your use of Crystal Reports for Microsoft Visual Studio .NET is subject to your acceptance of -the terms and conditions of the enclosed (hard copy) end user license agreement from Crystal -Decisions for that product. -1.1 General License Grant. Microsoft grants to you as an individual, a personal, -nonexclusive license to use the Software, and to make and use copies of the Software for the -purposes of designing, developing, testing, and demonstrating your software product(s), -provided that you are the only individual using the Software. -If you are an entity, Microsoft grants to you a personal, nonexclusive license to -use the Software, and to make and use copies of the Software, provided that for each individual -using the Software within your organization, you have acquired a separate and valid license for -each such individual. - -1.2 Documentation. You may make and use an unlimited number of copies of any -documentation, provided that such copies shall be used only for personal purposes and are not -to be republished or distributed (either in hard copy or electronic form) beyond your premises. -1.3 Storage/Network Use. You may also store or install a copy of the Software on a -storage device, such as a network server, used only to install or run the Software on computers -used by licensed end users in accordance with Section 1.1. A single license for the Software may -not be shared or used concurrently by multiple end users. -1.4 Visual Studio—Effect of EULA. As a suite of development tools and other -Microsoft software programs (each such tool or software program, a "Component"), -Components that you receive as part of the Software may include a separate end-user license -agreement (each, a "Component EULA"). Except as provided in Section 4 ("Prerelease Code"), in -the event of inconsistencies between this EULA and any Component EULA, the terms of this -EULA shall control. The Software may also contain third-party software programs. Any such -software is provided for your use as a convenience and your use is subject to the terms and -conditions of any license agreement contained in that software. -2. ADDITIONAL LICENSE RIGHTS -- REDISTRIBUTABLE CODE. In addition to the -rights granted in Section 1, certain portions of the Software, as described in this Section 2, are -provided to you with additional license rights. These additional license rights are conditioned -Everett VSPro 1 -Final 11.04.02 - - - -upon your compliance with the distribution requirements and license limitations described in -Section 3. - -2.1 Sample Code. Microsoft grants you a limited, nonexclusive, royalty-free license -to: (a) use and modify the source code version of those portions of the Software identified as -"Samples" in REDIST.TXT or elsewhere in the Software ("Sample Code") for the sole purposes -of designing, developing, and testing your software product(s), and (b) reproduce and -distribute the Sample Code, along with any modifications thereof, in object and/or source code -form. For applicable redistribution requirements for Sample Code, see Section 3.1 below. -2.2 Redistributable Code—General. Microsoft grants you a limited, nonexclusive, -royalty-free license to reproduce and distribute the object code form of any portion of the -Software listed in REDIST.TXT ("Redistributable Code"). For general redistribution -requirements for Redistributable Code, see Section 3.1 below. -2.3 Redistributable Code—Microsoft Merge Modules ("MSM"). Microsoft grants -you a limited, nonexclusive, royalty-free license to reproduce and distribute the content of MSM -file(s) listed in REDIST.TXT in the manner described in the Software documentation only so -long as you redistribute such content in its entirety and do not modify such content in any way. -For all other applicable redistribution requirements for MSM files, see Section 3.1 below. -2.4 Redistributable Code—Microsoft Foundation Classes (MFC), Active Template -Libraries (ATL), and C runtimes (CRTs). In addition to the rights granted in Section 1, -Microsoft grants you a license to use and modify the source code version of those portions of -the Software that are identified as MFC, ATL, or CRTs (collectively, the "VC Redistributables"), -for the sole purposes of designing, developing, and testing your software product(s). Provided -you comply with Section 3.1 and you rename any files created by you that are included in the -Licensee Software (defined below), Microsoft grants you a limited, nonexclusive, royalty-free -license to reproduce and distribute the object code version of the VC Redistributables, including -any modifications you make. For purposes of this section, "modifications" shall mean -enhancements to the functionality of the VC Redistributables. For all other applicable -redistribution requirements for VC Redistributables, see Section 3.1 below. -3. DISTRIBUTION REQUIREMENTS AND OTHER LICENSE RIGHTS AND -LIMITATIONS. If you choose to exercise your rights under Section 2, any redistribution by -you is subject to your compliance with Section 3.1; some of the Redistributable Code has -additional limited use rights described in Section 3.2. -3.1 General Distribution Requirements. -(a) If you choose to redistribute Sample Code, or Redistributable Code -(collectively, the "Redistributables") as described in Section 2, you agree: (i) except as otherwise -noted in Section 2.1 (Sample Code), to distribute the Redistributables only in object code form -and in conjunction with and as a part of a software application product developed by you that -adds significant and primary functionality to the Redistributables ("Licensee Software"); -(ii) that the Redistributables only operate in conjunction with Microsoft Windows platforms; -(iii) that if the Licensee Software is distributed beyond Licensee's premises or externally from -Licensee's organization, to distribute the Licensee Software containing the Redistributables -pursuant to an end user license agreement (which may be "break-the-seal", "click-wrap" or -signed), with terms no less protective than those contained in this EULA; (iv) not to use -Microsoft's name, logo, or trademarks to market the Licensee Software; (v) to display your own -valid copyright notice which shall be sufficient to protect Microsoft's copyright in the Software; -Everett VSPro 2 -Final 11.04.02 - - - -(vi) not to remove or obscure any copyright, trademark or patent notices that appear on the -Software as delivered to you; (vii) to indemnify, hold harmless, and defend Microsoft from and -against any claims or lawsuits, including attorney's fees, that arise or result from the use or -distribution of the Licensee Software; (viii) to otherwise comply with the terms of this EULA; -and (ix) agree that Microsoft reserves all rights not expressly granted. -You also agree not to permit further distribution of the Redistributables by your -end users except you may permit further redistribution of the Redistributables by your -distributors to your end-user customers if your distributors only distribute the Redistributables -in conjunction with, and as part of, the Licensee Software, you comply with all other terms of -this EULA, and your distributors comply with all restrictions of this EULA that are applicable -to you. - -(b) If you use the Redistributables, then in addition to your compliance with -the applicable distribution requirements described for the Redistributables, the following also -applies. Your license rights to the Redistributables are conditioned upon your not (i) creating -derivative works of the Redistributables in any manner that would cause the Redistributables in -whole or in part to become subject to any of the terms of an Excluded License; or (ii) -distributing the Redistributables (or derivative works thereof) in any manner that would cause -the Redistributables to become subject to any of the terms of an Excluded License. An -"Excluded License" is any license that requires as a condition of use, modification and/or -distribution of software subject to the Excluded License, that such software or other software -combined and/or distributed with such software be (x) disclosed or distributed in source code -form; (y) licensed for the purpose of making derivative works; or (z) redistributable at no -charge. -3.2 Additional Distribution Requirements for Certain Redistributable Code. -If you choose to redistribute the files discussed in this Section, then in addition to the terms of -Section 3.1, you must ALSO comply with the following. -(a) Microsoft SQL Server Desktop Engine ("MSDE"). If you redistribute -MSDE you agree to comply with the following additional requirements: (a) Licensee -Software shall not substantially duplicate the capabilities of Microsoft Access or, in the -reasonable opinion of Microsoft, compete with same; and (b) unless Licensee Software -requires your customers to license Microsoft Access in order to operate, you shall not -reproduce or use MSDE for commercial distribution in conjunction with a general -purpose word processing, spreadsheet or database management software product, or an -integrated work or product suite whose components include a general purpose word -processing, spreadsheet, or database management software product except for the -exclusive use of importing data to the various formats supported by Microsoft Access. -A product that includes limited word processing, spreadsheet or database components -along with other components which provide significant and primary value, such as an -accounting product with limited spreadsheet capability, is not considered to be a -"general purpose" product. -(b) Microsoft Data Access Components. If you redistribute the Microsoft -Data Access Component file identified as MDAC_TYP.EXE, you also agree to -redistribute such file in object code only in conjunction with and as a part of a Licensee -Software developed by you with a Microsoft development tool product that adds -significant and primary functionality to MDAC_TYP.EXE. -Everett VSPro 3 -Final 11.04.02 - - - -3.3 Separation of Components. The Software is licensed as a single product. Its -component parts may not be separated for use by more than one user. -3.4 Benchmark Testing. The Software may contain the Microsoft .NET Framework. -You may not disclose the results of any benchmark test of the .NET Framework component of -the Software to any third party without Microsoft's prior written approval. -4. PRERELEASE CODE. Portions of the Software may be identified as prerelease code -("Prerelease Code"). Such Prerelease Code is not at the level of performance and compatibility -of the final, generally available product offering. The Prerelease Code may not operate correctly -and may be substantially modified prior to first commercial shipment. Microsoft is not -obligated to make this or any later version of the Prerelease Code commercially available. The -grant of license to use Prerelease Code expires upon availability of a commercial release of the -Prerelease Code from Microsoft. NOTE: In the event that Prerelease Code contains a separate -end-user license agreement, the terms and conditions of such end-user license agreement shall -govern your use of the corresponding Prerelease Code. -5. RESERVATION OF RIGHTS AND OWNERSHIP. Microsoft reserves all rights not -expressly granted to you in this EULA. The Software is protected by copyright and other -intellectual property laws and treaties. Microsoft or its suppliers own the title, copyright, and -other intellectual property rights in the Software. The Software is licensed, not sold. -6. LIMITATIONS ON REVERSE ENGINEERING, DECOMPILATION, AND -DISASSEMBLY. You may not reverse engineer, decompile, or disassemble the Software, -except and only to the extent that such activity is expressly permitted by applicable law -notwithstanding this limitation. -7. NO RENTAL/COMMERCIAL HOSTING. You may not rent, lease, lend or provide -commercial hosting services with the Software. -8. CONSENT TO USE OF DATA. You agree that Microsoft and its affiliates may collect -and use technical information gathered as part of the product support services provided to you, -if any, related to the Software. Microsoft may use this information solely to improve our -products or to provide customized services or technologies to you and will not disclose this -information in a form that personally identifies you. -9. LINKS TO THIRD PARTY SITES. You may link to third party sites through the use of -the Software. The third party sites are not under the control of Microsoft, and Microsoft is not -responsible for the contents of any third party sites, any links contained in third party sites, or -any changes or updates to third party sites. Microsoft is not responsible for webcasting or any -other form of transmission received from any third party sites. Microsoft is providing these -links to third party sites to you only as a convenience, and the inclusion of any link does not -imply an endorsement by Microsoft of the third party site. -10. ADDITIONAL SOFTWARE/SERVICES. This EULA applies to updates, supplements, -add-on components, or Internet-based services components, of the Software that Microsoft may -provide to you or make available to you after the date you obtain your initial copy of the -Software, unless we provide other terms along with the update, supplement, add-on -component, or Internet-based services component. Microsoft reserves the right to discontinue -any Internet-based services provided to you or made available to you through the use of the -Software. -11. UPGRADES/DOWNGRADES -Everett VSPro 4 -Final 11.04.02 - - - -11.1 Upgrades. To use a version of the Software identified as an upgrade, you must -first be licensed for the software identified by Microsoft as eligible for the upgrade. After -upgrading, you may no longer use the software that formed the basis for your upgrade -eligibility. -11.2 Downgrades. Instead of installing and using the Software, you may install and -use copies of an earlier version of the Software, provided that you completely remove such -earlier version and install the current version of the Software within a reasonable time. Your -use of such earlier version shall be governed by this EULA, and your rights to use such earlier -version shall terminate when you install the Software. -11.3 Special Terms for Version 2003 Upgrade Editions of the Software. If the -Software accompanying this EULA is the version 2003 edition of the Software and you have -acquired it as an upgrade from the corresponding "2002" edition of the Microsoft software -product with the same product name as the Software (the "Qualifying Software"), then -Section 11.1 does not apply to you. Instead, you may continue to use the Qualifying Software -AND the version 2003 upgrade for so long as you continue to comply with the terms of this -EULA and the EULA governing your use of the Qualifying Software. Qualifying Software does -not include non-Microsoft software products. -12. NOT FOR RESALE SOFTWARE. Software identified as "Not For Resale" or "NFR," -may not be sold or otherwise transfered for value, or used for any purpose other than -demonstration, test or evaluation. -13. ACADEMIC EDITION SOFTWARE. To use Software identified as "Academic -Edition" or "AE," you must be a "Qualified Educational User." For qualification-related -questions, please contact the Microsoft Sales Information Center/One Microsoft -Way/Redmond, WA 98052-6399 or the Microsoft subsidiary serving your country. -14. EXPORT RESTRICTIONS. You acknowledge that the Software is subject to U.S. export -jurisdiction. You agree to comply with all applicable international and national laws that apply -to the Software, including the U.S. Export Administration Regulations, as well as end-user, end- -use, and destination restrictions issued by U.S. and other governments. For additional -information see . -15. SOFTWARE TRANSFER. The initial user of the Software may make a one-time -permanent transfer of this EULA and Software to another end user, provided the initial user -retains no copies of the Software. This transfer must include all of the Software (including all -component parts, the media and printed materials, any upgrades (including any Qualifying -Software as defined in Section 11.3), this EULA, and, if applicable, the Certificate of -Authenticity). The transfer may not be an indirect transfer, such as a consignment. Prior to the -transfer, the end user receiving the Software must agree to all the EULA terms. -16. TERMINATION. Without prejudice to any other rights, Microsoft may terminate this -EULA if you fail to comply with the terms and conditions of this EULA. In such event, you -must destroy all copies of the Software and all of its component parts. -Everett VSPro 5 -Final 11.04.02 - - - -17. LIMITED WARRANTY FOR SOFTWARE ACQUIRED IN THE US AND CANADA. -Except for the "Redistributables," which are provided AS IS without warranty of any kind, -Microsoft warrants that the Software will perform substantially in accordance with the -accompanying materials for a period of ninety (90) days from the date of receipt. - -If an implied warranty or condition is created by your state/jurisdiction and federal or -state/provincial law prohibits disclaimer of it, you also have an implied warranty or condition, -BUT ONLY AS TO DEFECTS DISCOVERED DURING THE PERIOD OF THIS LIMITED -WARRANTY (NINETY DAYS). AS TO ANY DEFECTS DISCOVERED AFTER THE -NINETY-DAY PERIOD, THERE IS NO WARRANTY OR CONDITION OF ANY KIND. - -Some states/jurisdictions do not allow limitations on how long an implied warranty or - - -condition lasts, so the above limitation may not apply to you. -Any supplements or updates to the Software, including without limitation, any (if any) service -packs or hot fixes provided to you after the expiration of the ninety day Limited Warranty -period are not covered by any warranty or condition, express, implied or statutory. - - -LIMITATION ON REMEDIES; NO CONSEQUENTIAL OR OTHER DAMAGES. Your -exclusive remedy for any breach of this Limited Warranty is as set forth below. Except for any -refund elected by Microsoft, YOU ARE NOT ENTITLED TO ANY DAMAGES, -INCLUDING BUT NOT LIMITED TO CONSEQUENTIAL DAMAGES, if the Software does -not meet Microsoft's Limited Warranty, and, to the maximum extent allowed by applicable  -law, even if any remedy fails of its essential purpose. The terms of Section 19 ("Exclusion of -Incidental, Consequential and Certain Other Damages") are also incorporated into this Limited -Warranty. Some states/jurisdictions do not allow the exclusion or limitation of incidental or -consequential damages, so the above limitation or exclusion may not apply to you. This -Limited Warranty gives you specific legal rights. You may have other rights which vary from -state/jurisdiction to state/jurisdiction. YOUR EXCLUSIVE REMEDY. Microsoft's and its -suppliers' entire liability and your exclusive remedy for any breach of this Limited Warranty or -for any other breach of this EULA or for any other liability relating to the Software shall be, at -Microsoft's option from time to time exercised subject to applicable law, (a) return of the -amount paid (if any) for the Software, or (b) repair or replacement of the Software, that does not -meet this Limited Warranty and that is returned to Microsoft with a copy of your receipt. You -will receive the remedy elected by Microsoft without charge, except that you are responsible for -any expenses you may incur (e.g. cost of shipping the Software to Microsoft). This Limited -Warranty is void if failure of the Software has resulted from accident, abuse, misapplication, -  -abnormal use or a virus. Any replacement Software will be warranted for the remainder of the -original warranty period or thirty (30) days, whichever is longer, and Microsoft will use -commercially reasonable efforts to provide your remedy within a commercially reasonable time -of your compliance with Microsoft's warranty remedy procedures. Outside the United States or -Canada, neither these remedies nor any product support services offered by Microsoft are -available without proof of purchase from an authorized international source. To exercise your -remedy, contact: Microsoft, Attn. Microsoft Sales Information Center/One Microsoft -Way/Redmond, WA 98052-6399, or the Microsoft subsidiary serving your country. -    - - -18. DISCLAIMER OF WARRANTIES. The Limited Warranty that appears above is the -only express warranty made to you and is provided in lieu of any other express warranties or -similar obligations (if any) created by any advertising, documentation, packaging, or other -communications. EXCEPT FOR THE LIMITED WARRANTY AND TO THE MAXIMUM -Everett VSPro 6 -Final 11.04.02 - - - -EXTENT PERMITTED BY APPLICABLE LAW, MICROSOFT AND ITS SUPPLIERS -PROVIDE THE SOFTWARE AND SUPPORT SERVICES (IF ANY) AS IS AND WITH ALL -FAULTS, AND HEREBY DISCLAIM ALL OTHER WARRANTIES AND CONDITIONS, -WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, -ANY (IF ANY) IMPLIED WARRANTIES, DUTIES OR CONDITIONS OF -MERCHANTABILITY, OF FITNESS FOR A PARTICULAR PURPOSE, OF RELIABILITY -OR AVAILABILITY, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF -RESULTS, OF WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF -NEGLIGENCE, ALL WITH REGARD TO THE SOFTWARE, AND THE PROVISION OF OR -FAILURE TO PROVIDE SUPPORT OR OTHER SERVICES, INFORMATION, SOFTWARE, -AND RELATED CONTENT THROUGH THE SOFTWARE OR OTHERWISE ARISING -OUT OF THE USE OF THE SOFTWARE. ALSO, THERE IS NO WARRANTY OR -CONDITION OF TITLE, QUIET ENJOYMENT, QUIET POSSESSION, -CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT WITH REGARD TO -THE SOFTWARE. - -19. EXCLUSION OF INCIDENTAL, CONSEQUENTIAL AND CERTAIN OTHER -DAMAGES. TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, IN NO -EVENT SHALL MICROSOFT OR ITS SUPPLIERS BE LIABLE FOR ANY SPECIAL, -INCIDENTAL, PUNITIVE, INDIRECT, OR CONSEQUENTIAL DAMAGES -WHATSOEVER (INCLUDING, BUT NOT LIMITED TO, DAMAGES FOR LOSS OF -PROFITS OR CONFIDENTIAL OR OTHER INFORMATION, FOR BUSINESS -INTERRUPTION, FOR PERSONAL INJURY, FOR LOSS OF PRIVACY, FOR FAILURE TO -MEET ANY DUTY INCLUDING OF GOOD FAITH OR OF REASONABLE CARE, FOR -NEGLIGENCE, AND FOR ANY OTHER PECUNIARY OR OTHER LOSS WHATSOEVER) -ARISING OUT OF OR IN ANY WAY RELATED TO THE USE OF OR INABILITY TO USE -THE SOFTWARE, THE PROVISION OF OR FAILURE TO PROVIDE SUPPORT OR -OTHER SERVICES, INFORMATION, SOFTWARE, AND RELATED CONTENT -THROUGH THE SOFTWARE OR OTHERWISE ARISING OUT OF THE USE OF THE -SOFTWARE, OR OTHERWISE UNDER OR IN CONNECTION WITH ANY PROVISION -OF THIS EULA, EVEN IN THE EVENT OF THE FAULT, TORT (INCLUDING -NEGLIGENCE), MISREPRESENTATION, STRICT LIABILITY, BREACH OF CONTRACT -OR BREACH OF WARRANTY OF MICROSOFT OR ANY SUPPLIER, AND EVEN IF -MICROSOFT OR ANY SUPPLIER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGES. -20. LIMITATION OF LIABILITY AND REMEDIES. NOTWITHSTANDING ANY -DAMAGES THAT YOU MIGHT INCUR FOR ANY REASON WHATSOEVER -(INCLUDING, WITHOUT LIMITATION, ALL DAMAGES REFERENCED HEREIN AND -ALL DIRECT OR GENERAL DAMAGES IN CONTRACT OR ANYTHING ELSE), THE -ENTIRE LIABILITY OF MICROSOFT AND ANY OF ITS SUPPLIERS UNDER ANY -PROVISION OF THIS EULA AND YOUR EXCLUSIVE REMEDY HEREUNDER (EXCEPT -FOR ANY REMEDY OF REPAIR OR REPLACEMENT ELECTED BY MICROSOFT WITH -RESPECT TO ANY BREACH OF THE LIMITED WARRANTY) SHALL BE LIMITED TO -THE GREATER OF THE ACTUAL DAMAGES YOU INCUR IN REASONABLE RELIANCE -ON THE SOFTWARE UP TO THE AMOUNT ACTUALLY PAID BY YOU FOR THE -SOFTWARE OR US$5.00. THE FOREGOING LIMITATIONS, EXCLUSIONS AND -DISCLAIMERS (INCLUDING SECTIONS 17, 18, AND 19) SHALL APPLY TO THE -MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, EVEN IF ANY REMEDY FAILS -ITS ESSENTIAL PURPOSE. -Everett VSPro 7 -Final 11.04.02 - - - -21. U.S. GOVERNMENT LICENSE RIGHTS. All Software provided to the U.S. -Government pursuant to solicitations issued on or after December 1, 1995 is provided with the -commercial license rights and restrictions described elsewhere herein. All Software provided to -the U.S. Government pursuant to solicitations issued prior to December 1, 1995 is provided with -"Restricted Rights" as provided for in FAR, 48 CFR 52.227-14 (JUNE 1987) or DFAR, 48 CFR -252.227-7013 (OCT 1988), as applicable. -22. APPLICABLE LAW. If you acquired this Software in the United States, this EULA is -governed by the laws of the State of Washington. If you acquired this Software in Canada, -unless expressly prohibited by local law, this EULA is governed by the laws in force in the -Province of Ontario, Canada; and, in respect of any dispute which may arise hereunder, you -consent to the jurisdiction of the federal and provincial courts sitting in Toronto, Ontario. If you -acquired this Software in the European Union, Iceland, Norway, or Switzerland, then local law -applies. If you acquired this Software in any other country, then local law may apply. -23. ENTIRE AGREEMENT; SEVERABILITY. This EULA (including any addendum or -amendment to this EULA which is included with the Software) are the entire agreement -between you and Microsoft relating to the Software and the support services (if any) and they -supersede all prior or contemporaneous oral or written communications, proposals and -representations with respect to the Software or any other subject matter covered by this EULA. -To the extent the terms of any Microsoft policies or programs for support services conflict with -the terms of this EULA, the terms of this EULA shall control. If any provision of this EULA is -held to be void, invalid, unenforceable or illegal, the other provisions shall continue in full force -and effect. -Si vous avez acquis votre produit Microsoft au CANADA, la garantie limitée suivante -s'applique : - -GARANTIE LIMITÉE - -Sauf pur celles du "Redistributables," qui sont fournies "comme telles," Microsoft garantit que -le Logiciel fonctionnera conformément aux documents inclus pendant une période de 90 jours -suivant la date de réception. - -Si une garantie ou condition implicite est créée par votre État ou votre territoire et qu'une loifédérale ou provinciale ou d'un État en interdit le déni, vous jouissez également d'une -garantie ou condition implicite, MAIS UNIQUEMENT POUR LES DÉFAUTS DÉCOUVERTS -DURANT LA PÉRIODE DE LA PRÉSENTE GARANTIE LIMITÉE (QUATRE-VINGT-DIX -JOURS). IL N'Y A AUCUNE GARANTIE OU CONDITION DE QUELQUE NATURE QUECE SOIT QUANT AUX DÉFAUTS DÉCOUVERTS APRÈS CETTE PÉRIODE DE QUATRE- -VINGT-DIX JOURS. Certains États ou territoires ne permettent pas de limiter la durée d'une -garantie ou condition implicite de sorte que la limitation ci-dessus peut ne pas s'appliquer à -vous. - -Tous les suppléments ou toutes les mises à jour relatifs au Logiciel, notamment, les ensembles -de services ou les réparations à chaud (le cas échéant) qui vous sont fournis après l'expiration -de la période de quatre-vingt-dix jours de la garantie limitée ne sont pas couverts par quelque -garantie ou condition que ce soit, expresse, implicite ou en vertu de la loi. - -LIMITATION DES RECOURS; ABSENCE DE DOMMAGES INDIRECTS OU AUTRES. - -Votre recours exclusif pour toute violation de la présente garantie limitée est décrit ci-après. - -Sauf pour tout remboursement au choix de Microsoft, si le Logiciel ne respecte pas la - -Everett VSPro 8 -Final 11.04.02 - - - -garantie limitée de Microsoft et, dans la mesure maximale permise par les lois applicables, -même si tout recours n'atteint pas son but essentiel, VOUS N'AVEZ DROIT À AUCUNS -DOMMAGES, NOTAMMENT DES DOMMAGES INDIRECTS. Les termes de la -clause «Exclusion des dommages accessoires, indirects et de certains autres dommages » sontégalement intégrées à la présente garantie limitée. Certains États ou territoires ne permettent -pas l'exclusion ou la limitation des dommages indirects ou accessoires de sorte que la limitation -ou l'exclusion ci-dessus peut ne pas s'appliquer à vous. La présente garantie limitée vous donne -des droits légaux spécifiques. Vous pouvez avoir d'autres droits qui peuvent varier d'unterritoire ou d'un État à un autre. VOTRE RECOURS EXCLUSIF. La seule responsabilité -obligation de Microsoft et de ses fournisseurs et votre recours exclusif pour toute violation de -la présente garantie limitée ou pour toute autre violation du présent contrat ou pour toute autre -responsabilité relative au Logiciel seront, selon le choix de Microsoft exercé de temps à autre -sous réserve de toute loi applicable, a) le remboursement du prix payé, le cas échéant, pour le -Logiciel ou b) la réparation ou le remplacement du Logiciel qui ne respecte pas la présente -garantie limitée et qui est retourné à Microsoft avec une copie de votre reçu. Vous recevrez la -compensation choisie par Microsoft, sans frais, sauf que vous êtes responsable des dépenses que -vous pourriez engager (p. ex., les frais d'envoi du Logiciel à Microsoft). La présente garantie -limitée est nulle si la défectuosité du Logiciel est causée par un accident, un usage abusif, une -mauvaise application, un usage anormal ou un virus. Tout Logiciel de remplacement sera -garanti pour le reste de la période initiale de la garantie ou pendant trente (30) jours, selon la -plus longue entre ces deux périodes. À l'extérieur des États-Unis ou du Canada, ces recours ou -l'un quelconque des services de soutien technique offerts par Microsoft ne sont pas disponibles -sans preuve d'achat d'une source internationale autorisée. Pour exercer votre recours, vous -devez communiquer avec Microsoft et vous adresser au Microsoft Sales Information -Center/One Microsoft Way/Redmond, WA 98052-6399, ou à la filiale de Microsoft de votre -pays. - -DÉNI DE GARANTIES. La garantie limitée qui apparaît ci-dessus constitue la seule garantie -expresse qui vous est donnée et remplace toutes autres garanties expresses (s'il en est) crées par -une publicité, un document, un emballage ou une autre communication. SAUF EN CE QUI A -TRAIT À LA GARANTIE LIMITÉE ET DANS LA MESURE MAXIMALE PERMISE PAR -LES LOIS APPLICABLES, LE LOGICIEL ET LES SERVICES DE SOUTIEN TECHNIQUE -(LE CAS ÉCHÉANT) SONT FOURNIS TELS QUELS ET AVEC TOUS LES DÉFAUTS PAR -MICROSOFT ET SES FOURNISSEURS, LESQUELS PAR LES PRÉSENTES DÉNIENT -TOUTES AUTRES GARANTIES ET CONDITIONS EXPRESSES, IMPLICITES OU EN -VERTU DE LA LOI, NOTAMMENT, MAIS SANS LIMITATION, (LE CAS ÉCHÉANT) LESGARANTIES, DEVOIRS OU CONDITIONS IMPLICITES DE QUALITÉ MARCHANDE, -D'ADAPTATION À UNE FIN PARTICULIÈRE, DE FIABILITÉ OU DE DISPONIBILITÉ, -D'EXACTITUDE OU D'EXHAUSTIVITÉ DES RÉPONSES, DES RÉSULTATS, DES -EFFORTS DÉPLOYÉS SELON LES RÈGLES DE L'ART, D'ABSENCE DE VIRUS ET -D'ABSENCE DE NÉGLIGENCE, LE TOUT À L'ÉGARD DU LOGICIEL ET DE LA -PRESTATION OU DE L'OMISSION DE LA PRESTATION DES SERVICES DE SOUTIEN -TECHNIQUE OU À L'ÉGARD DE LA FOURNITURE OU DE L'OMISSION DE LA -FOURNITURE DE TOUS AUTRES SERVICES, RENSEIGNEMENTS, LOGICIELS, ET -CONTENU QUI S'Y RAPPORTE GRÂCE AU LOGICIEL OU PROVENANT AUTREMENT -DE L'UTILISATION DU LOGICIEL . PAR AILLEURS, IL N'Y A AUCUNE GARANTIE OU -CONDITION QUANT AU TITRE DE PROPRIÉTÉ, À LA JOUISSANCE OU LA -POSSESSION PAISIBLE, À LA CONCORDANCE À UNE DESCRIPTION NI QUANT À -UNE ABSENCE DE CONTREFAÇON CONCERNANT LE LOGICIEL. - -EXCLUSION DES DOMMAGES ACCESSOIRES, INDIRECTS ET DE CERTAINS AUTRES -DOMMAGES. DANS LA MESURE MAXIMALE PERMISE PAR LES LOIS APPLICABLES, -EN AUCUN CAS MICROSOFT OU SES FOURNISSEURS NE SERONT RESPONSABLES -DES DOMMAGES SPÉCIAUX, CONSÉCUTIFS, ACCESSOIRES OU INDIRECTS DE - -Everett VSPro 9 -Final 11.04.02 - - - -QUELQUE NATURE QUE CE SOIT (NOTAMMENT, LES DOMMAGES À L'ÉGARD DUMANQUE À GAGNER OU DE LA DIVULGATION DE RENSEIGNEMENTS -CONFIDENTIELS OU AUTRES, DE LA PERTE D'EXPLOITATION, DE BLESSURES -CORPORELLES, DE LA VIOLATION DE LA VIE PRIVÉE, DE L'OMISSION DE REMPLIR -TOUT DEVOIR, Y COMPRIS D'AGIR DE BONNE FOI OU D'EXERCER UN SOIN -RAISONNABLE, DE LA NÉGLIGENCE ET DE TOUTE AUTRE PERTE PÉCUNIAIRE OU -AUTRE PERTE DE QUELQUE NATURE QUE CE SOIT) SE RAPPORTANT DE QUELQUEMANIÈRE QUE CE SOIT À L'UTILISATION DU LOGICIEL OU À L'INCAPACITÉ DE -S'EN SERVIR, À LA PRESTATION OU À L'OMISSION DE LA PRESTATION DE -SERVICES DE SOUTIEN TECHNIQUE OU À LA FOURNITURE OU À L'OMISSION DE -LA FOURNITURE DE TOUS AUTRES SERVICES, RENSEIGNEMENTS, LOGICIELS, ET -CONTENU QUI S'Y RAPPORTE GRÂCE AU LOGICIEL OU PROVENANT AUTREMENT -DE L'UTILISATION DU LOGICIEL OU AUTREMENT AUX TERMES DE TOUTE -DISPOSITION DE LA PRÉSENTE CONVENTION OU RELATIVEMENT À UNE TELLE -DISPOSITION, MÊME EN CAS DE FAUTE, DE DÉLIT CIVIL (Y COMPRIS LANÉGLIGENCE), DE RESPONSABILITÉ STRICTE, DE VIOLATION DE CONTRAT OU DEVIOLATION DE GARANTIE DE MICROSOFT OU DE TOUT FOURNISSEUR ET MÊME -SI MICROSOFT OU TOUT FOURNISSEUR A ÉTÉ AVISÉ DE LA POSSIBILITÉ DE TELS -DOMMAGES. - -LIMITATION DE RESPONSABILITÉ ET RECOURS. MALGRÉ LES DOMMAGES QUE -VOUS PUISSIEZ SUBIR POUR QUELQUE MOTIF QUE CE SOIT (NOTAMMENT, MAISSANS LIMITATION, TOUS LES DOMMAGES SUSMENTIONNÉS ET TOUS LES -DOMMAGES DIRECTS OU GÉNÉRAUX OU AUTRES), LA SEULE RESPONSABILITÉ DE -MICROSOFT ET DE L'UN OU L'AUTRE DE SES FOURNISSEURS AUX TERMES DE -TOUTE DISPOSITION DE LA PRÉSENTE CONVENTION ET VOTRE RECOURS -EXCLUSIF À L'ÉGARD DE TOUT CE QUI PRÉCÈDE (SAUF EN CE QUI CONCERNETOUT RECOURS DE RÉPARATION OU DE REMPLACEMENT CHOISI PAR -MICROSOFT À L'ÉGARD DE TOUT MANQUEMENT À LA GARANTIE LIMITÉE) SELIMITE AU PLUS ÉLEVÉ ENTRE LES MONTANTS SUIVANTS : LE MONTANT QUE -VOUS AVEZ RÉELLEMENT PAYÉ POUR LE LOGICIEL OU 5,00 $US. LES LIMITES, -EXCLUSIONS ET DÉNIS QUI PRÉCÈDENT (Y COMPRIS LES CLAUSES CI-DESSUS), -S'APPLIQUENT DANS LA MESURE MAXIMALE PERMISE PAR LES LOIS -APPLICABLES, MÊME SI TOUT RECOURS N'ATTEINT PAS SON BUT ESSENTIEL. - -À moins que cela ne soit prohibé par le droit local applicable, la présente Convention est régie -par les lois de la province d'Ontario, Canada. Vous consentez à la compétence des tribunaux -fédéraux et provinciaux siégeant à Toronto, dans la province d'Ontario. - -Au cas où vous auriez des questions concernant cette licence ou que vous désiriez vous mettre -en rapport avec Microsoft pour quelque raison que ce soit, veuillez utiliser l'information -contenue dans le Logiciel pour contacter la filiale de Microsoft desservant votre pays, ou visitez -Microsoft sur le World Wide Web à http://www.microsoft.com. - -The following MICROSOFT GUARANTEE applies to you if you acquired this Software in -any other country: - -Statutory rights not affected -The following guarantee is not restricted to any territory and does -not affect any statutory rights that you may have from your reseller or from Microsoft if you -acquired the Software directly from Microsoft. If you acquired the Software or any support -services in Australia, New Zealand or Malaysia, please see the "Consumer rights" section -below. - -Everett VSPro 10 -Final 11.04.02 - - - -The guarantee -The Software is designed and offered as a general-purpose software, not for any -user's particular purpose. You accept that no Software is error free and you are strongly -advised to back-up your files regularly. Provided that you have a valid license, Microsoft -guarantees that a) for a period of 90 days from the date of receipt of your license to use the -Software or the shortest period permitted by applicable law it will perform substantially in -accordance with the written materials that accompany the Software; and b) any support services -provided by Microsoft shall be substantially as described in applicable written materials -provided to you by Microsoft and Microsoft support engineers will use reasonable efforts, care -and skill to solve any problem issues. In the event that the Software fails to comply with this -guarantee, Microsoft will either (a) repair or replace the Software or (b) return the price you -paid. This guarantee is void if failure of the Software results from accident, abuse or -misapplication. Any replacement Software will be guaranteed for the remainder of the original -guarantee period or 30 days, whichever period is longer. You agree that the above guarantee is -your sole guarantee in relation to the Software and any support services. - -Exclusion of All Other Terms -To the maximum extent permitted by applicable law and subject to -the guarantee above, Microsoft disclaims all warranties, conditions and other terms, either -express or implied (whether by statute, common law, collaterally or otherwise) including but -not limited to implied warranties of satisfactory quality and fitness for particular purpose with -respect to the Software and the written materials that accompany the Software. Any implied -warranties that cannot be excluded are limited to 90 days or to the shortest period permitted by -applicable law, whichever is greater. - -Limitation of Liability -To the maximum extent permitted by applicable law and except as -provided in the Microsoft Guarantee, Microsoft and its suppliers shall not be liable for any -damages whatsoever (including without limitation, damages for loss of business profits, -business interruption, loss of business information or other pecuniary loss) arising out of the -use or inability to use the Software, even if Microsoft has been advised of the possibility of such -damages. In any case Microsoft's entire liability under any provision of this Agreement shall be -limited to the amount actually paid by you for the Software. These limitations do not apply to -any liabilities that cannot be excluded or limited by applicable laws. - -Consumer rights -Consumers in Australia, New Zealand or Malaysia may have the benefit of -certain rights and remedies by reason of the Trade Practices Act and similar state and territory -laws in Australia, the Consumer Guarantees Act in New Zealand and the Consumer Protection -Act in Malaysia in respect of which liability cannot lawfully be modified or excluded. If you -acquired the Software in New Zealand for the purposes of a business, you confirm that the -Consumer Guarantees Act does not apply. If you acquired the Software in Australia and if -Microsoft breaches a condition or warranty implied under any law which cannot lawfully be -modified or excluded by this agreement then, to the extent permitted by law, Microsoft's -liability is limited, at Microsoft's option, to: (i) in the case of the Software: a) repairing or -replacing the Software; or b) the cost of such repair or replacement; and (ii) in the case of -support services: a) re-supply of the services; or b) the cost of having the services supplied -again. - -Everett VSPro 11 -Final 11.04.02 - - - -Should you have any questions concerning this EULA, or if you desire to contact Microsoft for -any reason, please use the address information enclosed in this Software to contact the -Microsoft subsidiary serving your country or visit Microsoft on the World Wide Web at -http://www.microsoft.com. - -Everett VSPro 12 -Final 11.04.02 - -%% The following software may be included in this product: zlib; Use of any of this software is governed by the terms of the license below: - -zlib.h -- interface of the 'zlib' general purpose compression library - version 1.1.3, July 9th, 1998 - - Copyright (C) 1995-1998 Jean-loup Gailly and Mark Adler - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. - - Jean-loup Gailly Mark Adler - jloup@gzip.org madler@alumni.caltech.edu - - - The data format used by the zlib library is described by RFCs (Request for - Comments) 1950 to 1952 in the files ftp://ds.internic.net/rfc/rfc1950.txt - (zlib format), rfc1951.txt (deflate format) and rfc1952.txt (gzip format - - -%% The following software may be included in this product: Mozilla Rhino. Use of any of this software is governed by the terms of the license below: - - * The contents of this file are subject to the Netscape Public - * License Version 1.1 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.mozilla.org/NPL/ - * - * Software distributed under the License is distributed on an "AS - * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or - * implied. See the License for the specific language governing - * rights and limitations under the License. - * - * The Original Code is Rhino code, released - * May 6, 1999. - * - * The Initial Developer of the Original Code is Netscape - * Communications Corporation. Portions created by Netscape are - * Copyright (C) 1997-2000 Netscape Communications Corporation. All - * Rights Reserved. - * - * Contributor(s): - * - * Kemal Bayram - * Patrick Beard - * Norris Boyd - * Igor Bukanov, igor@mir2.org - * Brendan Eich - * Ethan Hugg - * Roger Lawrence - * Terry Lucas - * Mike McCabe - * Milen Nankov - * Attila Szegedi, szegedia@freemail.hu - * Ian D. Stewart - * Andi Vajda - * Andrew Wason - */ - -%% The following software may be included in this product: Apache Derby. Use of any of this software is governed by the terms of the license below: - - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - +DO NOT TRANSLATE OR LOCALIZE. + +%% The following software may be included in this product: CS CodeViewer v1.0; Use of any of this software is governed by the terms of the license below: +Copyright 1999 by CoolServlets.com. + +Any errors or suggested improvements to this class can be reported as instructed on CoolServlets.com. We hope you enjoy this program... your comments will encourage further development! +This software is distributed under the terms of the BSD License. +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. +2. 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 name of CoolServlets.com 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 COOLSERVLETS.COM 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 AUTHOR 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 INANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." + +%% The following software may be included in this product: Crimson v1.1.1 ; Use of any of this software is governed by the terms of the license below: +/* +* The Apache Software License, Version 1.1 +* +* +* Copyright (c) 1999-2000 The Apache Software Foundation. All rights * reserved. +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* 1. Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* +* 2. 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. +* +* 3. The end-user documentation included with the redistribution, +* if any, must include the following acknowledgment: +* "This product includes software developed by the +* Apache Software Foundation (http://www.apache.org/)." +* Alternately, this acknowledgment may appear in the software itself, +* if and wherever such third-party acknowledgments normally appear. +* +* 4. The names "Crimson" and "Apache Software Foundation" must +* not be used to endorse or promote products derived from this +* software without prior written permission. For written +* permission, please contact apache@apache.org. +* +* 5. Products derived from this software may not be called "Apache", +* nor may "Apache" appear in their name, without prior written +* permission of the Apache Software Foundation. +* +* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED 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 APACHE SOFTWARE FOUNDATION OR +* ITS 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. +* ====================================================================* +* This software consists of voluntary contributions made by many +* individuals on behalf of the Apache Software Foundation and was +* originally based on software copyright (c) 1999, International +* Business Machines, Inc., http://www.ibm.com. For more +* information on the Apache Software Foundation, please see +* . +*/ + + +%% The following software may be included in this product: Xalan J2; Use of any of this software is governed by the terms of the license below: + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. + "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." + "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. + + You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. + + + + +%% The following software may be included in this product: NSIS 1.0j; Use of any of this software is governed by the terms of the license below: +Copyright (C) 1999-2000 Nullsoft, Inc. +This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: +1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. +2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. +3. This notice may not be removed or altered from any source distribution. Justin Frankel justin@nullsoft.com" + +%% Some Portions licensed from IBM are available at: +http://www.ibm.com/software/globalization/icu/ + +%% Portions Copyright Eastman Kodak Company 1992 + +%% Lucida is a registered trademark or trademark of Bigelow & Holmes in the U.S. and other countries. + +%% Portions licensed from Taligent, Inc. + +%% The following software may be included in this product:IAIK PKCS Wrapper; Use of any of this software is governed by the terms of the license below: + +Copyright (c) 2002 Graz University of Technology. All rights reserved. +Redistribution and use in source and binary forms, with or without modification,are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + +2. 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. + +3. The end-user documentation included with the redistribution, if any, must include the following acknowledgment: + + "This product includes software developed by IAIK of Graz University of Technology." + + Alternately, this acknowledgment may appear in the software itself, if and wherever such third-party acknowledgments normally appear. + +4. The names "Graz University of Technology" and "IAIK of Graz University of Technology" must not be used to endorse or promote products derived from this software without prior written permission. + +5. Products derived from this software may not be called "IAIK PKCS Wrapper", nor may "IAIK" appear in their name, without prior written permission of Graz University of Technology. + +THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED 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 LICENSOR 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. + +%% The following software may be included in this product: Document Object Model (DOM) v. Level 3; Use of any of this software is governed by the terms of the license below: +W3Cýý SOFTWARE NOTICE AND LICENSE + +http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231 + +This work (and included software, documentation such as READMEs, or other related items) is being +provided by the copyright holders under the following license. By obtaining, using and/or copying this work, you +(the licensee) agree that you have read, understood, and will comply with the following terms and conditions. + +Permission to copy, modify, and distribute this software and its documentation, with or without modification, for +any purpose and without fee or royalty is hereby granted, provided that you include the following on ALL copies +of the software and documentation or portions thereof, including modifications: + 1.The full text of this NOTICE in a location viewable to users of the redistributed or derivative work. + 2.Any pre-existing intellectual property disclaimers, notices, or terms and conditions. If none exist, the + W3C Software Short Notice should be included (hypertext is preferred, text is permitted) within the body + of any redistributed or derivative code. + 3.Notice of any changes or modifications to the files, including the date changes were made. (We + recommend you provide URIs to the location from which the code is derived.) +THIS SOFTWARE AND DOCUMENTATION IS PROVIDED "AS IS," AND COPYRIGHT HOLDERS MAKENO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO, +WARRANTIES OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THEUSE OF THE SOFTWARE OR DOCUMENTATION WILL NOT INFRINGE ANY THIRD PARTY PATENTS,COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS. + +COPYRIGHT HOLDERS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL ORCONSEQUENTIAL DAMAGES ARISING OUT OF ANY USE OF THE SOFTWARE OR DOCUMENTATION. +The name and trademarks of copyright holders may NOT be used in advertising or publicity pertaining to the +software without specific, written prior permission. Title to copyright in this software and any associated +documentation will at all times remain with copyright holders. + +____________________________________ + +This formulation of W3C's notice and license became active on December 31 2002. This version removes the +copyright ownership notice such that this license can be used with materials other than those owned by the +W3C, reflects that ERCIM is now a host of the W3C, includes references to this specific dated version of the +license, and removes the ambiguous grant of "use". Otherwise, this version is the same as the previous +version and is written so as to preserve the Free Software Foundation's assessment of GPL compatibility and +OSI's certification under the Open Source Definition. Please see our Copyright FAQ for common questions +about using materials from our site, including specific terms and conditions for packages like libwww, Amaya, +and Jigsaw. Other questions about this notice can be directed to +site-policy@w3.org. + +%% The following software may be included in this product: Xalan, Xerces; Use of any of this software is governed by the terms of the license below: /* + * The Apache Software License, Version 1.1 + * + * + * Copyright (c) 1999-2003 The Apache Software Foundation. All rights * reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. * + * 2. 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. + * + * 3. The end-user documentation included with the redistribution, + * if any, must include the following acknowledgment: + * "This product includes software developed by the + * Apache Software Foundation (http://www.apache.org/)." + * Alternately, this acknowledgment may appear in the software itself, * if and wherever such third-party acknowledgments normally appear. * + * 4. The names "Xerces" and "Apache Software Foundation" must + * not be used to endorse or promote products derived from this + * software without prior written permission. For written + * permission, please contact apache@apache.org. + * + * 5. Products derived from this software may not be called "Apache", + * nor may "Apache" appear in their name, without prior written + * permission of the Apache Software Foundation. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED 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 APACHE SOFTWARE FOUNDATION OR + * ITS 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. + * ==================================================================== * + * This software consists of voluntary contributions made by many + * individuals on behalf of the Apache Software Foundation and was + * originally based on software copyright (c) 1999, International + * Business Machines, Inc., http://www.ibm.com. For more + * information on the Apache Software Foundation, please see + * + +%% The following software may be included in this product: W3C XML Conformance Test Suites v. 20020606; Use of any of this software is governed by the terms of the license below: +W3Cýý SOFTWARE NOTICE AND LICENSE +Copyright ýý 1994-2002 World Wide Web Consortium, (Massachusetts Institute ofTechnology, Institut National de Recherche en Informatique et en Automatique,Keio University). All Rights Reserved. http://www.w3.org/Consortium/Legal/ +This W3C work (including software, documents, or other related items) is beingprovided by the copyright holders under the following license. By obtaining,using and/or copying this work, you (the licensee) agree that you have read,understood, and will comply with the following terms and conditions: + +Permission to use, copy, modify, and distribute this software and its +documentation, with or without modification, for any purpose and without fee orroyalty is hereby granted, provided that you include the following on ALL copiesof the software and documentation or portions thereof, including modifications,that you make: + + 1. The full text of this NOTICE in a location viewable to users of theredistributed or derivative work. + 2. Any pre-existing intellectual property disclaimers, notices, or terms andconditions. If none exist, a short notice of the following form (hypertext ispreferred, text is permitted) should be used within the body of any +redistributed or derivative code: "Copyright ýý [$date-of-software] World WideWeb Consortium, (Massachusetts Institute of Technology, Institut National deRecherche en Informatique et en Automatique, Keio University). All RightsReserved. http://www.w3.org/Consortium/Legal/" + 3. Notice of any changes or modifications to the W3C files, including thedate changes were made. (We recommend you provide URIs to the location fromwhich the code is derived.) + +THIS SOFTWARE AND DOCUMENTATION IS PROVIDED "AS IS," AND COPYRIGHT HOLDERS MAKENO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITEDTO, WARRANTIES OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THATTHE USE OF THE SOFTWARE OR DOCUMENTATION WILL NOT INFRINGE ANY THIRD PARTYPATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS. + +COPYRIGHT HOLDERS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL ORCONSEQUENTIAL DAMAGES ARISING OUT OF ANY USE OF THE SOFTWARE OR DOCUMENTATION. +The name and trademarks of copyright holders may NOT be used in advertising orpublicity pertaining to the software without specific, written prior permission.Title to copyright in this software and any associated documentation will at alltimes remain with copyright holders. + +____________________________________ + +This formulation of W3C's notice and license became active on August 14 1998 soas to improve compatibility with GPL. This version ensures that W3C softwarelicensing terms are no more restrictive than GPL and consequently W3C softwaremay be distributed in GPL packages. See the older formulation for the policyprior to this date. Please see our Copyright FAQ for common questions aboutusing materials from our site, including specific terms and conditions forpackages like libwww, Amaya, and Jigsaw. Other questions about this notice canbe directed to site-policy@w3.org. + +%% The following software may be included in this product: W3C XML Schema Test Collection v. 1.16.2; Use of any of this software is governed by the terms of the license below: W3Cýýýý DOCUMENT NOTICE AND LICENSE +Copyright ýýýý 1994-2002 World Wide Web Consortium, (Massachusetts Institute ofTechnology, Institut National de Recherche en Informatique et en Automatique,Keio University). All Rights Reserved. +http://www.w3.org/Consortium/Legal/ + +Public documents on the W3C site are provided by the copyright holders under thefollowing license. The software or Document Type Definitions (DTDs) associatedwith W3C specifications are governed by the Software Notice. By using and/orcopying this document, or the W3C document from which this statement is linked,you (the licensee) agree that you have read, understood, and will comply withthe following terms and conditions: + +Permission to use, copy, and distribute the contents of this document, or theW3C document from which this statement is linked, in any medium for any purposeand without fee or royalty is hereby granted, provided that you include thefollowing on ALL copies of the document, or portions thereof, that you use: + 1. A link or URL to the original W3C document. + 2. The pre-existing copyright notice of the original author, or if it doesn'texist, a notice of the form: "Copyright ýýýý [$date-of-document] World Wide WebConsortium, (Massachusetts Institute of Technology, Institut National deRecherche en Informatique et en Automatique, Keio University). All RightsReserved. http://www.w3.org/Consortium/Legal/" (Hypertext is preferred, but atextual representation is permitted.) + 3. If it exists, the STATUS of the W3C document. + +When space permits, inclusion of the full text of this NOTICE should beprovided. We request that authorship attribution be provided in any software,documents, or other items or products that you create pursuant to the +implementation of the contents of this document, or any portion thereof. +No right to create modifications or derivatives of W3C documents is grantedpursuant to this license. However, if additional requirements (documented in theCopyright FAQ) are satisfied, the right to create modifications or derivativesis sometimes granted by the W3C to individuals complying with those requirements. +THIS DOCUMENT IS PROVIDED "AS IS," AND COPYRIGHT HOLDERS MAKE NO REPRESENTATIONSOR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, WARRANTIES OFMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT, OR TITLE;THAT THE CONTENTS OF THE DOCUMENT ARE SUITABLE FOR ANY PURPOSE; NOR THAT THEIMPLEMENTATION OF SUCH CONTENTS WILL NOT INFRINGE ANY THIRD PARTY PATENTS,COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS. + +COPYRIGHT HOLDERS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL ORCONSEQUENTIAL DAMAGES ARISING OUT OF ANY USE OF THE DOCUMENT OR THE PERFORMANCEOR IMPLEMENTATION OF THE CONTENTS THEREOF. + +The name and trademarks of copyright holders may NOT be used in advertising orpublicity pertaining to this document or its contents without specific, writtenprior permission. Title to copyright in this document will at all times remainwith copyright holders. + +---------------------------------------------------------------------------- +This formulation of W3C's notice and license became active on April 05 1999 soas to account for the treatment of DTDs, schema's and bindings. See the olderformulation for the policy prior to this date. Please see our Copyright FAQ forcommon questions about using materials from our site, including specific termsand conditions for packages like libwww, Amaya, and Jigsaw. Other questionsabout this notice can be directed to site-policy@w3.org. +webmaster +(last updated by reagle on 1999/04/99.) + + + +%% The following software may be included in this product: Mesa 3-D graphics library v. 5; Use of any of this software is governed by the terms of the license below: core Mesa code include/GL/gl.h Brian Paul Mesa + +GLX driver include/GL/glx.h Brian Paul Mesa + +Ext registry include/GL/glext.h SGI SGI Free B + include/GL/glxext.h + +Mesa license: + +The Mesa distribution consists of several components. Different copyrights andlicenses apply to different components. For example, GLUT is copyrighted by MarkKilgard, some demo programs are copyrighted by SGI, some of the Mesa devicedrivers are copyrighted by their authors. See below for a list of Mesa'scomponents and the copyright/license for each. + +The core Mesa library is licensed according to the terms of the XFree86copyright (an MIT-style license). This allows integration with the XFree86/DRIproject. Unless otherwise stated, the Mesa source code and documentation islicensed as follows: + +Copyright (C) 1999-2003 Brian Paul All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining acopy of this software and associated documentation files (the "Software"),to deal in the Software without restriction, including without limitationthe 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 includedin all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESSOR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALLBRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER INAN 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. +SGI FREE SOFTWARE LICENSE B (Version 1.1 [02/22/2000]) +1. Definitions. +1.1 "Additional Notice Provisions" means such additional provisions as appear in the Notice in Original Code under the heading "Additional Notice Provisions."1.2 "Covered Code" means the Original Code or Modifications, or any combination thereof.1.3 "Hardware" means any physical device that accepts input, processes input, stores the results of processing, and/or provides output.1.4 "Larger Work" means a work that combines Covered Code or portions thereof with code not governed by the terms of this License.1.5 "Licensable" means having the right to grant, to the maximum extent possible, whether at the time of the initial grant or subsequently acquired, any and all of the rights conveyed herein.1.6 "License" means this document. +1.7 "Licensed Patents" means patent claims Licensable by SGI that are infringed by the use or sale of Original Code or any Modifications provided by SGI, or any combination thereof.1.8 "Modifications" means any addition to or deletion from the substance or structure of the Original Code or any previous Modifications. When Covered Code is released as a series of files, a Modification is: A. Any addition to the contents of a file containing Original Code and/or addition to or deletion from the contents of a file containing previous Modifications.B. Any new file that contains any part of the Original Code or previous Modifications.1.9 "Notice" means any notice in Original Code or Covered Code, as required by and in compliance with this License.1.10 "Original Code" means source code of computer software code that is described in the source code Notice required by Exhibit A as Original Code, and updates and error corrections specifically thereto.1.11 "Recipient" means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License or a future version of this License issued under Section 8. For legal entities, "Recipient" includes any entity that controls, is controlled by, or is under common control with Recipient. For purposes of this definition, "control" of an entity means (a) the power, direct or indirect, to direct or manage such entity, or (b) ownership of fifty percent (50%) or more of the outstanding shares or beneficial ownership of such entity.1.12 "Recipient Patents" means patent claims Licensable by a Recipient that are infringed by the use or sale of Original Code or any Modifications provided by SGI, or any combination thereof. 1.13 "SGI" means Silicon Graphics, Inc. +1.14 "SGI Patents" means patent claims Licensable by SGI other than the Licensed Patents.2. License Grant and Restrictions. +2.1 SGI License Grant. Subject to the terms of this License and any third party intellectual property claims, for the duration of intellectual property protections inherent in the Original Code, SGI hereby grants Recipient a worldwide, royalty-free, non-exclusive license, to do the following: (i) under copyrights Licensable by SGI, to reproduce, distribute, create derivative works from, and, to the extent applicable, display and perform the Original Code and/or any Modifications provided by SGI alone and/or as part of a Larger Work; and (ii) under any Licensable Patents, to make, have made, use, sell, offer for sale, import and/or otherwise transfer the Original Code and/or any Modifications provided by SGI. Recipient accepts the terms and conditions of this License by undertaking any of the aforementioned actions. The patent license shall apply to the Covered Code if, at the time any related Modification is added, such addition of the Modification causes such combination to be covered by the Licensed Patents. The patent license in Section 2.1(ii) shall not apply to any other combinations that include the Modification. No patent license is provided under SGI Patents for infringements of SGI Patents by Modifications not provided by SGI or combinations of Original Code and Modifications not provided by SGI. 2.2 Recipient License Grant. Subject to the terms of this License and any third party intellectual property claims, Recipient hereby grants SGI and any other Recipients a worldwide, royalty-free, non-exclusive license, under any Recipient Patents, to make, have made, use, sell, offer for sale, import and/or otherwise transfer the Original Code and/or any Modifications provided by SGI.2.3 No License For Hardware Implementations. The licenses granted in Section 2.1 and 2.2 are not applicable to implementation in Hardware of the algorithms embodied in the Original Code or any Modifications provided by SGI .3. Redistributions. +3.1 Retention of Notice/Copy of License. The Notice set forth in Exhibit A, below, must be conspicuously retained or included in any and all redistributions of Covered Code. For distributions of the Covered Code in source code form, the Notice must appear in every file that can include a text comments field; in executable form, the Notice and a copy of this License must appear in related documentation or collateral where the Recipient's rights relating to Covered Code are described. Any Additional Notice Provisions which actually appears in the Original Code must also be retained or included in any and all redistributions of Covered Code.3.2 Alternative License. Provided that Recipient is in compliance with the terms of this License, Recipient may, so long as without derogation of any of SGI's rights in and to the Original Code, distribute the source code and/or executable version(s) of Covered Code under (1) this License; (2) a license identical to this License but for only such changes as are necessary in order to clarify Recipient's role as licensor of Modifications; and/or (3) a license of Recipient's choosing, containing terms different from this License, provided that the license terms include this Section 3 and Sections 4, 6, 7, 10, 12, and 13, which terms may not be modified or superseded by any other terms of such license. If Recipient elects to use any license other than this License, Recipient must make it absolutely clear that any of its terms which differ from this License are offered by Recipient alone, and not by SGI. It is emphasized that this License is a limited license, and, regardless of the license form employed by Recipient in accordance with this Section 3.2, Recipient may relicense only such rights, in Original Code and Modifications by SGI, as it has actually been granted by SGI in this License.3.3 Indemnity. Recipient hereby agrees to indemnify SGI for any liability incurred by SGI as a result of any such alternative license terms Recipient offers.4. Termination. This License and the rights granted hereunder will terminate automatically if Recipient breaches any term herein and fails to cure such breach within 30 days thereof. Any sublicense to the Covered Code that is properly granted shall survive any termination of this License, absent termination by the terms of such sublicense. Provisions that, by their nature, must remain in effect beyond the termination of this License, shall survive.5. No Trademark Or Other Rights. This License does not grant any rights to: (i) any software apart from the Covered Code, nor shall any other rights or licenses not expressly granted hereunder arise by implication, estoppel or otherwise with respect to the Covered Code; (ii) any trade name, trademark or service mark whatsoever, including without limitation any related right for purposes of endorsement or promotion of products derived from the Covered Code, without prior written permission of SGI; or (iii) any title to or ownership of the Original Code, which shall at all times remains with SGI. All rights in the Original Code not expressly granted under this License are reserved. 6. Compliance with Laws; Non-Infringement. There are various worldwide laws, regulations, and executive orders applicable to dispositions of Covered Code, including without limitation export, re-export, and import control laws, regulations, and executive orders, of the U.S. government and other countries, and Recipient is reminded it is obliged to obey such laws, regulations, and executive orders. Recipient may not distribute Covered Code that (i) in any way infringes (directly or contributorily) any intellectual property rights of any kind of any other person or entity or (ii) breaches any representation or warranty, express, implied or statutory, to which, under any applicable law, it might be deemed to have been subject.7. Claims of Infringement. If Recipient learns of any third party claim that any disposition of Covered Code and/or functionality wholly or partially infringes the third party's intellectual property rights, Recipient will promptly notify SGI of such claim.8. Versions of the License. SGI may publish revised and/or new versions of the License from time to time, each with a distinguishing version number. Once Covered Code has been published under a particular version of the License, Recipient may, for the duration of the license, continue to use it under the terms of that version, or choose to use such Covered Code under the terms of any subsequent version published by SGI. Subject to the provisions of Sections 3 and 4 of this License, only SGI may modify the terms applicable to Covered Code created under this License.9. DISCLAIMER OF WARRANTY. COVERED CODE IS PROVIDED "AS IS." ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS ARE DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. SGI ASSUMES NO RISK AS TO THE QUALITY AND PERFORMANCE OF THE SOFTWARE. SHOULD THE SOFTWARE PROVE DEFECTIVE IN ANY RESPECT, SGI ASSUMES NO COST OR LIABILITY FOR SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY IS AN ESSENTIAL PART OF THIS LICENSE. NO USE OF ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT SUBJECT TO THIS DISCLAIMER.10. LIMITATION OF LIABILITY. UNDER NO CIRCUMSTANCES NOR LEGAL THEORY, WHETHER TORT (INCLUDING, WITHOUT LIMITATION, NEGLIGENCE OR STRICT LIABILITY), CONTRACT, OR OTHERWISE, SHALL SGI OR ANY SGI LICENSOR BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL, WORK STOPPAGE, LOSS OF DATA, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY RESULTING FROM SGI's NEGLIGENCE TO THE EXTENT APPLICABLE LAW PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THAT EXCLUSION AND LIMITATION MAY NOT APPLY TO RECIPIENT.11. Indemnity. Recipient shall be solely responsible for damages arising, directly or indirectly, out of its utilization of rights under this License. Recipient will defend, indemnify and hold harmless Silicon Graphics, Inc. from and against any loss, liability, damages, costs or expenses (including the payment of reasonable attorneys fees) arising out of Recipient's use, modification, reproduction and distribution of the Covered Code or out of any representation or warranty made by Recipient.12. U.S. Government End Users. The Covered Code is a "commercial item" consisting of "commercial computer software" as such terms are defined in title 48 of the Code of Federal Regulations and all U.S. Government End Users acquire only the rights set forth in this License and are subject to the terms of this License.13. Miscellaneous. This License represents the complete agreement concerning the its subject matter. If any provision of this License is held to be unenforceable, such provision shall be reformed so as to achieve as nearly as possible the same legal and economic effect as the original provision and the remainder of this License will remain in effect. This License shall be governed by and construed in accordance with the laws of the United States and the State of California as applied to agreements entered into and to be performed entirely within California between California residents. Any litigation relating to this License shall be subject to the exclusive jurisdiction of the Federal Courts of the Northern District of California (or, absent subject matter jurisdiction in such courts, the courts of the State of California), with venue lying exclusively in Santa Clara County, California, with the losing party responsible for costs, including without limitation, court costs and reasonable attorneys fees and expenses. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any law or regulation that provides that the language of a contract shall be construed against the drafter shall not apply to this License. +Exhibit A +License Applicability. Except to the extent portions of this file are made subject to an alternative license as permitted in the SGI Free Software License B, Version 1.1 (the "License"), the contents of this file are subject only to the provisions of the License. You may not use this file except in compliance with the License. You may obtain a copy of the License at Silicon Graphics, Inc., attn: Legal Services, 1600 Amphitheatre Parkway, Mountain View, CA 94043-1351, or at: http://oss.sgi.com/projects/FreeB +Note that, as provided in the License, the Software is distributed on an "AS IS" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT.Original Code. The Original Code is: [name of software, version number, and release date], developed by Silicon Graphics, Inc. The Original Code is Copyright (c) [dates of first publication, as appearing in the Notice in the Original Code] Silicon Graphics, Inc. Copyright in any portions created by third parties is as indicated elsewhere herein. All Rights Reserved.Additional Notice Provisions: [such additional provisions, if any, as appear in the Notice in the Original Code under the heading "Additional Notice Provisions"] +%% The following software may be included in this product: Byte Code Engineering Library (BCEL) v. 5; Use of any of this software is governed by the terms of the license below: + Apache Software License + + /* +==================================================================== * The Apache Software License, Version 1.1 + * + * Copyright (c) 2001 The Apache Software Foundation. Allrights + * reserved. + * + * Redistribution and use in source and binary forms, withor without + * modification, are permitted provided that the followingconditions + * are met: + * + * 1. Redistributions of source code must retain the abovecopyright + * notice, this list of conditions and the followingdisclaimer. + * + * 2. Redistributions in binary form must reproduce theabove copyright + * notice, this list of conditions and the followingdisclaimer in + * the documentation and/or other materials providedwith the + * distribution. + * + * 3. The end-user documentation included with theredistribution, + * if any, must include the following acknowledgment: * "This product includes software developed by the * Apache Software Foundation +(http://www.apache.org/)." + * Alternately, this acknowledgment may appear in thesoftware itself, + * if and wherever such third-party acknowledgmentsnormally appear. + * + * 4. The names "Apache" and "Apache Software Foundation"and + * "Apache BCEL" must not be used to endorse or promoteproducts + * derived from this software without prior writtenpermission. For + * written permission, please contact apache@apache.org. * + * 5. Products derived from this software may not be called"Apache", + * "Apache BCEL", nor may "Apache" appear in their name,without + * prior written permission of the Apache SoftwareFoundation. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED ORIMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIEDWARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSEARE + * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWAREFOUNDATION OR + * ITS 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) HOWEVERCAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICTLIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING INANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THEPOSSIBILITY OF + * SUCH DAMAGE. + * +==================================================================== * + * This software consists of voluntary contributions madeby many + * individuals on behalf of the Apache Software +Foundation. For more + + + * information on the Apache Software Foundation, pleasesee + * . + */ + + + +%% The following software may be included in this product: Regexp, Regular Expression Package v. 1.2; Use of any of this software is governed by the terms of the license below: The Apache Software License, Version 1.1 +Copyright (c) 2001 The Apache Software Foundation. All rights +reserved. +Redistribution and use in source and binary forms, with or without modification,are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + +2. 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. + +3. The end-user documentation included with the redistribution, +if any, must include the following acknowledgment: +"This product includes software developed by the +Apache Software Foundation (http://www.apache.org/)." +Alternately, this acknowledgment may appear in the software itself, +if and wherever such third-party acknowledgments normally appear. + +4. The names "Apache" and "Apache Software Foundation" and +"Apache Turbine" must not be used to endorse or promote products +derived from this software without prior written permission. For +written permission, please contact apache@apache.org. + +5. Products derived from this software may not be called "Apache", +"Apache Turbine", nor may "Apache" appear in their name, without +prior written permission of the Apache Software Foundation. + +THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED 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 APACHE SOFTWARE FOUNDATION OR +ITS 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. + +==================================================================== +This software consists of voluntary contributions made by many +individuals on behalf of the Apache Software Foundation. For more +information on the Apache Software Foundation, please see + +http://www.apache.org. + +%% The following software may be included in this product: CUP Parser Generator for Java v. 0.10k; Use of any of this software is governed by the terms of the license below: CUP Parser Generator Copyright Notice, License, and Disclaimer + +Copyright 1996-1999 by Scott Hudson, Frank Flannery, C. Scott Ananian +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, provided thatthe above copyright notice appear in all copies and that both the copyrightnotice and this permission notice and warranty disclaimer appear in +supporting documentation, and that the names of the authors or their employersnot be used in advertising or publicity pertaining to distribution of +the software without specific, written prior permission. + +The authors and their employers disclaim all warranties with regard to thissoftware, including all implied warranties of merchantability and +fitness. In no event shall the authors or their employers be liable for anyspecial, indirect or consequential damages or any damages whatsoever +resulting from loss of use, data or profits, whether in an action of contract,negligence or other tortious action, arising out of or in connection withthe use or performance of this software. + +%% The following software may be included in this product: JLex: A Lexical Analyzer Generator for Java v. 1.2.5; Use of any of this software is governed by the terms of the license below: JLEX COPYRIGHT NOTICE, LICENSE AND DISCLAIMER. + +Copyright 1996-2003 by Elliot Joel Berk and C. Scott Ananian + +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose +and without fee is hereby granted, provided that the above copyright noticeappear in all copies +and that both the copyright notice and this permission notice and warrantydisclaimer appear in +supporting documentation, and that the name of the authors or their employersnot be used in +advertising or publicity pertaining to distribution of the software withoutspecific, written prior +permission. + +The authors and their employers disclaim all warranties with regard to thissoftware, including all +implied warranties of merchantability and fitness. In no event shall the authorsor their employers +be liable for any special, indirect or consequential damages or any damageswhatsoever resulting +from loss of use, data or profits, whether in an action of contract, negligenceor other tortious +action, arising out of or in connection with the use or performance of thissoftware. + +Java is a trademark of Sun Microsystems, Inc. References to the Java programminglanguage in +relation to JLex are not meant to imply that Sun endorses this +product. + +%% The following software may be included in this product: SAX v. 2.0.1; Use of any of this software is governed by the terms of the license below: Copyright Status + + SAX is free! + + In fact, it's not possible to own a license to SAX, since it's been placed in the public + domain. + + No Warranty + + Because SAX is released to the public domain, there is no warranty for the design or for + the software implementation, to the extent permitted by applicable law. Except when + otherwise stated in writing the copyright holders and/or other parties provide SAX "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 SAX is with you. Should SAX prove defective, you + assume the cost of all necessary servicing, repair or correction. + + 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 SAX, be liable to you for + damages, including any general, special, incidental or consequential damages arising out of + the use or inability to use SAX (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 SAX to + operate with any other programs), even if such holder or other party has been advised of + the possibility of such damages. + + Copyright Disclaimers + + This page includes statements to that effect by David Megginson, who would have been + able to claim copyright for the original work. + SAX 1.0 + + Version 1.0 of the Simple API for XML (SAX), created collectively by the membership of + the XML-DEV mailing list, is hereby released into the public domain. + + No one owns SAX: you may use it freely in both commercial and non-commercial + applications, bundle it with your software distribution, include it on a CD-ROM, list the + source code in a book, mirror the documentation at your own web site, or use it in any + other way you see fit. + + David Megginson, sax@megginson.com + 1998-05-11 + + SAX 2.0 + + I hereby abandon any property rights to SAX 2.0 (the Simple API for XML), and release + all of the SAX 2.0 source code, compiled code, and documentation contained in this + distribution into the Public Domain. SAX comes with NO WARRANTY or guarantee of + fitness for any purpose. + + David Megginson, david@megginson.com + 2000-05-05 + +%% The following software may be included in this product: Cryptix; Use of any of this software is governed by the terms of the license below: +Cryptix General License + +Copyright © 1995-2003 The Cryptix Foundation Limited. All rights reserved. +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions aremet: + + 1.Redistributions of source code must retain the copyright notice, this list of conditions and the following disclaimer. 2.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. +THIS SOFTWARE IS PROVIDED BY THE CRYPTIX FOUNDATION LIMITED AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS ORIMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FORA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE CRYPTIX FOUNDATION LIMITED OR CONTRIBUTORS BELIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOTLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESSINTERRUPTION) 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 OFTHE POSSIBILITY OF SUCH DAMAGE. + +%% The following software may be included in this product: W3C XML Schema Test Collection; Use of any of this software is governed by the terms of the license below: +W3C® DOCUMENT NOTICE AND LICENSE +Copyright © 1994-2002 World Wide Web Consortium, (Massachusetts Institute ofTechnology, Institut National de Recherche en Informatique et en Automatique,Keio University). All Rights Reserved. +http://www.w3.org/Consortium/Legal/ + +Public documents on the W3C site are provided by the copyright holders under thefollowing license. The software or Document Type Definitions (DTDs) associatedwith W3C specifications are governed by the Software Notice. By using and/orcopying this document, or the W3C document from which this statement is linked,you (the licensee) agree that you have read, understood, and will comply withthe following terms and conditions: + +Permission to use, copy, and distribute the contents of this document, or theW3C document from which this statement is linked, in any medium for any purposeand without fee or royalty is hereby granted, provided that you include thefollowing on ALL copies of the document, or portions thereof, that you use: + 1. A link or URL to the original W3C document. + 2. The pre-existing copyright notice of the original author, or if it doesn'texist, a notice of the form: "Copyright © [$date-of-document] World Wide WebConsortium, (Massachusetts Institute of Technology, Institut National deRecherche en Informatique et en Automatique, Keio University). All RightsReserved. http://www.w3.org/Consortium/Legal/" (Hypertext is preferred, but atextual representation is permitted.) + 3. If it exists, the STATUS of the W3C document. + +When space permits, inclusion of the full text of this NOTICE should beprovided. We request that authorship attribution be provided in any software,documents, or other items or products that you create pursuant to the +implementation of the contents of this document, or any portion thereof. +No right to create modifications or derivatives of W3C documents is grantedpursuant to this license. However, if additional requirements (documented in theCopyright FAQ) are satisfied, the right to create modifications or derivativesis sometimes granted by the W3C to individuals complying with those requirements. +THIS DOCUMENT IS PROVIDED "AS IS," AND COPYRIGHT HOLDERS MAKE NO REPRESENTATIONSOR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, WARRANTIES OFMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT, OR TITLE;THAT THE CONTENTS OF THE DOCUMENT ARE SUITABLE FOR ANY PURPOSE; NOR THAT THEIMPLEMENTATION OF SUCH CONTENTS WILL NOT INFRINGE ANY THIRD PARTY PATENTS,COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS. + +COPYRIGHT HOLDERS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL ORCONSEQUENTIAL DAMAGES ARISING OUT OF ANY USE OF THE DOCUMENT OR THE PERFORMANCEOR IMPLEMENTATION OF THE CONTENTS THEREOF. + +The name and trademarks of copyright holders may NOT be used in advertising orpublicity pertaining to this document or its contents without specific, writtenprior permission. Title to copyright in this document will at all times remainwith copyright holders. + +---------------------------------------------------------------------------- +This formulation of W3C's notice and license became active on April 05 1999 soas to account for the treatment of DTDs, schema's and bindings. See the olderformulation for the policy prior to this date. Please see our Copyright FAQ forcommon questions about using materials from our site, including specific termsand conditions for packages like libwww, Amaya, and Jigsaw. Other questionsabout this notice can be directed to site-policy@w3.org. +webmaster +(last updated by reagle on 1999/04/99.) + +%% The following software may be included in this product: Stax API; Use of any of this software is governed by the terms of the license below: +Streaming API for XML (JSR-173) Specification +Reference Implementation +License Agreement + +READ THE TERMS OF THIS (THE "AGREEMENT") CAREFULLY BEFORE VIEWING OR USING THESOFTWARE LICENS +ED HEREUNDER. BY VIEWING OR USING THE SOFTWARE, YOU AGREE TO THE TERMS OF THISAGREEMENT. IF +YOU ARE ACCESSING THE SOFTWARE ELECTRONICALLY, INDICATE YOUR ACCEPTANCE OF THESETERMS BY SELE +CTING THE "ACCEPT" BUTTON AT THE END OF THIS AGREEMENT. IF YOU DO NOT AGREE TOALL THESE TERMS +, PROMPTLY RETURN THE UNUSED SOFTWARE TO ORIGINAL CONTRIBUTOR, DEFINED HEREIN. +1.0 DEFINITIONS. + +1.1. "BEA" means BEA Systems, Inc., the licensor of the Original Code. +1.2. "Contributor" means BEA and each entity that creates or contributes to thecreation of Mo +difications. + +1.3. "Covered Code" means the Original Code or Modifications or the combinationof the Origina +l Code and Modifications, in each case including portions thereof and +corresponding documentat +ion released with the source code. + +1.4. "Executable" means Covered Code in any form other than Source Code. +1.5. "FCS" means first commercial shipment of a product. + +1.6. "Modifications" means any addition to or deletion from the substance orstructure of eith +er the Original Code or any previous Modifications. When Covered Code isreleased as a series +of files, a Modification is: + +(a) Any addition to or deletion from the contents of a file containing OriginalCode or previ +ous Modifications. + +(b) Any new file that contains any part of the Original Code or previousModifications. + +1.7. "Original Code" means Source Code of computer software code ReferenceImplementation. + +1.8. "Patent Claims" means any patent claim(s), now owned or hereafter acquired,including wit +hout limitation, method, process, and apparatus claims, in any patent for whichthe grantor ha +s the right to grant a license. + +1.9. "Reference Implementation" means the prototype or "proof of concept"implementaÂtion of +the Specification developed and made available for license by or on behalf of BEA. +1.10. "Source Code" means the preferred form of the Covered Code for makingmodifications to i +t, including all modules it contains, plus any associated documentation,interface definition +files, scripts used to control compilation and installation of an Executable, orsource code d +ifferential comparisons against either the Original Code or another well known,available Cove +red Code of the Contributor's choice. + +1.11. "Specification" means the written specification for the Streaming API forXML , Java te +chnology developed pursuant to the Java Community Process. +1.12. "Technology Compatibility Kit" or "TCK" means the documentation, testingtools and test +suites associated with the Specification as may be revised by BEA from time totime, that is p +rovided so that an implementer of the SpecifiÂcation may determine if itsimplementation is co +mpliant with the Specification. + +1.13. "You" (or "Your") means an individual or a legal entity exercising rightsunder, and com +plying with all of the terms of, this Agreement or a future version of thisAgreement issued u +nder Section 6.1. For legal entities, "You" includes any entity which controls,is controlled +by, or is under common control with You. For purposes of this definition,"control" means (a) +the power, direct or indirect, to cause the direction or management of suchentity, whether by + contract or otherwise, or (b) ownership of more than fifty percent (50%) of theoutstanding s +hares or beneficial ownership of such entity. + +2.0 SOURCE CODE LICENSE. + +2.1. Copyright Grant. Subject to the terms of this Agreement, each Contributorhereby grants +You a non-exclusive, worldwide, royalty-free copyright license to reproduce,prepare derivativ +e works of, publicly display, publicly perform, distribute and sublicense theCovered Code of +such Contributor, if any, and such derivative works, in Source Code andExecutable form. + +2.2. Patent Grant. Subject to the terms of this Agreement, each Contributorhereby grants Yo +u a non-exclusive, worldwide, royalty-free patent license under the PatentClaims to make, use +, sell, offer to sell, import and otherwise transfer the Covered Code preparedand provided by + such Contributor, if any, in Source Code and Executable form. This patentlicense shall apply + to the Covered Code if, at the time a Modification is added by the Contributor,such addition + of the Modification causes such combination to be covered by the Patent Claims.The patent li +cense shall not apply to any other combinations which include the Modification. +2.3. Conditions to Grants. You understand that although each Contributorgrants the licenses + to the Covered Code prepared by it, no assurances are provided by anyContributor that the Co +vered Code does not infringe the patent or other intellectual property rights ofany other ent +ity. Each Contributor disclaims any liability to You for claims brought by anyother entity ba +sed on infringement of intellectual property rights or otherwise. As a conditionto exercising + the rights and licenses granted hereunder, You hereby assume sole +responsibility to secure an +y other intellectual property rights needed, if any. For example, if a thirdparty patent lice +nse is required to allow You to distribute Covered Code, it is Your +responsibility to acquire +that license before distributing such code. + +2.4. Contributors' Representation. Each Contributor represents that to itsknowledge it has +sufficient copyright rights in the Covered Code it provides , if any, to grantthe copyright l +icense set forth in this Agreement. + +3.0 DISTRIBUION RESTRICTIONS. + +3.1. Application of Agreement. + +The Modifications which You create or to which You contribute are governed bythe terms of thi +s Agreement, including without limitation Section 2.0. The Source Code versionof Covered Code + may be distributed only under the terms of this Agreement or a future versionof this Agreeme +nt released under Section 6.1, and You must include a copy of this Agreementwith every copy o +f the Source Code You distribute. You may not offer or impose any terms on anySource Code ver +sion that alters or restricts the applicable version of this Agreement or therecipients' righ +ts hereunder. However, You may include an additional document offering theadditional rights d +escribed in Section 3.3. + +3.2. Description of Modifications. + +You must cause all Covered Code to which You contribute to contain a filedocumenting the chan +ges You made to create that Covered Code and the date of any change. You mustinclude a promin +ent statement that the Modification is derived, directly or indirectly, fromOriginal Code pro +vided by BEA and including the name of BEA in (a) the Source Code, and (b) inany notice in an + Executable version or related documentation in which You describe the origin orownership of +the Covered Code. + +%% The following software may be included in this product: X Window System; Use of any of this software is governed by the terms of the license below: +Copyright The Open Group + +Permission to use, copy, modify, distribute, and sell this software and itsdocumentation for any purpose is hereby granted without fee, provided that theabove copyright notice appear in all copies and that both that copyright noticeand this permission notice appear in supporting documentation. + +The above copyright notice and this permission notice shall be included in allcopies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS ORIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESSFOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE OPEN GROUPBE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OFCONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THESOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +Except as contained in this notice, the name of The Open Group shall not be usedin advertising or otherwise to promote the sale, use or other dealings in thisSoftware without prior written authorization from The Open Group. + +Portions also covered by other licenses as noted in the above URL. + +%% The following software may be included in this product: dom4j v. 1.6; Use of any of this software is governed by the terms of the license below: +Redistribution and use of this software and associated documentation +("Software"), with or without modification, are permitted provided that thefollowing conditions are met: + + 1. Redistributions of source code must retain copyright statements andnotices. Redistributions must also contain a copy of this document. + 2. Redistributions in binary form must reproduce the above copyright notice,this list of conditions and the following disclaimer in the documentation and/orother materials provided with the distribution. + 3. The name "DOM4J" must not be used to endorse or promote products derivedfrom this Software without prior written permission of MetaStuff, Ltd. Forwritten permission, please contact dom4j-info@metastuff.com. + 4. Products derived from this Software may not be called "DOM4J" nor may"DOM4J" appear in their names without prior written permission of MetaStuff,Ltd. DOM4J is a registered trademark of MetaStuff, Ltd. + 5. Due credit should be given to the DOM4J Project - http://www.dom4j.org +THIS SOFTWARE IS PROVIDED BY METASTUFF, LTD. AND CONTRIBUTORS ``AS IS'' AND ANYEXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIEDWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE AREDISCLAIMED. IN NO EVENT SHALL METASTUFF, LTD. OR ITS CONTRIBUTORS BE LIABLE FORANY 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 ONANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THISSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Copyright 2001-2005 (C) MetaStuff, Ltd. All Rights Reserved. + +%% The following software may be included in this product: Retroweaver; Use of any of this software is governed by the terms of the license below: +Copyright (c) February 2004, Toby Reyelts +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 Toby Reyelts nor the names of his 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, STRICTLIABILITY, +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. + +%% The following software may be included in this product: stripper; Use of any of this software is governed by the terms of the license below: +Stripper : debug information stripper + Copyright (c) 2003 Kohsuke Kawaguchi + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. 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. 3. Neither the name of the copyright holders 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. + + +%% The following software may be included in this product: libpng official PNG reference library; Use of any of this software is governed by the terms of the license below: +This copy of the libpng notices is provided for your convenience. In case ofany discrepancy between this copy and the notices in the file png.h that isincluded in the libpng distribution, the latter shall prevail. + +COPYRIGHT NOTICE, DISCLAIMER, and LICENSE: + +If you modify libpng you may insert additional notices immediately followingthis sentence. + +libpng version 1.2.6, December 3, 2004, is +Copyright (c) 2004 Glenn Randers-Pehrson, and is +distributed according to the same disclaimer and license as libpng-1.2.5with the following individual added to the list of Contributing Authors + Cosmin Truta + +libpng versions 1.0.7, July 1, 2000, through 1.2.5 - October 3, 2002, areCopyright (c) 2000-2002 Glenn Randers-Pehrson, and are +distributed according to the same disclaimer and license as libpng-1.0.6with the following individuals added to the list of Contributing Authors + Simon-Pierre Cadieux + Eric S. Raymond + Gilles Vollant + +and with the following additions to the disclaimer: + + There is no warranty against interference with your enjoyment of the library or against infringement. There is no warranty that our + efforts or the library will fulfill any of your particular purposes or needs. This library is provided with all faults, and the entire risk of satisfactory quality, performance, accuracy, and effort is with the user. + +libpng versions 0.97, January 1998, through 1.0.6, March 20, 2000, areCopyright (c) 1998, 1999 Glenn Randers-Pehrson, and are +distributed according to the same disclaimer and license as libpng-0.96,with the following individuals added to the list of Contributing Authors: + Tom Lane + Glenn Randers-Pehrson + Willem van Schaik + +libpng versions 0.89, June 1996, through 0.96, May 1997, are +Copyright (c) 1996, 1997 Andreas Dilger +Distributed according to the same disclaimer and license as libpng-0.88,with the following individuals added to the list of Contributing Authors: + John Bowler + Kevin Bracey + Sam Bushell + Magnus Holmgren + Greg Roelofs + Tom Tanner + +libpng versions 0.5, May 1995, through 0.88, January 1996, are +Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc. + +For the purposes of this copyright and license, "Contributing Authors"is defined as the following set of individuals: + + Andreas Dilger + Dave Martindale + Guy Eric Schalnat + Paul Schmidt + Tim Wegner + +The PNG Reference Library is supplied "AS IS". The Contributing Authorsand Group 42, Inc. disclaim all warranties, expressed or implied, +including, without limitation, the warranties of merchantability and offitness for any purpose. The Contributing Authors and Group 42, Inc. +assume no liability for direct, indirect, incidental, special, exemplary,or consequential damages, which may result from the use of the PNG +Reference Library, even if advised of the possibility of such damage. + +Permission is hereby granted to use, copy, modify, and distribute thissource code, or portions hereof, for any purpose, without fee, subjectto the following restrictions: + +1. The origin of this source code must not be misrepresented. + +2. Altered versions must be plainly marked as such and must not + be misrepresented as being the original source. + +3. This Copyright notice may not be removed or altered from any + source or altered source distribution. + +The Contributing Authors and Group 42, Inc. specifically permit, withoutfee, and encourage the use of this source code as a component to +supporting the PNG file format in commercial products. If you use thissource code in a product, acknowledgment is not required but would be +appreciated. + + +A "png_get_copyright" function is available, for convenient use in "about"boxes and the like: + + printf("%s",png_get_copyright(NULL)); + +Also, the PNG logo (in PNG format, of course) is supplied in the +files "pngbar.png" and "pngbar.jpg (88x31) and "pngnow.png" (98x31). + +Libpng is OSI Certified Open Source Software. OSI Certified Open Source is acertification mark of the Open Source Initiative. + +Glenn Randers-Pehrson +glennrp at users.sourceforge.net +December 3, 2004 + +%% The following software may be included in this product: Libungif - An uncompressed GIF library; Use of any of this software is governed by the terms of the license below: +The GIFLIB distribution is Copyright (c) 1997 Eric S. Raymond + +Permission is hereby granted, free of charge, to any person obtaining a copyof this software and associated documentation files (the "Software"), to dealin the Software without restriction, including without limitation the rightsto use, copy, modify, merge, publish, distribute, sublicense, and/or sellcopies 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 inall copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS ORIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THEAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHERLIABILITY, 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 INTHE SOFTWARE. + + +%% The following software may be included in this product: Ant; Use of any of this software is governed by the terms of the license below: +License +The Apache Software License Version 2.0 + +The Apache Software License Version 2.0 applies to all releases of Ant startingwith ant 1.6.1 + +/* + * Apache License + * Version 2.0, January 2004 + * http://www.apache.org/licenses/ + * + * TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + * + * 1. Definitions. + * + * "License" shall mean the terms and conditions for use, reproduction, * and distribution as defined by Sections 1 through 9 of this document. * + * "Licensor" shall mean the copyright owner or entity authorized by * the copyright owner that is granting the License. + * + * "Legal Entity" shall mean the union of the acting entity and all * other entities that control, are controlled by, or are under common * control with that entity. For the purposes of this definition, * "control" means (i) the power, direct or indirect, to cause the * direction or management of such entity, whether by contract or * otherwise, or (ii) ownership of fifty percent (50%) or more of the * outstanding shares, or (iii) beneficial ownership of such entity. * + * "You" (or "Your") shall mean an individual or Legal Entity + * exercising permissions granted by this License. + * + * "Source" form shall mean the preferred form for making modifications, * including but not limited to software source code, documentation * source, and configuration files. + * + * "Object" form shall mean any form resulting from mechanical + * transformation or translation of a Source form, including but + * not limited to compiled object code, generated documentation, + * and conversions to other media types. + * + * "Work" shall mean the work of authorship, whether in Source or * Object form, made available under the License, as indicated by a * copyright notice that is included in or attached to the work + * (an example is provided in the Appendix below). + * + * "Derivative Works" shall mean any work, whether in Source or Object * form, that is based on (or derived from) the Work and for which the * editorial revisions, annotations, elaborations, or other modifications * represent, as a whole, an original work of authorship. For the purposes * of this License, Derivative Works shall not include works that remain * separable from, or merely link (or bind by name) to the interfaces of, * the Work and Derivative Works thereof. + * + * "Contribution" shall mean any work of authorship, including + * the original version of the Work and any modifications or additions * to that Work or Derivative Works thereof, that is intentionally * submitted to Licensor for inclusion in the Work by the copyright owner * or by an individual or Legal Entity authorized to submit on behalf of * the copyright owner. For the purposes of this definition, "submitted" * means any form of electronic, verbal, or written communication sent * to the Licensor or its representatives, including but not limited to * communication on electronic mailing lists, source code control systems, * and issue tracking systems that are managed by, or on behalf of, the * Licensor for the purpose of discussing and improving the Work, but * excluding communication that is conspicuously marked or otherwise * designated in writing by the copyright owner as "Not a Contribution." * + * "Contributor" shall mean Licensor and any individual or Legal Entity * on behalf of whom a Contribution has been received by Licensor and * subsequently incorporated within the Work. + * + * 2. Grant of Copyright License. Subject to the terms and conditions of * this License, each Contributor hereby grants to You a perpetual, * worldwide, non-exclusive, no-charge, royalty-free, irrevocable * copyright license to reproduce, prepare Derivative Works of, + * publicly display, publicly perform, sublicense, and distribute the * Work and such Derivative Works in Source or Object form. + * + * 3. Grant of Patent License. Subject to the terms and conditions of * this License, each Contributor hereby grants to You a perpetual, * worldwide, non-exclusive, no-charge, royalty-free, irrevocable * (except as stated in this section) patent license to make, have made, * use, offer to sell, sell, import, and otherwise transfer the Work, * where such license applies only to those patent claims licensable * by such Contributor that are necessarily infringed by their + * Contribution(s) alone or by combination of their Contribution(s) * with the Work to which such Contribution(s) was submitted. If You * institute patent litigation against any entity (including a + * cross-claim or counterclaim in a lawsuit) alleging that the Work * or a Contribution incorporated within the Work constitutes direct * or contributory patent infringement, then any patent licenses + * granted to You under this License for that Work shall terminate * as of the date such litigation is filed. + * + * 4. Redistribution. You may reproduce and distribute copies of the * Work or Derivative Works thereof in any medium, with or without * modifications, and in Source or Object form, provided that You * meet the following conditions: + * + * (a) You must give any other recipients of the Work or + * Derivative Works a copy of this License; and + * + * (b) You must cause any modified files to carry prominent notices * stating that You changed the files; and + * + * (c) You must retain, in the Source form of any Derivative Works * that You distribute, all copyright, patent, trademark, and * attribution notices from the Source form of the Work, + * excluding those notices that do not pertain to any part of * the Derivative Works; and + * + * (d) If the Work includes a "NOTICE" text file as part of its + * distribution, then any Derivative Works that You distribute must * include a readable copy of the attribution notices contained * within such NOTICE file, excluding those notices that do not * pertain to any part of the Derivative Works, in at least one * of the following places: within a NOTICE text file distributed * as part of the Derivative Works; within the Source form or * documentation, if provided along with the Derivative Works; or, * within a display generated by the Derivative Works, if and * wherever such third-party notices normally appear. The contents * of the NOTICE file are for informational purposes only and * do not modify the License. You may add Your own attribution * notices within Derivative Works that You distribute, alongside * or as an addendum to the NOTICE text from the Work, provided * that such additional attribution notices cannot be construed * as modifying the License. + * + * You may add Your own copyright statement to Your modifications and * may provide additional or different license terms and conditions * for use, reproduction, or distribution of Your modifications, or * for any such Derivative Works as a whole, provided Your use, + * reproduction, and distribution of the Work otherwise complies with * the conditions stated in this License. + * + * 5. Submission of Contributions. Unless You explicitly state otherwise, * any Contribution intentionally submitted for inclusion in the Work * by You to the Licensor shall be under the terms and conditions of * this License, without any additional terms or conditions. + * Notwithstanding the above, nothing herein shall supersede or modify * the terms of any separate license agreement you may have executed * with Licensor regarding such Contributions. + * + * 6. Trademarks. This License does not grant permission to use the trade * names, trademarks, service marks, or product names of the Licensor, * except as required for reasonable and customary use in describing the * origin of the Work and reproducing the content of the NOTICE file. * + * 7. Disclaimer of Warranty. Unless required by applicable law or + * agreed to in writing, Licensor provides the Work (and each + * Contributor provides its Contributions) on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or * implied, including, without limitation, any warranties or conditions * of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + * PARTICULAR PURPOSE. You are solely responsible for determining the * appropriateness of using or redistributing the Work and assume any * risks associated with Your exercise of permissions under this License. * + * 8. Limitation of Liability. In no event and under no legal theory, * whether in tort (including negligence), contract, or otherwise, * unless required by applicable law (such as deliberate and grossly * negligent acts) or agreed to in writing, shall any Contributor be * liable to You for damages, including any direct, indirect, special, * incidental, or consequential damages of any character arising as a * result of this License or out of the use or inability to use the * Work (including but not limited to damages for loss of goodwill, * work stoppage, computer failure or malfunction, or any and all * other commercial damages or losses), even if such Contributor + * has been advised of the possibility of such damages. + * + * 9. Accepting Warranty or Additional Liability. While redistributing * the Work or Derivative Works thereof, You may choose to offer, * and charge a fee for, acceptance of support, warranty, indemnity, * or other liability obligations and/or rights consistent with this * License. However, in accepting such obligations, You may act only * on Your own behalf and on Your sole responsibility, not on behalf * of any other Contributor, and only if You agree to indemnify, + * defend, and hold each Contributor harmless for any liability + * incurred by, or claims asserted against, such Contributor by reason * of your accepting any such warranty or additional liability. + * + * END OF TERMS AND CONDITIONS + * + * APPENDIX: How to apply the Apache License to your work. + * + * To apply the Apache License to your work, attach the following * boilerplate notice, with the fields enclosed by brackets "[]" + * replaced with your own identifying information. (Don't include * the brackets!) The text should be enclosed in the appropriate * comment syntax for the file format. We also recommend that a + * file or class name and description of purpose be included on the * same "printed page" as the copyright notice for easier + * identification within third-party archives. + * + * Copyright [yyyy] Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. + */ + + +You can download the original license file here. + +The License is accompanied by a NOTICE + + ========================================================================= == NOTICE file corresponding to the section 4 d of == == the Apache License, Version 2.0, == == in this case for the Apache Ant distribution. == ========================================================================= + This product includes software developed by + The Apache Software Foundation (http://www.apache.org/). + + This product includes also software developed by : + - the W3C consortium (http://www.w3c.org) , + - the SAX project (http://www.saxproject.org) + + Please read the different LICENSE files present in the root directory of this distribution. + + The names "Ant" and "Apache Software Foundation" must not be used to endorse or promote products derived from this software without prior written permission. For written permission, please contact + apache@apache.org. + +The Apache Software License, Version 1.1 + +The Apache Software License, Version 1.1, applies to all versions of up to ant1.6.0 included. + +/* + * ============================================================================ * The Apache Software License, Version 1.1 + * ============================================================================ * + * Copyright (C) 2000-2003 The Apache Software Foundation. All + * rights reserved. + * + * Redistribution and use in source and binary forms, with or without modifica- * tion, are permitted provided that the following conditions are met: * + * 1. Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. + * + * 2. 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. + * + * 3. The end-user documentation included with the redistribution, if any, must * include the following acknowledgment: "This product includes software * developed by the Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowledgment may appear in the software itself, if * and wherever such third-party acknowledgments normally appear. + * + * 4. The names "Ant" and "Apache Software Foundation" must not be used to * endorse or promote products derived from this software without prior * written permission. For written permission, please contact + * apache@apache.org. + * + * 5. Products derived from this software may not be called "Apache", nor may * "Apache" appear in their name, without prior written permission of the * Apache Software Foundation. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED 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 * APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- * DING, 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. + * + * This software consists of voluntary contributions made by many individuals * on behalf of the Apache Software Foundation. For more information on the * Apache Software Foundation, please see . + * + */ + + +%% The following software may be included in this product: XML Resolver library; Use of any of this software is governed by the terms of the license below: + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. + "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." + "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. + + You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. + + +%% The following software may be included in this product: ICU4J; Use of any of this software is governed by the terms of the license below: +ICU License - ICU 1.8.1 and later COPYRIGHT AND PERMISSION NOTICE Cop +yright (c) +1995-2003 International Business Machines Corporation and others All rightsreserved. Permission is hereby granted, free of charge, to any person obtaininga copy of this software and associated documentation files (the "Software"), todeal in the Software without restriction, including without limitation therights to use, copy, modify, merge, publish, distribute, and/or sell copies ofthe Software, and to permit persons to whom the Software is furnished to do so,provided that the above copyright notice(s) and this permission notice appear inall copies of the Software and that both the above copyright notice(s) and thispermission notice appear in supporting documentation. THE SOFTWARE IS PROVIDED"AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOTLIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSEAND NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHTHOLDER OR HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANYSPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTINGFROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCEOR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE ORPERFORMANCE OF THIS SOFTWARE. Except as contained in this notice, the name of acopyright holder shall not be used in advertising or otherwise to promote thesale, use or other dealings in this Software without prior written authorizationof the copyright holder. + + +%% The following software may be included in this product: NekoHTML; Use of any of this software is governed by the terms of the license below: +The CyberNeko Software License, Version 1.0 + + +(C) Copyright 2002,2003, Andy Clark. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +2. 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. + +3. The end-user documentation included with the redistribution, + if any, must include the following acknowledgment: + "This product includes software developed by Andy Clark." + Alternately, this acknowledgment may appear in the software itself, if and wherever such third-party acknowledgments normally appear. + +4. The names "CyberNeko" and "NekoHTML" must not be used to endorse + or promote products derived from this software without prior + written permission. For written permission, please contact + andy@cyberneko.net. + +5. Products derived from this software may not be called "CyberNeko", + nor may "CyberNeko" appear in their name, without prior written + permission of the author. + +THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED 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 AUTHOR OR OTHER 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. + +==================================================================== +This license is based on the Apache Software License, version 1.1 + + +%% The following software may be included in this product: Jing; Use of any of this software is governed by the terms of the license below: +Jing Copying Conditions + +Copyright (c) 2001-2003 Thai Open Source Software Center Ltd +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/orother materials provided with the distribution. + * Neither the name of the Thai Open Source Software Center Ltd nor the namesof its contributors may be used to endorse or promote products derived from thissoftware without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" ANDANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIEDWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE AREDISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANYDIRECT, 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 ONANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THISSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +%% The following software may be included in this product: RelaxNGCC; Use of any of this software is governed by the terms of the license below: +Copyright (c) 2000-2003 Daisuke Okajima and Kohsuke Kawaguchi. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +1. Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + +2. 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. + +3. The end-user documentation included with the redistribution, if +any, must include the following acknowledgment: + + "This product includes software developed by Daisuke Okajima + and Kohsuke Kawaguchi (http://relaxngcc.sf.net/)." + +Alternately, this acknowledgment may appear in the software itself, +if and wherever such third-party acknowledgments normally appear. + +4. The names of the copyright holders must not be used to endorse or +promote products derived from this software without prior written +permission. For written permission, please contact the copyright +holders. + +5. Products derived from this software may not be called "RELAXNGCC", +nor may "RELAXNGCC" appear in their name, without prior written +permission of the copyright holders. + +THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED 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 APACHE SOFTWARE FOUNDATION OR ITS 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. + + +%% The following software may be included in this product: RELAX NG Object Model/Parser; Use of any of this software is governed by the terms of the license below: +The MIT License + +Copyright (c) + +Permission is hereby granted, free of charge, to any person obtaining a copy ofthis software and associated documentation files (the "Software"), to deal inthe Software without restriction, including without limitation the rights touse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies ofthe 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 allcopies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS ORIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESSFOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS ORCOPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHERIN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR INCONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +%% The following software may be included in this product: XFree86-VidMode Extension; Use of any of this software is governed by the terms of the license below: +Version 1.1 of +XFree86ýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýý ProjectLicence. + + Copyright (C) 1994-2004 The +XFree86ýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýProject, Inc. All rights reserved. + + Permission is hereby granted, free of charge, to any person obtaining a copyof this software and associated documentation files (the "Software"), to deal inthe Software without restriction, including without limitation the rights touse, copy, modify, merge, publish, distribute, sublicence, and/or sell copies ofthe Software, and to permit persons to whom the Software is furnished to do so,subject to the following conditions: + + 1. Redistributions of source code must retain the above copyright notice,this list of conditions, and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyrightnotice, this list of conditions and the following disclaimer in the +documentation and/or other materials provided with the distribution, and in thesame place and form as other copyright, license and disclaimer information. 3. The end-user documentation included with the redistribution, if any,must include the following acknowledgment: "This product includes softwaredeveloped by The XFree86 Project, Inc (http://www.xfree86.org/) and itscontributors", in the same place and form as other third-party acknowledgments.Alternately, this acknowledgment may appear in the software itself, in the sameform and location as other such third-party acknowledgments. + 4. Except as contained in this notice, the name of The XFree86 Project,Inc shall not be used in advertising or otherwise to promote the sale, use orother dealings in this Software without prior written authorization from TheXFree86 Project, Inc. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY ANDFITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE XFREE86PROJECT, INC OR ITS 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; ORBUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER INCONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISINGIN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITYOF SUCH DAMAGE. + + +%% The following software may be included in this product: RelaxNGCC; Use of any of this software is governed by the terms of the license below: +This is version 2003-May-08 of the Info-ZIP copyright and license. +The definitive version of this document should be available at +ftp://ftp.info-zip.org/pub/infozip/license.html indefinitely. + + +Copyright (c) 1990-2003 Info-ZIP. All rights reserved. + +For the purposes of this copyright and license, "Info-ZIP" is defined asthe following set of individuals: + + Mark Adler, John Bush, Karl Davis, Harald Denker, Jean-Michel Dubois, Jean-loup Gailly, Hunter Goatley, Ian Gorman, Chris Herborth, Dirk Haase, Greg Hartwig, Robert Heath, Jonathan Hudson, Paul Kienitz, David Kirschbaum, Johnny Lee, Onno van der Linden, Igor Mandrichenko, Steve P. Miller, Sergio Monesi, Keith Owens, George Petrov, Greg Roelofs, Kai Uwe Rommel, Steve Salisbury, Dave Smith, Christian Spieler, Antoine Verheijen, + Paul von Behren, Rich Wales, Mike White + +This software is provided "as is," without warranty of any kind, expressor implied. In no event shall Info-ZIP or its contributors be held liablefor any direct, indirect, incidental, special or consequential damagesarising out of the use of or inability to use this software. + +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute itfreely, subject to the following restrictions: + + 1. Redistributions of source code must retain the above copyright notice, definition, disclaimer, and this list of conditions. + + 2. Redistributions in binary form (compiled executables) must reproduce the above copyright notice, definition, disclaimer, and this list of conditions in documentation and/or other materials provided with the distribution. The sole exception to this condition is redistribution of a standard UnZipSFX binary (including SFXWiz) as part of a + self-extracting archive; that is permitted without inclusion of this license, as long as the normal SFX banner has not been removed from the binary or disabled. + + 3. Altered versions--including, but not limited to, ports to new operating systems, existing ports with new graphical interfaces, and dynamic, shared, or static library versions--must be plainly marked as such and must not be misrepresented as being the original source. Such altered versions also must not be misrepresented as being Info-ZIP releases--including, but not limited to, labeling of the altered versions with the names "Info-ZIP" (or any variation thereof, including, but not limited to, different capitalizations), "Pocket UnZip," "WiZ" or "MacZip" without the explicit permission of Info-ZIP. Such altered versions are further prohibited from misrepresentative use of the Zip-Bugs or Info-ZIP e-mail addresses or of the Info-ZIP URL(s). + 4. Info-ZIP retains the right to use the names "Info-ZIP," "Zip," "UnZip," "UnZipSFX," "WiZ," "Pocket UnZip," "Pocket Zip," and "MacZip" for its own source and binary releases. + + +%% The following software may be included in this product: XML Security; Use of any of this software is governed by the terms of the license below: + The Apache Software License, + Version 1.1 + + + PDF + + + Copyright (C) 2002 The Apache SoftwareFoundation. + All rights reserved. Redistribution anduse in + source and binary forms, with or withoutmodifica- + tion, are permitted provided that thefollowing + conditions are met: 1. Redistributions ofsource + code must retain the above copyrightnotice, this + list of conditions and the followingdisclaimer. + 2. Redistributions in binary form mustreproduce + the above copyright notice, this list of conditions and the following disclaimerin the + documentation and/or other materialsprovided with + the distribution. 3. The end-userdocumentation + included with the redistribution, if any,must + include the following acknowledgment:"This + product includes software developed bythe Apache + Software Foundation +(http://www.apache.org/)." + Alternately, this acknowledgment mayappear in the + software itself, if and wherever suchthird-party + acknowledgments normally appear. 4. Thenames + "Apache Forrest" and "Apache SoftwareFoundation" + must not be used to endorse or promoteproducts + derived from this software without priorwritten + permission. For written permission,please contact + apache@apache.org. 5. Products derivedfrom this + software may not be called "Apache", normay + "Apache" appear in their name, withoutprior + written permission of the Apache Software Foundation. THIS SOFTWARE IS PROVIDED``AS IS'' + AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THEIMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESSFOR A + PARTICULAR PURPOSE ARE DISCLAIMED. IN NOEVENT + SHALL THE APACHE SOFTWARE FOUNDATION ORITS + CONTRIBUTORS BE LIABLE FOR ANY DIRECT,INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, ORCONSEQUENTIAL + DAMAGES (INCLU- DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS ORSERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANYTHEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICTLIABILITY, + OR TORT (INCLUDING NEGLIGENCE OROTHERWISE) + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THEPOSSIBILITY OF + SUCH DAMAGE. This software consists ofvoluntary + contributions made by many individuals onbehalf + of the Apache Software Foundation. Formore + information on the Apache SoftwareFoundation, + please see . + +%% The following software may be included in this product: Regexp, Regular Expression Package v. 1.2; Use of any of this software is governed by the terms of the license below: The Apache Software License, Version 1.1 +Copyright (c) 2001 The Apache Software Foundation. All rights +reserved. +Redistribution and use in source and binary forms, with or without modification,are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + +2. 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. + +3. The end-user documentation included with the redistribution, +if any, must include the following acknowledgment: +"This product includes software developed by the +Apache Software Foundation (http://www.apache.org/)." +Alternately, this acknowledgment may appear in the software itself, +if and wherever such third-party acknowledgments normally appear. + +4. The names "Apache" and "Apache Software Foundation" and +"Apache Turbine" must not be used to endorse or promote products +derived from this software without prior written permission. For +written permission, please contact apache@apache.org. + +5. Products derived from this software may not be called "Apache", +"Apache Turbine", nor may "Apache" appear in their name, without +prior written permission of the Apache Software Foundation. + +THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED 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 APACHE SOFTWARE FOUNDATION OR +ITS 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. + +==================================================================== +This software consists of voluntary contributions made by many +individuals on behalf of the Apache Software Foundation. For more +information on the Apache Software Foundation, please see + +http://www.apache.org. + + +%% The following software may be included in this product: Visual Studio. Use of any of this software is governed by the terms of the license below: + +END-USER LICENSE AGREEMENT FOR MICROSOFT SOFTWARE +IMPORTANT-READ CAREFULLY: This End-User License Agreement ("EULA") is a legal +agreement between you (either an individual or a single entity) and Microsoft Corporation ("Microsoft) for the Microsoft software that accompanies this EULA, which includes computer software and may include associated media, printed materials, "online" or electronic documentation, and Internet-based services ("Software"). An amendment or addendum to this EULA may accompany the Software. YOU AGREE TO BE BOUND BY THE TERMS OF THIS EULA BY INSTALLING, COPYING, OR OTHERWISE USING THE SOFTWARE. IF YOU DO NOT AGREE, DO NOT INSTALL, COPY, OR USE THE SOFTWARE; YOU MAY RETURN IT TO YOUR PLACE OF PURCHASE (IF APPLICABLE) FOR A FULL REFUND. + +MICROSOFT SOFTWARE LICENSE + +1. GRANTS OF LICENSE. Microsoft grants you the rights described in this EULA +provided that you comply with all terms and conditions of this EULA. NOTE: Microsoft is not +licensing to you any rights with respect to Crystal Reports for Microsoft Visual Studio .NET; +your use of Crystal Reports for Microsoft Visual Studio .NET is subject to your acceptance of +the terms and conditions of the enclosed (hard copy) end user license agreement from Crystal +Decisions for that product. +1.1 General License Grant. Microsoft grants to you as an individual, a personal, +nonexclusive license to use the Software, and to make and use copies of the Software for the +purposes of designing, developing, testing, and demonstrating your software product(s), +provided that you are the only individual using the Software. +If you are an entity, Microsoft grants to you a personal, nonexclusive license to +use the Software, and to make and use copies of the Software, provided that for each individual +using the Software within your organization, you have acquired a separate and valid license for +each such individual. + +1.2 Documentation. You may make and use an unlimited number of copies of any +documentation, provided that such copies shall be used only for personal purposes and are not +to be republished or distributed (either in hard copy or electronic form) beyond your premises. +1.3 Storage/Network Use. You may also store or install a copy of the Software on a +storage device, such as a network server, used only to install or run the Software on computers +used by licensed end users in accordance with Section 1.1. A single license for the Software may +not be shared or used concurrently by multiple end users. +1.4 Visual Studio—Effect of EULA. As a suite of development tools and other +Microsoft software programs (each such tool or software program, a "Component"), +Components that you receive as part of the Software may include a separate end-user license +agreement (each, a "Component EULA"). Except as provided in Section 4 ("Prerelease Code"), in +the event of inconsistencies between this EULA and any Component EULA, the terms of this +EULA shall control. The Software may also contain third-party software programs. Any such +software is provided for your use as a convenience and your use is subject to the terms and +conditions of any license agreement contained in that software. +2. ADDITIONAL LICENSE RIGHTS -- REDISTRIBUTABLE CODE. In addition to the +rights granted in Section 1, certain portions of the Software, as described in this Section 2, are +provided to you with additional license rights. These additional license rights are conditioned +Everett VSPro 1 +Final 11.04.02 + + + +upon your compliance with the distribution requirements and license limitations described in +Section 3. + +2.1 Sample Code. Microsoft grants you a limited, nonexclusive, royalty-free license +to: (a) use and modify the source code version of those portions of the Software identified as +"Samples" in REDIST.TXT or elsewhere in the Software ("Sample Code") for the sole purposes +of designing, developing, and testing your software product(s), and (b) reproduce and +distribute the Sample Code, along with any modifications thereof, in object and/or source code +form. For applicable redistribution requirements for Sample Code, see Section 3.1 below. +2.2 Redistributable Code—General. Microsoft grants you a limited, nonexclusive, +royalty-free license to reproduce and distribute the object code form of any portion of the +Software listed in REDIST.TXT ("Redistributable Code"). For general redistribution +requirements for Redistributable Code, see Section 3.1 below. +2.3 Redistributable Code—Microsoft Merge Modules ("MSM"). Microsoft grants +you a limited, nonexclusive, royalty-free license to reproduce and distribute the content of MSM +file(s) listed in REDIST.TXT in the manner described in the Software documentation only so +long as you redistribute such content in its entirety and do not modify such content in any way. +For all other applicable redistribution requirements for MSM files, see Section 3.1 below. +2.4 Redistributable Code—Microsoft Foundation Classes (MFC), Active Template +Libraries (ATL), and C runtimes (CRTs). In addition to the rights granted in Section 1, +Microsoft grants you a license to use and modify the source code version of those portions of +the Software that are identified as MFC, ATL, or CRTs (collectively, the "VC Redistributables"), +for the sole purposes of designing, developing, and testing your software product(s). Provided +you comply with Section 3.1 and you rename any files created by you that are included in the +Licensee Software (defined below), Microsoft grants you a limited, nonexclusive, royalty-free +license to reproduce and distribute the object code version of the VC Redistributables, including +any modifications you make. For purposes of this section, "modifications" shall mean +enhancements to the functionality of the VC Redistributables. For all other applicable +redistribution requirements for VC Redistributables, see Section 3.1 below. +3. DISTRIBUTION REQUIREMENTS AND OTHER LICENSE RIGHTS AND +LIMITATIONS. If you choose to exercise your rights under Section 2, any redistribution by +you is subject to your compliance with Section 3.1; some of the Redistributable Code has +additional limited use rights described in Section 3.2. +3.1 General Distribution Requirements. +(a) If you choose to redistribute Sample Code, or Redistributable Code +(collectively, the "Redistributables") as described in Section 2, you agree: (i) except as otherwise +noted in Section 2.1 (Sample Code), to distribute the Redistributables only in object code form +and in conjunction with and as a part of a software application product developed by you that +adds significant and primary functionality to the Redistributables ("Licensee Software"); +(ii) that the Redistributables only operate in conjunction with Microsoft Windows platforms; +(iii) that if the Licensee Software is distributed beyond Licensee's premises or externally from +Licensee's organization, to distribute the Licensee Software containing the Redistributables +pursuant to an end user license agreement (which may be "break-the-seal", "click-wrap" or +signed), with terms no less protective than those contained in this EULA; (iv) not to use +Microsoft's name, logo, or trademarks to market the Licensee Software; (v) to display your own +valid copyright notice which shall be sufficient to protect Microsoft's copyright in the Software; +Everett VSPro 2 +Final 11.04.02 + + + +(vi) not to remove or obscure any copyright, trademark or patent notices that appear on the +Software as delivered to you; (vii) to indemnify, hold harmless, and defend Microsoft from and +against any claims or lawsuits, including attorney's fees, that arise or result from the use or +distribution of the Licensee Software; (viii) to otherwise comply with the terms of this EULA; +and (ix) agree that Microsoft reserves all rights not expressly granted. +You also agree not to permit further distribution of the Redistributables by your +end users except you may permit further redistribution of the Redistributables by your +distributors to your end-user customers if your distributors only distribute the Redistributables +in conjunction with, and as part of, the Licensee Software, you comply with all other terms of +this EULA, and your distributors comply with all restrictions of this EULA that are applicable +to you. + +(b) If you use the Redistributables, then in addition to your compliance with +the applicable distribution requirements described for the Redistributables, the following also +applies. Your license rights to the Redistributables are conditioned upon your not (i) creating +derivative works of the Redistributables in any manner that would cause the Redistributables in +whole or in part to become subject to any of the terms of an Excluded License; or (ii) +distributing the Redistributables (or derivative works thereof) in any manner that would cause +the Redistributables to become subject to any of the terms of an Excluded License. An +"Excluded License" is any license that requires as a condition of use, modification and/or +distribution of software subject to the Excluded License, that such software or other software +combined and/or distributed with such software be (x) disclosed or distributed in source code +form; (y) licensed for the purpose of making derivative works; or (z) redistributable at no +charge. +3.2 Additional Distribution Requirements for Certain Redistributable Code. +If you choose to redistribute the files discussed in this Section, then in addition to the terms of +Section 3.1, you must ALSO comply with the following. +(a) Microsoft SQL Server Desktop Engine ("MSDE"). If you redistribute +MSDE you agree to comply with the following additional requirements: (a) Licensee +Software shall not substantially duplicate the capabilities of Microsoft Access or, in the +reasonable opinion of Microsoft, compete with same; and (b) unless Licensee Software +requires your customers to license Microsoft Access in order to operate, you shall not +reproduce or use MSDE for commercial distribution in conjunction with a general +purpose word processing, spreadsheet or database management software product, or an +integrated work or product suite whose components include a general purpose word +processing, spreadsheet, or database management software product except for the +exclusive use of importing data to the various formats supported by Microsoft Access. +A product that includes limited word processing, spreadsheet or database components +along with other components which provide significant and primary value, such as an +accounting product with limited spreadsheet capability, is not considered to be a +"general purpose" product. +(b) Microsoft Data Access Components. If you redistribute the Microsoft +Data Access Component file identified as MDAC_TYP.EXE, you also agree to +redistribute such file in object code only in conjunction with and as a part of a Licensee +Software developed by you with a Microsoft development tool product that adds +significant and primary functionality to MDAC_TYP.EXE. +Everett VSPro 3 +Final 11.04.02 + + + +3.3 Separation of Components. The Software is licensed as a single product. Its +component parts may not be separated for use by more than one user. +3.4 Benchmark Testing. The Software may contain the Microsoft .NET Framework. +You may not disclose the results of any benchmark test of the .NET Framework component of +the Software to any third party without Microsoft's prior written approval. +4. PRERELEASE CODE. Portions of the Software may be identified as prerelease code +("Prerelease Code"). Such Prerelease Code is not at the level of performance and compatibility +of the final, generally available product offering. The Prerelease Code may not operate correctly +and may be substantially modified prior to first commercial shipment. Microsoft is not +obligated to make this or any later version of the Prerelease Code commercially available. The +grant of license to use Prerelease Code expires upon availability of a commercial release of the +Prerelease Code from Microsoft. NOTE: In the event that Prerelease Code contains a separate +end-user license agreement, the terms and conditions of such end-user license agreement shall +govern your use of the corresponding Prerelease Code. +5. RESERVATION OF RIGHTS AND OWNERSHIP. Microsoft reserves all rights not +expressly granted to you in this EULA. The Software is protected by copyright and other +intellectual property laws and treaties. Microsoft or its suppliers own the title, copyright, and +other intellectual property rights in the Software. The Software is licensed, not sold. +6. LIMITATIONS ON REVERSE ENGINEERING, DECOMPILATION, AND +DISASSEMBLY. You may not reverse engineer, decompile, or disassemble the Software, +except and only to the extent that such activity is expressly permitted by applicable law +notwithstanding this limitation. +7. NO RENTAL/COMMERCIAL HOSTING. You may not rent, lease, lend or provide +commercial hosting services with the Software. +8. CONSENT TO USE OF DATA. You agree that Microsoft and its affiliates may collect +and use technical information gathered as part of the product support services provided to you, +if any, related to the Software. Microsoft may use this information solely to improve our +products or to provide customized services or technologies to you and will not disclose this +information in a form that personally identifies you. +9. LINKS TO THIRD PARTY SITES. You may link to third party sites through the use of +the Software. The third party sites are not under the control of Microsoft, and Microsoft is not +responsible for the contents of any third party sites, any links contained in third party sites, or +any changes or updates to third party sites. Microsoft is not responsible for webcasting or any +other form of transmission received from any third party sites. Microsoft is providing these +links to third party sites to you only as a convenience, and the inclusion of any link does not +imply an endorsement by Microsoft of the third party site. +10. ADDITIONAL SOFTWARE/SERVICES. This EULA applies to updates, supplements, +add-on components, or Internet-based services components, of the Software that Microsoft may +provide to you or make available to you after the date you obtain your initial copy of the +Software, unless we provide other terms along with the update, supplement, add-on +component, or Internet-based services component. Microsoft reserves the right to discontinue +any Internet-based services provided to you or made available to you through the use of the +Software. +11. UPGRADES/DOWNGRADES +Everett VSPro 4 +Final 11.04.02 + + + +11.1 Upgrades. To use a version of the Software identified as an upgrade, you must +first be licensed for the software identified by Microsoft as eligible for the upgrade. After +upgrading, you may no longer use the software that formed the basis for your upgrade +eligibility. +11.2 Downgrades. Instead of installing and using the Software, you may install and +use copies of an earlier version of the Software, provided that you completely remove such +earlier version and install the current version of the Software within a reasonable time. Your +use of such earlier version shall be governed by this EULA, and your rights to use such earlier +version shall terminate when you install the Software. +11.3 Special Terms for Version 2003 Upgrade Editions of the Software. If the +Software accompanying this EULA is the version 2003 edition of the Software and you have +acquired it as an upgrade from the corresponding "2002" edition of the Microsoft software +product with the same product name as the Software (the "Qualifying Software"), then +Section 11.1 does not apply to you. Instead, you may continue to use the Qualifying Software +AND the version 2003 upgrade for so long as you continue to comply with the terms of this +EULA and the EULA governing your use of the Qualifying Software. Qualifying Software does +not include non-Microsoft software products. +12. NOT FOR RESALE SOFTWARE. Software identified as "Not For Resale" or "NFR," +may not be sold or otherwise transfered for value, or used for any purpose other than +demonstration, test or evaluation. +13. ACADEMIC EDITION SOFTWARE. To use Software identified as "Academic +Edition" or "AE," you must be a "Qualified Educational User." For qualification-related +questions, please contact the Microsoft Sales Information Center/One Microsoft +Way/Redmond, WA 98052-6399 or the Microsoft subsidiary serving your country. +14. EXPORT RESTRICTIONS. You acknowledge that the Software is subject to U.S. export +jurisdiction. You agree to comply with all applicable international and national laws that apply +to the Software, including the U.S. Export Administration Regulations, as well as end-user, end- +use, and destination restrictions issued by U.S. and other governments. For additional +information see . +15. SOFTWARE TRANSFER. The initial user of the Software may make a one-time +permanent transfer of this EULA and Software to another end user, provided the initial user +retains no copies of the Software. This transfer must include all of the Software (including all +component parts, the media and printed materials, any upgrades (including any Qualifying +Software as defined in Section 11.3), this EULA, and, if applicable, the Certificate of +Authenticity). The transfer may not be an indirect transfer, such as a consignment. Prior to the +transfer, the end user receiving the Software must agree to all the EULA terms. +16. TERMINATION. Without prejudice to any other rights, Microsoft may terminate this +EULA if you fail to comply with the terms and conditions of this EULA. In such event, you +must destroy all copies of the Software and all of its component parts. +Everett VSPro 5 +Final 11.04.02 + + + +17. LIMITED WARRANTY FOR SOFTWARE ACQUIRED IN THE US AND CANADA. +Except for the "Redistributables," which are provided AS IS without warranty of any kind, +Microsoft warrants that the Software will perform substantially in accordance with the +accompanying materials for a period of ninety (90) days from the date of receipt. + +If an implied warranty or condition is created by your state/jurisdiction and federal or +state/provincial law prohibits disclaimer of it, you also have an implied warranty or condition, +BUT ONLY AS TO DEFECTS DISCOVERED DURING THE PERIOD OF THIS LIMITED +WARRANTY (NINETY DAYS). AS TO ANY DEFECTS DISCOVERED AFTER THE +NINETY-DAY PERIOD, THERE IS NO WARRANTY OR CONDITION OF ANY KIND. + +Some states/jurisdictions do not allow limitations on how long an implied warranty or + + +condition lasts, so the above limitation may not apply to you. +Any supplements or updates to the Software, including without limitation, any (if any) service +packs or hot fixes provided to you after the expiration of the ninety day Limited Warranty +period are not covered by any warranty or condition, express, implied or statutory. + + +LIMITATION ON REMEDIES; NO CONSEQUENTIAL OR OTHER DAMAGES. Your +exclusive remedy for any breach of this Limited Warranty is as set forth below. Except for any +refund elected by Microsoft, YOU ARE NOT ENTITLED TO ANY DAMAGES, +INCLUDING BUT NOT LIMITED TO CONSEQUENTIAL DAMAGES, if the Software does +not meet Microsoft's Limited Warranty, and, to the maximum extent allowed by applicable  +law, even if any remedy fails of its essential purpose. The terms of Section 19 ("Exclusion of +Incidental, Consequential and Certain Other Damages") are also incorporated into this Limited +Warranty. Some states/jurisdictions do not allow the exclusion or limitation of incidental or +consequential damages, so the above limitation or exclusion may not apply to you. This +Limited Warranty gives you specific legal rights. You may have other rights which vary from +state/jurisdiction to state/jurisdiction. YOUR EXCLUSIVE REMEDY. Microsoft's and its +suppliers' entire liability and your exclusive remedy for any breach of this Limited Warranty or +for any other breach of this EULA or for any other liability relating to the Software shall be, at +Microsoft's option from time to time exercised subject to applicable law, (a) return of the +amount paid (if any) for the Software, or (b) repair or replacement of the Software, that does not +meet this Limited Warranty and that is returned to Microsoft with a copy of your receipt. You +will receive the remedy elected by Microsoft without charge, except that you are responsible for +any expenses you may incur (e.g. cost of shipping the Software to Microsoft). This Limited +Warranty is void if failure of the Software has resulted from accident, abuse, misapplication, +  +abnormal use or a virus. Any replacement Software will be warranted for the remainder of the +original warranty period or thirty (30) days, whichever is longer, and Microsoft will use +commercially reasonable efforts to provide your remedy within a commercially reasonable time +of your compliance with Microsoft's warranty remedy procedures. Outside the United States or +Canada, neither these remedies nor any product support services offered by Microsoft are +available without proof of purchase from an authorized international source. To exercise your +remedy, contact: Microsoft, Attn. Microsoft Sales Information Center/One Microsoft +Way/Redmond, WA 98052-6399, or the Microsoft subsidiary serving your country. +    + + +18. DISCLAIMER OF WARRANTIES. The Limited Warranty that appears above is the +only express warranty made to you and is provided in lieu of any other express warranties or +similar obligations (if any) created by any advertising, documentation, packaging, or other +communications. EXCEPT FOR THE LIMITED WARRANTY AND TO THE MAXIMUM +Everett VSPro 6 +Final 11.04.02 + + + +EXTENT PERMITTED BY APPLICABLE LAW, MICROSOFT AND ITS SUPPLIERS +PROVIDE THE SOFTWARE AND SUPPORT SERVICES (IF ANY) AS IS AND WITH ALL +FAULTS, AND HEREBY DISCLAIM ALL OTHER WARRANTIES AND CONDITIONS, +WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, +ANY (IF ANY) IMPLIED WARRANTIES, DUTIES OR CONDITIONS OF +MERCHANTABILITY, OF FITNESS FOR A PARTICULAR PURPOSE, OF RELIABILITY +OR AVAILABILITY, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF +RESULTS, OF WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF +NEGLIGENCE, ALL WITH REGARD TO THE SOFTWARE, AND THE PROVISION OF OR +FAILURE TO PROVIDE SUPPORT OR OTHER SERVICES, INFORMATION, SOFTWARE, +AND RELATED CONTENT THROUGH THE SOFTWARE OR OTHERWISE ARISING +OUT OF THE USE OF THE SOFTWARE. ALSO, THERE IS NO WARRANTY OR +CONDITION OF TITLE, QUIET ENJOYMENT, QUIET POSSESSION, +CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT WITH REGARD TO +THE SOFTWARE. + +19. EXCLUSION OF INCIDENTAL, CONSEQUENTIAL AND CERTAIN OTHER +DAMAGES. TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, IN NO +EVENT SHALL MICROSOFT OR ITS SUPPLIERS BE LIABLE FOR ANY SPECIAL, +INCIDENTAL, PUNITIVE, INDIRECT, OR CONSEQUENTIAL DAMAGES +WHATSOEVER (INCLUDING, BUT NOT LIMITED TO, DAMAGES FOR LOSS OF +PROFITS OR CONFIDENTIAL OR OTHER INFORMATION, FOR BUSINESS +INTERRUPTION, FOR PERSONAL INJURY, FOR LOSS OF PRIVACY, FOR FAILURE TO +MEET ANY DUTY INCLUDING OF GOOD FAITH OR OF REASONABLE CARE, FOR +NEGLIGENCE, AND FOR ANY OTHER PECUNIARY OR OTHER LOSS WHATSOEVER) +ARISING OUT OF OR IN ANY WAY RELATED TO THE USE OF OR INABILITY TO USE +THE SOFTWARE, THE PROVISION OF OR FAILURE TO PROVIDE SUPPORT OR +OTHER SERVICES, INFORMATION, SOFTWARE, AND RELATED CONTENT +THROUGH THE SOFTWARE OR OTHERWISE ARISING OUT OF THE USE OF THE +SOFTWARE, OR OTHERWISE UNDER OR IN CONNECTION WITH ANY PROVISION +OF THIS EULA, EVEN IN THE EVENT OF THE FAULT, TORT (INCLUDING +NEGLIGENCE), MISREPRESENTATION, STRICT LIABILITY, BREACH OF CONTRACT +OR BREACH OF WARRANTY OF MICROSOFT OR ANY SUPPLIER, AND EVEN IF +MICROSOFT OR ANY SUPPLIER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. +20. LIMITATION OF LIABILITY AND REMEDIES. NOTWITHSTANDING ANY +DAMAGES THAT YOU MIGHT INCUR FOR ANY REASON WHATSOEVER +(INCLUDING, WITHOUT LIMITATION, ALL DAMAGES REFERENCED HEREIN AND +ALL DIRECT OR GENERAL DAMAGES IN CONTRACT OR ANYTHING ELSE), THE +ENTIRE LIABILITY OF MICROSOFT AND ANY OF ITS SUPPLIERS UNDER ANY +PROVISION OF THIS EULA AND YOUR EXCLUSIVE REMEDY HEREUNDER (EXCEPT +FOR ANY REMEDY OF REPAIR OR REPLACEMENT ELECTED BY MICROSOFT WITH +RESPECT TO ANY BREACH OF THE LIMITED WARRANTY) SHALL BE LIMITED TO +THE GREATER OF THE ACTUAL DAMAGES YOU INCUR IN REASONABLE RELIANCE +ON THE SOFTWARE UP TO THE AMOUNT ACTUALLY PAID BY YOU FOR THE +SOFTWARE OR US$5.00. THE FOREGOING LIMITATIONS, EXCLUSIONS AND +DISCLAIMERS (INCLUDING SECTIONS 17, 18, AND 19) SHALL APPLY TO THE +MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, EVEN IF ANY REMEDY FAILS +ITS ESSENTIAL PURPOSE. +Everett VSPro 7 +Final 11.04.02 + + + +21. U.S. GOVERNMENT LICENSE RIGHTS. All Software provided to the U.S. +Government pursuant to solicitations issued on or after December 1, 1995 is provided with the +commercial license rights and restrictions described elsewhere herein. All Software provided to +the U.S. Government pursuant to solicitations issued prior to December 1, 1995 is provided with +"Restricted Rights" as provided for in FAR, 48 CFR 52.227-14 (JUNE 1987) or DFAR, 48 CFR +252.227-7013 (OCT 1988), as applicable. +22. APPLICABLE LAW. If you acquired this Software in the United States, this EULA is +governed by the laws of the State of Washington. If you acquired this Software in Canada, +unless expressly prohibited by local law, this EULA is governed by the laws in force in the +Province of Ontario, Canada; and, in respect of any dispute which may arise hereunder, you +consent to the jurisdiction of the federal and provincial courts sitting in Toronto, Ontario. If you +acquired this Software in the European Union, Iceland, Norway, or Switzerland, then local law +applies. If you acquired this Software in any other country, then local law may apply. +23. ENTIRE AGREEMENT; SEVERABILITY. This EULA (including any addendum or +amendment to this EULA which is included with the Software) are the entire agreement +between you and Microsoft relating to the Software and the support services (if any) and they +supersede all prior or contemporaneous oral or written communications, proposals and +representations with respect to the Software or any other subject matter covered by this EULA. +To the extent the terms of any Microsoft policies or programs for support services conflict with +the terms of this EULA, the terms of this EULA shall control. If any provision of this EULA is +held to be void, invalid, unenforceable or illegal, the other provisions shall continue in full force +and effect. +Si vous avez acquis votre produit Microsoft au CANADA, la garantie limitée suivante +s'applique : + +GARANTIE LIMITÉE + +Sauf pur celles du "Redistributables," qui sont fournies "comme telles," Microsoft garantit que +le Logiciel fonctionnera conformément aux documents inclus pendant une période de 90 jours +suivant la date de réception. + +Si une garantie ou condition implicite est créée par votre État ou votre territoire et qu'une loifédérale ou provinciale ou d'un État en interdit le déni, vous jouissez également d'une +garantie ou condition implicite, MAIS UNIQUEMENT POUR LES DÉFAUTS DÉCOUVERTS +DURANT LA PÉRIODE DE LA PRÉSENTE GARANTIE LIMITÉE (QUATRE-VINGT-DIX +JOURS). IL N'Y A AUCUNE GARANTIE OU CONDITION DE QUELQUE NATURE QUECE SOIT QUANT AUX DÉFAUTS DÉCOUVERTS APRÈS CETTE PÉRIODE DE QUATRE- +VINGT-DIX JOURS. Certains États ou territoires ne permettent pas de limiter la durée d'une +garantie ou condition implicite de sorte que la limitation ci-dessus peut ne pas s'appliquer à +vous. + +Tous les suppléments ou toutes les mises à jour relatifs au Logiciel, notamment, les ensembles +de services ou les réparations à chaud (le cas échéant) qui vous sont fournis après l'expiration +de la période de quatre-vingt-dix jours de la garantie limitée ne sont pas couverts par quelque +garantie ou condition que ce soit, expresse, implicite ou en vertu de la loi. + +LIMITATION DES RECOURS; ABSENCE DE DOMMAGES INDIRECTS OU AUTRES. + +Votre recours exclusif pour toute violation de la présente garantie limitée est décrit ci-après. + +Sauf pour tout remboursement au choix de Microsoft, si le Logiciel ne respecte pas la + +Everett VSPro 8 +Final 11.04.02 + + + +garantie limitée de Microsoft et, dans la mesure maximale permise par les lois applicables, +même si tout recours n'atteint pas son but essentiel, VOUS N'AVEZ DROIT À AUCUNS +DOMMAGES, NOTAMMENT DES DOMMAGES INDIRECTS. Les termes de la +clause «Exclusion des dommages accessoires, indirects et de certains autres dommages » sontégalement intégrées à la présente garantie limitée. Certains États ou territoires ne permettent +pas l'exclusion ou la limitation des dommages indirects ou accessoires de sorte que la limitation +ou l'exclusion ci-dessus peut ne pas s'appliquer à vous. La présente garantie limitée vous donne +des droits légaux spécifiques. Vous pouvez avoir d'autres droits qui peuvent varier d'unterritoire ou d'un État à un autre. VOTRE RECOURS EXCLUSIF. La seule responsabilité +obligation de Microsoft et de ses fournisseurs et votre recours exclusif pour toute violation de +la présente garantie limitée ou pour toute autre violation du présent contrat ou pour toute autre +responsabilité relative au Logiciel seront, selon le choix de Microsoft exercé de temps à autre +sous réserve de toute loi applicable, a) le remboursement du prix payé, le cas échéant, pour le +Logiciel ou b) la réparation ou le remplacement du Logiciel qui ne respecte pas la présente +garantie limitée et qui est retourné à Microsoft avec une copie de votre reçu. Vous recevrez la +compensation choisie par Microsoft, sans frais, sauf que vous êtes responsable des dépenses que +vous pourriez engager (p. ex., les frais d'envoi du Logiciel à Microsoft). La présente garantie +limitée est nulle si la défectuosité du Logiciel est causée par un accident, un usage abusif, une +mauvaise application, un usage anormal ou un virus. Tout Logiciel de remplacement sera +garanti pour le reste de la période initiale de la garantie ou pendant trente (30) jours, selon la +plus longue entre ces deux périodes. À l'extérieur des États-Unis ou du Canada, ces recours ou +l'un quelconque des services de soutien technique offerts par Microsoft ne sont pas disponibles +sans preuve d'achat d'une source internationale autorisée. Pour exercer votre recours, vous +devez communiquer avec Microsoft et vous adresser au Microsoft Sales Information +Center/One Microsoft Way/Redmond, WA 98052-6399, ou à la filiale de Microsoft de votre +pays. + +DÉNI DE GARANTIES. La garantie limitée qui apparaît ci-dessus constitue la seule garantie +expresse qui vous est donnée et remplace toutes autres garanties expresses (s'il en est) crées par +une publicité, un document, un emballage ou une autre communication. SAUF EN CE QUI A +TRAIT À LA GARANTIE LIMITÉE ET DANS LA MESURE MAXIMALE PERMISE PAR +LES LOIS APPLICABLES, LE LOGICIEL ET LES SERVICES DE SOUTIEN TECHNIQUE +(LE CAS ÉCHÉANT) SONT FOURNIS TELS QUELS ET AVEC TOUS LES DÉFAUTS PAR +MICROSOFT ET SES FOURNISSEURS, LESQUELS PAR LES PRÉSENTES DÉNIENT +TOUTES AUTRES GARANTIES ET CONDITIONS EXPRESSES, IMPLICITES OU EN +VERTU DE LA LOI, NOTAMMENT, MAIS SANS LIMITATION, (LE CAS ÉCHÉANT) LESGARANTIES, DEVOIRS OU CONDITIONS IMPLICITES DE QUALITÉ MARCHANDE, +D'ADAPTATION À UNE FIN PARTICULIÈRE, DE FIABILITÉ OU DE DISPONIBILITÉ, +D'EXACTITUDE OU D'EXHAUSTIVITÉ DES RÉPONSES, DES RÉSULTATS, DES +EFFORTS DÉPLOYÉS SELON LES RÈGLES DE L'ART, D'ABSENCE DE VIRUS ET +D'ABSENCE DE NÉGLIGENCE, LE TOUT À L'ÉGARD DU LOGICIEL ET DE LA +PRESTATION OU DE L'OMISSION DE LA PRESTATION DES SERVICES DE SOUTIEN +TECHNIQUE OU À L'ÉGARD DE LA FOURNITURE OU DE L'OMISSION DE LA +FOURNITURE DE TOUS AUTRES SERVICES, RENSEIGNEMENTS, LOGICIELS, ET +CONTENU QUI S'Y RAPPORTE GRÂCE AU LOGICIEL OU PROVENANT AUTREMENT +DE L'UTILISATION DU LOGICIEL . PAR AILLEURS, IL N'Y A AUCUNE GARANTIE OU +CONDITION QUANT AU TITRE DE PROPRIÉTÉ, À LA JOUISSANCE OU LA +POSSESSION PAISIBLE, À LA CONCORDANCE À UNE DESCRIPTION NI QUANT À +UNE ABSENCE DE CONTREFAÇON CONCERNANT LE LOGICIEL. + +EXCLUSION DES DOMMAGES ACCESSOIRES, INDIRECTS ET DE CERTAINS AUTRES +DOMMAGES. DANS LA MESURE MAXIMALE PERMISE PAR LES LOIS APPLICABLES, +EN AUCUN CAS MICROSOFT OU SES FOURNISSEURS NE SERONT RESPONSABLES +DES DOMMAGES SPÉCIAUX, CONSÉCUTIFS, ACCESSOIRES OU INDIRECTS DE + +Everett VSPro 9 +Final 11.04.02 + + + +QUELQUE NATURE QUE CE SOIT (NOTAMMENT, LES DOMMAGES À L'ÉGARD DUMANQUE À GAGNER OU DE LA DIVULGATION DE RENSEIGNEMENTS +CONFIDENTIELS OU AUTRES, DE LA PERTE D'EXPLOITATION, DE BLESSURES +CORPORELLES, DE LA VIOLATION DE LA VIE PRIVÉE, DE L'OMISSION DE REMPLIR +TOUT DEVOIR, Y COMPRIS D'AGIR DE BONNE FOI OU D'EXERCER UN SOIN +RAISONNABLE, DE LA NÉGLIGENCE ET DE TOUTE AUTRE PERTE PÉCUNIAIRE OU +AUTRE PERTE DE QUELQUE NATURE QUE CE SOIT) SE RAPPORTANT DE QUELQUEMANIÈRE QUE CE SOIT À L'UTILISATION DU LOGICIEL OU À L'INCAPACITÉ DE +S'EN SERVIR, À LA PRESTATION OU À L'OMISSION DE LA PRESTATION DE +SERVICES DE SOUTIEN TECHNIQUE OU À LA FOURNITURE OU À L'OMISSION DE +LA FOURNITURE DE TOUS AUTRES SERVICES, RENSEIGNEMENTS, LOGICIELS, ET +CONTENU QUI S'Y RAPPORTE GRÂCE AU LOGICIEL OU PROVENANT AUTREMENT +DE L'UTILISATION DU LOGICIEL OU AUTREMENT AUX TERMES DE TOUTE +DISPOSITION DE LA PRÉSENTE CONVENTION OU RELATIVEMENT À UNE TELLE +DISPOSITION, MÊME EN CAS DE FAUTE, DE DÉLIT CIVIL (Y COMPRIS LANÉGLIGENCE), DE RESPONSABILITÉ STRICTE, DE VIOLATION DE CONTRAT OU DEVIOLATION DE GARANTIE DE MICROSOFT OU DE TOUT FOURNISSEUR ET MÊME +SI MICROSOFT OU TOUT FOURNISSEUR A ÉTÉ AVISÉ DE LA POSSIBILITÉ DE TELS +DOMMAGES. + +LIMITATION DE RESPONSABILITÉ ET RECOURS. MALGRÉ LES DOMMAGES QUE +VOUS PUISSIEZ SUBIR POUR QUELQUE MOTIF QUE CE SOIT (NOTAMMENT, MAISSANS LIMITATION, TOUS LES DOMMAGES SUSMENTIONNÉS ET TOUS LES +DOMMAGES DIRECTS OU GÉNÉRAUX OU AUTRES), LA SEULE RESPONSABILITÉ DE +MICROSOFT ET DE L'UN OU L'AUTRE DE SES FOURNISSEURS AUX TERMES DE +TOUTE DISPOSITION DE LA PRÉSENTE CONVENTION ET VOTRE RECOURS +EXCLUSIF À L'ÉGARD DE TOUT CE QUI PRÉCÈDE (SAUF EN CE QUI CONCERNETOUT RECOURS DE RÉPARATION OU DE REMPLACEMENT CHOISI PAR +MICROSOFT À L'ÉGARD DE TOUT MANQUEMENT À LA GARANTIE LIMITÉE) SELIMITE AU PLUS ÉLEVÉ ENTRE LES MONTANTS SUIVANTS : LE MONTANT QUE +VOUS AVEZ RÉELLEMENT PAYÉ POUR LE LOGICIEL OU 5,00 $US. LES LIMITES, +EXCLUSIONS ET DÉNIS QUI PRÉCÈDENT (Y COMPRIS LES CLAUSES CI-DESSUS), +S'APPLIQUENT DANS LA MESURE MAXIMALE PERMISE PAR LES LOIS +APPLICABLES, MÊME SI TOUT RECOURS N'ATTEINT PAS SON BUT ESSENTIEL. + +À moins que cela ne soit prohibé par le droit local applicable, la présente Convention est régie +par les lois de la province d'Ontario, Canada. Vous consentez à la compétence des tribunaux +fédéraux et provinciaux siégeant à Toronto, dans la province d'Ontario. + +Au cas où vous auriez des questions concernant cette licence ou que vous désiriez vous mettre +en rapport avec Microsoft pour quelque raison que ce soit, veuillez utiliser l'information +contenue dans le Logiciel pour contacter la filiale de Microsoft desservant votre pays, ou visitez +Microsoft sur le World Wide Web à http://www.microsoft.com. + +The following MICROSOFT GUARANTEE applies to you if you acquired this Software in +any other country: + +Statutory rights not affected -The following guarantee is not restricted to any territory and does +not affect any statutory rights that you may have from your reseller or from Microsoft if you +acquired the Software directly from Microsoft. If you acquired the Software or any support +services in Australia, New Zealand or Malaysia, please see the "Consumer rights" section +below. + +Everett VSPro 10 +Final 11.04.02 + + + +The guarantee -The Software is designed and offered as a general-purpose software, not for any +user's particular purpose. You accept that no Software is error free and you are strongly +advised to back-up your files regularly. Provided that you have a valid license, Microsoft +guarantees that a) for a period of 90 days from the date of receipt of your license to use the +Software or the shortest period permitted by applicable law it will perform substantially in +accordance with the written materials that accompany the Software; and b) any support services +provided by Microsoft shall be substantially as described in applicable written materials +provided to you by Microsoft and Microsoft support engineers will use reasonable efforts, care +and skill to solve any problem issues. In the event that the Software fails to comply with this +guarantee, Microsoft will either (a) repair or replace the Software or (b) return the price you +paid. This guarantee is void if failure of the Software results from accident, abuse or +misapplication. Any replacement Software will be guaranteed for the remainder of the original +guarantee period or 30 days, whichever period is longer. You agree that the above guarantee is +your sole guarantee in relation to the Software and any support services. + +Exclusion of All Other Terms -To the maximum extent permitted by applicable law and subject to +the guarantee above, Microsoft disclaims all warranties, conditions and other terms, either +express or implied (whether by statute, common law, collaterally or otherwise) including but +not limited to implied warranties of satisfactory quality and fitness for particular purpose with +respect to the Software and the written materials that accompany the Software. Any implied +warranties that cannot be excluded are limited to 90 days or to the shortest period permitted by +applicable law, whichever is greater. + +Limitation of Liability -To the maximum extent permitted by applicable law and except as +provided in the Microsoft Guarantee, Microsoft and its suppliers shall not be liable for any +damages whatsoever (including without limitation, damages for loss of business profits, +business interruption, loss of business information or other pecuniary loss) arising out of the +use or inability to use the Software, even if Microsoft has been advised of the possibility of such +damages. In any case Microsoft's entire liability under any provision of this Agreement shall be +limited to the amount actually paid by you for the Software. These limitations do not apply to +any liabilities that cannot be excluded or limited by applicable laws. + +Consumer rights -Consumers in Australia, New Zealand or Malaysia may have the benefit of +certain rights and remedies by reason of the Trade Practices Act and similar state and territory +laws in Australia, the Consumer Guarantees Act in New Zealand and the Consumer Protection +Act in Malaysia in respect of which liability cannot lawfully be modified or excluded. If you +acquired the Software in New Zealand for the purposes of a business, you confirm that the +Consumer Guarantees Act does not apply. If you acquired the Software in Australia and if +Microsoft breaches a condition or warranty implied under any law which cannot lawfully be +modified or excluded by this agreement then, to the extent permitted by law, Microsoft's +liability is limited, at Microsoft's option, to: (i) in the case of the Software: a) repairing or +replacing the Software; or b) the cost of such repair or replacement; and (ii) in the case of +support services: a) re-supply of the services; or b) the cost of having the services supplied +again. + +Everett VSPro 11 +Final 11.04.02 + + + +Should you have any questions concerning this EULA, or if you desire to contact Microsoft for +any reason, please use the address information enclosed in this Software to contact the +Microsoft subsidiary serving your country or visit Microsoft on the World Wide Web at +http://www.microsoft.com. + +Everett VSPro 12 +Final 11.04.02 + +%% The following software may be included in this product: zlib; Use of any of this software is governed by the terms of the license below: + +zlib.h -- interface of the 'zlib' general purpose compression library + version 1.1.3, July 9th, 1998 + + Copyright (C) 1995-1998 Jean-loup Gailly and Mark Adler + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. + + Jean-loup Gailly Mark Adler + jloup@gzip.org madler@alumni.caltech.edu + + + The data format used by the zlib library is described by RFCs (Request for + Comments) 1950 to 1952 in the files ftp://ds.internic.net/rfc/rfc1950.txt + (zlib format), rfc1951.txt (deflate format) and rfc1952.txt (gzip format + + +%% The following software may be included in this product: Mozilla Rhino. Use of any of this software is governed by the terms of the license below: + + * The contents of this file are subject to the Netscape Public + * License Version 1.1 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.mozilla.org/NPL/ + * + * Software distributed under the License is distributed on an "AS + * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or + * implied. See the License for the specific language governing + * rights and limitations under the License. + * + * The Original Code is Rhino code, released + * May 6, 1999. + * + * The Initial Developer of the Original Code is Netscape + * Communications Corporation. Portions created by Netscape are + * Copyright (C) 1997-2000 Netscape Communications Corporation. All + * Rights Reserved. + * + * Contributor(s): + * + * Kemal Bayram + * Patrick Beard + * Norris Boyd + * Igor Bukanov, igor@mir2.org + * Brendan Eich + * Ethan Hugg + * Roger Lawrence + * Terry Lucas + * Mike McCabe + * Milen Nankov + * Attila Szegedi, szegedia@freemail.hu + * Ian D. Stewart + * Andi Vajda + * Andrew Wason + */ + +%% The following software may be included in this product: Apache Derby. Use of any of this software is governed by the terms of the license below: + + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + diff --git a/rpms/legal/FOSS_licenses/jepp/zlib-libpng License.txt b/rpms/legal/FOSS_licenses/jepp/zlib-libpng License.txt index 9dccab73c3..0c627be53f 100644 --- a/rpms/legal/FOSS_licenses/jepp/zlib-libpng License.txt +++ b/rpms/legal/FOSS_licenses/jepp/zlib-libpng License.txt @@ -1,27 +1,27 @@ -Open Source Initiative OSI - The zlib/libpng License:Licensing -Submitted by nelson on Tue, 2006-10-31 04:56. :: -The zlib/libpng License - -Copyright (c) - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not -claim that you wrote the original software. If you use this software -in a product, an acknowledgment in the product documentation would be -appreciated but is not required. - -2. Altered source versions must be plainly marked as such, and must not be -misrepresented as being the original software. - -3. This notice may not be removed or altered from any source -distribution. - - - +Open Source Initiative OSI - The zlib/libpng License:Licensing +Submitted by nelson on Tue, 2006-10-31 04:56. :: +The zlib/libpng License + +Copyright (c) + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any damages +arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it +freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must not +claim that you wrote the original software. If you use this software +in a product, an acknowledgment in the product documentation would be +appreciated but is not required. + +2. Altered source versions must be plainly marked as such, and must not be +misrepresented as being the original software. + +3. This notice may not be removed or altered from any source +distribution. + + + diff --git a/rpms/legal/FOSS_licenses/jogl/bsd_license.txt b/rpms/legal/FOSS_licenses/jogl/bsd_license.txt index 29100c0407..f50d0adc4a 100644 --- a/rpms/legal/FOSS_licenses/jogl/bsd_license.txt +++ b/rpms/legal/FOSS_licenses/jogl/bsd_license.txt @@ -1,15 +1,15 @@ -License -PostgreSQL is released under the BSD license. -PostgreSQL Database Management System -(formerly known as Postgres, then as Postgres95) - -Portions Copyright (c) 1996-2005, The PostgreSQL Global Development Group - -Portions Copyright (c) 1994, The Regents of the University of California - -Permission to use, copy, modify, and distribute this software and its documentation for any purpose, without fee, and without a written agreement is hereby granted, provided that the above copyright notice and this paragraph and the following two paragraphs appear in all copies. - -IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. - +License +PostgreSQL is released under the BSD license. +PostgreSQL Database Management System +(formerly known as Postgres, then as Postgres95) + +Portions Copyright (c) 1996-2005, The PostgreSQL Global Development Group + +Portions Copyright (c) 1994, The Regents of the University of California + +Permission to use, copy, modify, and distribute this software and its documentation for any purpose, without fee, and without a written agreement is hereby granted, provided that the above copyright notice and this paragraph and the following two paragraphs appear in all copies. + +IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. + diff --git a/rpms/legal/FOSS_licenses/jscience/license.txt b/rpms/legal/FOSS_licenses/jscience/license.txt index 722d3c6689..af0d44fb2a 100644 --- a/rpms/legal/FOSS_licenses/jscience/license.txt +++ b/rpms/legal/FOSS_licenses/jscience/license.txt @@ -1,26 +1,26 @@ -* JScience - Java(TM) Tools and Libraries for the Advancement of Sciences. -* Copyright (c) 2005 - 2007 JScience (http://jscience.org/) -* All rights reserved. -* -* -* Redistribution and use in source and binary forms, with or without -* modification, are permitted provided that the following conditions are met: -* -* 1. Redistributions of source code must retain the above copyright -* notice, this list of conditions and the following disclaimer. -* -* 2. 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. -* -* 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 +* JScience - Java(TM) Tools and Libraries for the Advancement of Sciences. +* Copyright (c) 2005 - 2007 JScience (http://jscience.org/) +* All rights reserved. +* +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions are met: +* +* 1. Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* +* 2. 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. +* +* 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. \ No newline at end of file diff --git a/rpms/legal/FOSS_licenses/jts_topology_suit/lgpl.txt b/rpms/legal/FOSS_licenses/jts_topology_suit/lgpl.txt index 5faba9d48c..5ab7695ab8 100644 --- a/rpms/legal/FOSS_licenses/jts_topology_suit/lgpl.txt +++ b/rpms/legal/FOSS_licenses/jts_topology_suit/lgpl.txt @@ -1,504 +1,504 @@ - GNU LESSER GENERAL PUBLIC LICENSE - Version 2.1, February 1999 - - Copyright (C) 1991, 1999 Free Software Foundation, Inc. - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - -[This is the first released version of the Lesser GPL. It also counts - as the successor of the GNU Library Public License, version 2, hence - the version number 2.1.] - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -Licenses are intended to guarantee your freedom to share and change -free software--to make sure the software is free for all its users. - - This license, the Lesser General Public License, applies to some -specially designated software packages--typically libraries--of the -Free Software Foundation and other authors who decide to use it. You -can use it too, but we suggest you first think carefully about whether -this license or the ordinary General Public License is the better -strategy to use in any particular case, based on the explanations below. - - When we speak of free software, we are referring to freedom of use, -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 and use pieces of -it in new free programs; and that you are informed that you can do -these things. - - To protect your rights, we need to make restrictions that forbid -distributors to deny you these rights or to ask you to surrender these -rights. These restrictions translate to certain responsibilities for -you if you distribute copies of the library or if you modify it. - - For example, if you distribute copies of the library, whether gratis -or for a fee, you must give the recipients all the rights that we gave -you. You must make sure that they, too, receive or can get the source -code. If you link other code with the library, you must provide -complete object files to the recipients, so that they can relink them -with the library after making changes to the library and recompiling -it. And you must show them these terms so they know their rights. - - We protect your rights with a two-step method: (1) we copyright the -library, and (2) we offer you this license, which gives you legal -permission to copy, distribute and/or modify the library. - - To protect each distributor, we want to make it very clear that -there is no warranty for the free library. Also, if the library is -modified by someone else and passed on, the recipients should know -that what they have is not the original version, so that the original -author's reputation will not be affected by problems that might be -introduced by others. - - Finally, software patents pose a constant threat to the existence of -any free program. We wish to make sure that a company cannot -effectively restrict the users of a free program by obtaining a -restrictive license from a patent holder. Therefore, we insist that -any patent license obtained for a version of the library must be -consistent with the full freedom of use specified in this license. - - Most GNU software, including some libraries, is covered by the -ordinary GNU General Public License. This license, the GNU Lesser -General Public License, applies to certain designated libraries, and -is quite different from the ordinary General Public License. We use -this license for certain libraries in order to permit linking those -libraries into non-free programs. - - When a program is linked with a library, whether statically or using -a shared library, the combination of the two is legally speaking a -combined work, a derivative of the original library. The ordinary -General Public License therefore permits such linking only if the -entire combination fits its criteria of freedom. The Lesser General -Public License permits more lax criteria for linking other code with -the library. - - We call this license the "Lesser" General Public License because it -does Less to protect the user's freedom than the ordinary General -Public License. It also provides other free software developers Less -of an advantage over competing non-free programs. These disadvantages -are the reason we use the ordinary General Public License for many -libraries. However, the Lesser license provides advantages in certain -special circumstances. - - For example, on rare occasions, there may be a special need to -encourage the widest possible use of a certain library, so that it becomes -a de-facto standard. To achieve this, non-free programs must be -allowed to use the library. A more frequent case is that a free -library does the same job as widely used non-free libraries. In this -case, there is little to gain by limiting the free library to free -software only, so we use the Lesser General Public License. - - In other cases, permission to use a particular library in non-free -programs enables a greater number of people to use a large body of -free software. For example, permission to use the GNU C Library in -non-free programs enables many more people to use the whole GNU -operating system, as well as its variant, the GNU/Linux operating -system. - - Although the Lesser General Public License is Less protective of the -users' freedom, it does ensure that the user of a program that is -linked with the Library has the freedom and the wherewithal to run -that program using a modified version of the Library. - - The precise terms and conditions for copying, distribution and -modification follow. Pay close attention to the difference between a -"work based on the library" and a "work that uses the library". The -former contains code derived from the library, whereas the latter must -be combined with the library in order to run. - - GNU LESSER GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License Agreement applies to any software library or other -program which contains a notice placed by the copyright holder or -other authorized party saying it may be distributed under the terms of -this Lesser General Public License (also called "this License"). -Each licensee is addressed as "you". - - A "library" means a collection of software functions and/or data -prepared so as to be conveniently linked with application programs -(which use some of those functions and data) to form executables. - - The "Library", below, refers to any such software library or work -which has been distributed under these terms. A "work based on the -Library" means either the Library or any derivative work under -copyright law: that is to say, a work containing the Library or a -portion of it, either verbatim or with modifications and/or translated -straightforwardly into another language. (Hereinafter, translation is -included without limitation in the term "modification".) - - "Source code" for a work means the preferred form of the work for -making modifications to it. For a library, 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 library. - - Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running a program using the Library is not restricted, and output from -such a program is covered only if its contents constitute a work based -on the Library (independent of the use of the Library in a tool for -writing it). Whether that is true depends on what the Library does -and what the program that uses the Library does. - - 1. You may copy and distribute verbatim copies of the Library's -complete 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 distribute a copy of this License along with the -Library. - - 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 Library or any portion -of it, thus forming a work based on the Library, 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) The modified work must itself be a software library. - - b) You must cause the files modified to carry prominent notices - stating that you changed the files and the date of any change. - - c) You must cause the whole of the work to be licensed at no - charge to all third parties under the terms of this License. - - d) If a facility in the modified Library refers to a function or a - table of data to be supplied by an application program that uses - the facility, other than as an argument passed when the facility - is invoked, then you must make a good faith effort to ensure that, - in the event an application does not supply such function or - table, the facility still operates, and performs whatever part of - its purpose remains meaningful. - - (For example, a function in a library to compute square roots has - a purpose that is entirely well-defined independent of the - application. Therefore, Subsection 2d requires that any - application-supplied function or table used by this function must - be optional: if the application does not supply it, the square - root function must still compute square roots.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Library, -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 Library, 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 Library. - -In addition, mere aggregation of another work not based on the Library -with the Library (or with a work based on the Library) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may opt to apply the terms of the ordinary GNU General Public -License instead of this License to a given copy of the Library. To do -this, you must alter all the notices that refer to this License, so -that they refer to the ordinary GNU General Public License, version 2, -instead of to this License. (If a newer version than version 2 of the -ordinary GNU General Public License has appeared, then you can specify -that version instead if you wish.) Do not make any other change in -these notices. - - Once this change is made in a given copy, it is irreversible for -that copy, so the ordinary GNU General Public License applies to all -subsequent copies and derivative works made from that copy. - - This option is useful when you wish to copy part of the code of -the Library into a program that is not a library. - - 4. You may copy and distribute the Library (or a portion or -derivative of it, under Section 2) in object code or executable form -under the terms of Sections 1 and 2 above provided that you 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. - - If distribution of 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 satisfies the requirement to -distribute the source code, even though third parties are not -compelled to copy the source along with the object code. - - 5. A program that contains no derivative of any portion of the -Library, but is designed to work with the Library by being compiled or -linked with it, is called a "work that uses the Library". Such a -work, in isolation, is not a derivative work of the Library, and -therefore falls outside the scope of this License. - - However, linking a "work that uses the Library" with the Library -creates an executable that is a derivative of the Library (because it -contains portions of the Library), rather than a "work that uses the -library". The executable is therefore covered by this License. -Section 6 states terms for distribution of such executables. - - When a "work that uses the Library" uses material from a header file -that is part of the Library, the object code for the work may be a -derivative work of the Library even though the source code is not. -Whether this is true is especially significant if the work can be -linked without the Library, or if the work is itself a library. The -threshold for this to be true is not precisely defined by law. - - If such an object file uses only numerical parameters, data -structure layouts and accessors, and small macros and small inline -functions (ten lines or less in length), then the use of the object -file is unrestricted, regardless of whether it is legally a derivative -work. (Executables containing this object code plus portions of the -Library will still fall under Section 6.) - - Otherwise, if the work is a derivative of the Library, you may -distribute the object code for the work under the terms of Section 6. -Any executables containing that work also fall under Section 6, -whether or not they are linked directly with the Library itself. - - 6. As an exception to the Sections above, you may also combine or -link a "work that uses the Library" with the Library to produce a -work containing portions of the Library, and distribute that work -under terms of your choice, provided that the terms permit -modification of the work for the customer's own use and reverse -engineering for debugging such modifications. - - You must give prominent notice with each copy of the work that the -Library is used in it and that the Library and its use are covered by -this License. You must supply a copy of this License. If the work -during execution displays copyright notices, you must include the -copyright notice for the Library among them, as well as a reference -directing the user to the copy of this License. Also, you must do one -of these things: - - a) Accompany the work with the complete corresponding - machine-readable source code for the Library including whatever - changes were used in the work (which must be distributed under - Sections 1 and 2 above); and, if the work is an executable linked - with the Library, with the complete machine-readable "work that - uses the Library", as object code and/or source code, so that the - user can modify the Library and then relink to produce a modified - executable containing the modified Library. (It is understood - that the user who changes the contents of definitions files in the - Library will not necessarily be able to recompile the application - to use the modified definitions.) - - b) Use a suitable shared library mechanism for linking with the - Library. A suitable mechanism is one that (1) uses at run time a - copy of the library already present on the user's computer system, - rather than copying library functions into the executable, and (2) - will operate properly with a modified version of the library, if - the user installs one, as long as the modified version is - interface-compatible with the version that the work was made with. - - c) Accompany the work with a written offer, valid for at - least three years, to give the same user the materials - specified in Subsection 6a, above, for a charge no more - than the cost of performing this distribution. - - d) If distribution of the work is made by offering access to copy - from a designated place, offer equivalent access to copy the above - specified materials from the same place. - - e) Verify that the user has already received a copy of these - materials or that you have already sent this user a copy. - - For an executable, the required form of the "work that uses the -Library" must include any data and utility programs needed for -reproducing the executable from it. However, as a special exception, -the materials to be 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. - - It may happen that this requirement contradicts the license -restrictions of other proprietary libraries that do not normally -accompany the operating system. Such a contradiction means you cannot -use both them and the Library together in an executable that you -distribute. - - 7. You may place library facilities that are a work based on the -Library side-by-side in a single library together with other library -facilities not covered by this License, and distribute such a combined -library, provided that the separate distribution of the work based on -the Library and of the other library facilities is otherwise -permitted, and provided that you do these two things: - - a) Accompany the combined library with a copy of the same work - based on the Library, uncombined with any other library - facilities. This must be distributed under the terms of the - Sections above. - - b) Give prominent notice with the combined library of the fact - that part of it is a work based on the Library, and explaining - where to find the accompanying uncombined form of the same work. - - 8. You may not copy, modify, sublicense, link with, or distribute -the Library except as expressly provided under this License. Any -attempt otherwise to copy, modify, sublicense, link with, or -distribute the Library 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. - - 9. 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 Library or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Library (or any work based on the -Library), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Library or works based on it. - - 10. Each time you redistribute the Library (or any work based on the -Library), the recipient automatically receives a license from the -original licensor to copy, distribute, link with or modify the Library -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 with -this License. - - 11. 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 Library at all. For example, if a patent -license would not permit royalty-free redistribution of the Library 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 Library. - -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. - - 12. If the distribution and/or use of the Library is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Library 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. - - 13. The Free Software Foundation may publish revised and/or new -versions of the Lesser 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 Library -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 Library does not specify a -license version number, you may choose any version ever published by -the Free Software Foundation. - - 14. If you wish to incorporate parts of the Library into other free -programs whose distribution conditions are incompatible with these, -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 - - 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO -WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. -EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR -OTHER PARTIES PROVIDE THE LIBRARY "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 -LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME -THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. 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 LIBRARY 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 -LIBRARY (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 LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), 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 Libraries - - If you develop a new library, and you want it to be of the greatest -possible use to the public, we recommend making it free software that -everyone can redistribute and change. You can do so by permitting -redistribution under these terms (or, alternatively, under the terms of the -ordinary General Public License). - - To apply these terms, attach the following notices to the library. 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 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - -Also add information on how to contact you by electronic and paper mail. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the library, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the - library `Frob' (a library for tweaking knobs) written by James Random Hacker. - - , 1 April 1990 - Ty Coon, President of Vice - -That's all there is to it! - - + GNU LESSER GENERAL PUBLIC LICENSE + Version 2.1, February 1999 + + Copyright (C) 1991, 1999 Free Software Foundation, Inc. + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +[This is the first released version of the Lesser GPL. It also counts + as the successor of the GNU Library Public License, version 2, hence + the version number 2.1.] + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +Licenses are intended to guarantee your freedom to share and change +free software--to make sure the software is free for all its users. + + This license, the Lesser General Public License, applies to some +specially designated software packages--typically libraries--of the +Free Software Foundation and other authors who decide to use it. You +can use it too, but we suggest you first think carefully about whether +this license or the ordinary General Public License is the better +strategy to use in any particular case, based on the explanations below. + + When we speak of free software, we are referring to freedom of use, +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 and use pieces of +it in new free programs; and that you are informed that you can do +these things. + + To protect your rights, we need to make restrictions that forbid +distributors to deny you these rights or to ask you to surrender these +rights. These restrictions translate to certain responsibilities for +you if you distribute copies of the library or if you modify it. + + For example, if you distribute copies of the library, whether gratis +or for a fee, you must give the recipients all the rights that we gave +you. You must make sure that they, too, receive or can get the source +code. If you link other code with the library, you must provide +complete object files to the recipients, so that they can relink them +with the library after making changes to the library and recompiling +it. And you must show them these terms so they know their rights. + + We protect your rights with a two-step method: (1) we copyright the +library, and (2) we offer you this license, which gives you legal +permission to copy, distribute and/or modify the library. + + To protect each distributor, we want to make it very clear that +there is no warranty for the free library. Also, if the library is +modified by someone else and passed on, the recipients should know +that what they have is not the original version, so that the original +author's reputation will not be affected by problems that might be +introduced by others. + + Finally, software patents pose a constant threat to the existence of +any free program. We wish to make sure that a company cannot +effectively restrict the users of a free program by obtaining a +restrictive license from a patent holder. Therefore, we insist that +any patent license obtained for a version of the library must be +consistent with the full freedom of use specified in this license. + + Most GNU software, including some libraries, is covered by the +ordinary GNU General Public License. This license, the GNU Lesser +General Public License, applies to certain designated libraries, and +is quite different from the ordinary General Public License. We use +this license for certain libraries in order to permit linking those +libraries into non-free programs. + + When a program is linked with a library, whether statically or using +a shared library, the combination of the two is legally speaking a +combined work, a derivative of the original library. The ordinary +General Public License therefore permits such linking only if the +entire combination fits its criteria of freedom. The Lesser General +Public License permits more lax criteria for linking other code with +the library. + + We call this license the "Lesser" General Public License because it +does Less to protect the user's freedom than the ordinary General +Public License. It also provides other free software developers Less +of an advantage over competing non-free programs. These disadvantages +are the reason we use the ordinary General Public License for many +libraries. However, the Lesser license provides advantages in certain +special circumstances. + + For example, on rare occasions, there may be a special need to +encourage the widest possible use of a certain library, so that it becomes +a de-facto standard. To achieve this, non-free programs must be +allowed to use the library. A more frequent case is that a free +library does the same job as widely used non-free libraries. In this +case, there is little to gain by limiting the free library to free +software only, so we use the Lesser General Public License. + + In other cases, permission to use a particular library in non-free +programs enables a greater number of people to use a large body of +free software. For example, permission to use the GNU C Library in +non-free programs enables many more people to use the whole GNU +operating system, as well as its variant, the GNU/Linux operating +system. + + Although the Lesser General Public License is Less protective of the +users' freedom, it does ensure that the user of a program that is +linked with the Library has the freedom and the wherewithal to run +that program using a modified version of the Library. + + The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +"work based on the library" and a "work that uses the library". The +former contains code derived from the library, whereas the latter must +be combined with the library in order to run. + + GNU LESSER GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library or other +program which contains a notice placed by the copyright holder or +other authorized party saying it may be distributed under the terms of +this Lesser General Public License (also called "this License"). +Each licensee is addressed as "you". + + A "library" means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. + + The "Library", below, refers to any such software library or work +which has been distributed under these terms. A "work based on the +Library" means either the Library or any derivative work under +copyright law: that is to say, a work containing the Library or a +portion of it, either verbatim or with modifications and/or translated +straightforwardly into another language. (Hereinafter, translation is +included without limitation in the term "modification".) + + "Source code" for a work means the preferred form of the work for +making modifications to it. For a library, 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 library. + + Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running a program using the Library is not restricted, and output from +such a program is covered only if its contents constitute a work based +on the Library (independent of the use of the Library in a tool for +writing it). Whether that is true depends on what the Library does +and what the program that uses the Library does. + + 1. You may copy and distribute verbatim copies of the Library's +complete 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 distribute a copy of this License along with the +Library. + + 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 Library or any portion +of it, thus forming a work based on the Library, 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) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices + stating that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no + charge to all third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a + table of data to be supplied by an application program that uses + the facility, other than as an argument passed when the facility + is invoked, then you must make a good faith effort to ensure that, + in the event an application does not supply such function or + table, the facility still operates, and performs whatever part of + its purpose remains meaningful. + + (For example, a function in a library to compute square roots has + a purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function must + be optional: if the application does not supply it, the square + root function must still compute square roots.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Library, +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 Library, 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 Library. + +In addition, mere aggregation of another work not based on the Library +with the Library (or with a work based on the Library) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do +this, you must alter all the notices that refer to this License, so +that they refer to the ordinary GNU General Public License, version 2, +instead of to this License. (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.) Do not make any other change in +these notices. + + Once this change is made in a given copy, it is irreversible for +that copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. + + This option is useful when you wish to copy part of the code of +the Library into a program that is not a library. + + 4. You may copy and distribute the Library (or a portion or +derivative of it, under Section 2) in object code or executable form +under the terms of Sections 1 and 2 above provided that you 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. + + If distribution of 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 satisfies the requirement to +distribute the source code, even though third parties are not +compelled to copy the source along with the object code. + + 5. A program that contains no derivative of any portion of the +Library, but is designed to work with the Library by being compiled or +linked with it, is called a "work that uses the Library". Such a +work, in isolation, is not a derivative work of the Library, and +therefore falls outside the scope of this License. + + However, linking a "work that uses the Library" with the Library +creates an executable that is a derivative of the Library (because it +contains portions of the Library), rather than a "work that uses the +library". The executable is therefore covered by this License. +Section 6 states terms for distribution of such executables. + + When a "work that uses the Library" uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be +linked without the Library, or if the work is itself a library. The +threshold for this to be true is not precisely defined by law. + + If such an object file uses only numerical parameters, data +structure layouts and accessors, and small macros and small inline +functions (ten lines or less in length), then the use of the object +file is unrestricted, regardless of whether it is legally a derivative +work. (Executables containing this object code plus portions of the +Library will still fall under Section 6.) + + Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, +whether or not they are linked directly with the Library itself. + + 6. As an exception to the Sections above, you may also combine or +link a "work that uses the Library" with the Library to produce a +work containing portions of the Library, and distribute that work +under terms of your choice, provided that the terms permit +modification of the work for the customer's own use and reverse +engineering for debugging such modifications. + + You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License. You must supply a copy of this License. If the work +during execution displays copyright notices, you must include the +copyright notice for the Library among them, as well as a reference +directing the user to the copy of this License. Also, you must do one +of these things: + + a) Accompany the work with the complete corresponding + machine-readable source code for the Library including whatever + changes were used in the work (which must be distributed under + Sections 1 and 2 above); and, if the work is an executable linked + with the Library, with the complete machine-readable "work that + uses the Library", as object code and/or source code, so that the + user can modify the Library and then relink to produce a modified + executable containing the modified Library. (It is understood + that the user who changes the contents of definitions files in the + Library will not necessarily be able to recompile the application + to use the modified definitions.) + + b) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (1) uses at run time a + copy of the library already present on the user's computer system, + rather than copying library functions into the executable, and (2) + will operate properly with a modified version of the library, if + the user installs one, as long as the modified version is + interface-compatible with the version that the work was made with. + + c) Accompany the work with a written offer, valid for at + least three years, to give the same user the materials + specified in Subsection 6a, above, for a charge no more + than the cost of performing this distribution. + + d) If distribution of the work is made by offering access to copy + from a designated place, offer equivalent access to copy the above + specified materials from the same place. + + e) Verify that the user has already received a copy of these + materials or that you have already sent this user a copy. + + For an executable, the required form of the "work that uses the +Library" must include any data and utility programs needed for +reproducing the executable from it. However, as a special exception, +the materials to be 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. + + It may happen that this requirement contradicts the license +restrictions of other proprietary libraries that do not normally +accompany the operating system. Such a contradiction means you cannot +use both them and the Library together in an executable that you +distribute. + + 7. You may place library facilities that are a work based on the +Library side-by-side in a single library together with other library +facilities not covered by this License, and distribute such a combined +library, provided that the separate distribution of the work based on +the Library and of the other library facilities is otherwise +permitted, and provided that you do these two things: + + a) Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities. This must be distributed under the terms of the + Sections above. + + b) Give prominent notice with the combined library of the fact + that part of it is a work based on the Library, and explaining + where to find the accompanying uncombined form of the same work. + + 8. You may not copy, modify, sublicense, link with, or distribute +the Library except as expressly provided under this License. Any +attempt otherwise to copy, modify, sublicense, link with, or +distribute the Library 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. + + 9. 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 Library or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Library or works based on it. + + 10. Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +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 with +this License. + + 11. 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 Library at all. For example, if a patent +license would not permit royalty-free redistribution of the Library 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 Library. + +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. + + 12. If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library 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. + + 13. The Free Software Foundation may publish revised and/or new +versions of the Lesser 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 Library +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 Library does not specify a +license version number, you may choose any version ever published by +the Free Software Foundation. + + 14. If you wish to incorporate parts of the Library into other free +programs whose distribution conditions are incompatible with these, +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 + + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE LIBRARY "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 +LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. 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 LIBRARY 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 +LIBRARY (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 LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), 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 Libraries + + If you develop a new library, and you want it to be of the greatest +possible use to the public, we recommend making it free software that +everyone can redistribute and change. You can do so by permitting +redistribution under these terms (or, alternatively, under the terms of the +ordinary General Public License). + + To apply these terms, attach the following notices to the library. 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 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +Also add information on how to contact you by electronic and paper mail. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the library, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + library `Frob' (a library for tweaking knobs) written by James Random Hacker. + + , 1 April 1990 + Ty Coon, President of Vice + +That's all there is to it! + + diff --git a/rpms/legal/FOSS_licenses/postgresql/bsd_license.txt b/rpms/legal/FOSS_licenses/postgresql/bsd_license.txt index 29100c0407..f50d0adc4a 100644 --- a/rpms/legal/FOSS_licenses/postgresql/bsd_license.txt +++ b/rpms/legal/FOSS_licenses/postgresql/bsd_license.txt @@ -1,15 +1,15 @@ -License -PostgreSQL is released under the BSD license. -PostgreSQL Database Management System -(formerly known as Postgres, then as Postgres95) - -Portions Copyright (c) 1996-2005, The PostgreSQL Global Development Group - -Portions Copyright (c) 1994, The Regents of the University of California - -Permission to use, copy, modify, and distribute this software and its documentation for any purpose, without fee, and without a written agreement is hereby granted, provided that the above copyright notice and this paragraph and the following two paragraphs appear in all copies. - -IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. - +License +PostgreSQL is released under the BSD license. +PostgreSQL Database Management System +(formerly known as Postgres, then as Postgres95) + +Portions Copyright (c) 1996-2005, The PostgreSQL Global Development Group + +Portions Copyright (c) 1994, The Regents of the University of California + +Permission to use, copy, modify, and distribute this software and its documentation for any purpose, without fee, and without a written agreement is hereby granted, provided that the above copyright notice and this paragraph and the following two paragraphs appear in all copies. + +IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. + diff --git a/rpms/legal/FOSS_licenses/rhino/Mozilla Public License version 1_0.txt b/rpms/legal/FOSS_licenses/rhino/Mozilla Public License version 1_0.txt index cdb4757e38..23c1a6edaf 100644 --- a/rpms/legal/FOSS_licenses/rhino/Mozilla Public License version 1_0.txt +++ b/rpms/legal/FOSS_licenses/rhino/Mozilla Public License version 1_0.txt @@ -1,278 +1,278 @@ -Mozilla Public License version 1.0MOZILLA PUBLIC LICENSE -Version 1.0 - - - -1. Definitions. - 1.1. ``Contributor'' means each entity that creates or contributes to the - creation of Modifications. - 1.2. ``Contributor Version'' means the combination of the Original Code, prior - Modifications used by a Contributor, and the Modifications made by that - particular Contributor. - 1.3. ``Covered Code'' means the Original Code or Modifications or the - combination of the Original Code and Modifications, in each case including - portions thereof. - 1.4. ``Electronic Distribution Mechanism'' means a mechanism generally - accepted in the software development community for the electronic transfer of - data. - 1.5. ``Executable'' means Covered Code in any form other than Source Code. - 1.6. ``Initial Developer'' means the individual or entity identified as the - Initial Developer in the Source Code notice required by Exhibit A. - 1.7. ``Larger Work'' means a work which combines Covered Code or portions - thereof with code not governed by the terms of this License. - 1.8. ``License'' means this document. - 1.9. ``Modifications'' means any addition to or deletion from the substance or - structure of either the Original Code or any previous Modifications. When - Covered Code is released as a series of files, a Modification is: - A. Any addition to or deletion from the contents of a file containing - Original Code or previous Modifications. - B. Any new file that contains any part of the Original Code or previous - Modifications. - 1.10. ``Original Code'' means Source Code of computer software code which is - described in the Source Code notice required by Exhibit A as Original Code, - and which, at the time of its release under this License is not already - Covered Code governed by this License. - 1.11. ``Source Code'' means the preferred form of the Covered Code for making - modifications to it, including all modules it contains, plus any associated - interface definition files, scripts used to control compilation and - installation of an Executable, or a list of source code differential - comparisons against either the Original Code or another well known, available - Covered Code of the Contributor's choice. The Source Code can be in a - compressed or archival form, provided the appropriate decompression or - de-archiving software is widely available for no charge. - 1.12. ``You'' means an individual or a legal entity exercising rights under, - and complying with all of the terms of, this License or a future version of - this License issued under Section 6.1. For legal entities, ``You'' includes - any entity which controls, is controlled by, or is under common control with - You. For purposes of this definition, ``control'' means (a) the power, direct - or indirect, to cause the direction or management of such entity, whether by - contract or otherwise, or (b) ownership of fifty percent (50%) or more of the - outstanding shares or beneficial ownership of such entity. -2. Source Code License. - 2.1. The Initial Developer Grant. - The Initial Developer hereby grants You a world-wide, royalty-free, - non-exclusive license, subject to third party intellectual property claims: - (a) to use, reproduce, modify, display, perform, sublicense and distribute - the Original Code (or portions thereof) with or without Modifications, or as - part of a Larger Work; and - (b) under patents now or hereafter owned or controlled by Initial Developer, - to make, have made, use and sell (``Utilize'') the Original Code (or - portions thereof), but solely to the extent that any such patent is - reasonably necessary to enable You to Utilize the Original Code (or portions - thereof) and not to any greater extent that may be necessary to Utilize - further Modifications or combinations. - 2.2. Contributor Grant. - Each Contributor hereby grants You a world-wide, royalty-free, non-exclusive - license, subject to third party intellectual property claims: - (a) to use, reproduce, modify, display, perform, sublicense and distribute - the Modifications created by such Contributor (or portions thereof) either - on an unmodified basis, with other Modifications, as Covered Code or as part - of a Larger Work; and - (b) under patents now or hereafter owned or controlled by Contributor, to - Utilize the Contributor Version (or portions thereof), but solely to the - extent that any such patent is reasonably necessary to enable You to Utilize - the Contributor Version (or portions thereof), and not to any greater extent - that may be necessary to Utilize further Modifications or combinations. -3. Distribution Obligations. - 3.1. Application of License. - The Modifications which You create or to which You contribute are governed by - the terms of this License, including without limitation Section 2.2. The - Source Code version of Covered Code may be distributed only under the terms of - this License or a future version of this License released under Section 6.1, - and You must include a copy of this License with every copy of the Source Code - You distribute. You may not offer or impose any terms on any Source Code - version that alters or restricts the applicable version of this License or the - recipients' rights hereunder. However, You may include an additional document - offering the additional rights described in Section 3.5. - 3.2. Availability of Source Code. - Any Modification which You create or to which You contribute must be made - available in Source Code form under the terms of this License either on the - same media as an Executable version or via an accepted Electronic Distribution - Mechanism to anyone to whom you made an Executable version available; and if - made available via Electronic Distribution Mechanism, must remain available - for at least twelve (12) months after the date it initially became available, - or at least six (6) months after a subsequent version of that particular - Modification has been made available to such recipients. You are responsible - for ensuring that the Source Code version remains available even if the - Electronic Distribution Mechanism is maintained by a third party. - 3.3. Description of Modifications. - You must cause all Covered Code to which you contribute to contain a file - documenting the changes You made to create that Covered Code and the date of - any change. You must include a prominent statement that the Modification is - derived, directly or indirectly, from Original Code provided by the Initial - Developer and including the name of the Initial Developer in (a) the Source - Code, and (b) in any notice in an Executable version or related documentation - in which You describe the origin or ownership of the Covered Code. - 3.4. Intellectual Property Matters - (a) Third Party Claims. - If You have knowledge that a party claims an intellectual property right in - particular functionality or code (or its utilization under this License), - you must include a text file with the source code distribution titled - ``LEGAL'' which describes the claim and the party making the claim in - sufficient detail that a recipient will know whom to contact. If you obtain - such knowledge after You make Your Modification available as described in - Section 3.2, You shall promptly modify the LEGAL file in all copies You make - available thereafter and shall take other steps (such as notifying - appropriate mailing lists or newsgroups) reasonably calculated to inform - those who received the Covered Code that new knowledge has been obtained. - (b) Contributor APIs. - If Your Modification is an application programming interface and You own or - control patents which are reasonably necessary to implement that API, you - must also include this information in the LEGAL file. - 3.5. Required Notices. - You must duplicate the notice in Exhibit A in each file of the Source Code, - and this License in any documentation for the Source Code, where You describe - recipients' rights relating to Covered Code. If You created one or more - Modification(s), You may add your name as a Contributor to the notice - described in Exhibit A. If it is not possible to put such notice in a - particular Source Code file due to its structure, then you must include such - notice in a location (such as a relevant directory file) where a user would be - likely to look for such a notice. You may choose to offer, and to charge a fee - for, warranty, support, indemnity or liability obligations to one or more - recipients of Covered Code. However, You may do so only on Your own behalf, - and not on behalf of the Initial Developer or any Contributor. You must make - it absolutely clear than any such warranty, support, indemnity or liability - obligation is offered by You alone, and You hereby agree to indemnify the - Initial Developer and every Contributor for any liability incurred by the - Initial Developer or such Contributor as a result of warranty, support, - indemnity or liability terms You offer. - 3.6. Distribution of Executable Versions. - You may distribute Covered Code in Executable form only if the requirements of - Section 3.1-3.5 have been met for that Covered Code, and if You include a - notice stating that the Source Code version of the Covered Code is available - under the terms of this License, including a description of how and where You - have fulfilled the obligations of Section 3.2. The notice must be - conspicuously included in any notice in an Executable version, related - documentation or collateral in which You describe recipients' rights relating - to the Covered Code. You may distribute the Executable version of Covered Code - under a license of Your choice, which may contain terms different from this - License, provided that You are in compliance with the terms of this License - and that the license for the Executable version does not attempt to limit or - alter the recipient's rights in the Source Code version from the rights set - forth in this License. If You distribute the Executable version under a - different license You must make it absolutely clear that any terms which - differ from this License are offered by You alone, not by the Initial - Developer or any Contributor. You hereby agree to indemnify the Initial - Developer and every Contributor for any liability incurred by the Initial - Developer or such Contributor as a result of any such terms You offer. - 3.7. Larger Works. - You may create a Larger Work by combining Covered Code with other code not - governed by the terms of this License and distribute the Larger Work as a - single product. In such a case, You must make sure the requirements of this - License are fulfilled for the Covered Code. -4. Inability to Comply Due to Statute or Regulation. - If it is impossible for You to comply with any of the terms of this License - with respect to some or all of the Covered Code due to statute or regulation - then You must: (a) comply with the terms of this License to the maximum extent - possible; and (b) describe the limitations and the code they affect. Such - description must be included in the LEGAL file described in Section 3.4 and - must be included with all distributions of the Source Code. Except to the - extent prohibited by statute or regulation, such description must be - sufficiently detailed for a recipient of ordinary skill to be able to - understand it. -5. Application of this License. - This License applies to code to which the Initial Developer has attached the - notice in Exhibit A, and to related Covered Code. -6. Versions of the License. - 6.1. New Versions. - Netscape Communications Corporation (``Netscape'') may publish revised and/or - new versions of the License from time to time. Each version will be given a - distinguishing version number. - 6.2. Effect of New Versions. - Once Covered Code has been published under a particular version of the - License, You may always continue to use it under the terms of that version. - You may also choose to use such Covered Code under the terms of any subsequent - version of the License published by Netscape. No one other than Netscape has - the right to modify the terms applicable to Covered Code created under this - License. - 6.3. Derivative Works. - If you create or use a modified version of this License (which you may only do - in order to apply it to code which is not already Covered Code governed by - this License), you must (a) rename Your license so that the phrases - ``Mozilla'', ``MOZILLAPL'', ``MOZPL'', ``Netscape'', ``NPL'' or any - confusingly similar phrase do not appear anywhere in your license and (b) - otherwise make it clear that your version of the license contains terms which - differ from the Mozilla Public License and Netscape Public License. (Filling - in the name of the Initial Developer, Original Code or Contributor in the - notice described in Exhibit A shall not of themselves be deemed to be - modifications of this License.) -7. DISCLAIMER OF WARRANTY. - COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN ``AS IS'' BASIS, WITHOUT - WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT - LIMITATION, WARRANTIES THAT THE COVERED CODE IS FREE OF DEFECTS, MERCHANTABLE, - FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. THE ENTIRE RISK AS TO THE - QUALITY AND PERFORMANCE OF THE COVERED CODE IS WITH YOU. SHOULD ANY COVERED - CODE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT THE INITIAL DEVELOPER OR ANY - OTHER CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY SERVICING, REPAIR OR - CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS - LICENSE. NO USE OF ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS - DISCLAIMER. -8. TERMINATION. - This License and the rights granted hereunder will terminate automatically if - You fail to comply with terms herein and fail to cure such breach within 30 - days of becoming aware of the breach. All sublicenses to the Covered Code - which are properly granted shall survive any termination of this License. - Provisions which, by their nature, must remain in effect beyond the - termination of this License shall survive. -9. LIMITATION OF LIABILITY. - UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT (INCLUDING - NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL THE INITIAL DEVELOPER, ANY OTHER - CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED CODE, OR ANY SUPPLIER OF ANY OF - SUCH PARTIES, BE LIABLE TO YOU OR ANY OTHER PERSON FOR ANY INDIRECT, SPECIAL, - INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER INCLUDING, WITHOUT - LIMITATION, DAMAGES FOR LOSS OF GOODWILL, WORK STOPPAGE, COMPUTER FAILURE OR - MALFUNCTION, OR ANY AND ALL OTHER COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH - PARTY SHALL HAVE BEEN INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS - LIMITATION OF LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL - INJURY RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW - PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OR - LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THAT EXCLUSION AND - LIMITATION MAY NOT APPLY TO YOU. -10. U.S. GOVERNMENT END USERS. - The Covered Code is a ``commercial item,'' as that term is defined in 48 - C.F.R. 2.101 (Oct. 1995), consisting of ``commercial computer software'' and - ``commercial computer software documentation,'' as such terms are used in 48 - C.F.R. 12.212 (Sept. 1995). Consistent with 48 C.F.R. 12.212 and 48 C.F.R. - 227.7202-1 through 227.7202-4 (June 1995), all U.S. Government End Users - acquire Covered Code with only those rights set forth herein. -11. MISCELLANEOUS. - This License represents the complete agreement concerning subject matter - hereof. If any provision of this License is held to be unenforceable, such - provision shall be reformed only to the extent necessary to make it - enforceable. This License shall be governed by California law provisions - (except to the extent applicable law, if any, provides otherwise), excluding - its conflict-of-law provisions. With respect to disputes in which at least one - party is a citizen of, or an entity chartered or registered to do business in, - the United States of America: (a) unless otherwise agreed in writing, all - disputes relating to this License (excepting any dispute relating to - intellectual property rights) shall be subject to final and binding - arbitration, with the losing party paying all costs of arbitration; (b) any - arbitration relating to this Agreement shall be held in Santa Clara County, - California, under the auspices of JAMS/EndDispute; and (c) any litigation - relating to this Agreement shall be subject to the jurisdiction of the Federal - Courts of the Northern District of California, with venue lying in Santa Clara - County, California, with the losing party responsible for costs, including - without limitation, court costs and reasonable attorneys fees and expenses. - The application of the United Nations Convention on Contracts for the - International Sale of Goods is expressly excluded. Any law or regulation which - provides that the language of a contract shall be construed against the - drafter shall not apply to this License. -12. RESPONSIBILITY FOR CLAIMS. - Except in cases where another Contributor has failed to comply with Section - 3.4, You are responsible for damages arising, directly or indirectly, out of - Your utilization of rights under this License, based on the number of copies - of Covered Code you made available, the revenues you received from utilizing - such rights, and other relevant factors. You agree to work with affected - parties to distribute responsibility on an equitable basis. -EXHIBIT A. - ``The contents of this file are subject to the Mozilla Public License Version - 1.0 (the "License"); you may not use this file except in compliance with the - License. You may obtain a copy of the License at http://www.mozilla.org/MPL/ - Software distributed under the License is distributed on an "AS IS" basis, - WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for - the specific language governing rights and limitations under the License. - The Original Code is ______________________________________. - The Initial Developer of the Original Code is ________________________. - Portions created by ______________________ are Copyright (C) ______ - _______________________. All Rights Reserved. +Mozilla Public License version 1.0MOZILLA PUBLIC LICENSE +Version 1.0 + + + +1. Definitions. + 1.1. ``Contributor'' means each entity that creates or contributes to the + creation of Modifications. + 1.2. ``Contributor Version'' means the combination of the Original Code, prior + Modifications used by a Contributor, and the Modifications made by that + particular Contributor. + 1.3. ``Covered Code'' means the Original Code or Modifications or the + combination of the Original Code and Modifications, in each case including + portions thereof. + 1.4. ``Electronic Distribution Mechanism'' means a mechanism generally + accepted in the software development community for the electronic transfer of + data. + 1.5. ``Executable'' means Covered Code in any form other than Source Code. + 1.6. ``Initial Developer'' means the individual or entity identified as the + Initial Developer in the Source Code notice required by Exhibit A. + 1.7. ``Larger Work'' means a work which combines Covered Code or portions + thereof with code not governed by the terms of this License. + 1.8. ``License'' means this document. + 1.9. ``Modifications'' means any addition to or deletion from the substance or + structure of either the Original Code or any previous Modifications. When + Covered Code is released as a series of files, a Modification is: + A. Any addition to or deletion from the contents of a file containing + Original Code or previous Modifications. + B. Any new file that contains any part of the Original Code or previous + Modifications. + 1.10. ``Original Code'' means Source Code of computer software code which is + described in the Source Code notice required by Exhibit A as Original Code, + and which, at the time of its release under this License is not already + Covered Code governed by this License. + 1.11. ``Source Code'' means the preferred form of the Covered Code for making + modifications to it, including all modules it contains, plus any associated + interface definition files, scripts used to control compilation and + installation of an Executable, or a list of source code differential + comparisons against either the Original Code or another well known, available + Covered Code of the Contributor's choice. The Source Code can be in a + compressed or archival form, provided the appropriate decompression or + de-archiving software is widely available for no charge. + 1.12. ``You'' means an individual or a legal entity exercising rights under, + and complying with all of the terms of, this License or a future version of + this License issued under Section 6.1. For legal entities, ``You'' includes + any entity which controls, is controlled by, or is under common control with + You. For purposes of this definition, ``control'' means (a) the power, direct + or indirect, to cause the direction or management of such entity, whether by + contract or otherwise, or (b) ownership of fifty percent (50%) or more of the + outstanding shares or beneficial ownership of such entity. +2. Source Code License. + 2.1. The Initial Developer Grant. + The Initial Developer hereby grants You a world-wide, royalty-free, + non-exclusive license, subject to third party intellectual property claims: + (a) to use, reproduce, modify, display, perform, sublicense and distribute + the Original Code (or portions thereof) with or without Modifications, or as + part of a Larger Work; and + (b) under patents now or hereafter owned or controlled by Initial Developer, + to make, have made, use and sell (``Utilize'') the Original Code (or + portions thereof), but solely to the extent that any such patent is + reasonably necessary to enable You to Utilize the Original Code (or portions + thereof) and not to any greater extent that may be necessary to Utilize + further Modifications or combinations. + 2.2. Contributor Grant. + Each Contributor hereby grants You a world-wide, royalty-free, non-exclusive + license, subject to third party intellectual property claims: + (a) to use, reproduce, modify, display, perform, sublicense and distribute + the Modifications created by such Contributor (or portions thereof) either + on an unmodified basis, with other Modifications, as Covered Code or as part + of a Larger Work; and + (b) under patents now or hereafter owned or controlled by Contributor, to + Utilize the Contributor Version (or portions thereof), but solely to the + extent that any such patent is reasonably necessary to enable You to Utilize + the Contributor Version (or portions thereof), and not to any greater extent + that may be necessary to Utilize further Modifications or combinations. +3. Distribution Obligations. + 3.1. Application of License. + The Modifications which You create or to which You contribute are governed by + the terms of this License, including without limitation Section 2.2. The + Source Code version of Covered Code may be distributed only under the terms of + this License or a future version of this License released under Section 6.1, + and You must include a copy of this License with every copy of the Source Code + You distribute. You may not offer or impose any terms on any Source Code + version that alters or restricts the applicable version of this License or the + recipients' rights hereunder. However, You may include an additional document + offering the additional rights described in Section 3.5. + 3.2. Availability of Source Code. + Any Modification which You create or to which You contribute must be made + available in Source Code form under the terms of this License either on the + same media as an Executable version or via an accepted Electronic Distribution + Mechanism to anyone to whom you made an Executable version available; and if + made available via Electronic Distribution Mechanism, must remain available + for at least twelve (12) months after the date it initially became available, + or at least six (6) months after a subsequent version of that particular + Modification has been made available to such recipients. You are responsible + for ensuring that the Source Code version remains available even if the + Electronic Distribution Mechanism is maintained by a third party. + 3.3. Description of Modifications. + You must cause all Covered Code to which you contribute to contain a file + documenting the changes You made to create that Covered Code and the date of + any change. You must include a prominent statement that the Modification is + derived, directly or indirectly, from Original Code provided by the Initial + Developer and including the name of the Initial Developer in (a) the Source + Code, and (b) in any notice in an Executable version or related documentation + in which You describe the origin or ownership of the Covered Code. + 3.4. Intellectual Property Matters + (a) Third Party Claims. + If You have knowledge that a party claims an intellectual property right in + particular functionality or code (or its utilization under this License), + you must include a text file with the source code distribution titled + ``LEGAL'' which describes the claim and the party making the claim in + sufficient detail that a recipient will know whom to contact. If you obtain + such knowledge after You make Your Modification available as described in + Section 3.2, You shall promptly modify the LEGAL file in all copies You make + available thereafter and shall take other steps (such as notifying + appropriate mailing lists or newsgroups) reasonably calculated to inform + those who received the Covered Code that new knowledge has been obtained. + (b) Contributor APIs. + If Your Modification is an application programming interface and You own or + control patents which are reasonably necessary to implement that API, you + must also include this information in the LEGAL file. + 3.5. Required Notices. + You must duplicate the notice in Exhibit A in each file of the Source Code, + and this License in any documentation for the Source Code, where You describe + recipients' rights relating to Covered Code. If You created one or more + Modification(s), You may add your name as a Contributor to the notice + described in Exhibit A. If it is not possible to put such notice in a + particular Source Code file due to its structure, then you must include such + notice in a location (such as a relevant directory file) where a user would be + likely to look for such a notice. You may choose to offer, and to charge a fee + for, warranty, support, indemnity or liability obligations to one or more + recipients of Covered Code. However, You may do so only on Your own behalf, + and not on behalf of the Initial Developer or any Contributor. You must make + it absolutely clear than any such warranty, support, indemnity or liability + obligation is offered by You alone, and You hereby agree to indemnify the + Initial Developer and every Contributor for any liability incurred by the + Initial Developer or such Contributor as a result of warranty, support, + indemnity or liability terms You offer. + 3.6. Distribution of Executable Versions. + You may distribute Covered Code in Executable form only if the requirements of + Section 3.1-3.5 have been met for that Covered Code, and if You include a + notice stating that the Source Code version of the Covered Code is available + under the terms of this License, including a description of how and where You + have fulfilled the obligations of Section 3.2. The notice must be + conspicuously included in any notice in an Executable version, related + documentation or collateral in which You describe recipients' rights relating + to the Covered Code. You may distribute the Executable version of Covered Code + under a license of Your choice, which may contain terms different from this + License, provided that You are in compliance with the terms of this License + and that the license for the Executable version does not attempt to limit or + alter the recipient's rights in the Source Code version from the rights set + forth in this License. If You distribute the Executable version under a + different license You must make it absolutely clear that any terms which + differ from this License are offered by You alone, not by the Initial + Developer or any Contributor. You hereby agree to indemnify the Initial + Developer and every Contributor for any liability incurred by the Initial + Developer or such Contributor as a result of any such terms You offer. + 3.7. Larger Works. + You may create a Larger Work by combining Covered Code with other code not + governed by the terms of this License and distribute the Larger Work as a + single product. In such a case, You must make sure the requirements of this + License are fulfilled for the Covered Code. +4. Inability to Comply Due to Statute or Regulation. + If it is impossible for You to comply with any of the terms of this License + with respect to some or all of the Covered Code due to statute or regulation + then You must: (a) comply with the terms of this License to the maximum extent + possible; and (b) describe the limitations and the code they affect. Such + description must be included in the LEGAL file described in Section 3.4 and + must be included with all distributions of the Source Code. Except to the + extent prohibited by statute or regulation, such description must be + sufficiently detailed for a recipient of ordinary skill to be able to + understand it. +5. Application of this License. + This License applies to code to which the Initial Developer has attached the + notice in Exhibit A, and to related Covered Code. +6. Versions of the License. + 6.1. New Versions. + Netscape Communications Corporation (``Netscape'') may publish revised and/or + new versions of the License from time to time. Each version will be given a + distinguishing version number. + 6.2. Effect of New Versions. + Once Covered Code has been published under a particular version of the + License, You may always continue to use it under the terms of that version. + You may also choose to use such Covered Code under the terms of any subsequent + version of the License published by Netscape. No one other than Netscape has + the right to modify the terms applicable to Covered Code created under this + License. + 6.3. Derivative Works. + If you create or use a modified version of this License (which you may only do + in order to apply it to code which is not already Covered Code governed by + this License), you must (a) rename Your license so that the phrases + ``Mozilla'', ``MOZILLAPL'', ``MOZPL'', ``Netscape'', ``NPL'' or any + confusingly similar phrase do not appear anywhere in your license and (b) + otherwise make it clear that your version of the license contains terms which + differ from the Mozilla Public License and Netscape Public License. (Filling + in the name of the Initial Developer, Original Code or Contributor in the + notice described in Exhibit A shall not of themselves be deemed to be + modifications of this License.) +7. DISCLAIMER OF WARRANTY. + COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN ``AS IS'' BASIS, WITHOUT + WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT + LIMITATION, WARRANTIES THAT THE COVERED CODE IS FREE OF DEFECTS, MERCHANTABLE, + FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. THE ENTIRE RISK AS TO THE + QUALITY AND PERFORMANCE OF THE COVERED CODE IS WITH YOU. SHOULD ANY COVERED + CODE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT THE INITIAL DEVELOPER OR ANY + OTHER CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY SERVICING, REPAIR OR + CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS + LICENSE. NO USE OF ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS + DISCLAIMER. +8. TERMINATION. + This License and the rights granted hereunder will terminate automatically if + You fail to comply with terms herein and fail to cure such breach within 30 + days of becoming aware of the breach. All sublicenses to the Covered Code + which are properly granted shall survive any termination of this License. + Provisions which, by their nature, must remain in effect beyond the + termination of this License shall survive. +9. LIMITATION OF LIABILITY. + UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT (INCLUDING + NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL THE INITIAL DEVELOPER, ANY OTHER + CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED CODE, OR ANY SUPPLIER OF ANY OF + SUCH PARTIES, BE LIABLE TO YOU OR ANY OTHER PERSON FOR ANY INDIRECT, SPECIAL, + INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER INCLUDING, WITHOUT + LIMITATION, DAMAGES FOR LOSS OF GOODWILL, WORK STOPPAGE, COMPUTER FAILURE OR + MALFUNCTION, OR ANY AND ALL OTHER COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH + PARTY SHALL HAVE BEEN INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS + LIMITATION OF LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL + INJURY RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW + PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OR + LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THAT EXCLUSION AND + LIMITATION MAY NOT APPLY TO YOU. +10. U.S. GOVERNMENT END USERS. + The Covered Code is a ``commercial item,'' as that term is defined in 48 + C.F.R. 2.101 (Oct. 1995), consisting of ``commercial computer software'' and + ``commercial computer software documentation,'' as such terms are used in 48 + C.F.R. 12.212 (Sept. 1995). Consistent with 48 C.F.R. 12.212 and 48 C.F.R. + 227.7202-1 through 227.7202-4 (June 1995), all U.S. Government End Users + acquire Covered Code with only those rights set forth herein. +11. MISCELLANEOUS. + This License represents the complete agreement concerning subject matter + hereof. If any provision of this License is held to be unenforceable, such + provision shall be reformed only to the extent necessary to make it + enforceable. This License shall be governed by California law provisions + (except to the extent applicable law, if any, provides otherwise), excluding + its conflict-of-law provisions. With respect to disputes in which at least one + party is a citizen of, or an entity chartered or registered to do business in, + the United States of America: (a) unless otherwise agreed in writing, all + disputes relating to this License (excepting any dispute relating to + intellectual property rights) shall be subject to final and binding + arbitration, with the losing party paying all costs of arbitration; (b) any + arbitration relating to this Agreement shall be held in Santa Clara County, + California, under the auspices of JAMS/EndDispute; and (c) any litigation + relating to this Agreement shall be subject to the jurisdiction of the Federal + Courts of the Northern District of California, with venue lying in Santa Clara + County, California, with the losing party responsible for costs, including + without limitation, court costs and reasonable attorneys fees and expenses. + The application of the United Nations Convention on Contracts for the + International Sale of Goods is expressly excluded. Any law or regulation which + provides that the language of a contract shall be construed against the + drafter shall not apply to this License. +12. RESPONSIBILITY FOR CLAIMS. + Except in cases where another Contributor has failed to comply with Section + 3.4, You are responsible for damages arising, directly or indirectly, out of + Your utilization of rights under this License, based on the number of copies + of Covered Code you made available, the revenues you received from utilizing + such rights, and other relevant factors. You agree to work with affected + parties to distribute responsibility on an equitable basis. +EXHIBIT A. + ``The contents of this file are subject to the Mozilla Public License Version + 1.0 (the "License"); you may not use this file except in compliance with the + License. You may obtain a copy of the License at http://www.mozilla.org/MPL/ + Software distributed under the License is distributed on an "AS IS" basis, + WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for + the specific language governing rights and limitations under the License. + The Original Code is ______________________________________. + The Initial Developer of the Original Code is ________________________. + Portions created by ______________________ are Copyright (C) ______ + _______________________. All Rights Reserved. Contributor(s): ______________________________________.'' \ No newline at end of file diff --git a/rpms/legal/license.txt b/rpms/legal/license.txt index 7d3bed9f2f..808a81dcd1 100644 --- a/rpms/legal/license.txt +++ b/rpms/legal/license.txt @@ -1,17 +1,17 @@ -This software was developed and / or modified by Raytheon Company, -pursuant to Contract DG133W-05-CQ-1067 with the US Government. - -U.S. EXPORT CONTROLLED TECHNICAL DATA -This software product contains export-restricted data whose -export/transfer/disclosure is restricted by U.S. law. Dissemination -to non-U.S. persons whether in the United States or abroad requires -an export license or other authorization. - -Contractor Name: Raytheon Company -Contractor Address: 6825 Pine Street, Suite 340 - Mail Stop B8 - Omaha, NE 68106 - 402.291.0100 - -See the AWIPS II Master Rights File ("Master Rights File.pdf") for -further licensing information. +This software was developed and / or modified by Raytheon Company, +pursuant to Contract DG133W-05-CQ-1067 with the US Government. + +U.S. EXPORT CONTROLLED TECHNICAL DATA +This software product contains export-restricted data whose +export/transfer/disclosure is restricted by U.S. law. Dissemination +to non-U.S. persons whether in the United States or abroad requires +an export license or other authorization. + +Contractor Name: Raytheon Company +Contractor Address: 6825 Pine Street, Suite 340 + Mail Stop B8 + Omaha, NE 68106 + 402.291.0100 + +See the AWIPS II Master Rights File ("Master Rights File.pdf") for +further licensing information. diff --git a/rpms/rpms.ecl b/rpms/rpms.ecl new file mode 100644 index 0000000000..e69de29bb2

- Win32 MSI API: - MsiEnumComponentCosts -